From f7b6578f4e02f0a954ec2f4be010848bb2e25bde Mon Sep 17 00:00:00 2001 From: illuminatedwax Date: Tue, 8 Mar 2011 22:36:05 -0600 Subject: [PATCH 01/15] fdsafds --- TODO | 1 + pesterchum.js | 2 +- themes/trollian2.5/style.js | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/TODO b/TODO index 9ff12b0..e024b18 100644 --- a/TODO +++ b/TODO @@ -3,6 +3,7 @@ Bugs: * Issues with connecting? Client not closing connection right? People keep getting "nick taken" messages * Windows XP SP2: sometimes mouse clicks dont register? must be some kinda crash * don't save pesterClientXXX names +* enamel doesnt have time arrows Mac Bugs: * Mac doesn't show tabs right, display gifs, highlighting thing? diff --git a/pesterchum.js b/pesterchum.js index 74afc9e..0b88a45 100644 --- a/pesterchum.js +++ b/pesterchum.js @@ -1 +1 @@ -{"hideOfflineChums": true, "tabs": true, "soundon": true, "server": "irc.mindfang.org", "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent"], "defaultprofile": "ghostDunk", "block": []} \ No newline at end of file +{"hideOfflineChums": true, "tabs": true, "soundon": true, "server": "irc.mindfang.org", "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "laughingShisa"], "defaultprofile": "ghostDunk", "block": []} \ No newline at end of file diff --git a/themes/trollian2.5/style.js b/themes/trollian2.5/style.js index cf3c96e..d478374 100644 --- a/themes/trollian2.5/style.js +++ b/themes/trollian2.5/style.js @@ -180,7 +180,7 @@ }, "buttons": { "style": "color: black; font: bold; border: 2px solid #780000; font: bold; font-size: 12px; background: #e5000f; margin-top: 5px; margin-right: 5px; margin-left: 5px; padding: 2px; width: 50px;" } }, - + "tabwindow": { "style": ""; } "tabs": { "style": "", "selectedstyle": "", From fdcc146b206d9ee013359cd2ee16a43258378160 Mon Sep 17 00:00:00 2001 From: illuminatedwax Date: Sun, 13 Mar 2011 01:07:25 -0600 Subject: [PATCH 02/15] fds --- TODO | 6 +++++- pesterchum.js | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/TODO b/TODO index b0cdd42..3a00ffb 100644 --- a/TODO +++ b/TODO @@ -1,4 +1,5 @@ -o Bugs: +Bugs: +* multiline msgs breaks shit * Windows doesn't show style sheet sometimes?? Maybe related to themes. * Issues with connecting? Client not closing connection right? People keep getting "nick taken" messages * Windows XP SP2: sometimes mouse clicks dont register? must be some kinda crash @@ -14,6 +15,9 @@ SS: but the memo one doesn't resize SS: and the arrows next to the time thing overlap the CLOSE button Features: +* OOC +* random pesters +* # of users in each memo * copy quirks between profiles? * help button on quirks menu? * chum list groups diff --git a/pesterchum.js b/pesterchum.js index 059e892..41cd47e 100644 --- a/pesterchum.js +++ b/pesterchum.js @@ -1 +1 @@ -{"hideOfflineChums": true, "tabs": true, "soundon": true, "server": "irc.mindfang.org", "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "laughingShisa", "bluntInstrument", "sunilaSeed"], "defaultprofile": "ghostDunk", "block": []} +{"hideOfflineChums": true, "tabs": true, "soundon": true, "server": "irc.mindfang.org", "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "laughingShisa", "bluntInstrument", "sunilaSeed", "bluntInstrument", "nickServ"], "defaultprofile": "ghostDunk", "block": []} \ No newline at end of file From 39e859e2f5d8ae1bbbf191a3f4a0ebe17607b7b1 Mon Sep 17 00:00:00 2001 From: illuminatedwax Date: Fri, 1 Apr 2011 00:53:22 -0500 Subject: [PATCH 03/15] fds --- pesterchum.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pesterchum.js b/pesterchum.js index 41cd47e..9e037b8 100644 --- a/pesterchum.js +++ b/pesterchum.js @@ -1 +1 @@ -{"hideOfflineChums": true, "tabs": true, "soundon": true, "server": "irc.mindfang.org", "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "laughingShisa", "bluntInstrument", "sunilaSeed", "bluntInstrument", "nickServ"], "defaultprofile": "ghostDunk", "block": []} \ No newline at end of file +{"hideOfflineChums": true, "tabs": true, "soundon": true, "server": "irc.mindfang.org", "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "laughingShisa", "bluntInstrument", "sunilaSeed", "bluntInstrument", "nickServ", "ghostBinoculars"], "defaultprofile": "ghostDunk", "block": []} \ No newline at end of file From d17d4f1189adaf959a07d8f5d4c0c3c4d2a549ef Mon Sep 17 00:00:00 2001 From: illuminatedwax Date: Wed, 6 Apr 2011 11:39:05 -0500 Subject: [PATCH 04/15] derp --- pesterchum.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pesterchum.js b/pesterchum.js index 9e037b8..618a8ae 100644 --- a/pesterchum.js +++ b/pesterchum.js @@ -1 +1 @@ -{"hideOfflineChums": true, "tabs": true, "soundon": true, "server": "irc.mindfang.org", "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "laughingShisa", "bluntInstrument", "sunilaSeed", "bluntInstrument", "nickServ", "ghostBinoculars"], "defaultprofile": "ghostDunk", "block": []} \ No newline at end of file +{"hideOfflineChums": false, "tabs": true, "soundon": true, "server": "irc.mindfang.org", "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "laughingShisa", "bluntInstrument", "sunilaSeed", "bluntInstrument", "nickServ", "ghostBinoculars", "alGore"], "defaultprofile": "ghostDunk", "block": []} \ No newline at end of file From a19e5d1df5cb8a27dec4ec26037b94969f3f7967 Mon Sep 17 00:00:00 2001 From: illuminatedwax Date: Fri, 8 Apr 2011 02:39:19 -0500 Subject: [PATCH 05/15] merges, bugfixes --- CHANGELOG.mkdn | 10 +- TODO | 24 +-- dataobjs.py | 15 +- generic.py | 7 - logviewer.py | 6 +- memos.py | 30 +-- menus.py | 13 -- parsetools.py | 6 +- pesterchum.js | 2 +- pesterchum.py | 425 ++++++------------------------------- themes/enamel/style.js | 186 ++++++++-------- themes/gold/style.js | 206 +++++++++--------- themes/pesterchum/style.js | 160 +++++++------- themes/trollian/style.js | 69 +++--- themes/typewriter/style.js | 78 ++++--- 15 files changed, 449 insertions(+), 788 deletions(-) diff --git a/CHANGELOG.mkdn b/CHANGELOG.mkdn index 193c47f..058a066 100644 --- a/CHANGELOG.mkdn +++ b/CHANGELOG.mkdn @@ -7,12 +7,16 @@ Visit https://github.com/illuminatedwax/pesterchum for git access and source cod CHANGELOG --------- -### 3.14b (idk on version number scheme) +### 3.14.2 * Pesterchum 3.14 - illuminatedwax [ghostDunk] * Art - Grimlive [aquaMarinist] * Quirks lower() function - Kiooeht [evacipatedBox] * Quirks scrabble() function - Kiooeht [evacipatedBox] * Timestamps - Kiooeht [evacipatedBox] * Logviewer - Kiooeht [evacipatedBox] -* Chum list groups - Kiooeht [evacipatedBox] -* Chum list bug fixes - Kiooeht [evacipatedBox] +* Quirk ordering - alGore +* # of users in a memo + +BUG FIXES: +* incorrect characters in memos no longer break log file names +* memos now do not break on case-sensitivity diff --git a/TODO b/TODO index 16da57f..7945cd4 100644 --- a/TODO +++ b/TODO @@ -2,14 +2,22 @@ Bugs: * multiline msgs breaks shit * REGEXP: \b(\S)(\S*)(\S)\b REPLACE WITH: upper(\1)\2upper(\3) <-- this regexp, when used as a quirk and then typed in breaks -* import modified.tar * channels aren't case sensitive! get the real name of a channel * Windows doesn't show style sheet sometimes?? Maybe related to themes. * Issues with connecting? Client not closing connection right? People keep getting "nick taken" messages * Windows XP SP2: sometimes mouse clicks dont register? must be some kinda crash -* don't save pesterClientXXX names * enamel doesnt have time arrows -* need to make it so "/" in a memo doesn't mess up the logs + +Features: +* OOC +* log viewer needs to have BBCode/HTML/Text copy modes +* random pesters +* copy quirks between profiles? +* chum list groups +* More complex quirks: by-sound +* Theme checking +* Spy mode +* Animated Mac Bugs: * Mac doesn't show tabs right, display gifs, highlighting thing? @@ -18,13 +26,3 @@ SS: in the one-on-one pester it resizes with the window SS: but the memo one doesn't resize SS: and the arrows next to the time thing overlap the CLOSE button -Features: -* OOC -* random pesters -* # of users in each memo -* copy quirks between profiles? -* help button on quirks menu? -* More complex quirks: by-sound -* Theme checking -* Spy mode -* Animated diff --git a/dataobjs.py b/dataobjs.py index b6459fc..94d8797 100644 --- a/dataobjs.py +++ b/dataobjs.py @@ -10,6 +10,7 @@ from mispeller import mispeller _upperre = re.compile(r"upper\(([\w\\]+)\)") _lowerre = re.compile(r"lower\(([\w\\]+)\)") _scramblere = re.compile(r"scramble\(([\w\\]+)\)") +_reversere = re.compile(r"reverse\(([\w\\]+)\)") class Mood(object): moods = ["chummy", "rancorous", "offline", "pleasant", "distraught", @@ -68,9 +69,12 @@ class pesterQuirk(object): return mo.expand(m.group(1)).lower() def scramblerep(m): return "".join(random.sample(mo.expand(m.group(1)), len(mo.expand(m.group(1))))) + def reverserep(m): + return mo.expand(m.group(1))[::-1] to = _upperre.sub(upperrep, to) to = _lowerre.sub(lowerrep, to) to = _scramblere.sub(scramblerep, to) + to = _reversere.sub(reverserep, to) return mo.expand(to) return re.sub(fr, regexprep, string) elif self.type == "random": @@ -181,7 +185,7 @@ class pesterQuirks(object): yield q class PesterProfile(object): - def __init__(self, handle, color=None, mood=Mood("offline"), group=None, chumdb=None): + def __init__(self, handle, color=None, mood=Mood("offline"), chumdb=None): self.handle = handle if color is None: if chumdb: @@ -190,12 +194,6 @@ class PesterProfile(object): color = QtGui.QColor("black") self.color = color self.mood = mood - if group is None: - if chumdb: - group = chumdb.getGroup(handle, "Chums") - else: - group = "Chums" - self.group = group def initials(self, time=None): handle = self.handle caps = [l for l in handle if l.isupper()] @@ -225,8 +223,7 @@ class PesterProfile(object): def plaindict(self): return (self.handle, {"handle": self.handle, "mood": self.mood.name(), - "color": unicode(self.color.name()), - "group": unicode(self.group)}) + "color": unicode(self.color.name())}) def blocked(self, config): return self.handle in config.getBlocklist() diff --git a/generic.py b/generic.py index 2c0f265..fd77ad6 100644 --- a/generic.py +++ b/generic.py @@ -37,13 +37,6 @@ class RightClickList(QtGui.QListWidget): self.setCurrentItem(listing) self.optionsMenu.popup(event.globalPos()) -class RightClickTree(QtGui.QTreeWidget): - def contextMenuEvent(self, event): - if event.reason() == QtGui.QContextMenuEvent.Mouse: - listing = self.itemAt(event.pos()) - self.setCurrentItem(listing) - self.optionsMenu.popup(event.globalPos()) - class MultiTextDialog(QtGui.QDialog): def __init__(self, title, parent, *queries): QtGui.QDialog.__init__(self, parent) diff --git a/logviewer.py b/logviewer.py index b543731..b1c9474 100644 --- a/logviewer.py +++ b/logviewer.py @@ -3,7 +3,7 @@ import codecs import re from time import strftime, strptime from PyQt4 import QtGui, QtCore -from generic import RightClickList, RightClickTree +from generic import RightClickList from parsetools import convertTags from convo import PesterText @@ -138,8 +138,7 @@ class PesterLogViewer(QtGui.QDialog): self.logList.sort() self.logList.reverse() - self.tree = RightClickTree() - self.tree.optionsMenu = QtGui.QMenu(self) + self.tree = QtGui.QTreeWidget() self.tree.setFixedSize(260, 300) self.tree.header().hide() if theme.has_key("convo/scrollbar"): @@ -149,7 +148,6 @@ class PesterLogViewer(QtGui.QDialog): self.connect(self.tree, QtCore.SIGNAL('itemSelectionChanged()'), self, QtCore.SLOT('loadSelectedLog()')) self.tree.setSortingEnabled(False) - child_1 = None last = ["",""] for (i,l) in enumerate(self.logList): diff --git a/memos.py b/memos.py index 36066e1..66aff11 100644 --- a/memos.py +++ b/memos.py @@ -218,10 +218,10 @@ class MemoTabWindow(PesterTabWindow): def __init__(self, mainwindow, parent=None): PesterTabWindow.__init__(self, mainwindow, parent, "memos") def addChat(self, convo): - self.convos[convo.channel] = convo + self.convos[convo.channel.upper()] = convo # either addTab or setCurrentIndex will trigger changed() - newindex = self.tabs.addTab(convo.channel) - self.tabIndices[convo.channel] = newindex + newindex = self.tabs.addTab(convo.channel.upper()) + self.tabIndices[convo.channel.upper()] = newindex self.tabs.setCurrentIndex(newindex) self.tabs.setTabIcon(newindex, PesterIcon(self.mainwindow.theme["memos/memoicon"])) def updateBlocked(self): @@ -291,16 +291,16 @@ class MemoText(PesterText): grammar = time.getGrammar() joinmsg = chum.memojoinmsg(systemColor, time.getTime(), grammar, window.theme["convo/text/joinmemo"]) self.append(convertTags(joinmsg)) - parent.mainwindow.chatlog.log(parent.channel, joinmsg) + parent.mainwindow.chatlog.log(parent.channel.upper(), joinmsg) time.openCurrentTime() if type(lexmsg[0]) is mecmd: memsg = chum.memsg(systemColor, lexmsg, time=time.getGrammar()) - window.chatlog.log(parent.channel, memsg) + window.chatlog.log(parent.channel.upper(), memsg) self.append(convertTags(memsg)) else: self.append(convertTags(lexmsg)) - window.chatlog.log(parent.channel, lexmsg) + window.chatlog.log(parent.channel.upper(), lexmsg) def changeTheme(self, theme): self.initTheme(theme) @@ -417,7 +417,7 @@ class PesterMemo(PesterConvo): msg = p.memoopenmsg(systemColor, self.time.getTime(), timeGrammar, self.mainwindow.theme["convo/text/openmemo"], self.channel) self.time.openCurrentTime() self.textArea.append(convertTags(msg)) - self.mainwindow.chatlog.log(self.channel, msg) + self.mainwindow.chatlog.log(self.channel.upper(), msg) self.op = False self.newmessage = False @@ -425,7 +425,7 @@ class PesterMemo(PesterConvo): self.applyquirks = True def title(self): - return self.channel + return self.channel.upper() def icon(self): return PesterIcon(self.mainwindow.theme["memos/memoicon"]) @@ -555,7 +555,7 @@ class PesterMemo(PesterConvo): self.times[handle].removeTime(close) msg = chum.memoclosemsg(systemColor, grammar, window.theme["convo/text/closememo"]) self.textArea.append(convertTags(msg)) - self.mainwindow.chatlog.log(self.channel, msg) + self.mainwindow.chatlog.log(self.channel.upper(), msg) elif timed not in self.times[handle]: self.times[handle].addTime(timed) else: @@ -601,7 +601,7 @@ class PesterMemo(PesterConvo): namesdb = self.mainwindow.namesdb # reload names self.userlist.clear() - for n in self.mainwindow.namesdb[self.channel]: + for n in self.mainwindow.namesdb[self.channel.upper()]: self.addUser(n) @QtCore.pyqtSlot(QtCore.QString, QtCore.QString, QtCore.QString) @@ -635,7 +635,7 @@ class PesterMemo(PesterConvo): grammar = t.getGrammar() msg = chum.memoclosemsg(systemColor, grammar, self.mainwindow.theme["convo/text/closememo"]) self.textArea.append(convertTags(msg)) - self.mainwindow.chatlog.log(self.channel, msg) + self.mainwindow.chatlog.log(self.channel.upper(), msg) self.times[h].removeTime(t.getTime()) if update == "nick": self.addUser(newnick) @@ -663,7 +663,7 @@ class PesterMemo(PesterConvo): opgrammar = TimeGrammar("CURRENT", "C", "RIGHT NOW") msg = chum.memobanmsg(opchum, opgrammar, systemColor, grammar) self.textArea.append(convertTags(msg)) - self.mainwindow.chatlog.log(self.channel, msg) + self.mainwindow.chatlog.log(self.channel.upper(), msg) ttracker.removeTime(ttracker.getTime()) if chum is self.mainwindow.profile(): @@ -682,10 +682,10 @@ class PesterMemo(PesterConvo): self.time.openCurrentTime() msg = me.memoopenmsg(systemColor, self.time.getTime(), self.time.getGrammar(), self.mainwindow.theme["convo/text/openmemo"], self.channel) self.textArea.append(convertTags(msg)) - self.mainwindow.chatlog.log(self.channel, msg) + self.mainwindow.chatlog.log(self.channel.upper(), msg) elif ret == QtGui.QMessageBox.Cancel: if self.parent(): - i = self.parent().tabIndices[self.channel] + i = self.parent().tabIndices[self.channel.upper()] self.parent().tabClose(i) else: self.close() @@ -749,7 +749,7 @@ class PesterMemo(PesterConvo): systemColor = QtGui.QColor(self.mainwindow.theme["memos/systemMsgColor"]) msg = me.memoclosemsg(systemColor, grammar, self.mainwindow.theme["convo/text/closememo"]) self.textArea.append(convertTags(msg)) - self.mainwindow.chatlog.log(self.channel, msg) + self.mainwindow.chatlog.log(self.channel.upper(), msg) newtime = self.time.getTime() if newtime is None: diff --git a/menus.py b/menus.py index 551caa0..1ffe9ef 100644 --- a/menus.py +++ b/menus.py @@ -544,10 +544,6 @@ class PesterOptions(QtGui.QDialog): self.theme = theme self.setStyleSheet(self.theme["main/defaultwindow/style"]) - hr = QtGui.QFrame() - hr.setFrameShape(QtGui.QFrame.HLine) - hr.setFrameShadow(QtGui.QFrame.Sunken) - self.tabcheck = QtGui.QCheckBox("Tabbed Conversations", self) if self.config.tabs(): self.tabcheck.setChecked(True) @@ -574,12 +570,6 @@ class PesterOptions(QtGui.QDialog): if self.config.showSeconds(): self.secondscheck.setChecked(True) - # Will add ability to turn off groups later - #self.groupscheck = QtGui.QCheckBox("Use Groups", self) - #self.groupscheck.setChecked(self.config.useGroups()) - self.showemptycheck = QtGui.QCheckBox("Show Empty Groups", self) - self.showemptycheck.setChecked(self.config.showEmptyGroups()) - self.ok = QtGui.QPushButton("OK", self) self.ok.setDefault(True) self.connect(self.ok, QtCore.SIGNAL('clicked()'), @@ -595,9 +585,6 @@ class PesterOptions(QtGui.QDialog): layout_0.addWidget(self.tabcheck) layout_0.addWidget(self.soundcheck) layout_0.addWidget(self.hideOffline) - #layout_0.addWidget(self.groupscheck) - layout_0.addWidget(self.showemptycheck) - layout_0.addWidget(hr) layout_0.addWidget(self.timestampcheck) layout_0.addWidget(self.timestampBox) layout_0.addWidget(self.secondscheck) diff --git a/parsetools.py b/parsetools.py index 67f79da..c70beb7 100644 --- a/parsetools.py +++ b/parsetools.py @@ -216,7 +216,7 @@ def timeDifference(td): elif atd < timedelta(0,3600): if minutes == 1: timetext = "%d MINUTE %s" % (minutes, when) - else: + else: timetext = "%d MINUTES %s" % (minutes, when) elif atd < timedelta(0,3600*100): if hours == 1 and leftoverminutes == 0: @@ -235,7 +235,7 @@ def img2smiley(string): return string smiledict = { - ":rancorous:": "pc_rancorous.gif", + ":rancorous:": "pc_rancorous.gif", ":apple:": "apple.gif", ":bathearst:": "bathearst.gif", ":cathearst:": "cathearst.png", @@ -245,7 +245,7 @@ smiledict = { ":blueghost:": "blueslimer.gif", ":slimer:": "slimer.gif", ":candycorn:": "candycorn.gif", - ":cheer:": "cheer.gif", + ":cheer:": "cheer.gif", ":duhjohn:": "confusedjohn.gif", ":datrump:": "datrump.gif", ":facepalm:": "facepalm.gif", diff --git a/pesterchum.js b/pesterchum.js index 618a8ae..6ef578a 100644 --- a/pesterchum.js +++ b/pesterchum.js @@ -1 +1 @@ -{"hideOfflineChums": false, "tabs": true, "soundon": true, "server": "irc.mindfang.org", "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "laughingShisa", "bluntInstrument", "sunilaSeed", "bluntInstrument", "nickServ", "ghostBinoculars", "alGore"], "defaultprofile": "ghostDunk", "block": []} \ No newline at end of file +{"hideOfflineChums": false, "time12Format": true, "tabs": true, "showSeconds": false, "server": "irc.mindfang.org", "soundon": true, "showTimeStamps": false, "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "laughingShisa", "bluntInstrument", "sunilaSeed", "bluntInstrument", "nickServ", "ghostBinoculars", "alGore"], "defaultprofile": "ghostDunk", "block": []} \ No newline at end of file diff --git a/pesterchum.py b/pesterchum.py index 1282cf1..5965023 100644 --- a/pesterchum.py +++ b/pesterchum.py @@ -18,7 +18,7 @@ from menus import PesterChooseQuirks, PesterChooseTheme, \ PesterChooseProfile, PesterOptions, PesterUserlist, PesterMemoList, \ LoadingScreen, AboutPesterchum from dataobjs import PesterProfile, Mood, pesterQuirk, pesterQuirks -from generic import PesterIcon, RightClickList, RightClickTree, MultiTextDialog, PesterList +from generic import PesterIcon, RightClickList, MultiTextDialog, PesterList from convo import PesterTabWindow, PesterText, PesterInput, PesterConvo from parsetools import convertTags, addTimeInitial from memos import PesterMemo, MemoTabWindow, TimeTracker @@ -78,10 +78,13 @@ class PesterLog(object): self.logpath = _datadir+"logs" def log(self, handle, msg): - time = strftime("[%H:%M:%S] ") - bbcodemsg = time + convertTags(msg, "bbcode") - html = time + convertTags(msg, "html")+"
" - msg = time + convertTags(msg, "text") + #watch out for illegal characters + handle = re.sub(r'[<>:"/\\|?*]', "_", handle) + #time = strftime("[%H:%M:%S] ") + # no time codes in logs + bbcodemsg = convertTags(msg, "bbcode") + html = convertTags(msg, "html")+"
" + msg = convertTags(msg, "text") modes = {"bbcode": bbcodemsg, "html": html, "text": msg} if not self.convos.has_key(handle): time = datetime.now().strftime("%Y-%m-%d.%H.%M") @@ -131,14 +134,7 @@ class PesterProfileDB(dict): json.dump(chumdict, fp) fp.close() - u = [] - for (handle, c) in chumdict.iteritems(): - try: - g = c['group'] - u.append((handle, PesterProfile(handle, color=QtGui.QColor(c['color']), mood=Mood(c['mood']), group=g))) - except KeyError: - u.append((handle, PesterProfile(handle, color=QtGui.QColor(c['color']), mood=Mood(c['mood'])))) - converted = dict(u) + converted = dict([(handle, PesterProfile(handle, color=QtGui.QColor(c['color']), mood=Mood(c['mood']))) for (handle, c) in chumdict.iteritems()]) self.update(converted) def save(self): @@ -159,17 +155,6 @@ class PesterProfileDB(dict): self[handle].color = color else: self[handle] = PesterProfile(handle, color) - def getGroup(self, handle, default="Chums"): - if not self.has_key(handle): - return default - else: - return self[handle].group - def setGroup(self, handle, theGroup): - if self.has_key(handle): - self[handle].group = theGroup - else: - self[handle] = PesterProfile(handle, group=theGroup) - self.save() def __setitem__(self, key, val): dict.__setitem__(self, key, val) self.save() @@ -282,18 +267,6 @@ class userConfig(object): if not self.config.has_key('showSeconds'): self.set("showSeconds", False) return self.config.get('showSeconds', False) - def useGroups(self): - if not self.config.has_key('useGroups'): - self.set("useGroups", False) - return self.config.get('useGroups', False) - def openDefaultGroup(self): - if not self.config.has_key('openDefaultGroup'): - self.set("openDefaultGroup", True) - return self.config.get('openDefaultGroup', True) - def showEmptyGroups(self): - if not self.config.has_key('emptyGroups'): - self.set("emptyGroups", False) - return self.config.get('emptyGroups', False) def addChum(self, chum): if chum.handle not in self.chums(): fp = open(self.filename) # what if we have two clients open?? @@ -321,25 +294,6 @@ class userConfig(object): l = self.getBlocklist() l.pop(l.index(handle)) self.set('block', l) - def getGroups(self): - if not self.config.has_key('groups'): - self.set('groups', []) - return self.config.get('groups', []) - def addGroup(self, group, open=False): - l = self.getGroups() - if group not in l: - l.append([group,open]) - l.sort() - self.set('groups', l) - def delGroup(self, group): - l = self.getGroups() - i = 0 - for g in l: - if g[0] == group: break - i = i+1 - l.pop(i) - l.sort() - self.set('groups', l) def server(self): return self.config.get('server', 'irc.mindfang.org') def port(self): @@ -428,6 +382,9 @@ class userProfile(object): return self.theme def save(self): handle = self.chat.handle + if handle[0:12] == "pesterClient": + # dont save temp profiles + return try: jsonoutput = json.dumps(self.userprofile) except ValueError, e: @@ -453,9 +410,9 @@ class WMButton(QtGui.QPushButton): self.setStyleSheet("QPushButton { padding: 0px; }") self.setAutoDefault(False) -class chumListing(QtGui.QTreeWidgetItem): +class chumListing(QtGui.QListWidgetItem): def __init__(self, chum, window): - QtGui.QTreeWidgetItem.__init__(self, [chum.handle]) + QtGui.QListWidgetItem.__init__(self, chum.handle) self.mainwindow = window self.chum = chum self.handle = chum.handle @@ -469,44 +426,32 @@ class chumListing(QtGui.QTreeWidgetItem): mood = self.chum.mood self.mood = mood icon = self.mood.icon(self.mainwindow.theme) - self.setIcon(0, icon) + self.setIcon(icon) try: - self.setTextColor(0, QtGui.QColor(self.mainwindow.theme["main/chums/moods"][self.mood.name()]["color"])) + self.setTextColor(QtGui.QColor(self.mainwindow.theme["main/chums/moods"][self.mood.name()]["color"])) except KeyError: - self.setTextColor(0, QtGui.QColor(self.mainwindow.theme["main/chums/moods/chummy/color"])) + self.setTextColor(QtGui.QColor(self.mainwindow.theme["main/chums/moods/chummy/color"])) def changeTheme(self, theme): icon = self.mood.icon(theme) - self.setIcon(0, icon) + self.setIcon(icon) try: - self.setTextColor(0, QtGui.QColor(self.mainwindow.theme["main/chums/moods"][self.mood.name()]["color"])) + self.setTextColor(QtGui.QColor(self.mainwindow.theme["main/chums/moods"][self.mood.name()]["color"])) except KeyError: - self.setTextColor(0, QtGui.QColor(self.mainwindow.theme["main/chums/moods/chummy/color"])) + self.setTextColor(QtGui.QColor(self.mainwindow.theme["main/chums/moods/chummy/color"])) def __lt__(self, cl): h1 = self.handle.lower() h2 = cl.handle.lower() return (h1 < h2) -class chumArea(RightClickTree): +class chumArea(RightClickList): def __init__(self, chums, parent=None): - QtGui.QTreeWidget.__init__(self, parent) + QtGui.QListWidget.__init__(self, parent) self.mainwindow = parent theme = self.mainwindow.theme self.chums = chums - gTemp = self.mainwindow.config.getGroups() - self.groups = [g[0] for g in gTemp] - self.openGroups = [g[1] for g in gTemp] - # quick hack to sort saved groups - self.mainwindow.config.addGroup("f3rskv9dssag[%3ffvsla09iv34G#$v") - self.mainwindow.config.delGroup("f3rskv9dssag[%3ffvsla09iv34G#$v") - # end quick hack - self.showAllGroups() if not self.mainwindow.config.hideOfflineChums(): self.showAllChums() - if not self.mainwindow.config.showEmptyGroups(): - self.hideEmptyGroups() - self.chumoptions = QtGui.QMenu(self) - self.groupoptions = QtGui.QMenu(self) - self.optionsMenu = self.chumoptions + self.optionsMenu = QtGui.QMenu(self) self.pester = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/pester"], self) self.connect(self.pester, QtCore.SIGNAL('triggered()'), self, QtCore.SLOT('activateChum()')) @@ -519,83 +464,13 @@ class chumArea(RightClickTree): self.logchum = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/viewlog"], self) self.connect(self.logchum, QtCore.SIGNAL('triggered()'), self, QtCore.SLOT('openChumLogs()')) - - self.removegroup = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/removegroup"], self) - self.connect(self.removegroup, QtCore.SIGNAL('triggered()'), - self, QtCore.SLOT('removeGroup()')) - self.renamegroup = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/renamegroup"], self) - self.connect(self.renamegroup, QtCore.SIGNAL('triggered()'), - self, QtCore.SLOT('renameGroup()')) - self.chumoptions.addAction(self.pester) - self.chumoptions.addAction(self.logchum) - self.chumoptions.addAction(self.blockchum) - self.chumoptions.addAction(self.removechum) - self.moveMenu = QtGui.QMenu(self.mainwindow.theme["main/menus/rclickchumlist/movechum"], self) - self.chumoptions.addMenu(self.moveMenu) - self.moveGroupMenu() - - self.groupoptions.addAction(self.renamegroup) - self.groupoptions.addAction(self.removegroup) + self.optionsMenu.addAction(self.pester) + self.optionsMenu.addAction(self.logchum) + self.optionsMenu.addAction(self.blockchum) + self.optionsMenu.addAction(self.removechum) self.initTheme(theme) - #self.sortItems() - #self.sortItems(1, QtCore.Qt.AscendingOrder) - self.setSortingEnabled(False) - self.header().hide() - self.setDropIndicatorShown(False) - self.setIndentation(0) - self.setDragEnabled(True) - self.setDragDropMode(QtGui.QAbstractItemView.InternalMove) - - self.connect(self, QtCore.SIGNAL('itemDoubleClicked(QTreeWidgetItem *, int)'), - self, QtCore.SLOT('expandGroup()')) - - def dropEvent(self, event): - item = self.itemAt(event.pos()) - if item: - if item.text(0) == "Chums" or item.text(0) in self.groups: - group = item.text(0) - else: - group = item.parent().text(0) - chumLabel = event.source().currentItem() - chumLabel.chum.group = group - self.mainwindow.chumdb.setGroup(chumLabel.chum.handle, group) - self.takeItem(chumLabel) - self.addItem(chumLabel) - - def chumoptionsmenu(self): - self.optionsMenu = self.chumoptions - def groupoptionsmenu(self): - self.optionsMenu = self.groupoptions - def moveGroupMenu(self): - currentGroup = self.currentItem() - if currentGroup: - currentGroup = currentGroup.parent().text(0) - self.moveMenu.clear() - actGroup = QtGui.QActionGroup(self) - - groups = self.groups[:] - groups.insert(0, "Chums") - for gtext in groups: - if gtext == currentGroup: - continue - movegroup = self.moveMenu.addAction(gtext) - actGroup.addAction(movegroup) - self.connect(actGroup, QtCore.SIGNAL('triggered(QAction *)'), - self, QtCore.SLOT('moveToGroup(QAction *)')) - def contextMenuEvent(self, event): - #fuckin Qt - if event.reason() == QtGui.QContextMenuEvent.Mouse: - listing = self.itemAt(event.pos()) - self.setCurrentItem(listing) - if self.currentItem().text(0) == "Chums" or \ - self.currentItem().text(0) in self.groups: - self.groupoptionsmenu() - else: - self.chumoptionsmenu() - self.moveGroupMenu() - self.optionsMenu.popup(event.globalPos()) - + self.sortItems() def addChum(self, chum): if len([c for c in self.chums if c.handle == chum.handle]) != 0: return @@ -604,95 +479,29 @@ class chumArea(RightClickTree): chum.mood.name() == "offline"): chumLabel = chumListing(chum, self.mainwindow) self.addItem(chumLabel) - #self.topLevelItem(0).addChild(chumLabel) - #self.topLevelItem(0).sortChildren(0, QtCore.Qt.AscendingOrder) + self.sortItems() def getChums(self, handle): - chums = self.findItems(handle, QtCore.Qt.MatchContains | QtCore.Qt.MatchRecursive) + chums = self.findItems(handle, QtCore.Qt.MatchFlags(0)) return chums def showAllChums(self): for c in self.chums: chandle = c.handle - if not len(self.findItems(chandle, QtCore.Qt.MatchContains | QtCore.Qt.MatchRecursive)): + if not self.findItems(chandle, QtCore.Qt.MatchFlags(0)): chumLabel = chumListing(c, self.mainwindow) self.addItem(chumLabel) - #self.sortItems() + self.sortItems() def hideOfflineChums(self): - for j in range(self.topLevelItemCount()): - i = 0 - listing = self.topLevelItem(j).child(i) - while listing is not None: - if listing.chum.mood.name() == "offline": - self.topLevelItem(j).takeChild(i) - else: - i += 1 - listing = self.topLevelItem(j).child(i) - self.topLevelItem(j).sortChildren(0, QtCore.Qt.AscendingOrder) - def showAllGroups(self): - curgroups = [] - for i in range(self.topLevelItemCount()): - curgroups.append(self.topLevelItem(i).text(0)) - if "Chums" not in curgroups: - child_1 = QtGui.QTreeWidgetItem(["Chums"]) - self.addTopLevelItem(child_1) - if self.mainwindow.config.openDefaultGroup(): - child_1.setExpanded(True) - for i,g in enumerate(self.groups): - if g not in curgroups: - child_1 = QtGui.QTreeWidgetItem(["%s" % (g)]) - self.addTopLevelItem(child_1) - if self.openGroups[i]: - child_1.setExpanded(True) - def hideEmptyGroups(self): i = 0 - listing = self.topLevelItem(i) + listing = self.item(i) while listing is not None: - if listing.childCount() == 0: - self.takeTopLevelItem(i) + if listing.chum.mood.name() == "offline": + self.takeItem(i) else: i += 1 - listing = self.topLevelItem(i) - @QtCore.pyqtSlot() - def expandGroup(self): - item = self.currentItem() - if item.text(0) in self.groups: - self.mainwindow.config.delGroup(str(item.text(0))) - expand = item.isExpanded() - self.mainwindow.config.addGroup(str(item.text(0)), not expand) - elif item.text(0) == "Chums": - self.mainwindow.config.set("openDefaultGroup", not item.isExpanded()) - def addItem(self, chumLabel): - if hasattr(self, 'groups'): - if chumLabel.chum.group not in self.groups: - self.topLevelItem(0).addChild(chumLabel) - self.topLevelItem(0).sortChildren(0, QtCore.Qt.AscendingOrder) - else: - if not self.findItems(chumLabel.handle, QtCore.Qt.MatchContains | QtCore.Qt.MatchRecursive): - if not self.findItems(chumLabel.chum.group, QtCore.Qt.MatchFlags(0)): - child_1 = QtGui.QTreeWidgetItem(["%s" % (chumLabel.chum.group)]) - self.addTopLevelItem(child_1) - if self.openGroups[self.groups.index("%s" % (chumLabel.chum.group))]: - child_1.setExpanded(True) - for i in range(self.topLevelItemCount()): - if self.topLevelItem(i).text(0) == chumLabel.chum.group: - break - self.topLevelItem(i).addChild(chumLabel) - self.topLevelItem(i).sortChildren(0, QtCore.Qt.AscendingOrder) - else: # usually means this is now the trollslum - if not self.findItems(chumLabel.handle, QtCore.Qt.MatchContains | QtCore.Qt.MatchRecursive): - self.topLevelItem(0).addChild(chumLabel) - self.topLevelItem(0).sortChildren(0, QtCore.Qt.AscendingOrder) - def takeItem(self, chumLabel): - r = None - for i in range(self.topLevelItemCount()): - for j in range(self.topLevelItem(i).childCount()): - if self.topLevelItem(i).child(j).text(0) == chumLabel.chum.handle: - r = self.topLevelItem(i).takeChild(j) - break - if not self.mainwindow.config.showEmptyGroups(): - self.hideEmptyGroups() - return r + listing = self.item(i) + self.sortItems() def updateMood(self, handle, mood): hideoff = self.mainwindow.config.hideOfflineChums() chums = self.getChums(handle) @@ -703,7 +512,7 @@ class chumArea(RightClickTree): handle in [p.handle for p in self.chums]: newLabel = chumListing([p for p in self.chums if p.handle == handle][0], self.mainwindow) self.addItem(newLabel) - #self.sortItems() + self.sortItems() chums = [newLabel] elif mood.name() == "offline" and \ len(chums) > 0: @@ -729,27 +538,14 @@ class chumArea(RightClickTree): self.removechum.setText(theme["main/menus/rclickchumlist/removechum"]) self.blockchum.setText(theme["main/menus/rclickchumlist/blockchum"]) self.logchum.setText(theme["main/menus/rclickchumlist/viewlog"]) - self.removegroup.setText(theme["main/menus/rclickchumlist/removegroup"]) - self.renamegroup.setText(theme["main/menus/rclickchumlist/renamegroup"]) - self.moveMenu.setTitle(theme["main/menus/rclickchumlist/movechum"]) def changeTheme(self, theme): self.initTheme(theme) - chumlistings = [] - for i in range(self.topLevelItemCount()): - for j in range(self.topLevelItem(i).childCount()): - chumlistings.append(self.topLevelItem(i).child(j)) - #chumlistings = [self.item(i) for i in range(0, self.count())] + chumlistings = [self.item(i) for i in range(0, self.count())] for c in chumlistings: c.changeTheme(theme) - - def count(self): - c = 0 - for i in range(self.topLevelItemCount()): - c = c + self.topLevelItem(i).childCount() - return c @QtCore.pyqtSlot() def activateChum(self): - self.itemActivated.emit(self.currentItem(), 0) + self.itemActivated.emit(self.currentItem()) @QtCore.pyqtSlot() def removeChum(self, handle = None): if handle: @@ -761,7 +557,7 @@ class chumArea(RightClickTree): currentChum = self.currentItem().chum self.chums = [c for c in self.chums if c.handle != currentChum.handle] self.removeChumSignal.emit(self.currentItem().chum.handle) - oldlist = self.takeItem(self.currentItem()) + oldlist = self.takeItem(self.currentRow()) del oldlist @QtCore.pyqtSlot() def blockChum(self): @@ -771,7 +567,7 @@ class chumArea(RightClickTree): self.blockChumSignal.emit(self.currentItem().chum.handle) @QtCore.pyqtSlot() def openChumLogs(self): - currentChum = self.currentItem().text(0) + currentChum = self.currentItem().text() if not currentChum: return self.pesterlogviewer = PesterLogViewer(currentChum, self.mainwindow.config, self.mainwindow.theme, self.mainwindow) @@ -786,59 +582,20 @@ class chumArea(RightClickTree): self.pesterlogviewer = None @QtCore.pyqtSlot() def renameGroup(self): - if not hasattr(self, 'renamegroupdialog'): - self.renamegroupdialog = None - if not self.renamegroupdialog: - (gname, ok) = QtGui.QInputDialog.getText(self, "Rename Group", "Enter a new name for the group:") - if ok: - gname = unicode(gname) - currentGroup = self.currentItem() - if not currentGroup: - return - index = self.indexOfTopLevelItem(currentGroup) - if index != -1: - expanded = currentGroup.isExpanded() - self.mainwindow.config.delGroup(str(currentGroup.text(0))) - self.mainwindow.config.addGroup(gname, expanded) - gTemp = self.mainwindow.config.getGroups() - self.groups = [g[0] for g in gTemp] - self.openGroups = [g[1] for g in gTemp] - for i in range(currentGroup.childCount()): - currentGroup.child(i).chum.group = gname - self.mainwindow.chumdb.setGroup(currentGroup.child(i).chum.handle, gname) - currentGroup.setText(0, gname) - self.renamegroupdialog = None + (gname, ok) = QtGui.QInputDialog.getText(self, "Rename Group", "Enter a new name for the group:") + if ok: + pass + #rename group + @QtCore.pyqtSlot() def removeGroup(self): - currentGroup = self.currentItem() - if not currentGroup: - return - self.mainwindow.config.delGroup(currentGroup.text(0)) - gTemp = self.mainwindow.config.getGroups() - self.groups = [g[0] for g in gTemp] - self.openGroups = [g[1] for g in gTemp] - for i in range(self.topLevelItemCount()): - if self.topLevelItem(i).text(0) == currentGroup.text(0): - break - while self.topLevelItem(i) and self.topLevelItem(i).child(0): - chumLabel = self.topLevelItem(i).child(0) - chumLabel.chum.group = "Chums" - self.mainwindow.chumdb.setGroup(chumLabel.chum.handle, "Chums") - self.takeItem(chumLabel) - self.addItem(chumLabel) - self.takeTopLevelItem(i) + pass + #remove group + @QtCore.pyqtSlot(QtGui.QAction) def moveToGroup(self, item): - if not item: - return - group = str(item.text()) - chumLabel = self.currentItem() - if not chumLabel: - return - chumLabel.chum.group = group - self.mainwindow.chumdb.setGroup(chumLabel.chum.handle, group) - self.takeItem(chumLabel) - self.addItem(chumLabel) + pass + #move to group removeChumSignal = QtCore.pyqtSignal(QtCore.QString) blockChumSignal = QtCore.pyqtSignal(QtCore.QString) @@ -850,34 +607,19 @@ class trollSlum(chumArea): theme = self.mainwindow.theme self.setStyleSheet(theme["main/trollslum/chumroll/style"]) self.chums = trolls - child_1 = QtGui.QTreeWidgetItem([""]) - self.addTopLevelItem(child_1) - child_1.setExpanded(True) for c in self.chums: chandle = c.handle if not self.findItems(chandle, QtCore.Qt.MatchFlags(0)): chumLabel = chumListing(c, self.mainwindow) self.addItem(chumLabel) - self.setSortingEnabled(False) - self.header().hide() - self.setDropIndicatorShown(False) - self.setIndentation(0) - self.optionsMenu = QtGui.QMenu(self) self.unblockchum = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/unblockchum"], self) self.connect(self.unblockchum, QtCore.SIGNAL('triggered()'), self, QtCore.SIGNAL('unblockChumSignal()')) self.optionsMenu.addAction(self.unblockchum) - #self.sortItems() - def contextMenuEvent(self, event): - #fuckin Qt - if event.reason() == QtGui.QContextMenuEvent.Mouse: - listing = self.itemAt(event.pos()) - self.setCurrentItem(listing) - if self.currentItem().text(0) != "": - self.optionsMenu.popup(event.globalPos()) + self.sortItems() def changeTheme(self, theme): self.setStyleSheet(theme["main/trollslum/chumroll/style"]) self.removechum.setText(theme["main/menus/rclickchumlist/removechum"]) @@ -1094,10 +836,6 @@ class PesterWindow(MovingWindow): self.logv = logv self.connect(logv, QtCore.SIGNAL('triggered()'), self, QtCore.SLOT('openLogv()')) - grps = QtGui.QAction(self.theme["main/menus/client/addgroup"], self) - self.grps = grps - self.connect(grps, QtCore.SIGNAL('triggered()'), - self, QtCore.SLOT('addGroupWindow()')) opts = QtGui.QAction(self.theme["main/menus/client/options"], self) self.opts = opts self.connect(opts, QtCore.SIGNAL('triggered()'), @@ -1134,7 +872,6 @@ class PesterWindow(MovingWindow): filemenu.addAction(logv) filemenu.addAction(userlistaction) filemenu.addAction(self.idleaction) - filemenu.addAction(grps) filemenu.addAction(self.importaction) filemenu.addAction(self.reconnectAction) filemenu.addAction(exitaction) @@ -1195,7 +932,7 @@ class PesterWindow(MovingWindow): chums = [PesterProfile(c, chumdb=self.chumdb) for c in set(self.config.chums())] self.chumList = chumArea(chums, self) self.connect(self.chumList, - QtCore.SIGNAL('itemActivated(QTreeWidgetItem *, int)'), + QtCore.SIGNAL('itemActivated(QListWidgetItem *)'), self, QtCore.SLOT('pesterSelectedChum()')) self.connect(self.chumList, @@ -1301,10 +1038,10 @@ class PesterWindow(MovingWindow): else: self.alarm.play() def newMemoMsg(self, chan, handle, msg): - if not self.memos.has_key(chan): + if not self.memos.has_key(chan.upper()): # silently ignore in case we forgot to /part return - memo = self.memos[chan] + memo = self.memos[chan.upper()] msg = unicode(msg) if not memo.times.has_key(handle): # new chum! time current @@ -1362,8 +1099,8 @@ class PesterWindow(MovingWindow): def newMemo(self, channel, timestr, secret=False): if channel == "#pesterchum": return - if self.memos.has_key(channel): - self.memos[channel].showChat() + if self.memos.has_key(channel.upper()): + self.memos[channel.upper()].showChat() return # do slider dialog then set if self.config.tabs(): @@ -1384,7 +1121,7 @@ class PesterWindow(MovingWindow): QtCore.SIGNAL('userPresentSignal(QString, QString, QString)'), memoWindow, QtCore.SLOT('userPresentChange(QString, QString, QString)')) # chat client send memo open - self.memos[channel] = memoWindow + self.memos[channel.upper()] = memoWindow self.joinChannel.emit(channel) # race condition? self.secret = secret if self.secret: @@ -1431,7 +1168,6 @@ class PesterWindow(MovingWindow): # menus self.menu.move(*theme["main/menu/loc"]) self.logv.setText(theme["main/menus/client/logviewer"]) - self.grps.setText(theme["main/menus/client/addgroup"]) self.opts.setText(theme["main/menus/client/options"]) self.exitaction.setText(theme["main/menus/client/exit"]) self.userlistaction.setText(theme["main/menus/client/userlist"]) @@ -1586,9 +1322,7 @@ class PesterWindow(MovingWindow): def pesterSelectedChum(self): curChum = self.chumList.currentItem() if curChum: - if curChum.text(0) not in self.chumList.groups and \ - curChum.text(0) != "Chums": - self.newConversationWindow(curChum) + self.newConversationWindow(curChum) @QtCore.pyqtSlot(QtGui.QListWidgetItem) def newConversationWindow(self, chumlisting): # check chumdb @@ -1612,7 +1346,7 @@ class PesterWindow(MovingWindow): c = unicode(channel) self.chatlog.finish(c) self.leftChannel.emit(channel) - del self.memos[c] + del self.memos[c.upper()] @QtCore.pyqtSlot() def tabsClosed(self): del self.tabconvo @@ -1644,19 +1378,19 @@ class PesterWindow(MovingWindow): @QtCore.pyqtSlot(QtCore.QString, QtCore.QString, QtCore.QString) def timeCommand(self, chan, handle, command): (c, h, cmd) = (unicode(chan), unicode(handle), unicode(command)) - if self.memos[c]: - self.memos[c].timeUpdate(h, cmd) + if self.memos[c.upper()]: + self.memos[c.upper()].timeUpdate(h, cmd) @QtCore.pyqtSlot(QtCore.QString, PesterList) def updateNames(self, channel, names): - c = unicode(channel) + c = unicode(channel).upper() # update name DB self.namesdb[c] = names # warn interested party of names self.namesUpdated.emit() @QtCore.pyqtSlot(QtCore.QString, QtCore.QString, QtCore.QString) def userPresentUpdate(self, handle, channel, update): - c = unicode(channel) + c = unicode(channel).upper() n = unicode(handle) if update == "nick": l = n.split(":") @@ -1929,25 +1663,6 @@ class PesterWindow(MovingWindow): def closeLogUsers(self): self.logusermenu.close() self.logusermenu = None - - @QtCore.pyqtSlot() - def addGroupWindow(self): - if not hasattr(self, 'addgroupdialog'): - self.addgroupdialog = None - if not self.addgroupdialog: - (gname, ok) = QtGui.QInputDialog.getText(self, "Add Group", "Enter a name for the new group:") - if ok: - gname = unicode(gname) - self.config.addGroup(gname) - gTemp = self.config.getGroups() - self.chumList.groups = [g[0] for g in gTemp] - self.chumList.openGroups = [g[1] for g in gTemp] - self.chumList.showAllGroups() - if not self.config.showEmptyGroups(): - self.chumList.hideEmptyGroups() - - self.addgroupdialog = None - @QtCore.pyqtSlot() def openOpts(self): if not hasattr(self, 'optionmenu'): @@ -2029,16 +1744,6 @@ class PesterWindow(MovingWindow): self.config.set("time12Format", False) secondssetting = self.optionmenu.secondscheck.isChecked() self.config.set("showSeconds", secondssetting) - # groups - #groupssetting = self.optionmenu.groupscheck.isChecked() - #self.config.set("useGroups", groupssetting) - emptygroupssetting = self.optionmenu.showemptycheck.isChecked() - curemptygroup = self.config.showEmptyGroups() - if curemptygroup and not emptygroupssetting: - self.chumList.hideEmptyGroups() - elif emptygroupssetting and not curemptygroup: - self.chumList.showAllGroups() - self.config.set("emptyGroups", emptygroupssetting) self.optionmenu = None @QtCore.pyqtSlot() diff --git a/themes/enamel/style.js b/themes/enamel/style.js index 6536989..07f8b06 100644 --- a/themes/enamel/style.js +++ b/themes/enamel/style.js @@ -20,10 +20,9 @@ "memos": "Memos", "logviewer": "Pesterlogs", "userlist": "Userlist", - "addgroup": "Add Group", "import": "Import", "reconnect": "Reconnect", - "idle": "Idle", + "idle": "Idle", "exit": "Exit"}, "profile": {"_name": "Profile", "switch": "Switch", @@ -39,9 +38,6 @@ "addchum": "Add Chum", "viewlog": "View Pesterlog", "unblockchum": "Unblock", - "removegroup": "Remove Group", - "renamegroup": "Rename Group", - "movechum": "Move To", "banuser": "Ban User", "opuser": "Make OP", "quirksoff": "Quirks Off" @@ -58,7 +54,7 @@ "loc": [440, 211], "size": [289, 275], "userlistcolor": "black", - "moods": { + "moods": { "chummy": { "icon": "$path/chummy.gif", "color": "black" }, @@ -66,7 +62,7 @@ "offline": { "icon": "$path/offline.gif", "color": "#9d9d9d"}, - + "pleasant": { "icon": "$path/pleasant.gif", "color": "black" }, "distraught": { "icon": "$path/distraught.gif", "color": "black" }, @@ -94,7 +90,7 @@ "devious": { "icon": "$path/devious.gif", "color": "red" }, "sleek": { "icon": "$path/sleek.gif", "color": "red" }, - + "detestful": { "icon": "$path/detestful.gif", "color": "red" }, "mirthful": { "icon": "$path/mirthful.gif", "color": "red" }, @@ -113,7 +109,7 @@ } }, - "trollslum": { + "trollslum": { "style": "background: #fdb302; border:2px solid yellow; font-family: 'Century Gothic'", "size": [195, 200], "label": { "text": "TROLLSLUM", @@ -131,7 +127,7 @@ "text": "" }, "currentMood": [1500, 1500] }, - "defaultwindow": { "style": "background: #fdb302; font-family:'Century Gothic';font:bold;selection-background-color:#919191; " + "defaultwindow": { "style": "background: #fdb302; font-family:'Century Gothic';font:bold;selection-background-color:#919191; " }, "addchum": { "style": "background: rgba(255, 255, 0, 0%); border:0px; color: rgba(0, 0, 0, 0%);", "loc": [443,144], @@ -151,82 +147,82 @@ }, "defaultmood": 0, "moodlabel": { "style": "", - "loc": [20, 430], - "text": "" - }, + "loc": [20, 430], + "text": "" + }, "moods": [ - { "style": "background-image:url($path/mood1.png); border:0px;", - "selected": "background-image:url($path/mood1c.png); border:0px;", - "loc": [0, 258], - "size": [100,110], - "text": "", - "icon": "", - "mood": 0 - }, - { "style": "background-image:url($path/mood2.png); border:0px;", - "selected": "background-image:url($path/mood2c.png); border:0px;", - "loc": [106, 258], - "size": [100, 110], - "text": "", - "icon": "", - "mood": 19 - }, - { "style": "background-image:url($path/mood3.png); border:0px;", - "selected": "background-image:url($path/mood3c.png); border:0px;", - "loc": [212, 258], - "size": [100, 110], - "text": "", - "icon": "", - "mood": 22 - }, - { "style": "background-image:url($path/mood4.png); border:0px;", - "selected": "background-image:url($path/mood4c.png); border:0px;", - "loc": [318, 258], - "size": [100, 110], - "text": "", - "icon": "", - "mood": 4 - }, - { "style": "background-image:url($path/mood5.png); border:0px;", - "selected": "background-image:url($path/mood5c.png); border:0px;", - "loc": [0, 382], - "size": [100, 110], - "text": "", - "icon": "", - "mood": 3 - }, - { "style": "background-image:url($path/mood6.png); border:0px;", - "selected": "background-image:url($path/mood6c.png); border:0px;", - "loc": [106, 382], - "size": [100, 110], - "text": "", - "icon": "", - "mood": 20 - }, - { "style": "background-image:url($path/mood7.png); border:0px;", - "selected": "background-image:url($path/mood7c.png); border:0px;", - "loc": [212, 382], - "size": [100, 110], - "text": "", - "icon": "", - "mood": 5 - }, - { "style": "background-image:url($path/mood8.png); border:0px;", - "selected": "background-image:url($path/mood8c.png); border:0px;", - "loc": [318, 382], - "size": [100, 110], - "text": "", - "icon": "", - "mood": 1 - }, - { "style": "border:0px;", - "selected": "border:0px;", - "loc": [0, 0], - "size": [100, 100], - "text": "", - "icon": "", - "mood": 2 - } + { "style": "background-image:url($path/mood1.png); border:0px;", + "selected": "background-image:url($path/mood1c.png); border:0px;", + "loc": [0, 258], + "size": [100,110], + "text": "", + "icon": "", + "mood": 0 + }, + { "style": "background-image:url($path/mood2.png); border:0px;", + "selected": "background-image:url($path/mood2c.png); border:0px;", + "loc": [106, 258], + "size": [100, 110], + "text": "", + "icon": "", + "mood": 19 + }, + { "style": "background-image:url($path/mood3.png); border:0px;", + "selected": "background-image:url($path/mood3c.png); border:0px;", + "loc": [212, 258], + "size": [100, 110], + "text": "", + "icon": "", + "mood": 22 + }, + { "style": "background-image:url($path/mood4.png); border:0px;", + "selected": "background-image:url($path/mood4c.png); border:0px;", + "loc": [318, 258], + "size": [100, 110], + "text": "", + "icon": "", + "mood": 4 + }, + { "style": "background-image:url($path/mood5.png); border:0px;", + "selected": "background-image:url($path/mood5c.png); border:0px;", + "loc": [0, 382], + "size": [100, 110], + "text": "", + "icon": "", + "mood": 3 + }, + { "style": "background-image:url($path/mood6.png); border:0px;", + "selected": "background-image:url($path/mood6c.png); border:0px;", + "loc": [106, 382], + "size": [100, 110], + "text": "", + "icon": "", + "mood": 20 + }, + { "style": "background-image:url($path/mood7.png); border:0px;", + "selected": "background-image:url($path/mood7c.png); border:0px;", + "loc": [212, 382], + "size": [100, 110], + "text": "", + "icon": "", + "mood": 5 + }, + { "style": "background-image:url($path/mood8.png); border:0px;", + "selected": "background-image:url($path/mood8c.png); border:0px;", + "loc": [318, 382], + "size": [100, 110], + "text": "", + "icon": "", + "mood": 1 + }, + { "style": "border:0px;", + "selected": "border:0px;", + "loc": [0, 0], + "size": [100, 100], + "text": "", + "icon": "", + "mood": 2 + } ] }, "convo": @@ -234,7 +230,7 @@ "tabstyle": "background-color: #fdb302; font-family: 'Century Gothic'", "scrollbar": { "style" : "padding-top:17px; padding-bottom:17px;width: 18px; background: rgba(255, 255, 0, 0%); border:0px;", "handle": "border-width: 5px; border-image:url($path/scrollbg.png) 5px; min-height:60px;", - "downarrow": "height:17px;border:0px solid #c48a00;", + "downarrow": "height:17px;border:0px solid #c48a00;", "darrowstyle": "image:url($path/downarrow.png);", "uparrow": "height:17px;border:0px solid #c48a00;", "uarrowstyle": "image:url($path/uparrow.png);" @@ -262,12 +258,12 @@ "ceasepester": "ceased pestering", "blocked": "blocked", "unblocked": "unblocked", - "blockedmsg": "did not receive message from", + "blockedmsg": "did not receive message from", "openmemo": "opened memo on board", "joinmemo": "responded to memo", "closememo": "ceased responding to memo", "kickedmemo": "You have been banned from this memo!", - "idle": "is now an idle chum!" + "idle": "is now an idle chum!" }, "systemMsgColor": "#646464" }, @@ -282,7 +278,7 @@ }, "scrollbar": { "style" : "padding-top:17px; padding-bottom:17px;width: 18px; background: rgba(255, 255, 0, 0%); border:0px;", "handle": "border-width: 5px; border-image:url($path/scrollbg.png) 5px; min-height:60px;", - "downarrow": "height:17px;border:0px;", + "downarrow": "height:17px;border:0px;", "darrowstyle": "image:url();", "uparrow": "height:17px;border:0px;", "uarrowstyle": "image:url();" @@ -299,20 +295,20 @@ "userlist": { "width": 150, "style": "border:2px solid #c48a00; background: white; font-family: 'Century Gothic';selection-background-color:#646464; font-size: 14px; margin-left:0px; margin-right:10px;" }, - "time": { "text": { "width": 75, - "style": " border: 2px solid yellow; background: white; font-size: 12px; margin-top: 5px; margin-right: 5px; margin-left: 5px; font-family:'Century Gothic';font:bold;" + "time": { "text": { "width": 75, + "style": " border: 2px solid yellow; background: white; font-size: 12px; margin-top: 5px; margin-right: 5px; margin-left: 5px; font-family:'Century Gothic';font:bold;" }, "slider": { "style": "border: 0px;", "groove": "", "handle": "" }, - "buttons": { "style": "color: black; font: bold; border: 2px solid #c48a00; font-size: 12px; background: yellow; margin-top: 5px; margin-right: 5px; margin-left: 5px; padding: 2px; width: 50px;" }, - "arrows": { "left": "$path/leftarrow.png", + "buttons": { "style": "color: black; font: bold; border: 2px solid #c48a00; font-size: 12px; background: yellow; margin-top: 5px; margin-right: 5px; margin-left: 5px; padding: 2px; width: 50px;" }, + "arrows": { "left": "$path/leftarrow.png", "right": "$path/rightarrow.png", - "style": " border:0px; margin-top: 5px; margin-right:10px;" + "style": " border:0px; margin-top: 5px; margin-right:10px;" } }, "systemMsgColor": "#646464", "op": { "icon": "$path/smooth.png" } } -} +} \ No newline at end of file diff --git a/themes/gold/style.js b/themes/gold/style.js index d5cefa4..c7fb706 100644 --- a/themes/gold/style.js +++ b/themes/gold/style.js @@ -16,16 +16,15 @@ "loc": [150,22] }, "sounds": { "alertsound": "$path/alarm.wav", - "ceasesound": "$path/cease.wav" }, + "ceasesound": "$path/cease.wav" }, "menus": {"client": {"_name": "Client", "options": "Options", "memos": "Memos", "logviewer": "Pesterlogs", "userlist": "Userlist", - "addgroup": "Add Group", "import": "Import", - "reconnect": "Reconnect", - "idle": "Idle", + "reconnect": "Reconnect", + "idle": "Idle", "exit": "Exit"}, "profile": {"_name": "Profile", "switch": "Switch", @@ -41,9 +40,6 @@ "addchum": "Add Chum", "viewlog": "View Pesterlog", "unblockchum": "Unblock", - "removegroup": "Remove Group", - "renamegroup": "Rename Group", - "movechum": "Move To", "banuser": "Ban User", "opuser": "Make OP", "quirksoff": "Quirks Off" @@ -53,7 +49,7 @@ "loc": [123, 88], "size": [190, 65], "userlistcolor": "white", - "moods": { + "moods": { "chummy": { "icon": "$path/chummy.png", "color": "white" }, @@ -61,7 +57,7 @@ "offline": { "icon": "$path/offline.png", "color": "#bebebe"}, - + "pleasant": { "icon": "$path/pleasant.png", "color": "white" }, "distraught": { "icon": "$path/distraught.png", "color": "white" }, @@ -89,7 +85,7 @@ "devious": { "icon": "$path/devious.png", "color": "red" }, "sleek": { "icon": "$path/sleek.png", "color": "red" }, - + "detestful": { "icon": "$path/detestful.png", "color": "red" }, "mirthful": { "icon": "$path/mirthful.png", "color": "red" }, @@ -108,7 +104,7 @@ } }, - "trollslum": { + "trollslum": { "style": "background: #fdb302; border:2px solid yellow; font-family: 'Arial'", "size": [195, 200], "label": { "text": "TROLLSLUM", @@ -126,7 +122,7 @@ "text": "" }, "currentMood": [129, 176] }, - "defaultwindow": { "style": "background: #fdb302; font-family:'Arial';font:bold;selection-background-color:#919191; " + "defaultwindow": { "style": "background: #fdb302; font-family:'Arial';font:bold;selection-background-color:#919191; " }, "addchum": { "style": "background: rgba(255, 255, 0, 0%); border:0px; color: rgba(0, 0, 0, 0%);", "loc": [25,0], @@ -146,90 +142,90 @@ }, "defaultmood": 0, "moodlabel": { "style": "", - "loc": [20, 430], - "text": "MOODS" - }, + "loc": [20, 430], + "text": "MOODS" + }, "moods": [ - { "style": "border:0px;", - "selected": "background-image:url($path/moodcheck1.png); border:0px;", - "loc": [13, 204], - "size": [101, 27], - "text": "", - "icon": "", - "mood": 0 - }, - { "style": "border:0px;", - "selected": "background-image:url($path/moodcheck2.png); border:0px;", - "loc": [13, 231], - "size": [101, 27], - "text": "", - "icon": "", - "mood": 19 - }, - { "style": "border:0px;", - "selected": "background-image:url($path/moodcheck3.png); border:0px;", - "loc": [13, 258], - "size": [101, 27], - "text": "", - "icon": "", - "mood": 20 - }, - { "style": "border:0px;", - "selected": "background-image:url($path/moodcheck4.png); border:0px;", - "loc": [116, 204], - "size": [101, 27], - "text": "", - "icon": "", - "mood": 21 - }, - { "style": "border:0px;", - "selected": "background-image:url($path/moodcheck5.png); border:0px;", - "loc": [116, 231], - "size": [101, 27], - "text": "", - "icon": "", - "mood": 22 - }, - { "style": "border:0px;", - "selected": "background-image:url($path/moodcheck6.png); border:0px;", - "loc": [116, 258], - "size": [101, 27], - "text": "", - "icon": "", - "mood": 5 - }, - { "style": "border:0px;", - "selected": "background-image:url($path/moodcheck7.png); border:0px;", - "loc": [219, 204], - "size": [101, 27], - "text": "", - "icon": "", - "mood": 6 - }, - { "style": "border:0px;", - "selected": "background-image:url($path/moodcheck8.png); border:0px;", - "loc": [219, 231], - "size": [101, 27], - "text": "", - "icon": "", - "mood": 3 - }, - { "style": "border:0px;", - "selected": "background-image:url($path/moodcheck9.png); border:0px;", - "loc": [219, 258], - "size": [101, 27], - "text": "", - "icon": "", - "mood": 1 - }, - { "style": "border:0px;", - "selected": "border:0px;", - "loc": [13, 175], - "size": [101, 27], - "text": "", - "icon": "", - "mood": 2 - } + { "style": "border:0px;", + "selected": "background-image:url($path/moodcheck1.png); border:0px;", + "loc": [13, 204], + "size": [101, 27], + "text": "", + "icon": "", + "mood": 0 + }, + { "style": "border:0px;", + "selected": "background-image:url($path/moodcheck2.png); border:0px;", + "loc": [13, 231], + "size": [101, 27], + "text": "", + "icon": "", + "mood": 19 + }, + { "style": "border:0px;", + "selected": "background-image:url($path/moodcheck3.png); border:0px;", + "loc": [13, 258], + "size": [101, 27], + "text": "", + "icon": "", + "mood": 20 + }, + { "style": "border:0px;", + "selected": "background-image:url($path/moodcheck4.png); border:0px;", + "loc": [116, 204], + "size": [101, 27], + "text": "", + "icon": "", + "mood": 21 + }, + { "style": "border:0px;", + "selected": "background-image:url($path/moodcheck5.png); border:0px;", + "loc": [116, 231], + "size": [101, 27], + "text": "", + "icon": "", + "mood": 22 + }, + { "style": "border:0px;", + "selected": "background-image:url($path/moodcheck6.png); border:0px;", + "loc": [116, 258], + "size": [101, 27], + "text": "", + "icon": "", + "mood": 5 + }, + { "style": "border:0px;", + "selected": "background-image:url($path/moodcheck7.png); border:0px;", + "loc": [219, 204], + "size": [101, 27], + "text": "", + "icon": "", + "mood": 6 + }, + { "style": "border:0px;", + "selected": "background-image:url($path/moodcheck8.png); border:0px;", + "loc": [219, 231], + "size": [101, 27], + "text": "", + "icon": "", + "mood": 3 + }, + { "style": "border:0px;", + "selected": "background-image:url($path/moodcheck9.png); border:0px;", + "loc": [219, 258], + "size": [101, 27], + "text": "", + "icon": "", + "mood": 1 + }, + { "style": "border:0px;", + "selected": "border:0px;", + "loc": [13, 175], + "size": [101, 27], + "text": "", + "icon": "", + "mood": 2 + } ] }, "convo": @@ -237,7 +233,7 @@ "tabstyle": "background-color: #fdb302; font-family: 'Arial'", "scrollbar": { "style" : "padding-top:17px; padding-bottom:17px;width: 18px; background: rgba(255, 255, 0, 0%); border:0px;", "handle": "background-color:#c48a00;min-height:20px;", - "downarrow": "height:17px;border:0px solid #c48a00;", + "downarrow": "height:17px;border:0px solid #c48a00;", "darrowstyle": "image:url($path/downarrow.png);", "uparrow": "height:17px;border:0px solid #c48a00;", "uarrowstyle": "image:url($path/uparrow.png);" @@ -267,12 +263,12 @@ "ceasepester": "ceased pestering", "blocked": "blocked", "unblocked": "unblocked", - "blockedmsg": "did not receive message from", + "blockedmsg": "did not receive message from", "openmemo": "opened memo on board", "joinmemo": "responded to memo", "closememo": "ceased responding to memo", "kickedmemo": "You have been banned from this memo!", - "idle": "is now an idle chum!" + "idle": "is now an idle chum!" }, "systemMsgColor": "#646464" }, @@ -288,7 +284,7 @@ }, "scrollbar": { "style" : "padding-top:17px; padding-bottom:17px;width: 18px; background: rgba(255, 255, 0, 0%); border:0px;", "handle": "background-color:#c48a00;min-height:20px;", - "downarrow": "height:17px;border:0px solid #c48a00;", + "downarrow": "height:17px;border:0px solid #c48a00;", "darrowstyle": "image:url($path/downarrow.png);", "uparrow": "height:17px;border:0px solid #c48a00;", "uarrowstyle": "image:url($path/uparrow.png);" @@ -305,20 +301,20 @@ "userlist": { "width": 150, "style": "border:2px solid #c48a00; background: white; font-family: 'Arial';selection-background-color:#646464; font-size: 14px; margin-left:0px; margin-right:10px;" }, - "time": { "text": { "width": 75, - "style": " border: 2px solid yellow; background: white; font-size: 12px; margin-top: 5px; margin-right: 5px; margin-left: 5px; font-family:'Arial';font:bold;" + "time": { "text": { "width": 75, + "style": " border: 2px solid yellow; background: white; font-size: 12px; margin-top: 5px; margin-right: 5px; margin-left: 5px; font-family:'Arial';font:bold;" }, "slider": { "style": "border: 0px;", "groove": "", "handle": "" }, - "buttons": { "style": "color: black; font: bold; border: 2px solid #c48a00; font-size: 12px; background: yellow; margin-top: 5px; margin-right: 5px; margin-left: 5px; padding: 2px; width: 50px;" }, - "arrows": { "left": "$path/leftarrow.png", + "buttons": { "style": "color: black; font: bold; border: 2px solid #c48a00; font-size: 12px; background: yellow; margin-top: 5px; margin-right: 5px; margin-left: 5px; padding: 2px; width: 50px;" }, + "arrows": { "left": "$path/leftarrow.png", "right": "$path/rightarrow.png", - "style": " border:0px; margin-top: 5px; margin-right:10px;" + "style": " border:0px; margin-top: 5px; margin-right:10px;" } }, "systemMsgColor": "#646464", "op": { "icon": "$path/smooth.png" } } -} +} \ No newline at end of file diff --git a/themes/pesterchum/style.js b/themes/pesterchum/style.js index e000af4..eb6e9db 100644 --- a/themes/pesterchum/style.js +++ b/themes/pesterchum/style.js @@ -16,16 +16,15 @@ "loc": [10,0] }, "sounds": { "alertsound": "$path/alarm.wav", - "ceasesound": "$path/cease.wav" }, + "ceasesound": "$path/cease.wav" }, "menus": {"client": {"_name": "CLIENT", "options": "OPTIONS", "memos": "MEMOS", "logviewer": "PESTERLOGS", "userlist": "USERLIST", - "addgroup": "ADD GROUP", "import": "IMPORT", "reconnect": "RECONNECT", - "idle": "IDLE", + "idle": "IDLE", "exit": "EXIT"}, "profile": {"_name": "PROFILE", "switch": "SWITCH", @@ -41,9 +40,6 @@ "addchum": "ADD CHUM", "viewlog": "VIEW PESTERLOG", "unblockchum": "UNBLOCK", - "removegroup": "REMOVE GROUP", - "renamegroup": "RENAME GROUP", - "movechum": "MOVE TO", "banuser": "BAN USER", "opuser": "MAKE OP", "quirksoff": "QUIRKS OFF" @@ -53,7 +49,7 @@ "loc": [12, 117], "size": [209, 82], "userlistcolor": "white", - "moods": { + "moods": { "chummy": { "icon": "$path/chummy.png", "color": "white" }, @@ -61,7 +57,7 @@ "offline": { "icon": "$path/offline.png", "color": "#646464"}, - + "pleasant": { "icon": "$path/pleasant.png", "color": "white" }, "distraught": { "icon": "$path/distraught.png", "color": "white" }, @@ -89,7 +85,7 @@ "devious": { "icon": "$path/devious.png", "color": "red" }, "sleek": { "icon": "$path/sleek.png", "color": "red" }, - + "detestful": { "icon": "$path/detestful.png", "color": "red" }, "mirthful": { "icon": "$path/mirthful.png", "color": "red" }, @@ -108,7 +104,7 @@ } }, - "trollslum": { + "trollslum": { "style": "background: #fdb302; border:2px solid yellow; font-family: 'Courier'", "size": [195, 200], "label": { "text": "TROLLSLUM", @@ -126,7 +122,7 @@ "text": "" }, "currentMood": [18, 249] }, - "defaultwindow": { "style": "background: #fdb302; font-family:'Courier';font:bold;selection-background-color:#919191; " + "defaultwindow": { "style": "background: #fdb302; font-family:'Courier';font:bold;selection-background-color:#919191; " }, "addchum": { "style": "background: rgba(255, 255, 0, 0%); border:2px solid #c48a00; font: bold; color: rgba(0, 0, 0, 0%); font-family:'Courier';", "pressed" : "background: rgb(255, 255, 255, 30%);", @@ -140,7 +136,7 @@ "size": [71, 22], "text": "" }, - "block": { "style": "background: rgba(255, 255, 0, 0%); border:2px solid #c48a00; font: bold; color: rgba(255, 255, 0, 0%); font-family:'Courier';", + "block": { "style": "background: rgba(255, 255, 0, 0%); border:2px solid #c48a00; font: bold; color: rgba(255, 255, 0, 0%); font-family:'Courier';", "pressed" : "background: rgb(255, 255, 255, 30%);", "loc": [81,202], "size": [71, 22], @@ -148,73 +144,73 @@ }, "defaultmood": 0, "moodlabel": { "style": "", - "loc": [20, 430], - "text": "MOODS" - }, + "loc": [20, 430], + "text": "MOODS" + }, "moods": [ - { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", - "selected": "text-align:left; background-image:url($path/moodcheck1.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", - "loc": [12, 288], - "size": [104, 22], - "text": "CHUMMY", - "icon": "$path/chummy.png", - "mood": 0 - }, - { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", - "selected": "text-align:left; background-image:url($path/moodcheck2.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", - "loc": [12, 308], - "size": [104, 22], - "text": "PALSY", - "icon": "$path/chummy.png", - "mood": 3 - }, - { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", - "selected": "text-align:left; background-image:url($path/moodcheck3.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", - "loc": [12, 328], - "size": [104, 22], - "text": "CHIPPER", - "icon": "$path/chummy.png", - "mood": 4 - }, - { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", - "selected": "text-align:left; background-image:url($path/moodcheck2.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", - "loc": [117, 288], - "size": [104, 22], - "text": "BULLY", - "icon": "$path/chummy.png", - "mood": 5 - }, - { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", - "selected": "text-align:left; background-image:url($path/moodcheck2.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", - "loc": [117, 308], - "size": [104, 22], - "text": "PEPPY", - "icon": "$path/chummy.png", - "mood": 6 - }, - { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", - "selected": "text-align:left; background-image:url($path/moodcheck4.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", - "loc": [117, 328], - "size": [104, 22], - "text": "RANCOROUS", - "icon": "$path/rancorous.png", - "mood": 1 - }, - { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", - "selected": "text-align:left; background-image:url($path/moodcheck5.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", - "loc": [12, 348], - "size": [209, 22], - "text": "ABSCOND", - "icon": "", - "mood": 2 - } + { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", + "selected": "text-align:left; background-image:url($path/moodcheck1.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", + "loc": [12, 288], + "size": [104, 22], + "text": "CHUMMY", + "icon": "$path/chummy.png", + "mood": 0 + }, + { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", + "selected": "text-align:left; background-image:url($path/moodcheck2.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", + "loc": [12, 308], + "size": [104, 22], + "text": "PALSY", + "icon": "$path/chummy.png", + "mood": 3 + }, + { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", + "selected": "text-align:left; background-image:url($path/moodcheck3.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", + "loc": [12, 328], + "size": [104, 22], + "text": "CHIPPER", + "icon": "$path/chummy.png", + "mood": 4 + }, + { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", + "selected": "text-align:left; background-image:url($path/moodcheck2.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", + "loc": [117, 288], + "size": [104, 22], + "text": "BULLY", + "icon": "$path/chummy.png", + "mood": 5 + }, + { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", + "selected": "text-align:left; background-image:url($path/moodcheck2.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", + "loc": [117, 308], + "size": [104, 22], + "text": "PEPPY", + "icon": "$path/chummy.png", + "mood": 6 + }, + { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", + "selected": "text-align:left; background-image:url($path/moodcheck4.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", + "loc": [117, 328], + "size": [104, 22], + "text": "RANCOROUS", + "icon": "$path/rancorous.png", + "mood": 1 + }, + { "style": "text-align:left; border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", + "selected": "text-align:left; background-image:url($path/moodcheck5.png); border:2px solid #c48a00; padding: 5px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", + "loc": [12, 348], + "size": [209, 22], + "text": "ABSCOND", + "icon": "", + "mood": 2 + } ] }, "convo": {"style": "background-color: #fdb302;background-image:url($path/convobg.png);background-repeat: no-repeat; border:2px solid yellow; font-family: 'Courier'", "scrollbar": { "style" : "padding-top:17px; padding-bottom:17px;width: 18px; background: white; border:2px solid #c48a00;", "handle": "background-color:#c48a00;min-height:20px;", - "downarrow": "height:17px;border:0px solid #c48a00;", + "downarrow": "height:17px;border:0px solid #c48a00;", "darrowstyle": "image:url($path/downarrow.png);", "uparrow": "height:17px;border:0px solid #c48a00;", "uarrowstyle": "image:url($path/uparrow.png);" @@ -234,7 +230,7 @@ "style": "background: white; border:2px solid #c48a00;margin-top:5px; margin-right:10px; margin-left:10px; font-size: 12px;font-family: 'Courier'" }, "tabwindow" : { - "style": "background-color:#fdb302;border:0px" + "style": "background-color:#fdb302;border:0px" }, "tabs": { "style": "background-color: #7f7f7f; font-family: 'Courier';font:bold;font-size:12px;min-height:25px;", @@ -247,12 +243,12 @@ "ceasepester": "ceased pestering", "blocked": "blocked", "unblocked": "unblocked", - "blockedmsg": "did not receive message from", + "blockedmsg": "did not receive message from", "openmemo": "opened memo on board", "joinmemo": "responded to memo", "closememo": "ceased responding to memo", "kickedmemo": "You have been banned from this memo!", - "idle": "is now an idle chum!" + "idle": "is now an idle chum!" }, "systemMsgColor": "#646464" }, @@ -268,7 +264,7 @@ }, "scrollbar": { "style" : "padding-top:17px; padding-bottom:17px;width: 18px; background: rgba(255, 255, 0, 0%); border:0px;", "handle": "background-color:#c48a00;min-height:20px;", - "downarrow": "height:17px;border:0px solid #c48a00;", + "downarrow": "height:17px;border:0px solid #c48a00;", "darrowstyle": "image:url($path/downarrow.png);", "uparrow": "height:17px;border:0px solid #c48a00;", "uarrowstyle": "image:url($path/uparrow.png);" @@ -285,20 +281,20 @@ "userlist": { "width": 150, "style": "border:2px solid #c48a00; background: white;font: bold;font-family: 'Courier';selection-background-color:#646464; font-size: 12px; margin-left:0px; margin-right:10px;" }, - "time": { "text": { "width": 75, - "style": " border: 2px solid yellow; background: white; font-size: 12px; margin-top: 5px; margin-right: 5px; margin-left: 5px; font-family:'Courier';font:bold;" + "time": { "text": { "width": 75, + "style": " border: 2px solid yellow; background: white; font-size: 12px; margin-top: 5px; margin-right: 5px; margin-left: 5px; font-family:'Courier';font:bold;" }, "slider": { "style": "border: 0px;", "groove": "", "handle": "" }, - "buttons": { "style": "color: black; font: bold; border: 2px solid #c48a00; font: bold; font-size: 12px; background: yellow; margin-top: 5px; margin-right: 5px; margin-left: 5px; padding: 2px; width: 50px;" }, - "arrows": { "left": "$path/leftarrow.png", + "buttons": { "style": "color: black; font: bold; border: 2px solid #c48a00; font: bold; font-size: 12px; background: yellow; margin-top: 5px; margin-right: 5px; margin-left: 5px; padding: 2px; width: 50px;" }, + "arrows": { "left": "$path/leftarrow.png", "right": "$path/rightarrow.png", - "style": " border:0px; margin-top: 5px; margin-right:10px;" + "style": " border:0px; margin-top: 5px; margin-right:10px;" } }, "systemMsgColor": "#646464", "op": { "icon": "$path/op.png" } } -} +} \ No newline at end of file diff --git a/themes/trollian/style.js b/themes/trollian/style.js index 86f4902..0ec8137 100644 --- a/themes/trollian/style.js +++ b/themes/trollian/style.js @@ -21,10 +21,8 @@ "memos": "Memos", "logviewer": "Pesterlogs", "userlist": "Fresh Targets", - "addgroup": "Add Group", "import": "import U2;", - "reconnect": "Reconnect", - "idle": "Idle", + "idle": "Idle", "exit": "Abscond"}, "profile": {"_name": "View", "switch": "Trolltag", @@ -40,9 +38,6 @@ "addchum": "Add Chump", "viewlog": "View Pesterlog", "unblockchum": "Mercy", - "removegroup": "Remove Group", - "renamegroup": "Rename Group", - "movechum": "Move To", "banuser": "Ban", "opuser": "Promote", "quirksoff": "Quirks Off" } @@ -59,50 +54,50 @@ "size": [171, 357], "userlistcolor": "black", "moods": { - + "chummy": { "icon": "$path/chummy.png", "color": "#63ea00" }, - + "rancorous": { "icon": "$path/rancorous.png", "color": "#7f7f7f" }, - + "offline": { "icon": "$path/offline.png", "color": "black"}, - - + + "pleasant": { "icon": "$path/pleasant.png", "color": "#d69df8" }, - + "distraught": { "icon": "$path/distraught.png", "color": "#706eba" }, - + "pranky": { "icon": "$path/pranky.png", "color": "blue" }, - - + + "smooth": { "icon": "$path/smooth.png", "color": "red" }, - - + + "ecstatic": { "icon": "$path/ecstatic.png", "color": "#99004d" }, - + "relaxed": { "icon": "$path/relaxed.png", "color": "#078446" }, - + "discontent": { "icon": "$path/discontent.png", "color": "#a75403" }, - + "devious": { "icon": "$path/devious.png", "color": "#008282" }, - + "sleek": { "icon": "$path/sleek.png", "color": "#a1a100" }, - + "detestful": { "icon": "$path/detestful.png", "color": "#6a006a" }, - + "mirthful": { "icon": "$path/mirthful.png", "color": "#450077" }, - + "manipulative": { "icon": "$path/manipulative.png", "color": "#004182" }, - + "vigorous": { "icon": "$path/vigorous.png", "color": "#0021cb" }, - + "perky": { "icon": "$path/perky.png", "color": "#406600" }, - + "acceptant": { "icon": "$path/acceptant.png", "color": "#a10000" }, - + "protective": { "icon": "$path/protective.png", "color": "white" }, - + "blocked": { "icon": "$path/blocked.png", "color": "black" } - + } }, "trollslum": { @@ -241,7 +236,7 @@ "icon": "", "mood": 7 }, - + { "style": "border:0px;color: rgba(0, 0, 0, 0%);", "selected": "border:0px; color: rgba(0, 0, 0, 0%);", "loc": [12, 117], @@ -271,7 +266,7 @@ "style": "background: white;margin-top:5px; border:1px solid #c2c2c2; margin-right: 54px; font-size: 12px; height: 19px;" }, "tabwindow" : { - "style": "background: rgb(190, 19, 4); font-family: 'Arial'" + "style": "background: rgb(190, 19, 4); font-family: 'Arial'" }, "tabs": { "style": "", @@ -317,15 +312,15 @@ "userlist": { "width": 125, "style": "font-size: 12px; background: white; margin-left: 5px; margin-bottom: 5px; border:2px solid #c2c2c2; padding: 5px; font-family: 'Arial';selection-background-color:rgb(200,200,200);" }, - "time": { "text": { "width": 75, - "style": "color: black; font:bold; border:1px solid #c2c2c2; background: white; height: 19px;" + "time": { "text": { "width": 75, + "style": "color: black; font:bold; border:1px solid #c2c2c2; background: white; height: 19px;" }, "slider": { "style": " border:1px solid #c2c2c2;", "groove": "border-image:url($path/timeslider.png);", "handle": "image:url($path/acceptant.png);" }, - "buttons": { "style": "border:1px solid #a68168; height: 17px; width: 50px; color: #cd8f9d; font-family: 'Arial'; background: rgb(190, 19, 4); margin-left: 2px;" }, - "arrows": { "left": "$path/leftarrow.png", + "buttons": { "style": "border:1px solid #a68168; height: 17px; width: 50px; color: #cd8f9d; font-family: 'Arial'; background: rgb(190, 19, 4); margin-left: 2px;" }, + "arrows": { "left": "$path/leftarrow.png", "right": "$path/rightarrow.png", "style": "width: 19px; height: 19px; border:0px; margin-left: 2px;" } @@ -333,4 +328,4 @@ "systemMsgColor": "#646464", "op": { "icon": "$path/op.png" } } -} +} \ No newline at end of file diff --git a/themes/typewriter/style.js b/themes/typewriter/style.js index 996c106..d141d74 100644 --- a/themes/typewriter/style.js +++ b/themes/typewriter/style.js @@ -16,16 +16,15 @@ "loc": [43,220] }, "sounds": { "alertsound": "$path/alarm.wav", - "ceasesound": "$path/cease.wav" }, + "ceasesound": "$path/cease.wav" }, "menus": {"client": {"_name": "Typewriter", "options": "Preferences", "memos": "Bulletin Boards", "logviewer": "Pesterlogs", "userlist": "Userlist", - "addgroup": "Add Group", "import": "Import", - "idle": "Idle", - "reconnect": "Reconnect", + "idle": "Idle", + "reconnect": "Reconnect", "exit": "Cease"}, "profile": {"_name": "Ink", "switch": "Alias", @@ -41,9 +40,6 @@ "addchum": "Add User", "viewlog": "View Pesterlog", "unblockchum": "Forgive", - "removegroup": "Remove Group", - "renamegroup": "Rename Group", - "movechum": "Move To", "banuser": "Expel User", "opuser": "Promote", "quirksoff": "Quirks Off" @@ -53,7 +49,7 @@ "loc": [70, 20], "size": [175,100], "userlistcolor": "black", - "moods": { + "moods": { "chummy": { "icon": "$path/chummy.png", "color": "black" }, @@ -61,7 +57,7 @@ "offline": { "icon": "$path/offline.png", "color": "#646464"}, - + "pleasant": { "icon": "$path/pleasant.png", "color": "black" }, "distraught": { "icon": "$path/distraught.png", "color": "black" }, @@ -89,7 +85,7 @@ "devious": { "icon": "$path/devious.png", "color": "red" }, "sleek": { "icon": "$path/sleek.png", "color": "red" }, - + "detestful": { "icon": "$path/detestful.png", "color": "red" }, "mirthful": { "icon": "$path/mirthful.png", "color": "red" }, @@ -108,7 +104,7 @@ } }, - "trollslum": { + "trollslum": { "style": "background: #bebebe; border:2px solid black; font-family: 'Courier'", "size": [195, 200], "label": { "text": "Ruffians", @@ -126,7 +122,7 @@ "text": "" }, "currentMood": [0, 0] }, - "defaultwindow": { "style": "background: #bebebe; font-family:'Courier';font:bold;selection-background-color: black; " + "defaultwindow": { "style": "background: #bebebe; font-family:'Courier';font:bold;selection-background-color: black; " }, "addchum": { "style": "background: rgba(255, 255, 0, 0%); border:0px solid #c48a00; font: bold; color: rgba(0, 0, 0, 0%); font-family:'Courier';", "pressed" : "background: rgb(255, 255, 255, 30%);", @@ -140,7 +136,7 @@ "size": [70, 15], "text": "" }, - "block": { "style": "background: rgba(255, 255, 0, 0%); border:2px solid #c48a00; font: bold; color: rgba(255, 255, 0, 0%); font-family:'Courier';", + "block": { "style": "background: rgba(255, 255, 0, 0%); border:2px solid #c48a00; font: bold; color: rgba(255, 255, 0, 0%); font-family:'Courier';", "pressed" : "background: rgb(255, 255, 255, 30%);", "loc": [0,0], "size": [0, 0], @@ -148,26 +144,26 @@ }, "defaultmood": 18, "moodlabel": { "style": "", - "loc": [20, 430], - "text": "MOODS" - }, + "loc": [20, 430], + "text": "MOODS" + }, "moods": [ - { "style": "text-align:left; border:0px solid #c48a00; padding: 0px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", - "selected": "text-align:left; background-image:url($path/moodcheck1.png); border:0px solid #c48a00; padding: 0px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", - "loc": [95, 323], - "size": [62, 9], - "text": "", - "icon": "", - "mood": 18 - }, - { "style": "text-align:left; border:0px solid #c48a00; padding: 0px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", - "selected": "text-align:left; background-image:url($path/moodcheck2.png); border:0px solid #c48a00; padding: 0px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", - "loc": [165, 323], - "size": [70, 9], - "text": "", - "icon": "", - "mood": 2 - } + { "style": "text-align:left; border:0px solid #c48a00; padding: 0px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", + "selected": "text-align:left; background-image:url($path/moodcheck1.png); border:0px solid #c48a00; padding: 0px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", + "loc": [95, 323], + "size": [62, 9], + "text": "", + "icon": "", + "mood": 18 + }, + { "style": "text-align:left; border:0px solid #c48a00; padding: 0px;color: rgba(0, 0, 0, 0%); font-family:'Courier'", + "selected": "text-align:left; background-image:url($path/moodcheck2.png); border:0px solid #c48a00; padding: 0px;color: rgba(0, 0, 0, 0%); font-family:'Courier';", + "loc": [165, 323], + "size": [70, 9], + "text": "", + "icon": "", + "mood": 2 + } ] }, "convo": @@ -198,12 +194,12 @@ "ceasepester": "ceased pestering", "blocked": "blocked", "unblocked": "unblocked", - "blockedmsg": "did not receive message from", + "blockedmsg": "did not receive message from", "openmemo": "opened memo on board", "joinmemo": "responded to memo", "closememo": "ceased responding to memo", "kickedmemo": "You have been banned from this memo!", - "idle": "is now an idle chum!" + "idle": "is now an idle chum!" }, "systemMsgColor": "#646464" }, @@ -219,7 +215,7 @@ }, "scrollbar": { "style" : "padding-top:17px; padding-bottom:17px;width: 18px; background: rgba(255, 255, 0, 0%); border:0px;", "handle": "background-color:black;min-height:20px;", - "downarrow": "height:17px;border:0px;", + "downarrow": "height:17px;border:0px;", "darrowstyle": "image:url($path/downarrow.png);", "uparrow": "height:17px;border:0px;", "uarrowstyle": "image:url($path/uparrow.png);" @@ -236,20 +232,20 @@ "userlist": { "width": 150, "style": "border:2px solid black; background: white;font: bold;font-family: 'Courier';selection-background-color:black; font-size: 12px; margin-left:0px; margin-right:10px;" }, - "time": { "text": { "width": 75, - "style": " border: 2px solid black; background: white; font-size: 12px; margin-top: 5px; margin-right: 5px; margin-left: 5px; font-family:'Courier';font:bold;" + "time": { "text": { "width": 75, + "style": " border: 2px solid black; background: white; font-size: 12px; margin-top: 5px; margin-right: 5px; margin-left: 5px; font-family:'Courier';font:bold;" }, "slider": { "style": "border: 0px;", "groove": "", "handle": "" }, - "buttons": { "style": "color: black; font: bold; border: 2px solid black; font: bold; font-size: 12px; background: white; margin-top: 5px; margin-right: 5px; margin-left: 5px; padding: 2px; width: 50px;" }, - "arrows": { "left": "$path/leftarrow.png", + "buttons": { "style": "color: black; font: bold; border: 2px solid black; font: bold; font-size: 12px; background: white; margin-top: 5px; margin-right: 5px; margin-left: 5px; padding: 2px; width: 50px;" }, + "arrows": { "left": "$path/leftarrow.png", "right": "$path/rightarrow.png", - "style": " border:0px; margin-top: 5px; margin-right:10px;" + "style": " border:0px; margin-top: 5px; margin-right:10px;" } }, "systemMsgColor": "#646464", "op": { "icon": "$path/protective.png" } } -} +} \ No newline at end of file From ea14290ea4822afe0ad13ce0e7664185827ba0ec Mon Sep 17 00:00:00 2001 From: illuminatedwax Date: Fri, 8 Apr 2011 04:08:31 -0500 Subject: [PATCH 06/15] derp --- pesterchum.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pesterchum.js b/pesterchum.js index 6ef578a..1f3a778 100644 --- a/pesterchum.js +++ b/pesterchum.js @@ -1 +1 @@ -{"hideOfflineChums": false, "time12Format": true, "tabs": true, "showSeconds": false, "server": "irc.mindfang.org", "soundon": true, "showTimeStamps": false, "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "laughingShisa", "bluntInstrument", "sunilaSeed", "bluntInstrument", "nickServ", "ghostBinoculars", "alGore"], "defaultprofile": "ghostDunk", "block": []} \ No newline at end of file +{"hideOfflineChums": true, "time12Format": true, "tabs": true, "showSeconds": false, "server": "irc.mindfang.org", "soundon": true, "showTimeStamps": false, "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "laughingShisa", "bluntInstrument", "sunilaSeed", "bluntInstrument", "nickServ", "ghostBinoculars", "alGore", "evacipatedBox"], "defaultprofile": "ghostDunk", "block": []} \ No newline at end of file From a02790f9b13384ac37c9ac19979828834854e2bc Mon Sep 17 00:00:00 2001 From: illuminatedwax Date: Sun, 10 Apr 2011 04:22:06 -0500 Subject: [PATCH 07/15] bug fixes --- CHANGELOG.mkdn | 8 +++++++- TODO | 5 +---- convo.py | 22 +++++++++++++--------- dataobjs.py | 10 ++++++---- irc.py | 4 ++-- parsetools.py | 37 +++++++++++++++++++++++++++++++++++++ pesterchum.js | 2 +- 7 files changed, 67 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.mkdn b/CHANGELOG.mkdn index 058a066..f3f52da 100644 --- a/CHANGELOG.mkdn +++ b/CHANGELOG.mkdn @@ -12,11 +12,17 @@ CHANGELOG * Art - Grimlive [aquaMarinist] * Quirks lower() function - Kiooeht [evacipatedBox] * Quirks scrabble() function - Kiooeht [evacipatedBox] +* Quirks reverse() function - illuminatedwax [ghostDunk] * Timestamps - Kiooeht [evacipatedBox] * Logviewer - Kiooeht [evacipatedBox] * Quirk ordering - alGore -* # of users in a memo +* # of users in a memo - alGore BUG FIXES: +* mixer bug fixed +* "flags" bug fixed * incorrect characters in memos no longer break log file names * memos now do not break on case-sensitivity +* fixed QDB address +* now lines too long to send in a single message are split up correctly +* quirk replace bug fixed \ No newline at end of file diff --git a/TODO b/TODO index 7945cd4..a865abd 100644 --- a/TODO +++ b/TODO @@ -1,8 +1,5 @@ Bugs: -* multiline msgs breaks shit -* REGEXP: \b(\S)(\S*)(\S)\b REPLACE WITH: upper(\1)\2upper(\3) <-- - this regexp, when used as a quirk and then typed in breaks -* channels aren't case sensitive! get the real name of a channel +* weird memo time bug * Windows doesn't show style sheet sometimes?? Maybe related to themes. * Issues with connecting? Client not closing connection right? People keep getting "nick taken" messages * Windows XP SP2: sometimes mouse clicks dont register? must be some kinda crash diff --git a/convo.py b/convo.py index 2a6ddac..4c2b02b 100644 --- a/convo.py +++ b/convo.py @@ -9,7 +9,7 @@ from PyQt4 import QtGui, QtCore from dataobjs import PesterProfile, Mood, PesterHistory from generic import PesterIcon, RightClickList -from parsetools import convertTags, lexMessage, mecmd, colorBegin, colorEnd, img2smiley +from parsetools import convertTags, lexMessage, splitMessage, mecmd, colorBegin, colorEnd, img2smiley class PesterTabWindow(QtGui.QFrame): def __init__(self, mainwindow, parent=None, convo="convo"): @@ -350,7 +350,7 @@ class PesterText(QtGui.QTextEdit): "Accept": "text/plain"} try: pass - hconn = httplib.HTTPConnection('luke.violentlemon.com', 80, + hconn = httplib.HTTPConnection('qdb.pesterchum.net', 80, timeout=15) hconn.request("POST", "/index.php", params, headers) response = hconn.getresponse() @@ -599,13 +599,17 @@ class PesterConvo(QtGui.QFrame): lexmsg = lexMessage(text) if type(lexmsg[0]) is not mecmd and self.applyquirks: lexmsg = quirks.apply(lexmsg) - serverMsg = copy(lexmsg) - self.addMessage(lexmsg, True) - # if ceased, rebegin - if hasattr(self, 'chumopen') and not self.chumopen: - self.mainwindow.newConvoStarted.emit(QtCore.QString(self.title()), True) - text = convertTags(serverMsg, "ctag") - self.messageSent.emit(text, self.title()) + lexmsgs = splitMessage(lexmsg) + + for lm in lexmsgs: + serverMsg = copy(lm) + self.addMessage(lm, True) + # if ceased, rebegin + if hasattr(self, 'chumopen') and not self.chumopen: + self.mainwindow.newConvoStarted.emit(QtCore.QString(self.title()), True) + self.setChumOpen(True) + text = convertTags(serverMsg, "ctag") + self.messageSent.emit(text, self.title()) self.textInput.setText("") @QtCore.pyqtSlot() diff --git a/dataobjs.py b/dataobjs.py index 94d8797..38d071f 100644 --- a/dataobjs.py +++ b/dataobjs.py @@ -7,10 +7,11 @@ from generic import PesterIcon from parsetools import timeDifference, convertTags, lexMessage from mispeller import mispeller -_upperre = re.compile(r"upper\(([\w\\]+)\)") -_lowerre = re.compile(r"lower\(([\w\\]+)\)") -_scramblere = re.compile(r"scramble\(([\w\\]+)\)") -_reversere = re.compile(r"reverse\(([\w\\]+)\)") +_groupre = re.compile(r"\\([0-9]+)") +_upperre = re.compile(r"upper\(([\w<>\\]+)\)") +_lowerre = re.compile(r"lower\(([\w<>\\]+)\)") +_scramblere = re.compile(r"scramble\(([\w<>\\]+)\)") +_reversere = re.compile(r"reverse\(([\w<>\\]+)\)") class Mood(object): moods = ["chummy", "rancorous", "offline", "pleasant", "distraught", @@ -63,6 +64,7 @@ class pesterQuirk(object): return string def regexprep(mo): to = self.quirk["to"] + to = _groupre.sub(r"\\g<\1>", to) def upperrep(m): return mo.expand(m.group(1)).upper() def lowerrep(m): diff --git a/irc.py b/irc.py index a30294d..c0a9e08 100644 --- a/irc.py +++ b/irc.py @@ -97,8 +97,8 @@ class PesterIRC(QtCore.QThread): space = l[0].rfind(" ", 0,400) if space == -1: space = 400 - a = l[0][0:space] - b = l[0][space:] + a = l[0][0:space+1] + b = l[0][space+1:] if len(b) > 0: return [a] + splittext([b]) else: diff --git a/parsetools.py b/parsetools.py index c70beb7..a495c93 100644 --- a/parsetools.py +++ b/parsetools.py @@ -131,6 +131,8 @@ def lexMessage(string): (hyperlink, _urlre), (memolex, _memore), (smiley, _smilere)] + string = unicode(string) + string = string.replace("\n", " ").replace("\r", " ") lexed = lexer(unicode(string), lexlist) balanced = [] @@ -176,6 +178,41 @@ def convertTags(lexed, format="html"): return escaped +def splitMessage(msg, format="ctag"): + """Splits message if it is too long.""" + okmsg = [] + cbegintags = [] + output = [] + for o in msg: + okmsg.append(o) + if type(o) is colorBegin: + cbegintags.append(o) + elif type(o) is colorEnd: + cbegintags.pop() + # yeah normally i'd do binary search but im lazy + msglen = len(convertTags(okmsg, format)) + 4*(len(cbegintags)) + if msglen > 400: + okmsg.pop() + if len(okmsg) == 0: + output.append([o]) + else: + tmp = [] + for color in cbegintags: + okmsg.append(colorEnd("")) + tmp.append(color) + output.append(okmsg) + if type(o) is colorBegin: + cbegintags.append(o) + elif type(o) is colorEnd: + cbegintags.pop() + tmp.append(o) + okmsg = tmp + + if len(okmsg) > 0: + output.append(okmsg) + return output + + def addTimeInitial(string, grammar): endofi = string.find(":") diff --git a/pesterchum.js b/pesterchum.js index 1f3a778..984b9eb 100644 --- a/pesterchum.js +++ b/pesterchum.js @@ -1 +1 @@ -{"hideOfflineChums": true, "time12Format": true, "tabs": true, "showSeconds": false, "server": "irc.mindfang.org", "soundon": true, "showTimeStamps": false, "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "laughingShisa", "bluntInstrument", "sunilaSeed", "bluntInstrument", "nickServ", "ghostBinoculars", "alGore", "evacipatedBox"], "defaultprofile": "ghostDunk", "block": []} \ No newline at end of file +{"hideOfflineChums": false, "time12Format": true, "tabs": true, "soundon": true, "server": "irc.mindfang.org", "showSeconds": false, "showTimeStamps": false, "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "laughingShisa", "bluntInstrument", "sunilaSeed", "bluntInstrument", "nickServ", "ghostBinoculars", "alGore", "evacipatedBox", "acrylicEmulator", "prettyGemmaiden"], "defaultprofile": "testProfile", "block": []} \ No newline at end of file From c4c404504d343390f6fb64ec0eb492cb6a3d52dc Mon Sep 17 00:00:00 2001 From: illuminatedwax Date: Mon, 11 Apr 2011 13:19:30 -0500 Subject: [PATCH 08/15] fd --- pesterchum.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pesterchum.js b/pesterchum.js index 984b9eb..ab4e851 100644 --- a/pesterchum.js +++ b/pesterchum.js @@ -1 +1 @@ -{"hideOfflineChums": false, "time12Format": true, "tabs": true, "soundon": true, "server": "irc.mindfang.org", "showSeconds": false, "showTimeStamps": false, "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "laughingShisa", "bluntInstrument", "sunilaSeed", "bluntInstrument", "nickServ", "ghostBinoculars", "alGore", "evacipatedBox", "acrylicEmulator", "prettyGemmaiden"], "defaultprofile": "testProfile", "block": []} \ No newline at end of file +{"hideOfflineChums": true, "time12Format": true, "tabs": true, "soundon": true, "server": "irc.mindfang.org", "showSeconds": false, "showTimeStamps": false, "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "laughingShisa", "bluntInstrument", "sunilaSeed", "bluntInstrument", "nickServ", "ghostBinoculars", "alGore", "evacipatedBox", "acrylicEmulator", "prettyGemmaiden", "calSprite"], "defaultprofile": "testProfile", "block": []} \ No newline at end of file From 7159f32010058b12669637414a0b3cebff163602 Mon Sep 17 00:00:00 2001 From: Stephen Dranger Date: Mon, 11 Apr 2011 14:47:08 -0500 Subject: [PATCH 09/15] dfsf --- pesterchum.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pesterchum.js b/pesterchum.js index d8f7ad6..b8dbeda 100644 --- a/pesterchum.js +++ b/pesterchum.js @@ -1 +1 @@ -{"hideOfflineChums": true, "tabs": true, "soundon": true, "server": "irc.mindfang.org", "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "bluntInstrument", "sunilaSeed", "ghostBinoculars", "cosmicSailor", "alGore", "nickServ", "nakNak"], "defaultprofile": "ghostDunk", "block": []} \ No newline at end of file +{"emptyGroups": false, "hideOfflineChums": true, "tabs": true, "soundon": true, "server": "irc.mindfang.org", "openDefaultGroup": true, "groups": [], "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "bluntInstrument", "sunilaSeed", "ghostBinoculars", "cosmicSailor", "alGore", "nickServ", "nakNak"], "defaultprofile": "ghostDunk", "block": []} \ No newline at end of file From 15e330500187ba2499c0570d21e5b16e98de0f82 Mon Sep 17 00:00:00 2001 From: Stephen Dranger Date: Tue, 12 Apr 2011 18:54:01 -0500 Subject: [PATCH 10/15] halfwya; --- CHANGELOG.mkdn | 1 + convo.py | 10 ++++++++++ parsetools.py | 18 +++++++++++++++++- pesterchum.js | 2 +- 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.mkdn b/CHANGELOG.mkdn index f3f52da..239aeab 100644 --- a/CHANGELOG.mkdn +++ b/CHANGELOG.mkdn @@ -17,6 +17,7 @@ CHANGELOG * Logviewer - Kiooeht [evacipatedBox] * Quirk ordering - alGore * # of users in a memo - alGore +* @links to users - illuminatedwax [ghostDunk] BUG FIXES: * mixer bug fixed diff --git a/convo.py b/convo.py index 4c2b02b..6f5ad20 100644 --- a/convo.py +++ b/convo.py @@ -304,6 +304,16 @@ class PesterText(QtGui.QTextEdit): if url != "": if url[0] == "#" and url != "#pesterchum": self.parent().mainwindow.showMemos(url[1:]) + elif url[0] == "@": + handle = unicode(url[1:]) + mw = self.parent().mainwindow + matchingChums = [c for c in mw.chumList.chums if c.handle == handle] + if len(matchingChums) > 0: + mood = matchingChums[0].mood + else: + mood = Mood(0) + chum = PesterProfile(handle, mood=mood, chumdb=mw.chumdb) + mw.newConversation(chum) else: QtGui.QDesktopServices.openUrl(QtCore.QUrl(url, QtCore.QUrl.TolerantMode)) QtGui.QTextEdit.mousePressEvent(self, event) diff --git a/parsetools.py b/parsetools.py index a495c93..500a143 100644 --- a/parsetools.py +++ b/parsetools.py @@ -11,6 +11,7 @@ _ctag_end = re.compile(r'(?i)') _ctag_rgb = re.compile(r'\d+,\d+,\d+') _urlre = re.compile(r"(?i)https?://[^\s]+") _memore = re.compile(r"(\s|^)(#[A-Za-z0-9_]+)") +_handlere = re.compile(r"(\s|^)(@[A-Za-z0-9_]+)") _imgre = re.compile(r"""(?i)""") _mecmdre = re.compile(r"^(/me|PESTERCHUM:ME)(\S*)") @@ -109,6 +110,16 @@ class memolex(object): return "%s%s" % (self.space, self.channel, self.channel) else: return self.string +class chumhandlelex(object): + def __init__(self, string, space, handle): + self.string = string + self.space = space + self.handle = handle + def convert(self, format): + if format == "html": + return "%s%s" % (self.space, self.handle, self.handle) + else: + return self.string class smiley(object): def __init__(self, string): self.string = string @@ -129,6 +140,7 @@ def lexMessage(string): (colorBegin, _ctag_begin), (colorBegin, _gtag_begin), (colorEnd, _ctag_end), (imagelink, _imgre), (hyperlink, _urlre), (memolex, _memore), + (chumhandlelex, _handlere), (smiley, _smilere)] string = unicode(string) @@ -188,7 +200,11 @@ def splitMessage(msg, format="ctag"): if type(o) is colorBegin: cbegintags.append(o) elif type(o) is colorEnd: - cbegintags.pop() + print len(cbegintags) + try: + cbegintags.pop() + except IndexError: + print len(cbegintags) # yeah normally i'd do binary search but im lazy msglen = len(convertTags(okmsg, format)) + 4*(len(cbegintags)) if msglen > 400: diff --git a/pesterchum.js b/pesterchum.js index e255fa9..4fd381c 100644 --- a/pesterchum.js +++ b/pesterchum.js @@ -1 +1 @@ -{"emptyGroups": false, "hideOfflineChums": true, "time12Format": true, "tabs": true, "soundon": true, "server": "irc.mindfang.org", "openDefaultGroup": true, "groups": [], "showSeconds": false, "showTimeStamps": false, "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "bluntInstrument", "sunilaSeed", "ghostBinoculars", "cosmicSailor", "alGore", "evacipatedBox", "nickServ", "nakNak", "calSprite", "fairytalePorn", "moonbaseAlpha", "binaryRabbitlover"], "defaultprofile": "ghostDunk", "block": []} \ No newline at end of file +{"emptyGroups": false, "hideOfflineChums": true, "time12Format": true, "tabs": true, "soundon": true, "server": "irc.mindfang.org", "openDefaultGroup": true, "groups": [], "showSeconds": false, "showTimeStamps": false, "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "bluntInstrument", "sunilaSeed", "ghostBinoculars", "cosmicSailor", "alGore", "evacipatedBox", "nickServ", "nakNak", "calSprite", "fairytalePorn", "moonbaseAlpha", "binaryRabbitlover"], "defaultprofile": "testProfile", "block": []} \ No newline at end of file From 180e38179afe3544251b24dac720b293bebeb249 Mon Sep 17 00:00:00 2001 From: illuminatedwax Date: Tue, 12 Apr 2011 20:43:59 -0500 Subject: [PATCH 11/15] fd --- pesterchum.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pesterchum.js b/pesterchum.js index ab4e851..c73235e 100644 --- a/pesterchum.js +++ b/pesterchum.js @@ -1 +1 @@ -{"hideOfflineChums": true, "time12Format": true, "tabs": true, "soundon": true, "server": "irc.mindfang.org", "showSeconds": false, "showTimeStamps": false, "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "laughingShisa", "bluntInstrument", "sunilaSeed", "bluntInstrument", "nickServ", "ghostBinoculars", "alGore", "evacipatedBox", "acrylicEmulator", "prettyGemmaiden", "calSprite"], "defaultprofile": "testProfile", "block": []} \ No newline at end of file +{"hideOfflineChums": false, "time12Format": true, "tabs": true, "showSeconds": false, "server": "irc.mindfang.org", "soundon": true, "showTimeStamps": false, "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "laughingShisa", "bluntInstrument", "sunilaSeed", "bluntInstrument", "nickServ", "ghostBinoculars", "alGore", "evacipatedBox", "acrylicEmulator", "prettyGemmaiden", "calSprite", "fairytalePorn", "brooklynRage"], "defaultprofile": "testProfile", "block": []} \ No newline at end of file From 4b504a0e9870130ac89c327386ffe57ba6535c63 Mon Sep 17 00:00:00 2001 From: illuminatedwax Date: Wed, 13 Apr 2011 01:12:19 -0500 Subject: [PATCH 12/15] derp --- CHANGELOG.mkdn | 1 + convo.py | 18 +++++------ generic.py | 4 ++- menus.py | 17 ++++++++-- parsetools.py | 15 ++++++--- pesterchum.js | 2 +- pesterchum.py | 65 +++++++++++++++++++++++++++++++++++++- themes/enamel/style.js | 1 + themes/gold/style.js | 1 + themes/pesterchum/style.js | 1 + themes/trollian/style.js | 1 + themes/typewriter/style.js | 1 + 12 files changed, 107 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.mkdn b/CHANGELOG.mkdn index 239aeab..527eaed 100644 --- a/CHANGELOG.mkdn +++ b/CHANGELOG.mkdn @@ -18,6 +18,7 @@ CHANGELOG * Quirk ordering - alGore * # of users in a memo - alGore * @links to users - illuminatedwax [ghostDunk] +* Support for REPORT and ALT to calSprite built in BUG FIXES: * mixer bug fixed diff --git a/convo.py b/convo.py index 6f5ad20..fab1ed6 100644 --- a/convo.py +++ b/convo.py @@ -8,7 +8,7 @@ from datetime import datetime, timedelta from PyQt4 import QtGui, QtCore from dataobjs import PesterProfile, Mood, PesterHistory -from generic import PesterIcon, RightClickList +from generic import PesterIcon from parsetools import convertTags, lexMessage, splitMessage, mecmd, colorBegin, colorEnd, img2smiley class PesterTabWindow(QtGui.QFrame): @@ -306,14 +306,7 @@ class PesterText(QtGui.QTextEdit): self.parent().mainwindow.showMemos(url[1:]) elif url[0] == "@": handle = unicode(url[1:]) - mw = self.parent().mainwindow - matchingChums = [c for c in mw.chumList.chums if c.handle == handle] - if len(matchingChums) > 0: - mood = matchingChums[0].mood - else: - mood = Mood(0) - chum = PesterProfile(handle, mood=mood, chumdb=mw.chumdb) - mw.newConversation(chum) + self.parent().mainwindow.newConversation(handle) else: QtGui.QDesktopServices.openUrl(QtCore.QUrl(url, QtCore.QUrl.TolerantMode)) QtGui.QTextEdit.mousePressEvent(self, event) @@ -453,10 +446,14 @@ class PesterConvo(QtGui.QFrame): self.unblockchum = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/unblockchum"], self) self.connect(self.unblockchum, QtCore.SIGNAL('triggered()'), self, QtCore.SLOT('unblockChumSlot()')) + self.reportchum = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/report"], self) + self.connect(self.reportchum, QtCore.SIGNAL('triggered()'), + self, QtCore.SLOT('reportThisChum()')) self.optionsMenu.addAction(self.quirksOff) self.optionsMenu.addAction(self.addChumAction) self.optionsMenu.addAction(self.blockAction) + self.optionsMenu.addAction(self.reportchum) self.chumopen = False self.applyquirks = True @@ -629,6 +626,9 @@ class PesterConvo(QtGui.QFrame): def blockThisChum(self): self.mainwindow.blockChum(self.chum.handle) @QtCore.pyqtSlot() + def reportThisChum(self): + self.mainwindow.reportChum(self.chum.handle) + @QtCore.pyqtSlot() def unblockChumSlot(self): self.mainwindow.unblockChum(self.chum.handle) @QtCore.pyqtSlot(bool) diff --git a/generic.py b/generic.py index fd77ad6..0e5b21a 100644 --- a/generic.py +++ b/generic.py @@ -35,7 +35,9 @@ class RightClickList(QtGui.QListWidget): if event.reason() == QtGui.QContextMenuEvent.Mouse: listing = self.itemAt(event.pos()) self.setCurrentItem(listing) - self.optionsMenu.popup(event.globalPos()) + self.getOptionsMenu().popup(event.globalPos()) + def getOptionsMenu(self): + return self.optionsMenu class MultiTextDialog(QtGui.QDialog): def __init__(self, title, parent, *queries): diff --git a/menus.py b/menus.py index 1ffe9ef..2081b00 100644 --- a/menus.py +++ b/menus.py @@ -610,7 +610,11 @@ class PesterUserlist(QtGui.QDialog): self.addChumAction = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/addchum"], self) self.connect(self.addChumAction, QtCore.SIGNAL('triggered()'), self, QtCore.SLOT('addChumSlot()')) + self.pesterChumAction = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/pester"], self) + self.connect(self.pesterChumAction, QtCore.SIGNAL('triggered()'), + self, QtCore.SLOT('pesterChumSlot()')) self.userarea.optionsMenu.addAction(self.addChumAction) + self.userarea.optionsMenu.addAction(self.pesterChumAction) self.ok = QtGui.QPushButton("OK", self) self.ok.setDefault(True) @@ -634,7 +638,7 @@ class PesterUserlist(QtGui.QDialog): self.updateUsers() @QtCore.pyqtSlot() def updateUsers(self): - names = self.mainwindow.namesdb["#pesterchum"] + names = self.mainwindow.namesdb["#PESTERCHUM"] self.userarea.clear() for n in names: item = QtGui.QListWidgetItem(n) @@ -675,8 +679,15 @@ class PesterUserlist(QtGui.QDialog): if not cur: return self.addChum.emit(cur.text()) + @QtCore.pyqtSlot() + def pesterChumSlot(self): + cur = self.userarea.currentItem() + if not cur: + return + self.pesterChum.emit(cur.text()) addChum = QtCore.pyqtSignal(QtCore.QString) + pesterChum = QtCore.pyqtSignal(QtCore.QString) class MemoListItem(QtGui.QListWidgetItem): @@ -798,6 +809,6 @@ class LoadingScreen(QtGui.QDialog): class AboutPesterchum(QtGui.QMessageBox): def __init__(self, parent=None): QtGui.QMessageBox.__init__(self, parent) - self.setText("P3ST3RCHUM V. 3.14") - self.setInformativeText("Programming by illuminatedwax (ghostDunk), art by Grimlive (aquaMarinist). Special thanks to ABT and gamblingGenocider.") + self.setText("P3ST3RCHUM V. 3.14.1") + self.setInformativeText("Programming by illuminatedwax (ghostDunk), Kiooeht (evacipatedBox), alGore, art by Grimlive (aquaMarinist). Special thanks to ABT and gamblingGenocider.") self.mainwindow = parent diff --git a/parsetools.py b/parsetools.py index 500a143..fad5e1f 100644 --- a/parsetools.py +++ b/parsetools.py @@ -192,6 +192,15 @@ def convertTags(lexed, format="html"): def splitMessage(msg, format="ctag"): """Splits message if it is too long.""" + # split long text lines + buf = [] + for o in msg: + if type(o) in [str, unicode] and len(o) > 200: + for i in range(0, len(o), 200): + buf.append(o[i:i+200]) + else: + buf.append(o) + msg = buf okmsg = [] cbegintags = [] output = [] @@ -200,11 +209,7 @@ def splitMessage(msg, format="ctag"): if type(o) is colorBegin: cbegintags.append(o) elif type(o) is colorEnd: - print len(cbegintags) - try: - cbegintags.pop() - except IndexError: - print len(cbegintags) + cbegintags.pop() # yeah normally i'd do binary search but im lazy msglen = len(convertTags(okmsg, format)) + 4*(len(cbegintags)) if msglen > 400: diff --git a/pesterchum.js b/pesterchum.js index 6aabab5..fb794b4 100644 --- a/pesterchum.js +++ b/pesterchum.js @@ -1 +1 @@ -{"hideOfflineChums": false, "time12Format": true, "tabs": true, "showSeconds": false, "server": "irc.mindfang.org", "soundon": true, "showTimeStamps": false, "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "laughingShisa", "bluntInstrument", "sunilaSeed", "bluntInstrument", "nickServ", "ghostBinoculars", "alGore", "evacipatedBox", "acrylicEmulator", "prettyGemmaiden", "calSprite", "fairytalePorn", "brooklynRage"], "defaultprofile": "testProfile", "block": []} +{"hideOfflineChums": false, "time12Format": true, "tabs": true, "soundon": true, "server": "irc.mindfang.org", "showSeconds": false, "showTimeStamps": false, "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "laughingShisa", "bluntInstrument", "sunilaSeed", "bluntInstrument", "nickServ", "ghostBinoculars", "alGore", "evacipatedBox", "acrylicEmulator", "prettyGemmaiden", "calSprite", "fairytalePorn", "brooklynRage"], "defaultprofile": "testProfile", "block": []} \ No newline at end of file diff --git a/pesterchum.py b/pesterchum.py index 5965023..5cf669b 100644 --- a/pesterchum.py +++ b/pesterchum.py @@ -26,6 +26,7 @@ from irc import PesterIRC from logviewer import PesterLogUserSelect, PesterLogViewer _datadir = QtGui.QDesktopServices.storageLocation(QtGui.QDesktopServices.DataLocation)+"Pesterchum/" +canon_handles = ["apocalypseArisen", "arsenicCatnip", "arachnidsGrip", "adiosToreador", "caligulasAquarium", "cuttlefishCuller", "carcinoGeneticist", "centaursTesticle", "grimAuxiliatrix", "gallowsCalibrator", "gardenGnostic", "ectoBiologist", "twinArmageddons", "terminallyCapricious", "turntechGodhead", "tentacleTherapist"] if sys.platform == "darwin": if not os.path.exists(_datadir): @@ -452,6 +453,7 @@ class chumArea(RightClickList): if not self.mainwindow.config.hideOfflineChums(): self.showAllChums() self.optionsMenu = QtGui.QMenu(self) + self.canonMenu = QtGui.QMenu(self) self.pester = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/pester"], self) self.connect(self.pester, QtCore.SIGNAL('triggered()'), self, QtCore.SLOT('activateChum()')) @@ -464,13 +466,35 @@ class chumArea(RightClickList): self.logchum = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/viewlog"], self) self.connect(self.logchum, QtCore.SIGNAL('triggered()'), self, QtCore.SLOT('openChumLogs()')) + self.reportchum = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/report"], self) + self.connect(self.reportchum, QtCore.SIGNAL('triggered()'), + self, QtCore.SLOT('reportChum()')) + self.findalts = QtGui.QAction("Find Alts", self) + self.connect(self.findalts, QtCore.SIGNAL('triggered()'), + self, QtCore.SLOT('findAlts()')) + self.optionsMenu.addAction(self.pester) self.optionsMenu.addAction(self.logchum) self.optionsMenu.addAction(self.blockchum) self.optionsMenu.addAction(self.removechum) + self.optionsMenu.addAction(self.reportchum) + + + self.canonMenu.addAction(self.pester) + self.canonMenu.addAction(self.logchum) + self.canonMenu.addAction(self.blockchum) + self.canonMenu.addAction(self.removechum) + self.canonMenu.addAction(self.reportchum) + self.canonMenu.addAction(self.findalts) self.initTheme(theme) self.sortItems() + def getOptionsMenu(self): + currenthandle = self.currentItem().chum.handle + if currenthandle in canon_handles: + return self.canonMenu + else: + return self.optionsMenu def addChum(self, chum): if len([c for c in self.chums if c.handle == chum.handle]) != 0: return @@ -566,6 +590,18 @@ class chumArea(RightClickList): return self.blockChumSignal.emit(self.currentItem().chum.handle) @QtCore.pyqtSlot() + def reportChum(self): + currentChum = self.currentItem() + if not currentChum: + return + self.mainwindow.reportChum(self.currentItem().chum.handle) + @QtCore.pyqtSlot() + def findAlts(self): + currentChum = self.currentItem() + if not currentChum: + return + self.mainwindow.sendMessage.emit("ALT %s" % (currentChum.chum.handle) , "calSprite") + @QtCore.pyqtSlot() def openChumLogs(self): currentChum = self.currentItem().text() if not currentChum: @@ -910,15 +946,18 @@ 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.botAction = QtGui.QAction("CALSPRITE", self) + self.connect(self.botAction, QtCore.SIGNAL('triggered()'), + self, QtCore.SLOT('loadCalsprite()')) self.helpAction = QtGui.QAction("HELP", self) self.connect(self.helpAction, QtCore.SIGNAL('triggered()'), self, QtCore.SLOT('launchHelp()')) 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.aboutAction) - self.closeButton = WMButton(PesterIcon(self.theme["main/close/image"]), self) self.connect(self.closeButton, QtCore.SIGNAL('clicked()'), self, QtCore.SLOT('closeToTray()')) @@ -1069,6 +1108,16 @@ class PesterWindow(MovingWindow): if hasattr(self, 'trollslum') and self.trollslum: self.trollslum.updateMood(handle, mood) def newConversation(self, chum, initiated=True): + if type(chum) in [str, unicode]: + matchingChums = [c for c in self.chumList.chums if c.handle == chum] + if len(matchingChums) > 0: + mood = matchingChums[0].mood + else: + mood = Mood(2) + chum = PesterProfile(chum, mood=mood, chumdb=self.chumdb) + if len(matchingChums) == 0: + self.moodRequest.emit(chum) + if self.convos.has_key(chum.handle): self.convos[chum.handle].showChat() return @@ -1454,6 +1503,11 @@ class PesterWindow(MovingWindow): @QtCore.pyqtSlot(QtCore.QString) def removeChum(self, chumlisting): self.config.removeChum(chumlisting) + def reportChum(self, handle): + (reason, ok) = QtGui.QInputDialog.getText(self, "Report User", "Enter the reason you are reporting this user (optional):") + if ok: + self.sendMessage.emit("REPORT %s %s" % (handle, reason) , "calSprite") + @QtCore.pyqtSlot(QtCore.QString) def blockChum(self, handle): h = unicode(handle) @@ -1613,6 +1667,8 @@ class PesterWindow(MovingWindow): self, QtCore.SLOT('userListClose()')) self.connect(self.allusers, QtCore.SIGNAL('addChum(QString)'), self, QtCore.SLOT('userListAdd(QString)')) + self.connect(self.allusers, QtCore.SIGNAL('pesterChum(QString)'), + self, QtCore.SLOT('userListPester(QString)')) self.requestNames.emit("#pesterchum") self.allusers.show() @@ -1621,6 +1677,10 @@ class PesterWindow(MovingWindow): h = unicode(handle) chum = PesterProfile(h, chumdb=self.chumdb) self.addChum(chum) + @QtCore.pyqtSlot(QtCore.QString) + def userListPester(self, handle): + h = unicode(handle) + self.newConversation(h) @QtCore.pyqtSlot() def userListClose(self): self.allusers = None @@ -1851,6 +1911,9 @@ class PesterWindow(MovingWindow): self.aboutwindow.exec_() self.aboutwindow = None @QtCore.pyqtSlot() + def loadCalsprite(self): + self.newConversation("calSprite") + @QtCore.pyqtSlot() def launchHelp(self): QtGui.QDesktopServices.openUrl(QtCore.QUrl("http://nova.xzibition.com/~illuminatedwax/help.html", QtCore.QUrl.TolerantMode)) diff --git a/themes/enamel/style.js b/themes/enamel/style.js index 07f8b06..b1b0c0e 100644 --- a/themes/enamel/style.js +++ b/themes/enamel/style.js @@ -35,6 +35,7 @@ "rclickchumlist": {"pester": "Pester", "removechum": "Remove Chum", "blockchum": "Block", + "report", "Report", "addchum": "Add Chum", "viewlog": "View Pesterlog", "unblockchum": "Unblock", diff --git a/themes/gold/style.js b/themes/gold/style.js index c7fb706..b8223be 100644 --- a/themes/gold/style.js +++ b/themes/gold/style.js @@ -36,6 +36,7 @@ "about": "About" }, "rclickchumlist": {"pester": "Pester", "removechum": "Remove Chum", + "report": "Report", "blockchum": "Block", "addchum": "Add Chum", "viewlog": "View Pesterlog", diff --git a/themes/pesterchum/style.js b/themes/pesterchum/style.js index eb6e9db..35127de 100644 --- a/themes/pesterchum/style.js +++ b/themes/pesterchum/style.js @@ -36,6 +36,7 @@ "about": "ABOUT" }, "rclickchumlist": {"pester": "PESTER", "removechum": "REMOVE CHUM", + "report": "REPORT", "blockchum": "BLOCK", "addchum": "ADD CHUM", "viewlog": "VIEW PESTERLOG", diff --git a/themes/trollian/style.js b/themes/trollian/style.js index 0ec8137..ac22821 100644 --- a/themes/trollian/style.js +++ b/themes/trollian/style.js @@ -34,6 +34,7 @@ "about": "About" }, "rclickchumlist": {"pester": "Troll", "removechum": "Trash", + "report": "Remove", "blockchum": "Block", "addchum": "Add Chump", "viewlog": "View Pesterlog", diff --git a/themes/typewriter/style.js b/themes/typewriter/style.js index d141d74..13306f0 100644 --- a/themes/typewriter/style.js +++ b/themes/typewriter/style.js @@ -36,6 +36,7 @@ "about": "About" }, "rclickchumlist": {"pester": "Converse", "removechum": "Erase User", + "report": "Report User", "blockchum": "Condemn", "addchum": "Add User", "viewlog": "View Pesterlog", From fee7063dd9ac6f3b033f7042c6ca793125d5a286 Mon Sep 17 00:00:00 2001 From: illuminatedwax Date: Wed, 13 Apr 2011 01:19:47 -0500 Subject: [PATCH 13/15] der --- pesterchum.js | 2 +- smilies/discontent.png | Bin 0 -> 359 bytes smilies/perky.png | Bin 360 -> 360 bytes 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 smilies/discontent.png diff --git a/pesterchum.js b/pesterchum.js index fb794b4..1dbea1d 100644 --- a/pesterchum.js +++ b/pesterchum.js @@ -1 +1 @@ -{"hideOfflineChums": false, "time12Format": true, "tabs": true, "soundon": true, "server": "irc.mindfang.org", "showSeconds": false, "showTimeStamps": false, "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "laughingShisa", "bluntInstrument", "sunilaSeed", "bluntInstrument", "nickServ", "ghostBinoculars", "alGore", "evacipatedBox", "acrylicEmulator", "prettyGemmaiden", "calSprite", "fairytalePorn", "brooklynRage"], "defaultprofile": "testProfile", "block": []} \ No newline at end of file +{"hideOfflineChums": true, "time12Format": true, "tabs": true, "soundon": true, "server": "irc.mindfang.org", "showSeconds": false, "showTimeStamps": false, "chums": ["unknownTraveler", "tentacleTherapist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "aquaMarinist", "elegantDiversion", "moirailBunp", "uroborosUnbound", "androidTechnician", "midnightSparrow", "apocalypseArisen", "anguillaNuntia", "oilslickOrchid", "pretentiousFantasia", "aquaticMarinist", "lyricalKeraunoscopic", "counterRealist", "ectoBiologist", "percipientPedestrian", "asceticClinician", "doctectiveMiracles", "noSense", "ircMonster", "twinArmageddons", "cannabisHero", "jetRocket", "adiosToreador", "turntechGodhead", "magmaExploiter", "hannaSongstress", "endlessVoid", "grayscaleVisionary", "corruptedInsanity", "stupidlyBrilliant", "artsyGyarados", "obliviousCrafter", "sporadicAgent", "subtleChaotician", "nareSolee", "apostateCourier", "nocturnalTherapist", "herpaDerp", "clockworkUtopia", "digitalSamurai", "astronomicalMaster", "slipshodBrisant", "genialDustbuster", "hyperdriveTyphoon", "magnificentMiser", "gentleRuffian", "riskRepeats", "globalsoftPrika", "globalsoftPirka", "devonianCritter", "lethargicSerpent", "laughingShisa", "bluntInstrument", "sunilaSeed", "bluntInstrument", "nickServ", "ghostBinoculars", "alGore", "evacipatedBox", "acrylicEmulator", "prettyGemmaiden", "calSprite", "fairytalePorn", "brooklynRage"], "defaultprofile": "testProfile", "block": []} \ No newline at end of file diff --git a/smilies/discontent.png b/smilies/discontent.png new file mode 100644 index 0000000000000000000000000000000000000000..546a2eb9f9f1ee2b1f16aef5f12bfeb1753745a6 GIT binary patch literal 359 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDU1=9cj|9@Z1kYU7diGd*n z%moUTKmNW9NU@g$`2_If= zh>Nxy_1>n5`vv($3kB9FE!b8Mv`MwZHKHUXu_VVm=e4xmKn)C@u6{1- HoD!M<=!tMX literal 0 HcmV?d00001 diff --git a/smilies/perky.png b/smilies/perky.png index 2b2495345fd38597394a933c7f6d5720735ec27e..608ec74579b4c5ee8913fb624354d99c8de64dd6 100644 GIT binary patch delta 69 zcmaFC^nz)F2&1@>uAy0ofuWU=g_W_1u7R1Afx#tSg&UK#8D$g=j6#fztPD)842&Q$ TZ`N(kW&i?DS3j3^P6fe From 544f1003e51ab140ff468f1e069335ed001fc5d8 Mon Sep 17 00:00:00 2001 From: illuminatedwax Date: Wed, 13 Apr 2011 01:32:25 -0500 Subject: [PATCH 14/15] v. 3.14.1 --- CHANGELOG.mkdn | 3 ++- readme.txt | 63 +++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.mkdn b/CHANGELOG.mkdn index 527eaed..3cb7ad8 100644 --- a/CHANGELOG.mkdn +++ b/CHANGELOG.mkdn @@ -27,4 +27,5 @@ BUG FIXES: * memos now do not break on case-sensitivity * fixed QDB address * now lines too long to send in a single message are split up correctly -* quirk replace bug fixed \ No newline at end of file +* quirk replace bug fixed +* pesterClientXXX profiles no longer saved \ No newline at end of file diff --git a/readme.txt b/readme.txt index c6f5da7..6304041 100644 --- a/readme.txt +++ b/readme.txt @@ -1,4 +1,21 @@ -Welcome to Pesterchum 3.14! +Welcome to Pesterchum 3.14.1! + +WHAT'S NEW? +----------- +* Quirks now have a lower(), scramble(), and reverse() function! +* Timestamps - check your Config! +* Logviewer - View logs right in Pesterchum! +* Quirk ordering - order your quirks so they work right! +* # of users in a memo - You can now see how many users are in a memo. +* @links to users - typing @ before user's name creates a link + that will pester them! +* Support for REPORT and ALT to calSprite built in - + If someone is bothering you, or a canon handle is idle, or + for whatever reason, right click their name and go to "Report" + to report them to a moderator. + If you want to talk to an alt canon handle, just right click + the username! + if you have an alt handle, register it with calSprite! Here's some tips to help you get started: @@ -59,6 +76,44 @@ list later on in this readme. FA% --- +Q: Norton says it has a virus and then deletes it! +A: Read this helpful Norton FAQ: + +Alright, here's a guide to by-passing Norton: +First, to download Pesterchum: +1: Make sure you're on a Moderator account. Moreso for the Norton steps than these ones. +2: Download the .zip file, not the .exe file. +3: Unzip the .zip file onto memory. Pesterchum should now be installed. + +Now, to by-pass Norton: +1: Make sure you're still on a moderator account. +2: Open up Norton. +3: Click on 'Settings' up in the upperright hand corner. +4: Click on 'Anitivirus', off to the upper left. It has a small image of a needle or something similar off to it's side. +5: There's a word that reads 'SONAR protection' halfway to the bottomleft. Off to it's right, there's a bar that's half green. Click on the bar. +6: It will warn you about turning off SONAR. Have it set to turn back on when the system restarts. +7: If done properly, the background for the main page of Norton(what you saw on steps 2-3) has turned an apocaliptic red. Feel free to close Norton now. Keep in mind to stay off suspicious online sites now. +8: Open up Pesterchum, and let the chummy convos begin. + +When finished: +First, Log off of Pesterchum. LOG OFF, NOT CLOSE IT. +Then, you can either shut off your comp, and Norton will re-enable SONAR, or you can repeat steps 1-5, except turning the red bar green. If done right, Norton will be it's happy color again. +Keep in mind that you must repeat all of this(other than the download) every time you want to get on Pesterchum. + +Hope this is helpful! + +(This guide brought to you by the slightly combined efforts of empireomega and Xanaomin) + +Q: I can't connect because my school/university/network/stolen wifi is blocking my connection! OR I can't seem to connect to the server at all and I'm not running any firewalls! +A: Edit your pesterchum.js file. Open it up in notepad or something, and then edit the beginning so it looks like this: + +{"port": "1413", .... + +where the .... is the rest of the gobbledygook there. + +Q: The mood buttons on Pesterchum 6.0 don't match up to what it sets your mood to! What gives? +A: The mood names are just there to look canon. It is intentional. + Q: I'm appearing as offline to 2.5 users/other users appear the wrong mood? What's happeninggggg A: The 2.5 people decided to change the mood protocol. When I made @@ -274,6 +329,12 @@ PC will save your color, quirks, and theme for that profile. Chumrolls and block lists are the same for all profiles. Feel free to have multiple instances of PC running on two or more handles! +CALSPRITE +--------- +calSprite is the bot that helps moderate canon handle usage! Simply pester +calSprite with the world "HELP" (turn your quirks off!) and you +will get instructions on how to use calSprite! + QUIRKS ------ There are six kinds of quirks! I'll teach you how to use them all! From b0d96fd28821486012119cc73a71759f2d1f6be7 Mon Sep 17 00:00:00 2001 From: illuminatedwax Date: Wed, 13 Apr 2011 14:58:38 -0500 Subject: [PATCH 15/15] derp --- CHANGELOG.mkdn | 2 +- TODO | 1 + themes/enamel/style.js | 2 +- themes/trollian2.5/style.js | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.mkdn b/CHANGELOG.mkdn index 3cb7ad8..191275c 100644 --- a/CHANGELOG.mkdn +++ b/CHANGELOG.mkdn @@ -7,7 +7,7 @@ Visit https://github.com/illuminatedwax/pesterchum for git access and source cod CHANGELOG --------- -### 3.14.2 +### 3.14.1 * Pesterchum 3.14 - illuminatedwax [ghostDunk] * Art - Grimlive [aquaMarinist] * Quirks lower() function - Kiooeht [evacipatedBox] diff --git a/TODO b/TODO index a865abd..1a89703 100644 --- a/TODO +++ b/TODO @@ -6,6 +6,7 @@ Bugs: * enamel doesnt have time arrows Features: +* different sound for memos/pesters * OOC * log viewer needs to have BBCode/HTML/Text copy modes * random pesters diff --git a/themes/enamel/style.js b/themes/enamel/style.js index b1b0c0e..cc0c1aa 100644 --- a/themes/enamel/style.js +++ b/themes/enamel/style.js @@ -35,7 +35,7 @@ "rclickchumlist": {"pester": "Pester", "removechum": "Remove Chum", "blockchum": "Block", - "report", "Report", + "report": "Report", "addchum": "Add Chum", "viewlog": "View Pesterlog", "unblockchum": "Unblock", diff --git a/themes/trollian2.5/style.js b/themes/trollian2.5/style.js index d478374..bcd3288 100644 --- a/themes/trollian2.5/style.js +++ b/themes/trollian2.5/style.js @@ -180,7 +180,7 @@ }, "buttons": { "style": "color: black; font: bold; border: 2px solid #780000; font: bold; font-size: 12px; background: #e5000f; margin-top: 5px; margin-right: 5px; margin-left: 5px; padding: 2px; width: 50px;" } }, - "tabwindow": { "style": ""; } + "tabwindow": { "style": "" }, "tabs": { "style": "", "selectedstyle": "",