]> git.0d.be Git - botaradio.git/commitdiff
fix: refresh video metatdata after validation
authorTerry Geng <gengyanda@gmail.com>
Thu, 12 Mar 2020 10:18:12 +0000 (18:18 +0800)
committerTerry Geng <gengyanda@gmail.com>
Thu, 12 Mar 2020 10:35:24 +0000 (18:35 +0800)
command.py
media/cache.py
media/playlist.py
mumbleBot.py

index 2c04f0cee33169357efdcb9d8f7b45ece4d1fc95..5022088999d6f1dacbfd670365f2520836f33120 100644 (file)
@@ -134,7 +134,7 @@ def cmd_url_ban(bot, user, text, command, parameter):
             var.cache.free_and_delete(id)
             var.playlist.remove_by_id(id)
         else:
-            if var.playlist.current_item().type == 'url':
+            if var.playlist.current_item() and var.playlist.current_item().type == 'url':
                 item = var.playlist.current_item().item()
                 bot.mumble.users[text.actor].send_text_message(util.url_ban(util.get_url_from_input(item.url)))
                 var.cache.free_and_delete(item.id)
index 72261eb7733781f06804fa3905761c8cfdb7d9c6..eef1688901327cc367a05e0d0c7b3670975d6052 100644 (file)
@@ -177,15 +177,6 @@ class CachedItemWrapper:
             self.lib.save(self.id)
         return ret
 
-    def async_prepare(self):
-        th = threading.Thread(
-            target=self.prepare, name="Prepare-" + self.id[:7])
-        self.log.info(
-            "%s: start preparing item in thread: " % self.item().type + self.format_debug_string())
-        th.daemon = True
-        th.start()
-        return th
-
     def uri(self):
         return self.item().uri()
 
index d078fa368fc139efa66cd792810e337d409d1443..55dca33ac3dba5fc95c2c261990e15f81460fbcb 100644 (file)
@@ -58,7 +58,7 @@ class BasePlaylist(list):
         self.version += 1
         super().append(item)
         self.pending_items.append(item)
-        self.start_async_validating()
+        self.async_validate()
 
         return item
 
@@ -74,7 +74,7 @@ class BasePlaylist(list):
             self.current_index += 1
 
         self.pending_items.append(item)
-        self.start_async_validating()
+        self.async_validate()
 
         return item
 
@@ -82,7 +82,7 @@ class BasePlaylist(list):
         self.version += 1
         super().extend(items)
         self.pending_items.extend(items)
-        self.start_async_validating()
+        self.async_validate()
         return items
 
     def next(self):
@@ -210,7 +210,7 @@ class BasePlaylist(list):
                 print("%d %s" % (index, item_wrapper.format_debug_string()))
         print("=====     End     =====")
 
-    def start_async_validating(self):
+    def async_validate(self):
         if not self.validating_thread_lock.locked():
             time.sleep(0.1)  # Just avoid validation finishes too fast and delete songs while something is reading it.
             th = threading.Thread(target=self._check_valid, name="Validating")
@@ -223,14 +223,34 @@ class BasePlaylist(list):
         while len(self.pending_items) > 0:
             item = self.pending_items.pop()
             self.log.debug("playlist: validating %s" % item.format_debug_string())
+            ver = item.version
             if not item.validate() or item.is_failed():
                 self.log.debug("playlist: validating failed.")
                 var.cache.free_and_delete(item.id)
                 self.remove_by_id(item.id)
+                continue
+            if item.version > ver:
+                self.version += 1
 
         self.log.debug("playlist: validating finished.")
         self.validating_thread_lock.release()
 
+    def async_prepare(self, index):
+        th = threading.Thread(
+            target=self._prepare, name="Prepare-" + self[index].id[:7], args=(index,))
+        self.log.info(
+            "%s: start preparing item in thread: " % self[index].item().type + self[index].format_debug_string())
+        th.daemon = True
+        th.start()
+        return th
+
+    def _prepare(self, index):
+        item = self[index]
+        ver = item.version
+        item.prepare()
+        if item.version > ver:
+            self.version += 1
+
 
 class OneshotPlaylist(BasePlaylist):
     def __init__(self):
index dd39c8b787065985adcff566b7d84744691ef9bf..23e1d41ca2159d91465e839cf198d39731f56556 100644 (file)
@@ -355,7 +355,7 @@ class MumbleBot:
             next = var.playlist.next_item()
             if next.validate():
                 if not next.is_ready():
-                    next.async_prepare()
+                    var.playlist.async_prepare(var.playlist.next_index())
                 break
             else:
                 var.playlist.remove_by_id(next.id)
@@ -427,7 +427,7 @@ class MumbleBot:
                             else:
                                 self.log.info("bot: current music isn't ready, start downloading.")
                                 self.wait_for_downloading = True
-                                current.async_prepare()
+                                var.playlist.async_prepare(var.playlist.current_index)
                                 self.send_msg(constants.strings('download_in_progress', item=current.format_short_string()))
                         else:
                             var.playlist.remove_by_id(current.id)
@@ -439,6 +439,7 @@ class MumbleBot:
                     if current:
                         if current.is_ready():
                             self.wait_for_downloading = False
+                            var.playlist.version += 1
                             self.launch_music()
                             self.async_download_next()
                         elif current.is_failed():