Example #1
0
    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()
Example #2
0
    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()
Example #3
0
 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),
             )
Example #4
0
    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)
Example #5
0
    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]])
Example #6
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]])