From f4d2b2f0491e06653a765907ddaaf5dc35ce3a48 Mon Sep 17 00:00:00 2001 From: Stephen Dranger Date: Sun, 6 Feb 2011 00:02:39 -0600 Subject: [PATCH] banning --- TODO | 2 - convo.pyc | Bin 20233 -> 20210 bytes dataobjs.py | 6 ++- dataobjs.pyc | Bin 9092 -> 9456 bytes irc.py | 16 ++++-- irc.pyc | Bin 10957 -> 11433 bytes memos.py | 103 +++++++++++++++++++++++++++++++++---- memos.pyc | Bin 25546 -> 28447 bytes oyoyo/helpers.py | 3 ++ oyoyo/helpers.pyc | Bin 4538 -> 4748 bytes parsetools.py | 10 +++- parsetools.pyc | Bin 5213 -> 5345 bytes pesterchum.js | 2 +- pesterchum.py | 22 +++++--- themes/pesterchum/style.js | 6 ++- themes/trollian/style.js | 10 ++-- 16 files changed, 149 insertions(+), 31 deletions(-) diff --git a/TODO b/TODO index bce54a7..c515bc3 100644 --- a/TODO +++ b/TODO @@ -1,6 +1,4 @@ Features: -* memo change theme -* 1 MINUTES FROM NOW * memo kicking * user import * Transparent background? diff --git a/convo.pyc b/convo.pyc index afd17694ec63e09ecb894566a231efa98da39d73..9fdf065d966fd33cfcf4d6993f1d9c0c68667e0a 100644 GIT binary patch delta 889 zcmYk3-%C_c5XWb(`y*Y~jEG!8ZGFg_DTqPtia*mr@<+G^J%pL*Qdd@`yoL|E_#hEc z#O@9i1X?{LzLc)lG_#*tQkGDG6h=@lJsQ|Q(9GG2;NA~2-R138sJ$k9Q#w;B3i@-VH9wRxM zPuIu4%ubiV9CWy$8=y^3VJj`Bo!J}g?H^!E0D1-^uv3uBFddBZouR?tKp;;?^<5Jg|!CpF1up6V+g#z7%<8*)T2Hv63A`2&|wYbJH zE(0bgnpb756<29EMef2@3YLU$()w7^<=~b3%Tf?0soZxQV|3kj1f%rBw-2w8x6n^* z{)?P{@yEHbue?fg#bn@iL6qhy@^O*YD^4bxEwi!%cSNN|3|*5*S1Hf((XQ&tdsLM# z1pLU8k}Wr%+=( zzNbWEHb2I@##)S1MpGnPxljfMWx4V*E73IFZ7Rc6`r1^Jxh}%6U`_Cuiko|ILEat{ U^r?B#H6`+-Ai-)SeQ(i!1H0?l%m4rY delta 930 zcmYk4+e=h&5XWcE-qO`nqFf~uE%YoYElIg7c7xNgh1-0{(=Y}>LG$=erEV^KFoZ7bN&6!&Imqwj*hLJE4~c?QGgH=p$#FU4*`3FN<#=~&<9Y{bQWTok}MF_AY_G*4KiZvaHbtX4v79g zH~^spsl|2rG{CMLX#5wID79i%h+3gdgAN;nFF+h4&b=y0dxi>>e1w=yiOGrxQEn^U z_c!5rJNc6)2c-iW%_-0Za9OwTat%fTllKGAQyE6OAd3;P1LVQ|mODM|-A1+uRz~aX zp1X!mV$uYs1ea(kV<90AQ!p8GFyHLT{Fr1j!hA&M^YbulcIN9=9H(a|zT+4@EHH6` ze1#SEaY>$_2lak)vCyyK6#Y5*1}Dweo>n_&WfxlzC+V2?Iu20WdlAF5=`F%1l;$a+ z(vp6=bTEAMqpF&ce07}B=<{pN0Z|VL!ZcQzi_0|PO{XuVwY!;SQ&}?}R;fcAq-zqX z3x;URzv@;ed_7<+3tAbvEWR5vDArR!SjI4amJj1`6}TdzTTm|W2viw0%9=S_nTxna z+g0;+6}n2l-9h?ReRI#{HO&5+4a5P{IOoz*Uq}U0Fe{j&(bG3<#thqpXRc9EZPC$} z>_i-l?)J!)_TGpwFOjPC0>x@wUKD>(@K&%SP}ANMOXk?On@hBH!F#ovv#tQMM#Yya z-F^K?%Pn0kq;?pjtAQHaq~Sm&Kha#E5(nv5AeN~{S5x;$x>{mRtQmS7EXEJ?E?ANJ jS%kRYlVF>U)OX-3`5SPWmg-lWQzB0ardchcjRyTMUwPZ> diff --git a/dataobjs.py b/dataobjs.py index 4ff8fec..8be4b37 100644 --- a/dataobjs.py +++ b/dataobjs.py @@ -147,7 +147,11 @@ class PesterProfile(object): initials = pcf+self.initials() return "%s %s %s %s." % \ (syscolor.name(), self.colorhtml(), initials, timetext, verb, channel[1:].upper().replace("_", " ")) - + def memobanmsg(self, opchum, opgrammar, syscolor, timeGrammar): + initials = timeGrammar.pcf+self.initials()+timeGrammar.number + opinit = opgrammar.pcf+opchum.initials()+opgrammar.number + return "%s banned %s from responding to memo." % \ + (opchum.colorhtml(), opinit, self.colorhtml(), initials) def memojoinmsg(self, syscolor, td, timeGrammar, verb): (temporal, pcf, when) = (timeGrammar.temporal, timeGrammar.pcf, timeGrammar.when) timetext = timeDifference(td) diff --git a/dataobjs.pyc b/dataobjs.pyc index da4b76c47d23fbe8ffe3daee36197962f717178d..a378f295d4aa613c024de1f2a72ef144e405dfc1 100644 GIT binary patch delta 516 zcmY+BJxjw-6o$`Dn`pIuw2IX#n${KrilSRVi{K!Nbcjv`g*1t6)FdT0>Jlm14uaza z7jaT_7Qx-oMR4^m=pgEn(3OL=XiF31AUu0;ISWAax`{AcPb0H$lxO65zK4Xh--$Acf1{y$IV;7+6;X zJh(&)$a#GsPm6gvKcg4riq>!((~$p}+n#I7o=NMjV^~gA_FdUFZFgFU;<~!SvB|N^ zv4v3h8`Lbqmk@4UukG7@ENrWuX4{&l?(xV02jBh4S&l_~HrrVk=|GcTQqdfnR?kt< zb_9?#N#7riRtULZuVdHbiZ$dX(qt={v%wpliu05(M{-0YLs%uHkG*GBGskGFCkUS> osIU2!ZkvA1HB|g3pq{eP@x@Mc4SW6sI>IiqgApkvvWM*R7g1VlIRF3v delta 206 zcmez1+2YQ2@e?oCdG?KL2L)B;F)%QsGB89jGNkY^q%t$4FfcTO*(r<+EzAs2EI{$e zuLboP`6f#X=_#f1Gow2{3@TyfCgHLr|~=|K<`Q5uVLYX0|Jp7zYoXngooXk9&Ko%1x`(!1Ra{v^BD|G+> diff --git a/irc.py b/irc.py index 6a54f53..f48289d 100644 --- a/irc.py +++ b/irc.py @@ -3,11 +3,12 @@ from oyoyo.client import IRCClient from oyoyo.cmdhandler import DefaultCommandHandler from oyoyo import helpers import logging +import random from dataobjs import Mood, PesterProfile from generic import PesterList -logging.basicConfig(level=logging.INFO) +logging.basicConfig(level=logging.DEBUG) class PesterIRC(QtCore.QObject): def __init__(self, window): @@ -79,6 +80,11 @@ class PesterIRC(QtCore.QObject): def leftChannel(self, channel): c = unicode(channel) helpers.part(self.cli, c) + @QtCore.pyqtSlot(QtCore.QString, QtCore.QString) + def kickUser(self, handle, channel): + c = unicode(channel) + h = unicode(handle) + helpers.kick(self.cli, h, c) def updateIRC(self): self.conn.next() @@ -155,7 +161,10 @@ class PesterHandler(DefaultCommandHandler): def quit(self, nick, reason): handle = nick[0:nick.find("!")] self.parent.userPresentUpdate.emit(handle, "", "quit") - self.parent.moodUpdated.emit(handle, Mood("offline")) + self.parent.moodUpdated.emit(handle, Mood("offline")) + def kick(self, opnick, channel, handle, op): + self.parent.userPresentUpdate.emit(handle, channel, "kick:%s" % (op)) + # ok i shouldnt be overloading that but am lazy def part(self, nick, channel, reason="nanchos"): handle = nick[0:nick.find("!")] self.parent.userPresentUpdate.emit(handle, channel, "left") @@ -170,8 +179,7 @@ class PesterHandler(DefaultCommandHandler): oldhandle = oldnick[0:oldnick.find("!")] newchum = PesterProfile(newnick, chumdb=self.mainwindow.chumdb) self.parent.moodUpdated.emit(oldhandle, Mood("offline")) - self.parent.userPresentUpdate.emit(oldhandle, "", "oldnick") - self.parent.userPresentUpdate.emit(newnick, "", "newnick") + self.parent.userPresentUpdate.emit("%s:%s" % (oldhandle, newnick), "", "nick") if newnick in self.mainwindow.chumList.chums: self.getMood(newchum) def namreply(self, server, nick, op, channel, names): diff --git a/irc.pyc b/irc.pyc index bc6e9a661061c7a74af65c30e9bf5edf4395cfc1..34d021fb24e7682bc22669ead0fcf10139ced3dd 100644 GIT binary patch delta 1933 zcmZ`(TTGl)5T5z>0()f_SYUx&pt}n{HH}13q{WDZO0_NMPbl35FD<*2mF4>XO&_G8 z7BtqjsW1;V#u}TZi8axf?o&;aR3D5s-jYV*tNP+gy}bD9%voS1L6-CFoNvx$=9@YD z?a<9+-H(6!-0{x-BV(}f=i%>e9_BYIb;+ayCf$&7LmD9Mgh>zNypZxj&Ic(Ups*z{ z>4#hyq{;v@F31KTT?%3ZVF?h^F34z*Er)T0v>TRzSxBZTR_=tba%KH4zLmd@XOZq> z)nY)o5mGgf4vL)$L&gr-T7_=N)WMPlsrv0?1hP@ZH*Dv5qg(NfJMeNWdu@mIh!d+z(Vhc0>k!H4s&c_WA&blta(UG$27 z9lPmbaD+ZCo5o&>1U|uo^j+XHJjCqUz<^ZO&H$Ph$87xV;2}g05Az`g3t&N$+|JmP zjmoxzg^<-?0U&FG1v@O*SVHmy8yhCGW0OWT@6_ci!zU0DXcu^d9`tvGOWBllLuO`v zkZse+ATiL<@=LyB!f3*vuG638H#DO=zgkg?PC3lnOSdW$T9bp;EBD}ea)jFa(jZPq zJESw0k$OTszO-MpO_|79mVYyJ)`orL3Ga&^<}-{#43@-a&gQa~!3G!y1)dgohF%We z#EE=mZ3Tv&6=p<0bTK*wMhQI?G*EZI^P)^&5{S}DqQhIl=IKmsY-TD$^h@3ChEef_ z1w?FhkS^I4ggHr{){o;=YKknPLDwR&(9x~+&uy+Z`snA#$l?soukk2|g;f~FF-c)_ zsFF1?Aw}W;LV>tC8l+KbRK-m$4|Px%ar;e)RjRNzVd_%*LYQ0E7VBq8z|}Le(^6Vh zMk%Nzr_9W*M%(?5vvq?VS#k z=5foKHx}qbEa5*XYm{6jTl98p7;n=bu~Uz6Uw|PO7UDc2mc*$mPCeA(UM013lkqCO z8$XP9==bF5;_&r@|`89Axwy0O9+@o|spIE%dq*=)T=)@9mq6@28C^!1ihk8J^ zJSnhWAR{m#FeM;Q$dG0=_6exBtdu$@(`AA40ur@xK|qy@4bV4$rdr!tBvrGXfp34n z<#yTmWAi#(4p)h*)a6ujhaRFYT8EvgWLc`+-Q|+Rdk^d%>Z2ESCu<~!Dh#NP7rh$W JT7?!){R=S5Qt1Ey delta 1462 zcmZ`&Uuaup6h9|TZgTUlY15=@+N5dHbT{n;l`&g7=-lk$YS(VJc3W<7(DkM?Yu4(L z;e=wNo#M;Td0>JvDyT?(sWmW|bdJpj5fvv0KJH*AlDlw!9T#isSj7oDBq7!|C^(_mrqBz87_2zJYTqh$KrycL#8#aHy-M$_ z>vX-L)t!9A$Gf)rdz5qPp~xnJm40ZdY*I`;XZHi0Kh?_Ax#ZV+z??9e=o#lV4Ah*i z_Yp(1s(pr08gYM!ZS<@ACdO-CPim_z zt*H4$?x)R2hHgh5!zwjJ9}n_Loa0Z_z}C3gG#=gO>gEKv9Dw2QQE#J#_pKZ%~mkXXehFvQL;&ommpm&9GRq7m73U z=1Jy;9FnPOR$WnMSv1vyVPUEV^0%0(B{p43x4O-W2q)=Ada`AWX*tLsUD<{m*v7rd zcHilq5}!$dBMg-WhEicc6)`tmo~~3*n`h~XOeRzipC<8P$<;a;03EK3%y+ zA8mgf-=H2NvBh!R*zMvU4Zfy#jD_w|iB{XHMm*Y9rByptB{$`>KKzCX+1sI4Bt*@p zTDIs|?;L(l*L&l+Mp+sX*ds6_Fe@-GAcJPgjMN8Peb};?uL-;)IcB diff --git a/memos.py b/memos.py index 582a617..239947e 100644 --- a/memos.py +++ b/memos.py @@ -4,7 +4,7 @@ from PyQt4 import QtGui, QtCore from datetime import time, timedelta, datetime from dataobjs import PesterProfile, Mood -from generic import PesterIcon +from generic import PesterIcon, RightClickList from convo import PesterConvo, PesterInput, PesterText, PesterTabWindow from parsetools import convertTags, escapeBrackets, addTimeInitial, timeProtocol @@ -282,8 +282,17 @@ class PesterMemo(PesterConvo): self.textInput = MemoInput(self.mainwindow.theme, self) self.textInput.setFocus() - self.userlist = QtGui.QListWidget(self) + self.userlist = RightClickList(self) self.userlist.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Expanding)) + self.userlist.optionsMenu = QtGui.QMenu(self) + self.addchumAction = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/addchum"], self) + self.connect(self.addchumAction, QtCore.SIGNAL('triggered()'), + self, QtCore.SLOT('addChumSlot()')) + self.banuserAction = QtGui.QAction(self.mainwindow.theme["main/menus/rclickchumlist/banuser"], self) + self.connect(self.banuserAction, QtCore.SIGNAL('triggered()'), + self, QtCore.SLOT('banSelectedUser()')) + self.userlist.optionsMenu.addAction(self.addchumAction) + # ban list added if we are op self.timeslider = TimeSlider(QtCore.Qt.Horizontal, self) self.timeinput = TimeInput(self.timeslider, self) @@ -396,6 +405,8 @@ class PesterMemo(PesterConvo): self.userlist.setStyleSheet(theme["memos/userlist/style"]) self.userlist.setFixedWidth(theme["memos/userlist/width"]) + self.addchumAction.setText(theme["main/menus/rclickchumlist/addchum"]) + self.banuserAction.setText(theme["main/menus/rclickchumlist/banuser"]) self.timeinput.setFixedWidth(theme["memos/time/text/width"]) self.timeinput.setStyleSheet(theme["memos/time/text/style"]) @@ -431,6 +442,7 @@ class PesterMemo(PesterConvo): op = True handle = handle[1:] if handle == self.mainwindow.profile().handle: + self.userlist.optionsMenu.addAction(self.banuserAction) self.op = True item = QtGui.QListWidgetItem(handle) if handle == self.mainwindow.profile().handle: @@ -439,6 +451,8 @@ class PesterMemo(PesterConvo): color = chumdb.getColor(handle, defaultcolor) item.setTextColor(color) self.userlist.addItem(item) + self.userlist + def timeUpdate(self, handle, cmd): window = self.mainwindow @@ -516,32 +530,103 @@ class PesterMemo(PesterConvo): @QtCore.pyqtSlot(QtCore.QString, QtCore.QString, QtCore.QString) def userPresentChange(self, handle, channel, update): - if (update in ["join","left"]) and channel != self.channel: - return - chums = self.userlist.findItems(handle, QtCore.Qt.MatchFlags(0)) h = unicode(handle) c = unicode(channel) + update = unicode(update) + if update[0:4] == "kick": # yeah, i'm lazy. + l = update.split(":") + update = l[0] + op = l[1] + if update == "nick": + l = h.split(":") + oldnick = l[0] + newnick = l[1] + h = oldnick + if (update in ["join","left", "kick"]) and channel != self.channel: + return + chums = self.userlist.findItems(h, QtCore.Qt.MatchFlags(0)) systemColor = QtGui.QColor(self.mainwindow.theme["memos/systemMsgColor"]) # print exit - if update == "quit" or update == "left" or update == "oldnick": + if update == "quit" or update == "left" or update == "nick": for c in chums: chum = PesterProfile(h) self.userlist.takeItem(self.userlist.row(c)) if not self.times.has_key(h): - return + self.times[h] = TimeTracker(timedelta(0)) while self.times[h].getTime() is not None: t = self.times[h] grammar = t.getGrammar() self.textArea.append(convertTags(chum.memoclosemsg(systemColor, grammar, self.mainwindow.theme["convo/text/closememo"]))) self.times[h].removeTime(t.getTime()) + if update == "nick": + self.addUser(newnick) + elif update == "kick": + print "KICKING" + if len(chums) == 0: + return + c = chums[0] + chum = PesterProfile(h) + if h == self.mainwindow.profile().handle: + chum = self.mainwindow.profile() + ttracker = self.time + curtime = self.time.getTime() + elif self.times.has_key(h): + ttracker = self.times[h] + else: + ttracker = TimeTracker(timedelta(0)) + while ttracker.getTime() is not None: + grammar = ttracker.getGrammar() + opchum = PesterProfile(op) + if self.times.has_key(op): + opgrammar = self.times[op].getGrammar() + elif op == self.mainwindow.profile().handle: + opgrammar = self.time.getGrammar() + else: + opgrammar = TimeGrammar("CURRENT", "C", "RIGHT NOW") + self.textArea.append(convertTags(chum.memobanmsg(opchum, opgrammar, systemColor, grammar))) + ttracker.removeTime(ttracker.getTime()) + + if chum is self.mainwindow.profile(): + # are you next? + msgbox = QtGui.QMessageBox() + msgbox.setText(self.mainwindow.theme["convo/text/kickedmemo"]) + msgbox.setInformativeText("press 0k to rec0nnect or cancel to absc0nd") + msgbox.setStandardButtons(QtGui.QMessageBox.Ok | QtGui.QMessageBox.Cancel) + ret = msgbox.exec_() + if ret == QtGui.QMessageBox.Ok: + self.userlist.clear() + self.time = TimeTracker(curtime) + self.resetSlider(curtime) + self.mainwindow.joinChannel.emit(self.channel) + me = self.mainwindow.profile() + self.textArea.append(convertTags(me.memoopenmsg(systemColor, self.time.getTime(), self.time.getGrammar(), self.mainwindow.theme["convo/text/openmemo"], self.channel))) + elif ret == QtGui.QMessageBox.Cancel: + if self.parent(): + i = self.parent().tabIndices[self.channel] + self.parent().tabClose(i) + else: + self.close() + else: + # i warned you about those stairs bro + self.userlist.takeItem(self.userlist.row(c)) elif update == "join": self.addUser(h) time = self.time.getTime() serverText = "PESTERCHUM:TIME>"+delta2txt(time, "server") self.messageSent.emit(serverText, self.title()) - elif update == "newnick": - self.addUser(h) + @QtCore.pyqtSlot() + def addChumSlot(self): + if not self.userlist.currentItem(): + return + currentChum = PesterProfile(unicode(self.userlist.currentItem().text())) + self.mainwindow.addChum(currentChum) + @QtCore.pyqtSlot() + def banSelectedUser(self): + if not self.userlist.currentItem(): + return + currentHandle = unicode(self.userlist.currentItem().text()) + self.mainwindow.kickUser.emit(currentHandle, self.channel) def resetSlider(self, time): self.timeinput.setText(delta2txt(time)) self.timeinput.setSlider() diff --git a/memos.pyc b/memos.pyc index b04b9dcfe856ff450b5d0a86ac3d4bcf421d8402..8e6e6b47b7b1a387638adcbf9987ed5b5bcd5631 100644 GIT binary patch delta 9706 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 V5vdQ?*9XD}!WH57)gQbP_+J7@7Y+ab delta 6865 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 diff --git a/oyoyo/helpers.py b/oyoyo/helpers.py index 081e94e..38841b1 100644 --- a/oyoyo/helpers.py +++ b/oyoyo/helpers.py @@ -38,6 +38,9 @@ def names(cli, *channels): def channel_list(cli): cli.send("LIST") +def kick(cli, handle, channel): + cli.send("KICK %s %s" % (channel, handle)) + def msgrandom(cli, choices, dest, user=None): o = "%s: " % user if user else "" o += random.choice(choices) diff --git a/oyoyo/helpers.pyc b/oyoyo/helpers.pyc index 16a01a9dfbd508f7afb86d25c3b04726acbe3a7d..616708876580ff19d02472a801d6f436b763383f 100644 GIT binary patch delta 944 zcmZuv&1(}u6o0e%+TCWe`Dmjg#ujRHLyFQO*0eFEAGS(K(P_OzCDxs74Q*3#(?g+B zp*{8@1O6FG$)O;qM{k1Q*^@Uti8m2^ZxTNa?(Y2Nef;MA-puT);lq6P!#B%39$T!r z(0f8SS8@2CpJhk)!f*gk4}s7?MBsoyJpw{kK^;6DgaN_?(Fbb**vG7)f_)&Ou%@Yq zsUjAL*zX8tZB-!(BCZU~CO{-r{TPT8h<;_;B_%wdoH&S6P)A-ytx1BHgna-evdT|^ zm+JZ&EIGNOA8!JC0o(_TAdVT@Qx;(tpa~!t>}s&fU{!-OcFqLgG7a;KzKOVSV`gC} z@8jn%bU9@ls>KP~VT6Y(EwSOXBWSv4x4aDpO;F&UM@!x`E*PY}-gMUsofko!u@QM3 z+8N9d?@u*OZE+%YwKDQ3P%e|dy4`ZeaP~B(pEc zpWzd1R1QSGvq@>{x7ay(SI-5BCZ~)_ib}eE1+iD1pOx?R*KA528t>SwTsA+l>zzVh znlVRKqf5oxf2mz9s=!MG6A1t4mq_1k8?>Og`Dnv)H^s6HSoLt3*pt$=?l9hYYZa;X zmsss06<8s9Z=-1T4rmUo|BB41O}?~33o3Mnxo^)NwG~o_0|r) z{2Ils5LDzRJD;hd>CkN|VmCcc?zGIsAFzA!X?%R*GLiZb)MYmsV#{qb_(`HsWu72N z5u^zQ3FwOXko+1S9x0GnB%r^7j}lOm{3^jLK@CA2AYRS1e3GzYL=9_E%?KJ%BOsqA G&in$T7L)$~ delta 730 zcmZuvzi-n}5WaI_JC5TdcAJ(ag$`*@P)h)bHib~26r_r(LVX>OjKC6kp@<1UAj?yYaM z;o!0Pdy!ZF>yyf<2Nq}th6u3(+JzxN>_W!{odNBE&cb#IcG;UTVivRy+m=y0qvSvb ze-!rSO$8rx!4UQqL5HS(06GFaW_TVn_Z??`65;~r3d9^YWpYC3gs=;Mx@_zSI?=vu z!B%~Gl*TtH8rr|`7(H}$X39KCJ;k6591@lm4TVk84{TA-w(UFjyX_N{xJOEp;;2Xn zufK6`Q%(BdPGEz+xqG-oUoxBNS@u&mGi9rqu;>2r_`qV;?zb5GLIG8ko_eqGJYCPe z#}%6KKjW3ro$@pLCRa3fK%pbogiE+oS`x{lDc~JlW diff --git a/parsetools.py b/parsetools.py index b6f7fff..5417607 100644 --- a/parsetools.py +++ b/parsetools.py @@ -121,9 +121,15 @@ def timeDifference(td): if atd == timedelta(0): timetext = "RIGHT NOW" elif atd < timedelta(0,3600): - timetext = "%d MINUTES %s" % (minutes, when) + if minutes == 1: + timetext = "%d MINUTE %s" % (minutes, when) + else: + timetext = "%d MINUTES %s" % (minutes, when) elif atd < timedelta(0,3600*100): - timetext = "%d:%02d HOURS %s" % (hours, leftoverminutes, when) + if hours == 1 and leftoverminutes == 0: + timetext = "%d:%02d HOUR %s" % (hours, leftoverminutes, when) + else: + timetext = "%d:%02d HOURS %s" % (hours, leftoverminutes, when) else: timetext = "%d HOURS %s" % (hours, when) return timetext diff --git a/parsetools.pyc b/parsetools.pyc index fead7da09374c121b527f2160222c2b3b611bc98..e63ad4e730befd824519d744ccfa455febf4f326 100644 GIT binary patch delta 319 zcmcbs@lccf;wN6NM`C^(*{uYbOc^IT3zpaKVqmOcVklu?NMU41VP|M&V#s1($TtOw zGBc!bFk~??pW=5FJJNdt$m?$4u5^ie^8$+;$z+^2UYsXAR1_p*=9w4Eb zqTuW47aHQKpjuqai!2Zf6v<2hspAI=Td5itr6_p#hXw&9Cf5jkS5pIuGcXD>axt+n f@-Rv;aseTb$0)|g%P7Jm0;HuF#hE5g6g~q051%;E delta 146 zcmaE;c~^t|;wN6N{z<+Y*{uYb9y3gK7A$woU|_6aVklu?NMU41VP|M&V#s1($QNN? zOyOXtVP>ddWJqIT5UXWl$g@LM$pcd<4phlCIZ#MUl$)W31xbAk8$+-L@8lXG>&a(@ ZBqsk9`o<_X`Gc?|iwL6_<782hGXRgHAbkJ; diff --git a/pesterchum.js b/pesterchum.js index 9fb7056..2ab9987 100644 --- a/pesterchum.js +++ b/pesterchum.js @@ -1 +1 @@ -{"tabs": true, "chums": ["aquaMarinist", "marineAquist", "unknownTraveler", "tentacleTherapist", "macruralAlchemist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "superGhost", "centaursTesticle", "arachnidsGrip", "fireSwallow", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "adiosToreador", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium"], "defaultprofile": "testProfile", "block": []} \ No newline at end of file +{"tabs": false, "chums": ["aquaMarinist", "marineAquist", "unknownTraveler", "tentacleTherapist", "macruralAlchemist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "superGhost", "centaursTesticle", "arachnidsGrip", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "adiosToreador", "cuttlefishCuller", "rageInducer", "gallowsCalibrator", "caligulasAquarium", "terminallyCapricious", "illuminatedWax", "illuminatedWax"], "defaultprofile": "testProfile", "block": []} \ No newline at end of file diff --git a/pesterchum.py b/pesterchum.py index c26dbd9..d9997d9 100644 --- a/pesterchum.py +++ b/pesterchum.py @@ -1037,7 +1037,11 @@ class PesterWindow(MovingWindow): def userPresentUpdate(self, handle, channel, update): c = unicode(channel) n = unicode(handle) - if update == "quit" or update == "oldnick": + if update == "nick": + l = n.split(":") + oldnick = l[0] + newnick = l[1] + if update == "quit": for c in self.namesdb.keys(): try: i = self.namesdb[c].index(n) @@ -1054,14 +1058,16 @@ class PesterWindow(MovingWindow): pass except KeyError: self.namesdb[c] = [] - elif update == "newnick": + elif update == "nick": for c in self.namesdb.keys(): try: - i = self.namesdb[c].index(n) + i = self.namesdb[c].index(oldnick) + self.namesdb[c].pop(i) + self.namesdb[c].append(newnick) except ValueError: - self.namesdb[c].append(n) + pass except KeyError: - self.namesdb[c] = [n] + pass elif update == "join": try: i = self.namesdb[c].index(n) @@ -1406,6 +1412,7 @@ class PesterWindow(MovingWindow): trayIconSignal = QtCore.pyqtSignal(int) blockedChum = QtCore.pyqtSignal(QtCore.QString) unblockedChum = QtCore.pyqtSignal(QtCore.QString) + kickUser = QtCore.pyqtSignal(QtCore.QString, QtCore.QString) joinChannel = QtCore.pyqtSignal(QtCore.QString) leftChannel = QtCore.pyqtSignal(QtCore.QString) @@ -1511,7 +1518,10 @@ def main(): QtCore.SIGNAL('leftChannel(QString)'), irc, QtCore.SLOT('leftChannel(QString)')) - + irc.connect(widget, + QtCore.SIGNAL('kickUser(QString, QString)'), + irc, + QtCore.SLOT('kickUser(QString, QString)')) # IRC --> Main window irc.connect(irc, QtCore.SIGNAL('connected()'), diff --git a/themes/pesterchum/style.js b/themes/pesterchum/style.js index 7a097e3..2bfe997 100644 --- a/themes/pesterchum/style.js +++ b/themes/pesterchum/style.js @@ -30,7 +30,8 @@ "removechum": "REMOVE CHUM", "blockchum": "BLOCK", "addchum": "ADD CHUM", - "unblockchum": "UNBLOCK" + "unblockchum": "UNBLOCK", + "banuser": "BAN USER" } }, "chums": { "style": "border:2px solid yellow; background-color: black;color: white;font: bold;font-family: 'Courier';selection-background-color:#646464; ", @@ -211,7 +212,8 @@ "unblocked": "unblocked", "openmemo": "opened memo on board", "joinmemo": "responded to memo", - "closememo": "ceased responding to memo" + "closememo": "ceased responding to memo", + "kickedmemo": "You have been banned from this memo!" }, "systemMsgColor": "#646464" }, diff --git a/themes/trollian/style.js b/themes/trollian/style.js index ed9af97..b2f397e 100644 --- a/themes/trollian/style.js +++ b/themes/trollian/style.js @@ -30,7 +30,8 @@ "removechum": "Trash", "blockchum": "Block", "addchum": "Add Chump", - "unblockchum": "Mercy"} + "unblockchum": "Mercy", + "banuser": "BAN USER" } }, "chums": { "style": "font-size: 12px; background: white; border:2px solid #c2c2c2; padding: 5px; font-family: 'Arial';selection-background-color:rgb(200,200,200); ", "loc": [475, 89], @@ -259,7 +260,8 @@ "unblocked": "mercifully forgave", "openmemo": "opened memo on board", "joinmemo": "responded to memo", - "closememo": "ceased responding to memo" + "closememo": "ceased responding to memo", + "kickedmemo": "You have been banned from this memo!" }, "systemMsgColor": "#646464" }, @@ -293,8 +295,8 @@ "style": "color: black; font:bold; border:1px solid #c2c2c2; background: white; height: 19px;" }, "slider": { "style": " border:1px solid #c2c2c2;", - "groove": "border-image:url($path/timeslideraqua.png);", - "handle": "image:url($path/aquaicon.png);" + "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",