more features in 'pending' - allows you to retreive only --ids (can be copy/past to 'edit/editAndMark/mark') or items longer than --duration

This commit is contained in:
Nicolas Coevoet 2014-08-28 20:40:37 +02:00
parent d04636c322
commit 2d0d5cffe4

View File

@ -382,9 +382,8 @@ class Ircd (object):
c.close() c.close()
return results return results
def pending(self,irc,channel,mode,prefix,pattern,db,never): def pending(self,irc,channel,mode,prefix,pattern,db,never,ids,duration):
# returns active items for a channel mode # returns active items for a channel mode
log.debug('%s never' % never)
if not channel or not mode or not prefix: if not channel or not mode or not prefix:
return [] return []
if not ircdb.checkCapability(prefix, '%s,op' % channel): if not ircdb.checkCapability(prefix, '%s,op' % channel):
@ -393,6 +392,7 @@ class Ircd (object):
results = [] results = []
r = [] r = []
c = db.cursor() c = db.cursor()
t = time.time()
for m in mode: for m in mode:
items = chan.getItemsFor(m) items = chan.getItemsFor(m)
if len(items): if len(items):
@ -401,6 +401,11 @@ class Ircd (object):
if never: if never:
if item.when == item.expire or not item.expire: if item.when == item.expire or not item.expire:
r.append([item.uid,item.mode,item.value,item.by,item.when,item.expire]) r.append([item.uid,item.mode,item.value,item.by,item.when,item.expire])
else:
if duration > 0:
log.debug('%s -> %s : %s' % (duration,item.when,(t-item.when)))
if (t - item.when) > duration:
r.append([item.uid,item.mode,item.value,item.by,item.when,item.expire])
else: else:
r.append([item.uid,item.mode,item.value,item.by,item.when,item.expire]) r.append([item.uid,item.mode,item.value,item.by,item.when,item.expire])
r.sort(reverse=True) r.sort(reverse=True)
@ -416,7 +421,9 @@ class Ircd (object):
message = ' "%s"' % comment message = ' "%s"' % comment
else: else:
message = '' message = ''
if expire and expire != when: if ids:
results.append('%s' % uid)
elif expire and expire != when:
results.append('[#%s +%s %s by %s expires at %s]%s' % (uid,mode,value,by,floatToGMT(expire),message)) results.append('[#%s +%s %s by %s expires at %s]%s' % (uid,mode,value,by,floatToGMT(expire),message))
else: else:
results.append('[#%s +%s %s by %s on %s]%s' % (uid,mode,value,by,floatToGMT(when),message)) results.append('[#%s +%s %s by %s on %s]%s' % (uid,mode,value,by,floatToGMT(when),message))
@ -1245,12 +1252,14 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
query = wrap(query,['user',getopts({'deep': '', 'never': '', 'active' : '','channel':'channel'}),'text']) query = wrap(query,['user',getopts({'deep': '', 'never': '', 'active' : '','channel':'channel'}),'text'])
def pending (self, irc, msg, args, channel, optlist): def pending (self, irc, msg, args, channel, optlist):
"""[<channel>] [--mode=<e|b|q|l>] [--oper=<nick|hostmask>] [--never] """[<channel>] [--mode=<e|b|q|l>] [--oper=<nick|hostmask>] [--never] [--ids] [--duration [<years>y] [<weeks>w] [<days>d] [<hours>h] [<minutes>m] [<seconds>s]]
returns active items for --mode if given, filtered by --oper if given, --never never expire only if given""" returns active items for --mode, filtered by --oper, --never (never expire), --ids (only ids), --duration (item longer than)"""
mode = None mode = None
oper = None oper = None
never = False never = False
ids = False
duration = -1
for (option, arg) in optlist: for (option, arg) in optlist:
if option == 'mode': if option == 'mode':
mode = arg mode = arg
@ -1258,18 +1267,25 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
oper = arg oper = arg
elif option == 'never': elif option == 'never':
never = True never = True
elif option == 'ids':
ids = True
elif option == 'duration':
duration = int(arg)
if never and duration > 0:
irc.reply("you can't use --never and --duration at same time")
return
i = self.getIrc(irc) i = self.getIrc(irc)
if oper in i.nicks: if oper in i.nicks:
oper = self.getNick(irc,oper).prefix oper = self.getNick(irc,oper).prefix
results = [] results = []
if not mode: if not mode:
mode = self.registryValue('modesToAskWhenOpped',channel=channel) + self.registryValue('modesToAsk',channel=channel) mode = self.registryValue('modesToAskWhenOpped',channel=channel) + self.registryValue('modesToAsk',channel=channel)
results = i.pending(irc,channel,mode,msg.prefix,oper,self.getDb(irc.network),never) results = i.pending(irc,channel,mode,msg.prefix,oper,self.getDb(irc.network),never,ids,duration)
if len(results): if len(results):
irc.reply(', '.join(results), private=True) irc.reply(', '.join(results), private=True)
else: else:
irc.reply('no result') irc.reply('no result')
pending = wrap(pending,['op',getopts({'mode': 'letter', 'never': '', 'oper' : 'somethingWithoutSpaces'}),]) pending = wrap(pending,['op',getopts({'mode': 'letter', 'never': '', 'oper' : 'somethingWithoutSpaces', 'ids' : '', 'duration' : 'getTs'})])
def _modes (self,numModes,chan,modes,f): def _modes (self,numModes,chan,modes,f):
for i in range(0, len(modes), numModes): for i in range(0, len(modes), numModes):