15 bugs have been fixed

This commit is contained in:
Manuel Cortez 2014-11-07 04:29:57 -06:00
parent 1af4a8b291
commit 19a0a69d8c
10 changed files with 26 additions and 193 deletions

View File

@ -30,4 +30,5 @@ Michael Lau
Paris-Apps Paris-Apps
Salvadora Melguizo Salvadora Melguizo
Holly Scott-Gardner Holly Scott-Gardner
Anibal Hernández Anibal Hernández
Sussan Leiva

View File

@ -14,6 +14,7 @@ max_tweets_per_call = integer(default=100)
reverse_timelines = boolean(default=False) reverse_timelines = boolean(default=False)
time_to_check_streams = integer(default=30) time_to_check_streams = integer(default=30)
announce_stream_status = boolean(default=True) announce_stream_status = boolean(default=True)
auto_connect_streams = boolean(default=True)
[sound] [sound]
volume = float(default=1.0) volume = float(default=1.0)
@ -85,4 +86,4 @@ search = string(default="control+win+-")
edit_keystrokes = string(default="control+win+k") edit_keystrokes = string(default="control+win+k")
view_user_lists = string(default="control+win+l") view_user_lists = string(default="control+win+l")
get_more_items = string(default="alt+win+pageup") get_more_items = string(default="alt+win+pageup")
connect_streams = string(default="win+alt+c") connect_streams = string(default="win+alt+s")

View File

@ -58,4 +58,7 @@ class searchUsersPanel(peoplePanel):
self.db.settings.pop(self.name_buffer) self.db.settings.pop(self.name_buffer)
pos = self.db.settings["buffers"].index(self.name_buffer) pos = self.db.settings["buffers"].index(self.name_buffer)
self.db.settings["buffers"].remove(self.name_buffer) self.db.settings["buffers"].remove(self.name_buffer)
return pos return pos
def get_more_items(self):
output.speak(_(u"This action is not supported for this buffer"))

View File

@ -33,7 +33,6 @@ import platform
import urllib2 import urllib2
import sysTrayIcon import sysTrayIcon
import languageHandler import languageHandler
from issueReporter import gui as issueReporterGUI
from sessionmanager import manager from sessionmanager import manager
from mysc import event from mysc import event
from mysc.thread_utils import call_threaded from mysc.thread_utils import call_threaded
@ -124,6 +123,8 @@ class mainFrame(wx.Frame):
# buffer menu # buffer menu
buffer = wx.Menu() buffer = wx.Menu()
load_more_items = buffer.Append(wx.NewId(), _(u"Load more items"))
self.Bind(wx.EVT_MENU, self.get_more_items, load_more_items)
mute = buffer.Append(wx.NewId(), _(u"&Mute")) mute = buffer.Append(wx.NewId(), _(u"&Mute"))
self.Bind(wx.EVT_MENU, self.toggle_mute, mute) self.Bind(wx.EVT_MENU, self.toggle_mute, mute)
autoread = buffer.Append(wx.NewId(), _(u"&Autoread tweets for this buffer")) autoread = buffer.Append(wx.NewId(), _(u"&Autoread tweets for this buffer"))
@ -342,8 +343,9 @@ class mainFrame(wx.Frame):
if run_streams == True: if run_streams == True:
self.get_home() self.get_home()
self.get_tls() self.get_tls()
self.check_streams = RepeatingTimer(config.main["general"]["time_to_check_streams"], self.check_stream_up) if config.main["general"]["auto_connect_streams"] == True:
self.check_streams.start() self.check_streams = RepeatingTimer(config.main["general"]["time_to_check_streams"], self.check_stream_up)
self.check_streams.start()
# If all it's done, then play a nice sound saying that all it's OK. # If all it's done, then play a nice sound saying that all it's OK.
sound.player.play("ready.ogg") sound.player.play("ready.ogg")
@ -368,15 +370,15 @@ class mainFrame(wx.Frame):
def setup_twitter(self, panel): def setup_twitter(self, panel):
""" Setting up the connection for twitter, or authenticate if the config file has valid credentials.""" """ Setting up the connection for twitter, or authenticate if the config file has valid credentials."""
# try: try:
self.twitter.login(self.user_key, self.user_secret) self.twitter.login(self.user_key, self.user_secret)
self.logging_in_twblue(panel) self.logging_in_twblue(panel)
log.info("Authorized in Twitter.") log.info("Authorized in Twitter.")
del self.user_key; del self.user_secret del self.user_key; del self.user_secret
# except: except:
# dlg1 = wx.MessageDialog(panel, _(u"Connection error. Try again later."), _(u"Error!"), wx.ICON_ERROR) dlg1 = wx.MessageDialog(panel, _(u"Connection error. Try again later."), _(u"Error!"), wx.ICON_ERROR)
# dlg1.ShowModal() dlg1.ShowModal()
# self.Close(True) self.Close(True)
def get_home(self): def get_home(self):
""" Gets the home stream, that manages home timeline, mentions, direct messages and sent.""" """ Gets the home stream, that manages home timeline, mentions, direct messages and sent."""
@ -545,7 +547,8 @@ class mainFrame(wx.Frame):
webbrowser.open("http://twblue.com.mx") webbrowser.open("http://twblue.com.mx")
def onReportBug(self, ev): def onReportBug(self, ev):
issueReporterGUI.reportBug(self.db.settings["user_name"]).ShowModal() webbrowser.open("https://github.com/manuelcortez/TWBlue/issues")
# issueReporterGUI.reportBug(self.db.settings["user_name"]).ShowModal()
def onCheckForUpdates(self, ev): def onCheckForUpdates(self, ev):
updater.update_manager.check_for_update(msg=True) updater.update_manager.check_for_update(msg=True)

