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 ):"
|
||||
|
479
easyInstaller
479
easyInstaller
|
@ -5,218 +5,279 @@
|
|||
# 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 sys, traceback
|
||||
error = 0
|
||||
try:
|
||||
import os, shutil
|
||||
from stat import *
|
||||
from string import Template
|
||||
|
||||
import os, sys, shutil
|
||||
from stat import *
|
||||
from string import Template
|
||||
|
||||
_PLATFORM = sys.platform
|
||||
if _PLATFORM in ['win32','cygwin','darwin','os2','os2emx','riscos','atheos']:
|
||||
print "Whoa there buddy! This installation script isn't meant to be run on your OS."
|
||||
exit()
|
||||
|
||||
if os.getuid() != 0:
|
||||
print "This program must be run as root (sudo)."
|
||||
exit()
|
||||
|
||||
_HOME = os.environ['HOME']
|
||||
_USER = os.environ['SUDO_USER']
|
||||
_UID = int(os.environ['SUDO_UID'])
|
||||
_GID = int(os.environ['SUDO_GID'])
|
||||
# fix home if it's root weirdness
|
||||
if _HOME.find("root") != -1:
|
||||
_HOME = "/home/"+_USER
|
||||
|
||||
def setPermissions(path):
|
||||
os.chown(path, _UID, _GID)
|
||||
for file_ in os.listdir(path):
|
||||
filePath = os.path.join(path,file_)
|
||||
if os.path.isdir(filePath):
|
||||
setPermissions(filePath)
|
||||
else:
|
||||
os.chown(filePath, _UID, _GID)
|
||||
|
||||
def findPesterchum(path):
|
||||
for f in os.listdir(path):
|
||||
filePath = os.path.join(path, f)
|
||||
if os.path.isdir(filePath):
|
||||
if os.path.exists(filePath+"/pesterchum.py"):
|
||||
return filePath
|
||||
else:
|
||||
a=findPesterchum(filePath)
|
||||
if a: return a
|
||||
elif f == "pesterchum.py":
|
||||
return path
|
||||
|
||||
if not os.path.exists(_HOME+"/.pcInstallLoc"):
|
||||
print "Welcome to the Pesterchum 3.14 Easy Installer (for Linux)!\n\
|
||||
Created by Kiooeht [evacipatedBox] May 28th-29th, 2011.\n\
|
||||
License: WTFPL\n\
|
||||
\n\
|
||||
Leaving an option blank will accept it's default [in brackets]\n\
|
||||
Are you ready to begin your MAGICAL JOURNEY?!\n\
|
||||
Of course you are!!! ::::D"
|
||||
# ask user about things
|
||||
while 1:
|
||||
install = raw_input("Install location [~/.pesterchum]: ")
|
||||
if install == "":
|
||||
instLoc = _HOME+"/.pesterchum"
|
||||
break
|
||||
else:
|
||||
if install[0] == "~":
|
||||
install = _HOME+install[1:]
|
||||
if os.path.exists(install[:install.rfind("/")]):
|
||||
instLoc = install
|
||||
break
|
||||
print "No can do"
|
||||
if os.path.exists("/usr/share/applications"):
|
||||
while 1:
|
||||
gnome = raw_input("Create a GNOME menu item? [Y/n]: ")
|
||||
if gnome.lower() == "y" or gnome == "":
|
||||
gnome = True;break
|
||||
elif gnome.lower() == "n":
|
||||
gnome = False;break
|
||||
else:
|
||||
print "herpaderp"
|
||||
while 1:
|
||||
shortcut = raw_input("Create launcher in home directory? [Y/n]: ")
|
||||
if shortcut.lower() == "y" or shortcut == "":
|
||||
shortcut = True;break
|
||||
elif shortcut.lower() == "n":
|
||||
shortcut = False;break
|
||||
else:
|
||||
print "u jelly?"
|
||||
|
||||
# do some shitty install
|
||||
try:
|
||||
fileLoc = findPesterchum(".")
|
||||
except RuntimeError:
|
||||
print "I'm sorry! I was unable to find the pesterchum files :("
|
||||
print "Please put them where I can find them"
|
||||
_PLATFORM = sys.platform
|
||||
if _PLATFORM in ['win32','cygwin','darwin','os2','os2emx','riscos','atheos']:
|
||||
print "Whoa there buddy! This installation script isn't meant to be run on your OS."
|
||||
exit()
|
||||
if not fileLoc:
|
||||
print "I'm sorry! I was unable to find the pesterchum files :("
|
||||
print "Please put them where I can find them"
|
||||
|
||||
if os.getuid() != 0:
|
||||
print "This program must be run as root (sudo)."
|
||||
exit()
|
||||
print "Copying files..."
|
||||
ignore = shutil.ignore_patterns('*.pyc')
|
||||
if not os.path.exists(instLoc):
|
||||
shutil.copytree(fileLoc, instLoc, ignore=ignore)
|
||||
if os.path.exists(instLoc+"/pesterchum.js"):
|
||||
f = open(instLoc+"/pesterchum.js")
|
||||
js = f.read()
|
||||
f.close()
|
||||
defa = js.find("\"defaultprofile\"")
|
||||
if defa != -1:
|
||||
start = js.find("\"", js.find(":", defa+1))
|
||||
end = js.find("\"", start+1)
|
||||
party = js[start+1:end]
|
||||
if not os.path.exists(instLoc+"/profiles") or \
|
||||
party+".js" not in os.listdir(instLoc+"/profiles"):
|
||||
print "Protecting you from stupidity..."
|
||||
print " (aka. Deleting reference to non-existant default profile)"
|
||||
#os.remove(instLoc+"/pesterchum.js")
|
||||
f = open(instLoc+"/pesterchum.js", "w")
|
||||
f.write(js[:defa-1]+js[js.find(",", end)+1:])
|
||||
f.close()
|
||||
else:
|
||||
if not os.path.exists(instLoc+"/logs") and os.path.exists(fileLoc+"/logs"):
|
||||
shutil.copytree(fileLoc+"/logs", instLoc+"/logs", ignore=ignore)
|
||||
if not os.path.exists(instLoc+"/profiles") and os.path.exists(fileLoc+"/profiles"):
|
||||
shutil.copytree(fileLoc+"/profiles", instLoc+"/profiles", ignore=ignore)
|
||||
if not os.path.exists(instLoc+"/pesterchum.js") and os.path.exists(fileLoc+"/pesterchum.js"):
|
||||
shutil.copy(fileLoc+"/pesterchum.js", instLoc)
|
||||
shutil.copytree(fileLoc+"/oyoyo", instLoc+"/oyoyo", ignore=ignore)
|
||||
shutil.copytree(fileLoc+"/smilies", instLoc+"/smilies", ignore=ignore)
|
||||
shutil.copytree(fileLoc+"/themes", instLoc+"/themes", ignore=ignore)
|
||||
for f in os.listdir(fileLoc):
|
||||
filePath = os.path.join(fileLoc, f)
|
||||
if not os.path.isdir(filePath) and f != "pesterchum.js":
|
||||
shutil.copy(filePath, instLoc)
|
||||
setPermissions(instLoc)
|
||||
# save the install location
|
||||
f = open(_HOME+"/.pcInstallLoc", "w")
|
||||
f.write(instLoc)
|
||||
f.close()
|
||||
#create a cool executable
|
||||
print "Creating executable... (/usr/local/bin/pesterchum)"
|
||||
f = open("/usr/local/bin/pesterchum", 'w')
|
||||
f.write("#!/bin/sh\ncd "+instLoc+"\n./pesterchum $@")
|
||||
f.close()
|
||||
os.chmod("/usr/local/bin/pesterchum", S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH)
|
||||
# Create a fancy menu item in gnome
|
||||
if gnome:
|
||||
print "Creating menu item..."
|
||||
t = Template("[Desktop Entry]\nEncoding=UTF-8\nVersion=3.14.2\nName=Pesterchum\nComment=IM client based on Homestuck Pesterchum\nCategories=Network;InstantMessaging;\nExec=/usr/local/bin/pesterchum\nIcon=$loc/pesterchum.ico\nTerminal=false\nType=Application")
|
||||
f = open("/usr/share/applications/pesterchum.desktop", "w")
|
||||
f.write(t.safe_substitute(loc=instLoc))
|
||||
f.close()
|
||||
# create shortcut launcher
|
||||
if shortcut:
|
||||
print "Creating launcher..."
|
||||
t = Template("#!/usr/bin/env xdg-open\n[Desktop Entry]\nEncoding=UTF-8\nVersion=3.14.2\nName=Pesterchum\nComment=IM client based on Homestuck Pesterchum\nCategories=Network;InstantMessaging;\nExec=pesterchum\nIcon=$loc/pesterchum.ico\nTerminal=false\nType=Application")
|
||||
f = open(_HOME+"/Pesterchum.desktop", "w")
|
||||
f.write(t.safe_substitute(loc=instLoc))
|
||||
f.close()
|
||||
os.chown(_HOME+"/Pesterchum.desktop", _UID, _GID)
|
||||
os.chmod(_HOME+"/Pesterchum.desktop", S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH)
|
||||
else:
|
||||
print "Welcome to the Pesterchum 3.14 Easy Uninstaller (for Linux)!\n\
|
||||
Created by Kiooeht [evacipatedBox] May 28th-29th, 2011.\n\
|
||||
License: WTFPL\n"
|
||||
while 1:
|
||||
remove = raw_input("Would you like to uninstall Pesterchum? [y/n]: ")
|
||||
if remove.lower() == "y":
|
||||
while 1:
|
||||
killdata = raw_input("Purge your settings, profiles, and logs? [y/N]: ")
|
||||
if killdata.lower() == "n" or killdata == "":
|
||||
killdata = False;break
|
||||
elif killdata.lower() == "y":
|
||||
killdata = True;break
|
||||
|
||||
_HOME = os.environ['HOME']
|
||||
_USER = os.environ['SUDO_USER']
|
||||
_UID = int(os.environ['SUDO_UID'])
|
||||
_GID = int(os.environ['SUDO_GID'])
|
||||
# fix home if it's root weirdness
|
||||
if _HOME.find("root") != -1:
|
||||
_HOME = "/home/"+_USER
|
||||
|
||||
def setPermissions(path):
|
||||
os.chown(path, _UID, _GID)
|
||||
for file_ in os.listdir(path):
|
||||
filePath = os.path.join(path,file_)
|
||||
if os.path.isdir(filePath):
|
||||
setPermissions(filePath)
|
||||
else:
|
||||
os.chown(filePath, _UID, _GID)
|
||||
|
||||
def findPesterchum(path):
|
||||
for f in os.listdir(path):
|
||||
filePath = os.path.join(path, f)
|
||||
if os.path.isdir(filePath):
|
||||
if os.path.exists(filePath+"/pesterchum.py"):
|
||||
return filePath
|
||||
else:
|
||||
print "Hmmmmm...?"
|
||||
f = open(_HOME+"/.pcInstallLoc")
|
||||
instLoc = f.readline()
|
||||
f.close()
|
||||
os.remove(_HOME+"/.pcInstallLoc")
|
||||
if killdata:
|
||||
print "Removing files..."
|
||||
shutil.rmtree(instLoc)
|
||||
a=findPesterchum(filePath)
|
||||
if a: return a
|
||||
elif f == "pesterchum.py":
|
||||
return path
|
||||
|
||||
if not os.path.exists(_HOME+"/.pcInstallLoc"):
|
||||
print "Welcome to the Pesterchum 3.14 Easy Installer (for Linux)!\n\
|
||||
Created by Kiooeht [evacipatedBox] May 28th-29th, 2011.\n\
|
||||
License: WTFPL\n\
|
||||
\n\
|
||||
Leaving an option blank will accept it's default [in brackets]\n\
|
||||
Are you ready to begin your MAGICAL JOURNEY?!\n\
|
||||
Of course you are!!! ::::D"
|
||||
# ask user about things
|
||||
while 1:
|
||||
install = raw_input("Install location [~/.pesterchum]: ")
|
||||
if install == "":
|
||||
instLoc = _HOME+"/.pesterchum"
|
||||
break
|
||||
else:
|
||||
print "Backing up settings, profiles, and logs..."
|
||||
if os.path.exists(instLoc+"/logs"):
|
||||
shutil.move(instLoc+"/logs", "_easyBackupLOGS")
|
||||
if os.path.exists(instLoc+"/profiles"):
|
||||
shutil.move(instLoc+"/profiles", "_easyBackupPROFILES")
|
||||
if os.path.exists(instLoc+"/pesterchum.js"):
|
||||
shutil.move(instLoc+"/pesterchum.js", "_easyBackupSETTINGS")
|
||||
print "Removing files..."
|
||||
shutil.rmtree(instLoc)
|
||||
print "Restoring up settings, profiles, and logs..."
|
||||
os.mkdir(instLoc)
|
||||
if os.path.exists("_easyBackupLOGS"):
|
||||
shutil.move("_easyBackupLOGS", instLoc+"/logs")
|
||||
if os.path.exists("_easyBackupPROFILES"):
|
||||
shutil.move("_easyBackupPROFILES", instLoc+"/profiles")
|
||||
if os.path.exists("_easyBackupSETTINGS"):
|
||||
shutil.move("_easyBackupSETTINGS", instLoc+"/pesterchum.js")
|
||||
setPermissions(instLoc)
|
||||
print "Trashing executable..."
|
||||
os.remove("/usr/local/bin/pesterchum")
|
||||
if os.path.exists("/usr/share/applications/pesterchum.desktop"):
|
||||
print "Maiming menu item..."
|
||||
os.remove("/usr/share/applications/pesterchum.desktop")
|
||||
if os.path.exists(_HOME+"/Pesterchum.desktop"):
|
||||
print "Destroying launcher..."
|
||||
os.remove(_HOME+"/Pesterchum.desktop")
|
||||
elif os.path.exists(_HOME+"/Desktop/Pesterchum.desktop"):
|
||||
print "Destroying launcher..."
|
||||
os.remove(_HOME+"/Desktop/Pesterchum.desktop")
|
||||
else:
|
||||
print "Unable to find launcher, non destroyed"
|
||||
break
|
||||
elif remove.lower() == "n":
|
||||
print "Aborting uninstallation process"
|
||||
break
|
||||
if install[0] == "~":
|
||||
install = _HOME+install[1:]
|
||||
if os.path.exists(install[:install.rfind("/")]):
|
||||
instLoc = install
|
||||
break
|
||||
print "No can do"
|
||||
if os.path.exists("/usr/share/applications"):
|
||||
while 1:
|
||||
gnome = raw_input("Create a GNOME menu item? [Y/n]: ")
|
||||
if gnome.lower() == "y" or gnome == "":
|
||||
gnome = True;break
|
||||
elif gnome.lower() == "n":
|
||||
gnome = False;break
|
||||
else:
|
||||
print "herpaderp"
|
||||
while 1:
|
||||
shortcut = raw_input("Create launcher in home directory? [Y/n]: ")
|
||||
if shortcut.lower() == "y" or shortcut == "":
|
||||
shortcut = True;break
|
||||
elif shortcut.lower() == "n":
|
||||
shortcut = False;break
|
||||
else:
|
||||
print "u jelly?"
|
||||
|
||||
# do some shitty install
|
||||
try:
|
||||
fileLoc = findPesterchum(".")
|
||||
except RuntimeError:
|
||||
print "I'm sorry! I was unable to find the pesterchum files :("
|
||||
print "Please put them where I can find them"
|
||||
exit()
|
||||
if not fileLoc:
|
||||
print "I'm sorry! I was unable to find the pesterchum files :("
|
||||
print "Please put them where I can find them"
|
||||
exit()
|
||||
print "Copying files..."
|
||||
ignore = shutil.ignore_patterns('*.pyc')
|
||||
if not os.path.exists(instLoc):
|
||||
shutil.copytree(fileLoc, instLoc, ignore=ignore)
|
||||
if os.path.exists(instLoc+"/pesterchum.js"):
|
||||
f = open(instLoc+"/pesterchum.js")
|
||||
js = f.read()
|
||||
f.close()
|
||||
defa = js.find("\"defaultprofile\"")
|
||||
if defa != -1:
|
||||
start = js.find("\"", js.find(":", defa+1))
|
||||
end = js.find("\"", start+1)
|
||||
party = js[start+1:end]
|
||||
if not os.path.exists(instLoc+"/profiles") or \
|
||||
party+".js" not in os.listdir(instLoc+"/profiles"):
|
||||
print "Protecting you from stupidity..."
|
||||
print " (aka. Deleting reference to non-existant default profile)"
|
||||
#os.remove(instLoc+"/pesterchum.js")
|
||||
f = open(instLoc+"/pesterchum.js", "w")
|
||||
f.write(js[:defa-1]+js[js.find(",", end)+1:])
|
||||
f.close()
|
||||
else:
|
||||
print "Invalid input, try again"
|
||||
if not os.path.exists(instLoc+"/logs") and os.path.exists(fileLoc+"/logs"):
|
||||
shutil.copytree(fileLoc+"/logs", instLoc+"/logs", ignore=ignore)
|
||||
if not os.path.exists(instLoc+"/profiles") and os.path.exists(fileLoc+"/profiles"):
|
||||
shutil.copytree(fileLoc+"/profiles", instLoc+"/profiles", ignore=ignore)
|
||||
if not os.path.exists(instLoc+"/pesterchum.js") and os.path.exists(fileLoc+"/pesterchum.js"):
|
||||
shutil.copy(fileLoc+"/pesterchum.js", instLoc)
|
||||
shutil.copytree(fileLoc+"/oyoyo", instLoc+"/oyoyo", ignore=ignore)
|
||||
shutil.copytree(fileLoc+"/smilies", instLoc+"/smilies", ignore=ignore)
|
||||
shutil.copytree(fileLoc+"/themes", instLoc+"/themes", ignore=ignore)
|
||||
for f in os.listdir(fileLoc):
|
||||
filePath = os.path.join(fileLoc, f)
|
||||
if not os.path.isdir(filePath) and f != "pesterchum.js":
|
||||
shutil.copy(filePath, instLoc)
|
||||
setPermissions(instLoc)
|
||||
# save the install location
|
||||
f = open(_HOME+"/.pcInstallLoc", "w")
|
||||
f.write(instLoc)
|
||||
f.close()
|
||||
#create a cool executable
|
||||
print "Creating executable... (/usr/local/bin/pesterchum)"
|
||||
f = open("/usr/local/bin/pesterchum", 'w')
|
||||
f.write("#!/bin/sh\ncd "+instLoc+"\n./pesterchum $@")
|
||||
f.close()
|
||||
os.chmod("/usr/local/bin/pesterchum", S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH)
|
||||
# Create a fancy menu item in gnome
|
||||
if gnome:
|
||||
print "Creating menu item..."
|
||||
t = Template("[Desktop Entry]\nEncoding=UTF-8\nVersion=3.14.2\nName=Pesterchum\nComment=IM client based on Homestuck Pesterchum\nCategories=Network;InstantMessaging;\nExec=/usr/local/bin/pesterchum\nIcon=$loc/pesterchum.ico\nTerminal=false\nType=Application")
|
||||
f = open("/usr/share/applications/pesterchum.desktop", "w")
|
||||
f.write(t.safe_substitute(loc=instLoc))
|
||||
f.close()
|
||||
# create shortcut launcher
|
||||
if shortcut:
|
||||
print "Creating launcher..."
|
||||
t = Template("#!/usr/bin/env xdg-open\n[Desktop Entry]\nEncoding=UTF-8\nVersion=3.14.2\nName=Pesterchum\nComment=IM client based on Homestuck Pesterchum\nCategories=Network;InstantMessaging;\nExec=pesterchum\nIcon=$loc/pesterchum.ico\nTerminal=false\nType=Application")
|
||||
f = open(_HOME+"/Pesterchum.desktop", "w")
|
||||
f.write(t.safe_substitute(loc=instLoc))
|
||||
f.close()
|
||||
os.chown(_HOME+"/Pesterchum.desktop", _UID, _GID)
|
||||
os.chmod(_HOME+"/Pesterchum.desktop", S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH)
|
||||
else:
|
||||
print "Welcome to the Pesterchum 3.14 Easy Uninstaller (for Linux)!\n\
|
||||
Created by Kiooeht [evacipatedBox] May 28th-29th, 2011.\n\
|
||||
License: WTFPL\n"
|
||||
while 1:
|
||||
remove = raw_input("Would you like to uninstall Pesterchum? [y/n]: ")
|
||||
if remove.lower() == "y":
|
||||
while 1:
|
||||
killdata = raw_input("Purge your settings, profiles, and logs? [y/N]: ")
|
||||
if killdata.lower() == "n" or killdata == "":
|
||||
killdata = False;break
|
||||
elif killdata.lower() == "y":
|
||||
killdata = True;break
|
||||
else:
|
||||
print "Hmmmmm...?"
|
||||
f = open(_HOME+"/.pcInstallLoc")
|
||||
instLoc = f.readline()
|
||||
f.close()
|
||||
os.remove(_HOME+"/.pcInstallLoc")
|
||||
if killdata:
|
||||
print "Removing files..."
|
||||
shutil.rmtree(instLoc)
|
||||
else:
|
||||
print "Backing up settings, profiles, and logs..."
|
||||
if os.path.exists(instLoc+"/logs"):
|
||||
shutil.move(instLoc+"/logs", "_easyBackupLOGS")
|
||||
if os.path.exists(instLoc+"/profiles"):
|
||||
shutil.move(instLoc+"/profiles", "_easyBackupPROFILES")
|
||||
if os.path.exists(instLoc+"/pesterchum.js"):
|
||||
shutil.move(instLoc+"/pesterchum.js", "_easyBackupSETTINGS")
|
||||
print "Removing files..."
|
||||
shutil.rmtree(instLoc)
|
||||
print "Restoring up settings, profiles, and logs..."
|
||||
os.mkdir(instLoc)
|
||||
if os.path.exists("_easyBackupLOGS"):
|
||||
shutil.move("_easyBackupLOGS", instLoc+"/logs")
|
||||
if os.path.exists("_easyBackupPROFILES"):
|
||||
shutil.move("_easyBackupPROFILES", instLoc+"/profiles")
|
||||
if os.path.exists("_easyBackupSETTINGS"):
|
||||
shutil.move("_easyBackupSETTINGS", instLoc+"/pesterchum.js")
|
||||
setPermissions(instLoc)
|
||||
print "Trashing executable..."
|
||||
os.remove("/usr/local/bin/pesterchum")
|
||||
if os.path.exists("/usr/share/applications/pesterchum.desktop"):
|
||||
print "Maiming menu item..."
|
||||
os.remove("/usr/share/applications/pesterchum.desktop")
|
||||
if os.path.exists(_HOME+"/Pesterchum.desktop"):
|
||||
print "Destroying launcher..."
|
||||
os.remove(_HOME+"/Pesterchum.desktop")
|
||||
elif os.path.exists(_HOME+"/Desktop/Pesterchum.desktop"):
|
||||
print "Destroying launcher..."
|
||||
os.remove(_HOME+"/Desktop/Pesterchum.desktop")
|
||||
else:
|
||||
print "Unable to find launcher, non destroyed"
|
||||
break
|
||||
elif remove.lower() == "n":
|
||||
print "Aborting uninstallation process"
|
||||
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