def load_callback(self, callback, response): self.beginResetModel() QApplication.setOverrideCursor(Qt.WaitCursor) if not response: logging.error(response.message) else: asset_cache.request(response.data) # Pagination current_page = self.parent().current_page if len(response.data) > RECORDS_PER_PAGE: page_count = current_page + 1 elif len(response.data) == 0: page_count = max(1, current_page - 1) else: page_count = current_page if current_page > page_count: current_page = page_count # Replace object data if len(response.data) > RECORDS_PER_PAGE: response.data.pop(-1) self.object_data = [asset_cache.get(row[0]) for row in response.data] self.parent().set_page(current_page, page_count) self.endResetModel() QApplication.restoreOverrideCursor() callback()
def load_callback(self, response): self.parent().setCursor(Qt.ArrowCursor) if not response: logging.error(response.message) return QApplication.processEvents() self.parent().setCursor(Qt.WaitCursor) self.beginResetModel() logging.info("Loading rundown. Please wait...") required_assets = [] self.header_data = config["playout_channels"][self.id_channel].get( "rundown_columns", DEFAULT_COLUMNS) self.object_data = [] self.event_ids = [] i = 0 for row in response.data: row["rundown_row"] = i if row["object_type"] == "event": self.object_data.append(Event(meta=row)) i += 1 self.event_ids.append(row["id"]) if row["is_empty"]: self.object_data.append( Item(meta={ "title": "(Empty event)", "id_bin": row["id_bin"] })) i += 1 elif row["object_type"] == "item": item = Item(meta=row) item.id_channel = self.id_channel if row["id_asset"]: item._asset = asset_cache.get(row["id_asset"]) required_assets.append( [row["id_asset"], row["asset_mtime"]]) else: item._asset = False self.object_data.append(item) i += 1 else: continue asset_cache.request(required_assets) self.endResetModel() self.parent().setCursor(Qt.ArrowCursor) logging.goodnews( "Rundown loaded in {:.03f}s".format(time.time() - self.load_start_time)) if self.current_callback: self.current_callback()
def refresh_assets(self, *objects, request_data=False): if request_data: asset_cache.request([[aid, 0] for aid in objects]) for row, obj in enumerate(self.model().object_data): if obj.id in objects: self.model().object_data[row] = asset_cache[obj.id] self.model().dataChanged.emit( self.model().index(row, 0), self.model().index(row, len(self.model().header_data) - 1), )
def seismic_handler(self, message): if (message.method == "objects_changed" and message.data["object_type"] == "asset"): objects = message.data["objects"] logging.debug( f"[MAIN WINDOW] {len(objects)} asset(s) have been changed") asset_cache.request([[aid, message.timestamp + 1] for aid in objects]) return if message.method == "config_changed": self.load_settings() return for module, methods in self.subscribers: if message.method in methods: module.seismic_handler(message)
def on_set_qc(self, state): state_name = {0: "New", 3: "Rejected", 4: "Approved"}[state] report = (f"{format_time(time.time())} : {user['login']} " f"flagged the asset as {state_name}") if self.asset["qc/report"]: report = self.asset["qc/report"] + "\n" + report response = api.set(objects=[self.asset.id], data={ "qc/state": state, "qc/report": report }) if not response: logging.error(response.message) return try: aid = response.data[0] except Exception: aid = self.asset.id asset_cache.request([[aid, 0]])
def on_apply(self): if not self.form: return data = {} if self.asset.id: if (self.asset["id_folder"] != self.folder_select.get_value() and self.folder_select.isEnabled()): data["id_folder"] = self.folder_select.get_value() if (self.asset["True"] != self.duration.get_value() and self.duration.isEnabled()): data["duration"] = self.duration.get_value() for key in self.form.changed: data[key] = self.form[key] else: data["id_folder"] = self.folder_select.get_value() data["duration"] = self.duration.get_value() for key in self.form.keys(): data[key] = self.form[key] if self.preview.changed: data.update(self.preview.changed) self.setCursor(Qt.BusyCursor) response = api.set(objects=[self.asset.id], data=data) if not response: logging.error(response.message) else: logging.debug("[DETAIL] Set method responded", response.response) try: aid = response.data[0] except Exception: aid = self.asset.id self.asset["id"] = aid asset_cache.request([[aid, 0]])