View File

@ -1,21 +0,0 @@
# -*- coding: utf-8 -*-
############################################################
# Copyright (c) 2013, 2014 Manuel Eduardo Cortéz Vallejo <manuel@manuelcortez.net>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
############################################################
categories = ["General"]
reproducibilities = ["always", "sometimes", "random", "have not tried", "unable to duplicate"]
severities = ["block", "crash", "major", "minor", "tweak", "text", "trivial", "feature"]

View File

@ -1,32 +0,0 @@
# -*- coding: utf-8 -*-
############################################################
# Copyright (c) 2013, 2014 Manuel Eduardo Cortéz Vallejo <manuel@manuelcortez.net>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
############################################################
import paths
import os
def get_logs_files():
files = {}
for i in os.listdir(paths.logs_path()):
if i == "debug.log": continue
f = open(paths.logs_path(i), "r")
files[i] = f.readlines()
f.close()
try: os.remove(paths.logs_path("tracebacks.log"))
except: pass
return files

View File

@ -1,124 +0,0 @@
# -*- coding: utf-8 -*-
############################################################
# Copyright (c) 2013, 2014 Manuel Eduardo Cortéz Vallejo <manuel@manuelcortez.net>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
############################################################
import wx
import application
from suds.client import Client
import constants
class reportBug(wx.Dialog):
def __init__(self, user_name):
self.user = "informador"
self.user_name = user_name
self.password = "contrasena"
self.url = application.report_bugs_url
self.categories = [_(u"General")]
self.reproducibilities = [_(u"always"), _(u"sometimes"), _(u"random"), _(u"have not tried"), _(u"unable to duplicate")]
self.severities = [_(u"block"), _(u"crash"), _(u"major"), _(u"minor"), _(u"tweak"), _(u"text"), _(u"trivial"), _(u"feature")]
wx.Dialog.__init__(self, None, -1)
self.SetTitle(_(u"Report an error"))
panel = wx.Panel(self)
sizer = wx.BoxSizer(wx.VERTICAL)
categoryLabel = wx.StaticText(panel, -1, _(u"Select a category"), size=wx.DefaultSize)
self.category = wx.ComboBox(panel, -1, choices=self.categories, style=wx.CB_READONLY)
self.category.SetSize(self.category.GetBestSize())
self.category.SetSelection(0)
categoryB = wx.BoxSizer(wx.HORIZONTAL)
categoryB.Add(categoryLabel, 0, wx.ALL, 5)
categoryB.Add(self.category, 0, wx.ALL, 5)
self.category.SetFocus()
sizer.Add(categoryB, 0, wx.ALL, 5)
summaryLabel = wx.StaticText(panel, -1, _(u"Briefly describe what happened. You will be able to thoroughly explain it later"), size=wx.DefaultSize)
self.summary = wx.TextCtrl(panel, -1)
dc = wx.WindowDC(self.summary)
dc.SetFont(self.summary.GetFont())
self.summary.SetSize(dc.GetTextExtent("a"*80))
# self.summary.SetFocus()
summaryB = wx.BoxSizer(wx.HORIZONTAL)
summaryB.Add(summaryLabel, 0, wx.ALL, 5)
summaryB.Add(self.summary, 0, wx.ALL, 5)
sizer.Add(summaryB, 0, wx.ALL, 5)
descriptionLabel = wx.StaticText(panel, -1, _(u"Here, you can describe the bug in detail"), size=wx.DefaultSize)
self.description = wx.TextCtrl(panel, -1, style=wx.TE_MULTILINE)
dc = wx.WindowDC(self.description)
dc.SetFont(self.description.GetFont())
(x, y, z) = dc.GetMultiLineTextExtent("0"*2000)
self.description.SetSize((x, y))
descBox = wx.BoxSizer(wx.HORIZONTAL)
descBox.Add(descriptionLabel, 0, wx.ALL, 5)
descBox.Add(self.description, 0, wx.ALL, 5)
sizer.Add(descBox, 0, wx.ALL, 5)
reproducibilityLabel = wx.StaticText(panel, -1, _(u"how often does this bug happen?"), size=wx.DefaultSize)
self.reproducibility = wx.ComboBox(panel, -1, choices=self.reproducibilities, style=wx.CB_READONLY)
self.reproducibility.SetSelection(3)
self.reproducibility.SetSize(self.reproducibility.GetBestSize())
reprB = wx.BoxSizer(wx.HORIZONTAL)
reprB.Add(reproducibilityLabel, 0, wx.ALL, 5)
reprB.Add(self.reproducibility, 0, wx.ALL, 5)
sizer.Add(reprB, 0, wx.ALL, 5)
severityLabel = wx.StaticText(panel, -1, _(u"Select the importance that you think this bug has"))
self.severity = wx.ComboBox(panel, -1, choices=self.severities, style=wx.CB_READONLY)
self.severity.SetSize(self.severity.GetBestSize())
self.severity.SetSelection(3)
severityB = wx.BoxSizer(wx.HORIZONTAL)
severityB.Add(severityLabel, 0, wx.ALL, 5)
severityB.Add(self.severity, 0, wx.ALL, 5)
sizer.Add(severityB, 0, wx.ALL, 5)
self.agree = wx.CheckBox(panel, -1, _(u"I know that the TW Blue bug system will get my Twitter username to contact me and fix the bug quickly"))
self.agree.SetValue(False)
sizer.Add(self.agree, 0, wx.ALL, 5)
ok = wx.Button(panel, wx.ID_OK, _(u"Send report"))
ok.Bind(wx.EVT_BUTTON, self.onSend)
ok.SetDefault()
cancel = wx.Button(panel, wx.ID_CANCEL, _(u"Cancel"))
btnBox = wx.BoxSizer(wx.HORIZONTAL)
btnBox.Add(ok, 0, wx.ALL, 5)
btnBox.Add(cancel, 0, wx.ALL, 5)
sizer.Add(btnBox, 0, wx.ALL, 5)
panel.SetSizer(sizer)
self.SetClientSize(sizer.CalcMin())
def onSend(self, ev):
if self.summary.GetValue() == "" or self.description.GetValue() == "":
wx.MessageDialog(self, _(u"You must fill out both fields"), _(u"Error"), wx.OK|wx.ICON_ERROR).ShowModal()
return
if self.agree.GetValue() == False:
wx.MessageDialog(self, _(u"You need to mark the checkbox to provide us your twitter username to contact to you if is necessary."), _(u"Error"), wx.ICON_ERROR).ShowModal()
return
try:
client = Client(self.url)
issue = client.factory.create('IssueData')
issue.project.name = "TW Blue"
issue.project.id = 0
issue.summary = self.summary.GetValue(),
issue.description = "Reported by @%s\n\n" % (self.user_name) + self.description.GetValue()
issue.category = constants.categories[self.category.GetSelection()]
issue.reproducibility.name = constants.reproducibilities[self.reproducibility.GetSelection()]
issue.severity.name = constants.severities[self.severity.GetSelection()]
issue.priority.name = "normal"
issue.view_state.name = "public"
issue.resolution.name = "open"
issue.projection.name = "none"
issue.eta.name = "eta"
issue.status.name = "new"
id = client.service.mc_issue_add(self.user, self.password, issue)
wx.MessageDialog(self, _(u"Thanks for reporting this bug! In future versions, you may be able to find it in the changes list. You've reported the bug number %i") % (id), _(u"reported"), wx.OK).ShowModal()
self.EndModal(wx.ID_OK)
except:
wx.MessageDialog(self, _(u"Something unexpected occurred while trying to report the bug. Please, try again later"), _(u"Error while reporting"), wx.ICON_ERROR|wx.OK).ShowModal()
self.EndModal(wx.ID_CANCEL)

View File

@ -41,4 +41,5 @@ actions = {
"search": _(u"Search on twitter"), "search": _(u"Search on twitter"),
"edit_keystrokes": _(u"Shows the keystroke editor"), "edit_keystrokes": _(u"Shows the keystroke editor"),
"view_user_lists": _(u"Show lists for a specified user"), "view_user_lists": _(u"Show lists for a specified user"),
"get_more_items": _(u"Load previous item for a buffer"),
} }

View File

@ -124,6 +124,7 @@ class TwythonStreamer(object):
except requests.exceptions.Timeout: except requests.exceptions.Timeout:
self.on_timeout() self.on_timeout()
else: else:
# self.connected = False
if response.status_code != 200: if response.status_code != 200:
self.on_error(response.status_code, response.content) self.on_error(response.status_code, response.content)