コード例 #1
0
 def del_from_db(self, uri, backup):
     """
         Delete track from db
         @param uri as str
         @param backup as bool
         @return (popularity, ltime, mtime,
                  loved album, album_popularity)
     """
     try:
         track_id = App().tracks.get_id_by_uri(uri)
         duration = App().tracks.get_duration(track_id)
         album_id = App().tracks.get_album_id(track_id)
         album_artist_ids = App().albums.get_artist_ids(album_id)
         artist_ids = App().tracks.get_artist_ids(track_id)
         track_pop = App().tracks.get_popularity(track_id)
         track_rate = App().tracks.get_rate(track_id)
         track_ltime = App().tracks.get_ltime(track_id)
         album_mtime = App().tracks.get_mtime(track_id)
         track_loved = App().tracks.get_loved(track_id)
         album_pop = App().albums.get_popularity(album_id)
         album_rate = App().albums.get_rate(album_id)
         album_loved = App().albums.get_loved(album_id)
         album_synced = App().albums.get_synced(album_id)
         if backup:
             f = Gio.File.new_for_uri(uri)
             name = f.get_basename()
             self.__history.add(name, duration, track_pop, track_rate,
                                track_ltime, album_mtime, track_loved,
                                album_loved, album_pop, album_rate,
                                album_synced)
         App().tracks.remove(track_id)
         genre_ids = App().tracks.get_genre_ids(track_id)
         App().albums.clean()
         App().genres.clean()
         App().artists.clean()
         App().cache.clear_durations(album_id)
         SqlCursor.commit(App().db)
         item = CollectionItem(album_id=album_id)
         if not App().albums.get_name(album_id):
             item.artist_ids = []
             for artist_id in album_artist_ids + artist_ids:
                 if not App().artists.get_name(artist_id):
                     item.artist_ids.append(artist_id)
             item.genre_ids = []
             for genre_id in genre_ids:
                 if not App().genres.get_name(genre_id):
                     item.genre_ids.append(genre_id)
             emit_signal(self, "updated", item, ScanUpdate.REMOVED)
         else:
             # Force genre for album
             genre_ids = App().tracks.get_album_genre_ids(album_id)
             App().albums.set_genre_ids(album_id, genre_ids)
             emit_signal(self, "updated", item, ScanUpdate.MODIFIED)
         return (track_pop, track_rate, track_ltime, album_mtime,
                 track_loved, album_loved, album_pop, album_rate)
     except Exception as e:
         Logger.error("CollectionScanner::del_from_db: %s" % e)
コード例 #2
0
 def collection_item(self):
     """
         Get collection item related to album
         @return CollectionItem
     """
     item = CollectionItem(album_id=self.id,
                           album_name=self.name,
                           artist_ids=self.artist_ids,
                           lp_album_id=self.lp_album_id)
     return item
コード例 #3
0
 def __save(self, save):
     """
         Save album to collection.
         @param save as bool
     """
     # Save album by updating storage type
     if save:
         self.db.set_storage_type(self.id, StorageType.SAVED)
     else:
         self.db.set_storage_type(self.id, StorageType.EPHEMERAL)
     self.reset("mtime")
     if save:
         item = CollectionItem(artist_ids=self.artist_ids, album_id=self.id)
         emit_signal(App().scanner, "updated", item, ScanUpdate.ADDED)
     else:
         removed_artist_ids = []
         for artist_id in self.artist_ids:
             if not App().artists.get_name(artist_id):
                 removed_artist_ids.append(artist_id)
         item = CollectionItem(artist_ids=removed_artist_ids,
                               album_id=self.id)
         emit_signal(App().scanner, "updated", item, ScanUpdate.REMOVED)
