Bug reporting system
This commit is contained in:
parent
029cc95a16
commit
aedb054d90
5 changed files with 358 additions and 209 deletions
|
@ -37,6 +37,7 @@ CHANGELOG
|
|||
* Check for Pesterchum updates - Kiooeht [evacipatedBox]
|
||||
* Memo OP options: Secret, Invite-only, Mute - Kiooeht [evacipatedBox]
|
||||
* Notify user if channel blocks message - Kiooeht [evacipatedBox]
|
||||
* Bug reporter - Kiooeht [evacipatedBox]
|
||||
* Bug fixes
|
||||
* Logviewer updates - Kiooeht [evacipatedBox]
|
||||
* Memo scrollbar thing - Kiooeht [evacipatedBox]
|
||||
|
|
|
@ -10,6 +10,7 @@ Features
|
|||
* More complex quirks: by-sound
|
||||
* Spy mode
|
||||
* Turn @ and # links on/off?
|
||||
* "someone has friended you" notifier
|
||||
|
||||
Bugs
|
||||
----
|
||||
|
|
74
bugreport.py
Normal file
74
bugreport.py
Normal file
|
@ -0,0 +1,74 @@
|
|||
from PyQt4 import QtGui, QtCore
|
||||
import urllib
|
||||
import version
|
||||
|
||||
class BugReporter(QtGui.QDialog):
|
||||
def __init__(self, parent=None):
|
||||
QtGui.QDialog.__init__(self, parent)
|
||||
self.mainwindow = parent
|
||||
self.setStyleSheet(self.mainwindow.theme["main/defaultwindow/style"])
|
||||
self.setWindowTitle("Report a Bug")
|
||||
self.setModal(False)
|
||||
|
||||
self.title = QtGui.QLabel("Bug Report:")
|
||||
|
||||
layout_0 = QtGui.QVBoxLayout()
|
||||
layout_0.addWidget(self.title)
|
||||
|
||||
layout_0.addWidget(QtGui.QLabel("Operating System (ex. Windows 7, Ubuntu 10.10):"))
|
||||
self.os = QtGui.QLineEdit(self)
|
||||
self.os.setStyleSheet("background:white; font-weight:bold; color:black; font-size: 10pt;")
|
||||
layout_0.addWidget(self.os)
|
||||
|
||||
layout_0.addWidget(QtGui.QLabel("Description of bug:"))
|
||||
descLabel = QtGui.QLabel("Include as much information as possible\n(theme, related options, what you were doing at the time, etc.)")
|
||||
font = descLabel.font()
|
||||
font.setPointSize(8)
|
||||
descLabel.setFont(font)
|
||||
layout_0.addWidget(descLabel)
|
||||
|
||||
self.textarea = QtGui.QTextEdit(self)
|
||||
self.textarea.setStyleSheet("background:white; font-weight:normal; color:black; font-size: 10pt;")
|
||||
|
||||
layout_0.addWidget(self.textarea)
|
||||
|
||||
self.ok = QtGui.QPushButton("SEND", self)
|
||||
self.ok.setDefault(True)
|
||||
self.connect(self.ok, QtCore.SIGNAL('clicked()'),
|
||||
self, QtCore.SLOT('sendReport()'))
|
||||
self.cancel = QtGui.QPushButton("CANCEL", self)
|
||||
self.connect(self.cancel, QtCore.SIGNAL('clicked()'),
|
||||
self, QtCore.SLOT('reject()'))
|
||||
layout_2 = QtGui.QHBoxLayout()
|
||||
layout_2.addWidget(self.cancel)
|
||||
layout_2.addWidget(self.ok)
|
||||
|
||||
layout_0.addLayout(layout_2)
|
||||
|
||||
self.setLayout(layout_0)
|
||||
|
||||
@QtCore.pyqtSlot()
|
||||
def sendReport(self):
|
||||
name = unicode(self.mainwindow.profile().handle)
|
||||
os = unicode(self.os.text())
|
||||
msg = unicode(self.textarea.toPlainText())
|
||||
|
||||
if len(os) <= 0 or len(msg) <= 0:
|
||||
msgbox = QtGui.QMessageBox()
|
||||
msgbox.setStyleSheet(self.mainwindow.theme["main/defaultwindow/style"])
|
||||
msgbox.setText("You must fill out all fields first!")
|
||||
msgbox.setStandardButtons(QtGui.QMessageBox.Ok)
|
||||
ret = msgbox.exec_()
|
||||
return
|
||||
|
||||
QtGui.QDialog.accept(self)
|
||||
data = urllib.urlencode({"name":name, "version": version._pcVersion, "os":os, "msg":msg})
|
||||
print "Sending..."
|
||||
f = urllib.urlopen("http://distantsphere.com/pc/reporter.php", data)
|
||||
text = f.read()
|
||||
print text
|
||||
if text == "success!":
|
||||
print "Sent!"
|
||||
else:
|
||||
print "Problems ):"
|
||||
|
|
@ -5,8 +5,10 @@
|
|||
# and/or modify it under the terms of the Do What The Fuck You Want
|
||||
# To Public License, Version 2, as published by Sam Hocevar. See
|
||||
# http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
|
||||
import os, sys, shutil
|
||||
import sys, traceback
|
||||
error = 0
|
||||
try:
|
||||
import os, shutil
|
||||
from stat import *
|
||||
from string import Template
|
||||
|
||||
|
@ -220,3 +222,62 @@ else:
|
|||
break
|
||||
else:
|
||||
print "Invalid input, try again"
|
||||
except KeyboardInterrupt:
|
||||
print ""
|
||||
except Exception, e:
|
||||
error = -1
|
||||
finally:
|
||||
if error == -1:
|
||||
print "Oh noes!! It seems an error has occurred!"
|
||||
lineN = traceback.extract_tb(sys.exc_info()[2])[-1][1]
|
||||
print "The error occurred on line %s:" % lineN
|
||||
formatted_lines = traceback.format_exc().splitlines()
|
||||
print " '" + formatted_lines[-2] + "'"
|
||||
print formatted_lines[-1]
|
||||
|
||||
while 1:
|
||||
print "\nWould you like to (s)end a bug report,"
|
||||
send = raw_input("view the (f)ull error message, or (n)either? [s/f/n]: ")
|
||||
if send.lower() == "n":
|
||||
act = 2;break
|
||||
elif send.lower() == "s":
|
||||
act = 0;break
|
||||
elif send.lower() == "f":
|
||||
print "!---------------BEGIN ERROR MESSAGE---------------!"
|
||||
for l in formatted_lines:
|
||||
print l
|
||||
print "!----------------END ERROR MESSAGE----------------!"
|
||||
send = raw_input("Would you like to send this error message? [y/n]: ")
|
||||
if send.lower() == "y":
|
||||
act = 0;break
|
||||
elif send.lower() == "n":
|
||||
act = 2;break
|
||||
else:
|
||||
print "What was that?"
|
||||
if act == 2:
|
||||
print "Okay"
|
||||
elif act == 0:
|
||||
print "Thank you for taking time out of your day to complete a bug report."
|
||||
print "Fields marked with an asterisk (*) are required."
|
||||
name = raw_input("Your Name: ")
|
||||
while 1:
|
||||
os = raw_input("OS (include version) (ex. Ubuntu 10.10) [*]: ")
|
||||
if os: break
|
||||
else: print "This field is required."
|
||||
while 1:
|
||||
msg = raw_input("Short description of problem [*]: ")
|
||||
if msg: break
|
||||
else: print "This field is required."
|
||||
import urllib, json
|
||||
data = urllib.urlencode({"name":name, "os":os, "msg":msg, "short":formatted_lines[-1], "long":json.dumps(formatted_lines)})
|
||||
try:
|
||||
print "Sending..."
|
||||
f = urllib.urlopen("http://distantsphere.com/pc/easyInstall.php", data)
|
||||
text = f.read()
|
||||
print text
|
||||
if text == "success!":
|
||||
print "Sent!"
|
||||
else:
|
||||
print "There seems to have been a problem sending your bug report! ):"
|
||||
except:
|
||||
print "There seems to have been a problem sending your bug report! ):"
|
||||
|
|
|
@ -52,6 +52,7 @@ from parsetools import convertTags, addTimeInitial, themeChecker, ThemeException
|
|||
from memos import PesterMemo, MemoTabWindow, TimeTracker
|
||||
from irc import PesterIRC
|
||||
from logviewer import PesterLogUserSelect, PesterLogViewer
|
||||
from bugreport import BugReporter
|
||||
|
||||
_datadir = QtGui.QDesktopServices.storageLocation(QtGui.QDesktopServices.DataLocation)+"Pesterchum/"
|
||||
canon_handles = ["apocalypseArisen", "arsenicCatnip", "arachnidsGrip", "adiosToreador", \
|
||||
|
@ -1507,12 +1508,16 @@ class PesterWindow(MovingWindow):
|
|||
self.aboutAction = QtGui.QAction(self.theme["main/menus/help/about"], self)
|
||||
self.connect(self.aboutAction, QtCore.SIGNAL('triggered()'),
|
||||
self, QtCore.SLOT('aboutPesterchum()'))
|
||||
self.reportBugAction = QtGui.QAction("REPORT BUG", self)
|
||||
self.connect(self.reportBugAction, QtCore.SIGNAL('triggered()'),
|
||||
self, QtCore.SLOT('reportBug()'))
|
||||
helpmenu = self.menu.addMenu(self.theme["main/menus/help/_name"])
|
||||
self.helpmenu = helpmenu
|
||||
self.helpmenu.addAction(self.helpAction)
|
||||
self.helpmenu.addAction(self.botAction)
|
||||
self.helpmenu.addAction(self.nickServAction)
|
||||
self.helpmenu.addAction(self.aboutAction)
|
||||
self.helpmenu.addAction(self.reportBugAction)
|
||||
|
||||
self.closeButton = WMButton(PesterIcon(self.theme["main/close/image"]), self)
|
||||
self.setButtonAction(self.closeButton, self.config.closeAction(), -1)
|
||||
|
@ -2709,6 +2714,13 @@ class PesterWindow(MovingWindow):
|
|||
@QtCore.pyqtSlot()
|
||||
def launchHelp(self):
|
||||
QtGui.QDesktopServices.openUrl(QtCore.QUrl("http://nova.xzibition.com/~illuminatedwax/help.html", QtCore.QUrl.TolerantMode))
|
||||
@QtCore.pyqtSlot()
|
||||
def reportBug(self):
|
||||
if hasattr(self, 'bugreportwindow') and self.bugreportwindow:
|
||||
return
|
||||
self.bugreportwindow = BugReporter(self)
|
||||
self.bugreportwindow.exec_()
|
||||
self.bugreportwindow = None
|
||||
|
||||
@QtCore.pyqtSlot(QtCore.QString, QtCore.QString)
|
||||
def nickCollision(self, handle, tmphandle):
|
||||
|
|
Loading…
Reference in a new issue