def _rItem2Index(self, item, parent=None): if parent is None: parent = QModelIndex() if item == self.getItem(parent): return parent if not parent.isValid() or parent.internalPointer().populated: for i in range(self.rowCount(parent)): index = self.index(i, 0, parent) index = self._rItem2Index(item, index) if index.isValid(): return index return QModelIndex()
def processJobResult(self, job): log("processJobResult job: %s" % job.getJobId()) job_result = job.getResult() if job_result is None: # TODO Exception self._releaseIndexesByJob(job) return indexes = {} for ngw_resource in job_result.added_resources: if ngw_resource.common.parent is None: index = QModelIndex() new_index = self.addNGWResourceToTree(index, ngw_resource) else: index = indexes.get(ngw_resource.common.parent.id) if index is None: index = self.getIndexByNGWResourceId( ngw_resource.common.parent.id, self.index(0, 0, QModelIndex())) indexes[ngw_resource.common.parent.id] = index item = index.internalPointer() current_ids = [ item.child(i).ngw_resource_id() for i in range(0, item.childCount()) if isinstance(item.child(i), QNGWResourceItem) ] if ngw_resource.common.id not in current_ids: new_index = self.addNGWResourceToTree(index, ngw_resource) else: continue if job_result.main_resource_id == ngw_resource.common.id: if job.model_response is not None: job.model_response.done.emit(new_index) for ngw_resource in job_result.edited_resources: index = self.getIndexByNGWResourceId( ngw_resource.common.parent.id, self.index(0, 0, QModelIndex())) item = index.internalPointer() for i in range(0, item.childCount()): if item.child(i).ngw_resource_id() == ngw_resource.common.id: self.beginRemoveRows(index, i, i) item.removeChild(item.child(i)) self.endRemoveRows() break else: # TODO exception: not find deleted resource in corrent tree self._releaseIndexesByJob(job) return new_index = self.addNGWResourceToTree(index, ngw_resource) if job.model_response is not None: job.model_response.done.emit(new_index) for ngw_resource in job_result.deleted_resources: # log(">>> delete ngw_resource: " + str(ngw_resource)) index = self.getIndexByNGWResourceId( ngw_resource.common.parent.id, self.index(0, 0, QModelIndex())) item = index.internalPointer() for i in range(0, item.childCount()): if item.child(i).ngw_resource_id() == ngw_resource.common.id: self.beginRemoveRows(index, i, i) item.removeChild(item.child(i)) self.endRemoveRows() break else: # TODO exception: not find deleted resource in corrent tree self._releaseIndexesByJob(job) return ngw_resource = item.data(0, QNGWResourceItem.NGWResourceRole) ngw_resource.update() if job.model_response is not None: job.model_response.done.emit(index) self._releaseIndexesByJob(job)