Esempio n. 1
0
    def get_album_art_path(self, book, size):
        query = ArtworkCacheModel.select().where(
            ArtworkCacheModel.book == book.id)
        if query.exists():
            try:
                uuid = query.first().uuid
            except Exception as e:
                reporter.error(
                    "artwork_cache",
                    "load_pixbuf_from_cache: query exists but query.first().uuid crashed."
                )
                return None
        else:
            return None

        cache_dir = os.path.join(get_cache_dir(), "artwork")
        cache_dir = os.path.join(cache_dir, uuid)

        try:
            if os.path.exists(cache_dir):
                file_path = os.path.join(cache_dir, str(size) + ".jpg")
                if os.path.exists(file_path):
                    return file_path
                else:
                    return None
        except Exception as e:
            log.warning(e)
            return None

        return None
Esempio n. 2
0
def __load_pixbuf_from_cache(book, size):
    """
    """
    pixbuf = None

    query = ArtworkCache.select().where(ArtworkCache.book == book.id)
    if query.exists():
        uuid = query.first().uuid
    else:
        return None

    cache_dir = os.path.join(get_cache_dir(), "artwork")
    cache_dir = os.path.join(cache_dir, uuid)

    try:
        if os.path.exists(cache_dir):
            file_path = os.path.join(cache_dir, str(size) + ".jpg")
            if os.path.exists(file_path):
                pixbuf = GdkPixbuf.Pixbuf.new_from_file(os.path.join(cache_dir, str(size) + ".jpg"))
            else:
                return None
    except Exception as e:
        log.warning(e)
        return None

    return pixbuf
Esempio n. 3
0
def __create_artwork_cache(book, pixbuf, size):
    """
    Creates a resized cache version of the given pixbuf and saves it 
    in the cozy cache folder under a unique identifier. 
    :param book: Book which the artwork is from
    :param pixbuf: Pixbuf to be cached
    :param size: Size for the cached version
    :return: Resized pixbuf
    """
    query = ArtworkCache.select().where(ArtworkCache.book == book.id)
    gen_uuid = ""

    if query.exists():
        gen_uuid = str(query.first().uuid)
    else:
        gen_uuid = str(uuid.uuid4())
        ArtworkCache.create(book = book, uuid=gen_uuid)

    cache_dir = os.path.join(os.path.join(get_cache_dir(), "artwork"), gen_uuid)
    if not os.path.exists(cache_dir):
        os.makedirs(cache_dir)

    resized_pixbuf = __resize_pixbuf(pixbuf, size)
    file_path = os.path.join(cache_dir, str(size) + ".jpg")
    if not os.path.exists(file_path):
        try:
            resized_pixbuf.savev(file_path, "jpeg", ["quality", None], ["95"])
        except Exception as e:
            log.warning("Failed to save resized cache albumart for following uuid: " + gen_uuid)
            log.warning(e)

    return resized_pixbuf
Esempio n. 4
0
    def __update_metadata(self, track):
        if track is None:
            track = get_current_track()
        if track is None:
            self.__metadata = {
                "mpris:trackid":
                GLib.Variant("o", "/org/mpris/MediaPlayer2/TrackList/NoTrack")
            }
            self.refresh = True
        else:
            self.__metadata["mpris:trackid"] = self.__track_id
            track_number = track.number
            if track_number is None:
                track_number = 1
            self.__metadata["xesam:trackNumber"] = GLib.Variant(
                "i", track_number)
            self.__metadata["xesam:title"] = GLib.Variant("s", track.name)
            self.__metadata["xesam:album"] = GLib.Variant("s", track.book.name)
            self.__metadata["xesam:artist"] = GLib.Variant(
                "as", [track.book.author])
            self.__metadata["mpris:length"] = GLib.Variant(
                "x", track.length * 1000 * 1000)
            self.__metadata["xesam:url"] = GLib.Variant(
                "s", "file:///" + track.file)

            query = ArtworkCache.select().where(
                ArtworkCache.book == track.book.id)
            if query.exists():
                uuid = query.first().uuid
                cache_dir = get_cache_dir()
                cache_dir = os.path.join(cache_dir, uuid)
                file_path = os.path.join(cache_dir, "180.jpg")
                if file_path:
                    self.__metadata["mpris:artUrl"] = GLib.Variant(
                        "s", "file://" + file_path)
Esempio n. 5
0
    def delete_cache(self):
        """
        Deletes the entire offline cache files.
        Doesn't delete anything from the cozy.db.
        """
        cache_dir = os.path.join(get_cache_dir(), "offline")

        import shutil
        shutil.rmtree(cache_dir)
Esempio n. 6
0
    def __init__(self):
        self.ui = cozy.ui.main_view.CozyUI()

        self.cache_dir = os.path.join(get_cache_dir(), "offline")
        if not os.path.exists(self.cache_dir):
            os.makedirs(self.cache_dir)

        self._start_processing()

        cozy.ui.settings.Settings().add_listener(self.__on_settings_changed)
Esempio n. 7
0
    def delete_artwork_cache(self):
        """
        Deletes the artwork cache completely.
        """
        cache_dir = os.path.join(get_cache_dir(), "artwork")

        import shutil
        if os.path.exists(cache_dir):
            shutil.rmtree(cache_dir)

        q = ArtworkCacheModel.delete()
        q.execute()
Esempio n. 8
0
    def __init__(self):
        super().__init__()
        self.ui = cozy.ui.main_view.CozyUI()

        from cozy.media.importer import Importer
        self._importer = inject.instance(Importer)

        self._importer.add_listener(self._on_importer_event)

        self.cache_dir = os.path.join(get_cache_dir(), "offline")
        if not os.path.exists(self.cache_dir):
            os.makedirs(self.cache_dir)

        self._start_processing()

        inject.instance(cozy.ui.settings.Settings).add_listener(self.__on_settings_changed)
Esempio n. 9
0
def __update_db_6(db):
    migrator = SqliteMigrator(db)

    db.create_tables([OfflineCache])

    external = BooleanField(default=False)
    offline = BooleanField(default=False)
    downloaded = BooleanField(default=False)

    migrate(migrator.add_column('storage', 'external', external),
            migrator.add_column('book', 'offline', offline),
            migrator.add_column('book', 'downloaded', downloaded))

    Settings.update(version=6).execute()

    import shutil
    shutil.rmtree(get_cache_dir())