コード例 #4
0
 def __scan_files(self, files, db_mtimes, scan_type):
     """
         Scan music collection for new audio files
         @param files as [str]
         @param db_mtimes as {}
         @param scan_type as ScanType
         @thread safe
     """
     discoverer = Discoverer()
     try:
         # Scan new files
         for (mtime, uri) in files:
             # Handle a stop request
             if self.__thread is None and scan_type != ScanType.EXTERNAL:
                 raise Exception("cancelled")
             try:
                 if not self.__scan_to_handle(uri):
                     self.__progress_count += 2
                     continue
                 db_mtime = db_mtimes.get(uri, 0)
                 if mtime > db_mtime:
                     # Do not use mtime if not intial scan
                     if db_mtimes:
                         mtime = int(time())
                     self.__tags[uri] = self.__get_tags(
                         discoverer, uri, mtime)
                     self.__progress_count += 1
                     self.__update_progress(self.__progress_count,
                                            self.__progress_total, 0.001)
                 else:
                     # We want to play files, so put them in items
                     if scan_type == ScanType.EXTERNAL:
                         track_id = App().tracks.get_id_by_uri(uri)
                         item = CollectionItem(track_id=track_id)
                         self.__items.append(item)
                     self.__progress_count += 2
                     self.__update_progress(self.__progress_count,
                                            self.__progress_total, 0.1)
             except Exception as e:
                 Logger.error("Scanning file: %s, %s" % (uri, e))
     except Exception as e:
         Logger.warning("CollectionScanner::__scan_files(): % s" % e)
コード例 #5
0
ファイル: helper_web_save.py プロジェクト: aembleton/cinamp
 def __save_album(self, payload, storage_type):
     """
         Save album payload to DB
         @param payload as {}
         @param storage_type as StorageType
         @return CollectionItem
     """
     (timestamp, year) = self.__get_date_from_payload(payload)
     item = CollectionItem(uri=payload["uri"],
                           album_artists=payload["artists"],
                           album_name=payload["name"],
                           album_mtime=int(time()),
                           year=year,
                           timestamp=timestamp,
                           mb_album_id=payload["mbid"],
                           album_synced=payload["track-count"],
                           storage_type=storage_type)
     Logger.debug("SaveWebHelper::save_album(): %s - %s",
                  item.album_artists, item.album_name)
     App().scanner.save_album(item)
     App().albums.add_genre(item.album_id, Type.WEB)
     return item
コード例 #6
0
 def __add2db(self,
              uri,
              name,
              artists,
              genres,
              a_sortnames,
              aa_sortnames,
              album_artists,
              album_name,
              discname,
              album_loved,
              album_mtime,
              album_synced,
              album_rate,
              album_pop,
              discnumber,
              year,
              timestamp,
              mb_album_id,
              mb_track_id,
              mb_artist_id,
              mb_album_artist_id,
              tracknumber,
              track_pop,
              track_rate,
              bpm,
              track_mtime,
              track_ltime,
              track_loved,
              duration,
              storage_type=StorageType.COLLECTION):
     """
         Add new file to DB
         @param uri as str
         @param tags as *()
         @param storage_type as StorageType
         @return CollectionItem
     """
     item = CollectionItem(uri=uri,
                           track_name=name,
                           artists=artists,
                           genres=genres,
                           a_sortnames=a_sortnames,
                           aa_sortnames=aa_sortnames,
                           album_artists=album_artists,
                           album_name=album_name,
                           discname=discname,
                           album_loved=album_loved,
                           album_mtime=album_mtime,
                           album_synced=album_synced,
                           album_rate=album_rate,
                           album_pop=album_pop,
                           discnumber=discnumber,
                           year=year,
                           timestamp=timestamp,
                           mb_album_id=mb_album_id,
                           mb_track_id=mb_track_id,
                           mb_artist_id=mb_artist_id,
                           mb_album_artist_id=mb_album_artist_id,
                           tracknumber=tracknumber,
                           track_pop=track_pop,
                           track_rate=track_rate,
                           bpm=bpm,
                           track_mtime=track_mtime,
                           track_ltime=track_ltime,
                           track_loved=track_loved,
                           duration=duration,
                           storage_type=storage_type)
     self.save_album(item)
     self.save_track(item)
     return item