def set_note_data(self, note, reset_undo=True, content_unchanged=False): """Replace text in editor with content. This is usually called when a new note is selected (case 1), or when a modified note comes back from the server (case 2). @param reset_undo: Set to False if you don't want to have the undo buffer to reset. @param content_unchanged: Set to True if you know that the content has not changed, only the tags and pinned status. """ if not content_unchanged: self.text_note.delete(1.0, tk.END) # clear all if note is not None: if not content_unchanged: self.text_note.insert(tk.END, note['content']) # default to an empty array for tags tags = note.get('tags', []) self.tags_entry_var.set(','.join(tags)) self.pinned_checkbutton_var.set(utils.note_pinned(note)) if reset_undo: # usually when a new note is selected, we want to reset the # undo buffer, so that a user can't undo right into the previously # selected note. self.text_note.edit_reset()
def append(self, note, config): """ @param note: The complete note dictionary. """ title = utils.get_note_title(note) tags = note.get('tags') modifydate = float(note.get('modifydate')) pinned = utils.note_pinned(note) self.note_headers.append((title, tags, modifydate, pinned)) self.enable_text() self.text.insert(tk.END, title, ("title,")) if pinned: self.text.insert(tk.END, ' *', ("pinned", )) self.text.insert(tk.END, ' ' + utils.human_date(modifydate), ("modifydate", )) # tags can be None (newly created note) or [] or ['tag1', 'tag2'] if tags > 0: if config.tagfound: self.text.insert(tk.END, ' ' + ','.join(tags), ("found", )) else: self.text.insert(tk.END, ' ' + ','.join(tags), ("tags", )) self.text.insert(tk.END, '\n') self.disable_text()
def append(self, note, config): """ @param note: The complete note dictionary. """ title = utils.get_note_title(note) tags = note.get('tags') modifydate = float(note.get('modifydate')) pinned = utils.note_pinned(note) self.note_headers.append((title, tags, modifydate, pinned)) self.enable_text() self.text.insert(tk.END, title, ("title,")) if pinned: self.text.insert(tk.END, ' *', ("pinned",)) self.text.insert(tk.END, ' ' + utils.human_date(modifydate), ("modifydate",)) # tags can be None (newly created note) or [] or ['tag1', 'tag2'] if tags > 0: if config.tagfound: self.text.insert(tk.END, ' ' + ','.join(tags), ("found",)) else: self.text.insert(tk.END, ' ' + ','.join(tags), ("tags",)) self.text.insert(tk.END, '\n') self.disable_text()
def set_note_data(self, note, reset_undo=True, content_unchanged=False): """Replace text in editor with content. This is usually called when a new note is selected (case 1), or when a modified note comes back from the server (case 2). @param reset_undo: Set to False if you don't want to have the undo buffer to reset. @param content_unchanged: Set to True if you know that the content has not changed, only the tags and pinned status. """ if not content_unchanged: self.text_note.delete(1.0, tk.END) # clear all if note is not None: if not content_unchanged: self.text_note.insert(tk.END, note['content']) # default to an empty array for tags tags=note.get('tags', []) self.tags_entry_var.set(','.join(tags)) self.pinned_checkbutton_var.set(utils.note_pinned(note)) if reset_undo: # usually when a new note is selected, we want to reset the # undo buffer, so that a user can't undo right into the previously # selected note. self.text_note.edit_reset()
def is_note_different(self, note): """ Determine if note would cause a UI update. """ if self.get_text() != note.get('content'): return True tags = note.get('tags', []) # get list of string tags from ui ui_tags = utils.sanitise_tags(self.tags_entry_var.get()) if ui_tags != tags: return True if bool(self.pinned_checkbutton_var.get()) != bool(utils.note_pinned(note)): return True
def set_note_pinned(self, key, pinned): n = self.notes[key] old_pinned = utils.note_pinned(n) if pinned != old_pinned: if 'systemtags' not in n: n['systemtags'] = [] systemtags = n['systemtags'] if pinned: # which by definition means that it was NOT pinned systemtags.append('pinned') else: systemtags.remove('pinned') n['modifydate'] = time.time() self.notify_observers('change:note-status', utils.KeyValueObject(what='modifydate', key=key))
def set_note_pinned(self, key, pinned): n = self.notes[key] old_pinned = utils.note_pinned(n) if pinned != old_pinned: if 'systemtags' not in n: n['systemtags'] = [] systemtags = n['systemtags'] if pinned: # which by definition means that it was NOT pinned systemtags.append('pinned') else: systemtags.remove('pinned') n['modifydate'] = time.time() self.notify_observers( 'change:note-status', utils.KeyValueObject(what='modifydate', key=key))
def handler_housekeeper(self): # nvPY will do saving and syncing! self.notify_observers('keep:house', None) # check if titles need refreshing refresh_notes_list = False prev_title = None prev_modifydate = None prev_pinned = 0 for i, o in enumerate(self.notes_list_model.list): # order should be the same as our listbox nt = utils.get_note_title(o.note) ot = self.notes_list.get_title(i) # if we strike a note with an out-of-date title, redo. if nt != ot: logging.debug('title "%s" resync' % (nt, )) refresh_notes_list = True break # compare modifydate timestamp in our notes_list_model to what's displayed # if these are more than 60 seconds apart, we want to update our # mod-date display. md = float(o.note.get('modifydate', 0)) omd = self.notes_list.get_modifydate(i) if abs(md - omd) > 60: # we log the title logging.debug('modifydate "%s" resync' % (nt, )) refresh_notes_list = True break pinned = utils.note_pinned(o.note) old_pinned = self.notes_list.get_pinned(i) if pinned != old_pinned: # we log the title logging.debug('pinned "%s" resync' % (nt, )) refresh_notes_list = True break tags = o.note.get('tags', 0) old_tags = self.notes_list.get_tags(i) if tags != old_tags: # we log the title logging.debug('tags "%s" resync' % (nt, )) refresh_notes_list = True break if self.config.sort_mode == 0: # alpha if prev_title is not None and prev_title > nt: logging.debug("alpha resort triggered") refresh_notes_list = True break prev_title = nt else: # we go from top to bottom, newest to oldest # this means that prev_modifydate (above) needs to be larger # than md (below). if it's not, re-sort. if prev_modifydate is not None and prev_modifydate < md and \ not prev_pinned: logging.debug("modifydate resort triggered") refresh_notes_list = True break prev_modifydate = md if self.config.pinned_ontop: prev_pinned = utils.note_pinned(o.note) if refresh_notes_list: self.refresh_notes_list() self.root.after(self.config.housekeeping_interval_ms, self.handler_housekeeper)
def handler_housekeeper(self): # nvPY will do saving and syncing! self.notify_observers('keep:house', None) # check if titles need refreshing refresh_notes_list = False prev_title = None prev_modifydate = None prev_pinned = 0 for i,o in enumerate(self.notes_list_model.list): # order should be the same as our listbox nt = utils.get_note_title(o.note) ot = self.notes_list.get_title(i) # if we strike a note with an out-of-date title, redo. if nt != ot: logging.debug('title "%s" resync' % (nt,)) refresh_notes_list = True break # compare modifydate timestamp in our notes_list_model to what's displayed # if these are more than 60 seconds apart, we want to update our # mod-date display. md = float(o.note.get('modifydate', 0)) omd = self.notes_list.get_modifydate(i) if abs(md - omd) > 60: # we log the title logging.debug('modifydate "%s" resync' % (nt,)) refresh_notes_list = True break pinned = utils.note_pinned(o.note) old_pinned = self.notes_list.get_pinned(i) if pinned != old_pinned: # we log the title logging.debug('pinned "%s" resync' % (nt,)) refresh_notes_list = True break tags = o.note.get('tags', 0) old_tags = self.notes_list.get_tags(i) if tags != old_tags: # we log the title logging.debug('tags "%s" resync' % (nt,)) refresh_notes_list = True break if self.config.sort_mode == 0: # alpha if prev_title is not None and prev_title > nt: logging.debug("alpha resort triggered") refresh_notes_list = True break prev_title = nt else: # we go from top to bottom, newest to oldest # this means that prev_modifydate (above) needs to be larger # than md (below). if it's not, re-sort. if prev_modifydate is not None and prev_modifydate < md and \ not prev_pinned: logging.debug("modifydate resort triggered") refresh_notes_list = True break prev_modifydate = md if self.config.pinned_ontop: prev_pinned = utils.note_pinned(o.note) if refresh_notes_list: self.refresh_notes_list() self.root.after(self.config.housekeeping_interval_ms, self.handler_housekeeper)