def sync(self, lists): self.diskChanges = ChangeMonitor() self.conflictChanges = ChangeMonitor() self.notifier = AbstractNotifier.getSimple() self.memMap = dict() self.memOwnerMap = dict() self.diskMap = dict() self.diskOwnerMap = dict() for devGUID, changes in self._allChanges.items(): if devGUID == self._monitor.guid(): self.diskChanges = changes break self._allChanges[self._monitor.guid()] = self._monitor for memList, diskList in lists: self.mergeObjects(memList, diskList) # Cleanup monitor self._monitor.empty() for memList, diskList in lists: for obj in self.allObjects(memList.rootItems()): self._monitor.resetChanges(obj) # Merge conflict changes for devGUID, changes in self._allChanges.items(): if devGUID != self._monitor.guid(): changes.merge(self.conflictChanges)
def setUp(self): self.monitor = ChangeMonitor() self.monitor.monitorClass(self.klass) self.list = self.listClass() self.monitor.monitorCollection(self.list) self.obj = self.klass(subject=u'New object') self.list.append(self.obj)
def read(self): allChanges = dict() tree = ET.parse(self.__fd) for devNode in tree.getroot().findall('device'): id_ = devNode.attrib['guid'] mon = ChangeMonitor(id_) for objNode in devNode.findall('obj'): if objNode.text: changes = set(objNode.text.split(',')) else: changes = set() mon.setChanges(objNode.attrib['id'], changes) allChanges[id_] = mon return allChanges
def setUp(self): self.monitor = ChangeMonitor() self.monitor.monitorClass(CategorizableCompositeObject) self.obj = CategorizableCompositeObject(subject=u'Object') self.list = ObservableList() self.monitor.monitorCollection(self.list) self.list.append(self.obj) self.cat1 = Category(subject=u'Cat #1') self.cat2 = Category(subject=u'Cat #2') self.catList = ObservableList() self.catList.append(self.cat1) self.catList.append(self.cat2)
def __init__(self, *args, **kwargs): self.__filename = self.__lastFilename = '' self.__needSave = self.__loading = False self.__tasks = task.TaskList() self.__categories = category.CategoryList() self.__notes = note.NoteContainer() self.__efforts = effort.EffortList(self.tasks()) self.__guid = generate() self.__syncMLConfig = createDefaultSyncConfig(self.__guid) self.__monitor = ChangeMonitor() self.__changes = dict() self.__changes[self.__monitor.guid()] = self.__monitor self.__changedOnDisk = False if kwargs.pop('poll', True): self.__notifier = TaskCoachFilesystemPollerNotifier(self) else: self.__notifier = TaskCoachFilesystemNotifier(self) self.__saving = False for collection in [self.__tasks, self.__categories, self.__notes]: self.__monitor.monitorCollection(collection) for domainClass in [ task.Task, category.Category, note.Note, effort.Effort, attachment.FileAttachment, attachment.URIAttachment, attachment.MailAttachment ]: self.__monitor.monitorClass(domainClass) super(TaskFile, self).__init__(*args, **kwargs) # Register for tasks, categories, efforts and notes being changed so we # can monitor when the task file needs saving (i.e. is 'dirty'): for container in self.tasks(), self.categories(), self.notes(): for eventType in container.modificationEventTypes(): self.registerObserver(self.onDomainObjectAddedOrRemoved, eventType, eventSource=container) for eventType in (base.Object.markDeletedEventType(), base.Object.markNotDeletedEventType()): self.registerObserver(self.onDomainObjectAddedOrRemoved, eventType) for eventType in task.Task.modificationEventTypes(): if not eventType.startswith('pubsub'): self.registerObserver(self.onTaskChanged_Deprecated, eventType) pub.subscribe(self.onTaskChanged, 'pubsub.task') for eventType in effort.Effort.modificationEventTypes(): self.registerObserver(self.onEffortChanged, eventType) for eventType in note.Note.modificationEventTypes(): if not eventType.startswith('pubsub'): self.registerObserver(self.onNoteChanged_Deprecated, eventType) pub.subscribe(self.onNoteChanged, 'pubsub.note') for eventType in category.Category.modificationEventTypes(): if not eventType.startswith('pubsub'): self.registerObserver(self.onCategoryChanged_Deprecated, eventType) pub.subscribe(self.onCategoryChanged, 'pubsub.category') for eventType in attachment.FileAttachment.modificationEventTypes() + \ attachment.URIAttachment.modificationEventTypes() + \ attachment.MailAttachment.modificationEventTypes(): if not eventType.startswith('pubsub'): self.registerObserver(self.onAttachmentChanged_Deprecated, eventType) pub.subscribe(self.onAttachmentChanged, 'pubsub.attachment')