Changeset 911e2f3298d2f980ed158a446da3bf09b96dd8bb

Show
Ignore:
Timestamp:
08/10/06 08:41:29 (2 years ago)
Author:
pj <pj@03e2507f-5f03-0410-b1bc-a06d56394c08>
git-committer:
pj <pj@03e2507f-5f03-0410-b1bc-a06d56394c08> 1155217289 +0000
git-parent:

[d8ed33905b8d5230e6852118093024308effbbca]

git-author:
pj <pj@03e2507f-5f03-0410-b1bc-a06d56394c08> 1155217289 +0000
Message:

* switch from readlisp to sexpr
* fix pick behaviour to return 0 instead of (so that scan pick foo never

gets you all of the records)

git-svn-id: file:///home/pj/.svnroot/mhi@37 03e2507f-5f03-0410-b1bc-a06d56394c08

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • mhi.py

    r8bcd848 r911e2f3  
    1919import sys 
    2020import time 
     21import sexpr 
    2122import string 
    2223import imaplib 
     24import StringIO 
    2325from configobj import ConfigObj 
    24 from readlisp import readlisp 
    2526 
    2627cfgdir=os.environ.get('HOME','') 
     
    3233    if Debug > 0: 
    3334        print "DEBUG: %s" % dstr 
     35 
     36def readsexpr(s): 
     37    return sexpr.SexprParser(StringIO.StringIO(s)).parse()     
    3438 
    3539 
     
    216220        sys.exit(1) 
    217221 
     222def do_or_die(func, errormsg): 
     223    result, data = func 
     224    if result != 'OK': 
     225        print msgstr+' %s' % data 
     226        sys.exit(1) 
     227    return result, data 
     228 
    218229def _fixupMsgset(msgset, last): 
    219230    # s/cur/$cur/, s/last/$last/, s/prev/$prev/, s/next/$next/ 
     231    msgset = msgset.replace('-', ':') 
    220232    cur= state[state['folder']+'.cur'] 
    221233    msgset = msgset.replace('cur', cur) 
    222234    msgset = msgset.replace('last', last) 
     235    msgset = msgset.replace('$', last) 
    223236    # XXX: bounds-check these? 
    224237    msgset = msgset.replace('next', str(int(cur)+1)) 
     
    229242def _checkMsgset(msgset): 
    230243    ## FIXME: need a better check that msgset is a valid imap messageset string 
    231     # msgset = int | int:int | int,msgset 
     244    # msgset = int | int:int | msgset,msgset 
    232245    # '1', '1:5', '1,2,3', '1,3:5' are all valid 
    233246    if len(msgset.strip('1234567890,:*')) != 0: 
     
    347360    stats = {} 
    348361    for fline in flist: 
    349         f = str(readlisp('('+fline+')')[2]) 
     362        f = str(readsexpr('('+fline+')')[2]) 
    350363        _debug(" f: %s " % repr(f)) 
    351         stats[f] = readlisp('('+S.status(f, '(MESSAGES RECENT UNSEEN)')[1][0]+')')[1] 
     364        stats[f] = readsexpr('('+S.status(f, '(MESSAGES RECENT UNSEEN)')[1][0]+')')[1] 
    352365    S.logout() 
    353366    stats["FOLDER"] = [0, "# MESSAGES", 0, "RECENT", 0, "UNSEEN"] 
     
    361374        foo = stats[folder] 
    362375        _debug("  Stats: %s " % repr(foo)) 
    363         #_debug("Statsrl: %s " % repr(readlisp(foo))) 
     376        #_debug("Statsrl: %s " % repr(readsexpr(foo))) 
    364377        messages, recent, unseen = foo[1], foo[3], foo[5] 
    365378        cur = state.get(folder+'.cur', None) 
     
    391404    result, data = S.search(None, searchstr) 
    392405    _check_result(result, data, "Problem with search criteria:") 
     406    _debug("data: %s" % repr(data)) 
    393407    S.close() 
    394408    S.logout() 
    395     msglist = [] 
    396     for m in data: 
    397         msglist += m.split() 
    398     print ','.join(msglist) 
     409    data = [d for d in data if d != ''] 
     410    if data: 
     411        msglist = [] 
     412        for m in data: 
     413            msglist += m.split() 
     414        print ','.join(msglist) 
     415    else: 
     416        print "0" 
    399417 
    400418 
     
    412430    if not msgset: 
    413431        try: 
    414             msgset = state[folder+".cur"] 
     432            msgset = state[state["folder"]+".cur"] 
    415433        except KeyError: 
    416434            print "No current message selected." 
     
    578596    result, data = S.select(folder) 
    579597    _check_result(result, data, "Problem changing to folder:" ) 
    580     result, data = S.fetch(msgset, '(ENVELOPE FLAGS)') 
     598    try: 
     599        result, data = S.fetch(msgset, '(ENVELOPE FLAGS)') 
     600    except: pass 
    581601    _debug('result: %s' % repr(result)) 
    582602    _debug('data: %s' % repr(data)) 
    583603    _check_result(result, data, "Problem with fetch:" ) 
    584     if data[0] is None: 
     604    # take out fake/ba hits 
     605    data = [ hit for hit in data if ' ' in hit ] 
     606    if data == [] or data[0] is None: 
    585607        print "No messages." 
    586608        sys.exit(0) 
     
    594616        num = string.atoi(num) 
    595617        _debug("e: %s" % repr(e)) 
    596         e = readlisp(e) 
     618        e = readsexpr(e) 
    597619        env_date, env_subject, env_from, env_sender = e[1][:4] 
    598620        flags = [str(f) for f in e[3]] 
     
    668690        if cmdfunc: 
    669691            _debug("cmdfunc: %s" % cmdfunc) 
    670             cmdfunc(cmdargs) 
     692            try: 
     693                cmdfunc(cmdargs) 
     694            except IOError: pass 
    671695            config.write() 
    672696            state.write()