Example #1
0
 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)
Example #2
0
 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)
Example #3
0
 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()
Example #4
0
 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
Example #5
0
 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
Example #6
0
 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()
Example #7
0
    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.')
Example #8
0
 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
Example #9
0
    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()
Example #10
0
    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()
Example #11
0
    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)
Example #12
0
    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)
Example #13
0
    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
Example #14
0
 def preActionOfDelete(self, record):
     """ Confirm before deleting
     """
     msg = 'delete %s: %s? ' % (record.id, record.subject)
     ans = interact.readstr(msg, default='N')
     return ans == 'y'
Example #15
0
 def preActionOfDelete(self, record):
     """ Confirm before deleting
     """
     msg = 'delete %s: %s? ' % (record.id, record.desc)
     ans = interact.readstr(msg, default='N')
     return ans == 'y'