]> git.0d.be Git - botaradio.git/commitdiff
fix: delete item keyerror #91
authorTerry Geng <gengyanda@gmail.com>
Sun, 8 Mar 2020 01:26:36 +0000 (09:26 +0800)
committerTerry Geng <gengyanda@gmail.com>
Sun, 8 Mar 2020 01:26:36 +0000 (09:26 +0800)
command.py
media/item.py
media/library.py
media/playlist.py
media/url.py
mumbleBot.py

index 9657f07a28eb4bccf16162fcb3cb246b8e9e3f16..b8e9eed7e2d9d85e9906adf4a45bc7956bca7cb2 100644 (file)
@@ -287,7 +287,7 @@ def cmd_play_url(bot, user, text, command, parameter):
     var.playlist.append(music_wrapper)
 
     log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
-    bot.send_msg(constants.strings('file_added', item=music_wrapper.format_song_string()), text)
+    bot.send_msg(constants.strings('file_added', item=music_wrapper.format_short_string()), text)
     if len(var.playlist) == 2:
         # If I am the second item on the playlist. (I am the next one!)
         bot.async_download_next()
index 0ee43267c483a4ca9996a9d50bf7cce8ea0dfbe4..059cfbff235690fea3567e37f69e00e37819fdca 100644 (file)
@@ -86,7 +86,8 @@ class BaseItem:
         return ""
 
     def send_client_message(self, msg):
-        self.bot.send_msg(msg)
+        if self.bot:
+            self.bot.send_msg(msg)
 
     def to_dict(self):
         return {"type" : "base", "id": self.id, "ready": self.ready, "path": self.path, "tags": self.tags}
index d0476fc02b2deb12705012faeb57c0dba4a4408c..229634c22dd180c1eb3f0fa367f9f37a7f13d041 100644 (file)
@@ -73,18 +73,22 @@ class MusicLibrary(dict):
         self.log.debug("library: music save into database: %s" % self[id].format_debug_string())
         self.db.insert_music(self[id].to_dict())
 
-    def delete(self, item):
-        self.log.debug("library: DELETE item from the database: %s" % item.format_debug_string())
-
-        if item.type == 'file' and item.path in self.file_id_lookup:
-            if item.path in self.file_id_lookup:
-                del self.file_id_lookup[item.path]
-            self.files.remove(item.path)
-            self.save_dir_cache()
-
-        if item.id in self:
-            del self[item.id]
-        self.db.delete_music(id=item.id)
+    def delete(self, id):
+        try:
+            item = self.get_item_by_id(None, id)
+            self.log.debug("library: DELETE item from the database: %s" % item.format_debug_string())
+
+            if item.type == 'file' and item.path in self.file_id_lookup:
+                if item.path in self.file_id_lookup:
+                    del self.file_id_lookup[item.path]
+                self.files.remove(item.path)
+                self.save_dir_cache()
+
+            if item.id in self:
+                del self[item.id]
+            self.db.delete_music(id=item.id)
+        except KeyError:
+            return
 
     def free(self, id):
         if id in self:
index 088dc5813d5b3a91792f58998aff7a74900c4268..fac78568240eef206041d9292eb8da59ad75af79 100644 (file)
@@ -235,8 +235,6 @@ class BasePlaylist(list):
         for index in to_be_removed:
             self.remove(index)
 
-        var.library.free(id)
-
     def current_item(self):
         if len(self) == 0:
             return False
@@ -318,8 +316,8 @@ class BasePlaylist(list):
             self.log.debug("playlist: validating %s" % item.format_debug_string())
             if not item.validate() or item.is_failed():
                 self.log.debug("playlist: validating failed.")
+                var.library.delete(item.id)
                 self.remove_by_id(item.id)
-                var.library.delete(item.item())
 
         self.log.debug("playlist: validating finished.")
         self.validating_thread_lock.release()
@@ -332,9 +330,11 @@ class OneshotPlaylist(BasePlaylist):
         self.current_index = -1
 
     def from_list(self, _list, current_index):
-        for i in range(current_index):
-            _list.pop()
-        return super().from_list(_list, -1)
+        if len(_list) > 0:
+            for i in range(current_index):
+                _list.pop()
+            return super().from_list(_list, -1)
+        return self
 
     def next(self):
         if len(self) == 0:
index 81f3642dee4e2ddcd7464295a41e78cf39e9087c..f70c841783e82ee413facd404fed26f30b89ccd0 100644 (file)
@@ -68,15 +68,18 @@ class URLItem(BaseItem):
         return True
 
     def validate(self):
+        self.validating_lock.acquire()
         if self.ready in ['yes', 'validated']:
             return True
 
+        if self.ready == 'failed':
+            return False
+
         if os.path.exists(self.path):
             self.ready = "yes"
             return True
 
         # avoid multiple process validating in the meantime
-        self.validating_lock.acquire()
         info = self._get_info_from_url()
         self.validating_lock.release()
 
@@ -232,7 +235,7 @@ class URLItem(BaseItem):
         return display
 
     def format_short_string(self):
-        return self.title if self.title else self.url
+        return self.title if self.title.strip() else self.url
 
     def display_type(self):
         return constants.strings("url")
index 7433a48b9c029fc0a441cc5ba237afa90da1e2d7..7f7c99eb80160e15f02ff2a810204587c72e7f7d 100644 (file)
@@ -347,7 +347,7 @@ class MumbleBot:
                 break
             else:
                 var.playlist.remove_by_id(next.id)
-                var.library.delete(next.item())
+                var.library.delete(next.id)
 
 
     # =======================
@@ -407,7 +407,7 @@ class MumbleBot:
                                 self.send_msg(constants.strings('download_in_progress', item=current.format_short_string()))
                         else:
                             var.playlist.remove_by_id(current.id)
-                            var.library.delete(current.item())
+                            var.library.delete(current.id)
                     else:
                         self._loop_status = 'Empty queue'
                 else: