def upload_files(term, protocol='xmodem1k'): """ Upload files. """ echo(term.clear) while True: echo(u'Filename (empty to quit):\r\n') led = LineEditor(width=term.width - 1) led.refresh() inp = led.read() led = None if inp: for illegal in (os.path.sep, u'..', u'~',): if illegal in inp: echo(term.bold_red(u'\r\nIllegal filename.\r\n')) term.inkey() return echo(term.bold( u'\r\nBegin your {0} sending program now.\r\n' .format(protocol))) upload_filename = os.path.join(UPLOADS_DIR, inp) try: upload = open(upload_filename, 'wb') except IOError as err: echo(term.bold_red('u\r\nIOError: {err}\r\n'.format(err=err))) else: if not recv_modem(upload, protocol): echo(term.bold_red(u'Upload failed!\r\n')) os.unlink(upload_filename) else: echo(term.bold_green(u'Transfer succeeded.\r\n')) term.inkey() else: return
def upload_files(term, protocol='xmodem1k'): """ Upload files. """ echo(term.clear) while True: echo(u'Filename (empty to quit):\r\n') led = LineEditor(width=term.width - 1) led.refresh() inp = led.read() led = None if inp: for illegal in (os.path.sep, u'..', u'~',): if illegal in inp: echo(term.bold_red(u'\r\nIllegal filename.\r\n')) term.inkey() return echo(term.bold( u'\r\nBegin your {0} sending program now.\r\n' .format(protocol))) upload_filename = os.path.join(UPLOADS_DIR, inp) try: upload = open(upload_filename, 'wb') except IOError as err: echo(term.bold_red('u\r\nIOError: {err}\r\n'.format(err=err))) else: if not recv_modem(upload, protocol): echo(term.bold_red(u'Upload failed!\r\n')) os.unlink(upload_filename) else: echo(term.bold_green(u'Transfer succeeded.\r\n')) term.inkey() else: return
def prompt_tags(tags): """ Prompt for and return valid tags from TAGDB. """ # pylint: disable=R0914,W0603 # Too many local variables # Using the global statement from x84.bbs import DBProxy, echo, getterminal, getsession from x84.bbs import Ansi, LineEditor, getch session, term = getsession(), getterminal() tagdb = DBProxy('tags') global FILTER_PRIVATE while True: # Accept user input for a 'search tag', or /list command # echo(u"\r\n\r\nENtER SEARCh %s, COMMA-dEliMitEd. " % ( term.red('TAG(s)'),)) echo(u"OR '/list', %s%s\r\n : " % ( (term.yellow_underline('^x') + u':autoscan ' if session.user.get('autoscan', False) else u''), term.yellow_underline('^a') + u':ll msgs ' + term.yellow_underline('Esc') + u':quit',)) width = term.width - 6 sel_tags = u', '.join(tags) while len(Ansi(sel_tags)) >= (width - 8): tags = tags[:-1] sel_tags = u', '.join(tags) lne = LineEditor(width, sel_tags) echo(lne.refresh()) while not lne.carriage_returned: inp = getch() if inp in (unichr(27), term.KEY_EXIT): return None if inp in (unichr(24),): # ^A:all return set() if inp in (unichr(1),): # ^X:autoscan return session.user.get('autoscan', set()) else: echo(lne.process_keystroke(inp)) if lne.carriage_returned: inp_tags = lne.content if (inp_tags is None or 0 == len(inp_tags) or inp_tags.strip().lower() == '/quit'): return set() elif inp_tags.strip().lower() == '/list': # list all available tags, and number of messages echo(term.normal) echo(u'\r\n\r\nTags: \r\n') all_tags = sorted(tagdb.items()) if 0 == len(all_tags): echo(u'None !'.center(term.width / 2)) else: echo(Ansi(u', '.join(([u'%s(%s)' % ( term.red(tag), term.yellow(str(len(msgs))),) for (tag, msgs) in all_tags]))).wrap(term.width - 2)) continue elif (inp_tags.strip().lower() == '/nofilter' and 'sysop' in session.user.groups): # disable filtering private messages FILTER_PRIVATE = False continue echo(u'\r\n') # search input as valid tag(s) tags = set([_tag.strip().lower() for _tag in inp_tags.split(',')]) for tag in tags.copy(): if not tag in tagdb: tags.remove(tag) echo(u"\r\nNO MESSAGES With tAG '%s' fOUNd." % ( term.red(tag),)) return tags