def ask_time(self, prompt='', default=None): """ interactively ask the user for time string """ if default: default_time_str = isotime(default) extra_text = '[%s]' % default_time_str prompt = '%s %s: ' % (prompt, extra_text) time_str = interact.readstr(prompt) time_str = time_str if time_str else default_time_str else: prompt = '%s: ' % prompt time_str = interact.readstr(prompt) if time_str: second = strtosecond(time_str) return second else: print('bad value, exit') exit(1)
def dellast(self): cont = self.opendb() keys = [k for k in cont if cont[k].complete] if not keys: return key = sorted(keys)[-1] log = cont[key] default = 'n' i = interact.readstr('%s\nconfirm? [%s] ' % (log.detail(), default), default) if i not in ('y', 'Y'): return del cont[key] self.persist()
def setRemote(self, remote): """ Add the remote to git if it does not yet exist """ cmd = ['git', 'remote'] stat, stdout, stderr = self.runCmd(cmd, quiet=True) lines = stdout.split(b'\n') if remote.encode() in lines: return True print('remote "%s" not exists, adding...' % remote) addr = interact.readstr('address: ') cmd = ['git', 'remote', 'add', remote, addr] stat, stdout, stderr = self.runCmd(cmd, quiet=True) return stat
def update(self, db): """ Update the settings interactively """ default = self.book_name prompt = 'book name [%s]: ' % default book_name = interact.readstr(prompt, default) default = self.book_path book_file = self.getBookFileName(default=default) default = self.end_page prompt = 'last page number [%s]: ' % default end_page = interact.readint(prompt, default) default = os.path.basename(self.log_path) prompt = 'basename of log file [%s]: ' % default log_file = interact.readstr(prompt, default) default = os.path.basename(self.note_path) prompt = 'basename of note file [%s]: ' % default note_file = interact.readstr(prompt, default) default = os.path.basename(self.errata_path) prompt = 'basename of errata file [%s]: ' % default errata_file = interact.readstr(prompt, default) # path of the book viewer log file for determine the exit page # number user must change the Viewer class to change this value viewer_log = Viewer.viewer_log prompt = 'viewer log: %s\n' % viewer_log prompt += ' to change this value, you need to edit\n' prompt += ' the Viewer class, press Enter to continue ' interact.readstr(prompt, '') # defference between the actual page number and the page label default = self.page_num_diff + 1 prompt = 'page number of the first page label [%s]: ' % default page_num_diff = interact.readint(prompt, default) page_num_diff -= 1 # page per day default = self.page_per_day prompt = 'how many pages for one day? [%s]: ' % default page_per_day = interact.readint(prompt, default) db['book_name'] = book_name db['book_file'] = book_file db['end_page'] = end_page db['log_file'] = log_file db['note_file'] = note_file db['errata_file'] = errata_file db['page_num_diff'] = page_num_diff db['page_per_day'] = page_per_day db['init_done'] = True print('done.')
def getBookFileName(self, default=None): """ Get the file name from user, check file existence """ if default: prompt = 'abs path (or relative to the base dir) of book file\n' prompt += ' [%s]: ' % default else: prompt = 'abs path (or relative to the base dir) of book file\n' prompt += ' --> ' while True: book_file = interact.readstr(prompt, default=default) book_path = self.fixupBookPath(book_file) if not os.path.exists(book_path): print('%s not exists' % book_path, file=sys.stderr) else: return book_file
def __init__(self, config, dstdir): if not os.path.isdir(dstdir): print('%s not exists, or is not a directory' % dstdir, file=stderr) return # files to sync self.files = [os.path.basename(x) for x in (config.log_path, config.note_path, config.errata_path)] self.srcdir = config.base_dir # check file existence for file in self.files: if not os.path.exists(os.path.join(dstdir, file)): prompt = 'no "%s" in the dst dir, new file will be created, continue? [n]: ' % file ans = interact.readstr(prompt) if ans not in ('y', 'Y'): return self.dstdir = dstdir self.sync()
def __init__(self, config, dstdir): if not os.path.isdir(dstdir): print("%s not exists, or is not a directory" % dstdir, file=stderr) return # files to sync self.files = [os.path.basename(x) for x in (config.log_path, config.note_path, config.errata_path)] self.srcdir = config.base_dir # check file existence for file in self.files: if not os.path.exists(os.path.join(dstdir, file)): prompt = 'no "%s" in the dst dir, new file will be created, continue? [n]: ' % file ans = interact.readstr(prompt) if ans not in ("y", "Y"): return self.dstdir = dstdir self.sync()
def edit(self): """ change an existing note """ cont = self.opendb() notes = sorted(cont.items(), key=lambda x: int(x[0])) text_list = [] for time, note in notes: text = isotime(int(time)) + '\n' + note.content[:80] text_list.append(text) idx, junk = interact.printAndPick(text_list) key = notes[idx][0] note = notes[idx][1] prompt = 'Chapter [%s]: ' % note.chapter note.chapter = interact.readint(prompt, default=note.chapter) prompt = 'Subject [%s]: ' % note.subject note.subject = interact.readstr(prompt, default='') or note.subject note.content = self.edit_content(data=note.content) self.save(key, note)
def init(self, db): """ Initialize the settings interactively """ print('Initial setting, please answer some questions') book_name = interact.readstr('book name: ') book_file = self.getBookFileName() end_page = interact.readint('last page number: ') default = self.defaultLogPath log_file = interact.readstr('basename of log file [%s]: ' % default, default) default = self.defaultNotePath note_file = interact.readstr('basename of note file [%s]: ' % default, default) default = self.defaultErrataPath errata_file = interact.readstr( 'basename of errata file [%s]: ' % default, default) # path of the book viewer log file for determine the exit page # number user must change the Viewer class to change this value viewer_log = Viewer.viewer_log prompt = 'viewer log: %s\n' % viewer_log prompt += ' to change this value, you need to edit\n' prompt += ' the Viewer class, press Enter to continue ' interact.readstr(prompt, '') # defference between the actual page number and the page label page_num_diff = interact.readint( 'page number of the first page label: ') page_num_diff -= 1 # page per day default = self.defaultPagePerDay prompt = 'how many pages for one day? [%s]: ' % default page_per_day = interact.readint(prompt, default) db['book_name'] = book_name db['book_file'] = book_file db['end_page'] = end_page db['log_file'] = log_file db['note_file'] = note_file db['errata_file'] = errata_file db['viewer_log'] = viewer_log db['page_num_diff'] = page_num_diff db['page_per_day'] = page_per_day db['init_done'] = True
def preActionOfDelete(self, record): """ Confirm before deleting """ msg = 'delete %s: %s? ' % (record.id, record.subject) ans = interact.readstr(msg, default='N') return ans == 'y'
def preActionOfDelete(self, record): """ Confirm before deleting """ msg = 'delete %s: %s? ' % (record.id, record.desc) ans = interact.readstr(msg, default='N') return ans == 'y'