def __init__(self, **kwargs):
                super(AmpacheBrowser, self).__init__(kwargs)

                self.__limit = 5000

                self.__songs_cache = '_songs'
                self.__cache_directory = os.path.join(
                        RB.user_cache_dir(),
                        'ampache')
                self.__songs_cache_filename = os.path.join(
                        self.__cache_directory,
                        ''.join([self.__songs_cache, '.xml']))
                self.__settings = Gio.Settings('org.gnome.rhythmbox.plugins.ampache')
                self.__albumart = {}
                self.__playlists = collections.deque(
                        [[0, self.__songs_cache]])
                self.__caches = collections.deque()
                self.__playlist_sources = []
                self.__entries = []

                self.__text = None
                self.__progress_text = None
                self.__progress = 1

                self.__activated = False

                # add action RefetchAmpache and assign callback refetch_ampache
                app = Gio.Application.get_default()
                action = Gio.SimpleAction(name='refetch-ampache')
                action.connect('activate', self.refetch_ampache)
                app.add_action(action)
Example #2
0
	def do_activate(self):
		shell = self.object
		self.db = shell.props.db

		self.shell_player = shell.props.shell_player
		self.shell_player.connect("playing-song-changed", self.playing_song_changed_cb)
		self.shell_player.connect("playing-song-property-changed", self.playing_song_property_changed_cb)
		self.shell_player.connect("playing-changed", self.playing_changed_cb)
		self.shell_player.connect("elapsed-nano-changed", self.elapsed_nano_changed_cb)
		self.playing_song_changed_cb(self.shell_player, self.shell_player.get_playing_entry())

		self.http_server = Soup.Server()
		self.http_server.add_handler(path="/art/", callback=self.http_art_cb)
		self.http_server.add_handler(path="/icon/", callback=self.http_icon_cb)
		self.http_server.add_handler(path="/entry/current/stream", callback=self.http_track_cb)
		self.http_server.add_handler(path="/css/", callback=self.http_static_css_cb)
		self.http_server.add_handler(path="/js/", callback=self.http_static_js_cb)
		self.http_server.add_websocket_handler("/ws/player", None, None, self.player_websocket_cb)
		self.http_server.add_handler(path="/", callback=self.http_root_cb)

		self.http_listen()
		self.http_server.run_async()

		self.artcache = os.path.join(RB.user_cache_dir(), "album-art", "")
		self.art_store = RB.ExtDB(name="album-art")
		self.art_store.connect("added", self.art_added_cb)
 def _check_configfile(self):
     """ Create the default config template or load existing config file """
     if not os.path.isfile(self.configfile):
         folder = os.path.split(self.configfile)[0]
         if not os.path.exists(folder):
             os.makedirs(folder)
         """ create a default config if not available """
         conffile = open(self.configfile, "w")
         conffile.write(
             '[conf]\n' + 'ampache_url = \n' + 'ampache_user = \n' +
             'ampache_api = \n' + 'ampache_password = \n' + 'log_path = ' +
             os.path.join(RB.user_cache_dir(), 'ampache-fm.txt') + '\n' +
             'log_rotate = True \n' + 'log_limit = 10760720')
         conffile.close()
     # read the conf file
     self.conf.read(self.configfile)
     # updated to add password support
     if not self.conf.has_option(C, 'ampache_password'):
         # set default path for the user
         datafile = open(self.configfile, 'w')
         self.conf.set(C, 'ampache_password', '')
         self.conf.write(datafile)
         datafile.close()
         self.conf.read(self.configfile)
     return
Example #4
0
 def check_lyrics_folder(self):
     folder = self.settings["lyrics-folder-change"]
     changed = False
     if _DEBUG == True:
         import sys
         func_name = sys._getframe().f_code.co_name
         debug_file = open ( "debug_file", "a+" )
         debug_file.write ( func_name + ": " + folder + '\n'); 
         debug_file.close()
     # expand user directory
     if "~" in folder:
         folder = os.path.expanduser(folder)
         changed = True
         
     # path not set or invalid
     if not folder or not os.path.exists(folder):
         folder = os.path.join(RB.user_cache_dir(), "lyrics")
         folder = os.path.expanduser(folder)
         if not os.path.exists(folder):
             os.mkdir(folder)
         changed = True
         print "invalid path in lyrics-folder-change, set to default"
     
     if changed:
         self.settings["lyrics-folder-change"] = folder
Example #5
0
    def __init__(self, **kwargs):
        super(AmpacheBrowser, self).__init__(kwargs)

        self.__limit = 5000

        self.__songs_cache = '_songs'
        self.__cache_directory = os.path.join(RB.user_cache_dir(), 'ampache')
        self.__songs_cache_filename = os.path.join(
            self.__cache_directory, ''.join([self.__songs_cache, '.xml']))
        self.__settings = Gio.Settings('org.gnome.rhythmbox.plugins.ampache')
        self.__albumart = {}
        self.__playlists = collections.deque([[0, self.__songs_cache]])
        self.__caches = collections.deque()
        self.__playlist_sources = []
        self.__entries = []

        self.__text = None
        self.__progress_text = None
        self.__progress = 1

        self.__activated = False

        # add action RefetchAmpache and assign callback refetch_ampache
        app = Gio.Application.get_default()
        action = Gio.SimpleAction(name='refetch-ampache')
        action.connect('activate', self.refetch_ampache)
        app.add_action(action)
Example #6
0
def set_lyrics_folder():
    folder = os.path.join(RB.user_cache_dir(), "synchronised_lyrics")
    folder = os.path.expanduser(folder)
    if not os.path.exists(folder):
        os.mkdir(folder)

    return folder
Example #7
0
    def do_activate(self):
        shell = self.object
        self.db = shell.props.db

        self.artcache = os.path.join(RB.user_cache_dir(), "album-art", "")
        self.art_store = RB.ExtDB(name="album-art")
        self.art_store.connect("added", self.art_added_cb)

        self.shell_player = shell.props.shell_player
        self.shell_player.connect("playing-song-changed",
                                  self.playing_song_changed_cb)
        self.shell_player.connect("playing-song-property-changed",
                                  self.playing_song_property_changed_cb)
        self.shell_player.connect("playing-changed", self.playing_changed_cb)
        self.shell_player.connect("elapsed-nano-changed",
                                  self.elapsed_nano_changed_cb)
        self.playing_song_changed_cb(self.shell_player,
                                     self.shell_player.get_playing_entry())

        self.http_server = Soup.Server()
        self.http_server.add_handler(path="/art/", callback=self.http_art_cb)
        self.http_server.add_handler(path="/icon/", callback=self.http_icon_cb)
        self.http_server.add_handler(path="/entry/current/stream",
                                     callback=self.http_track_cb)
        self.http_server.add_handler(path="/css/",
                                     callback=self.http_static_css_cb)
        self.http_server.add_handler(path="/js/",
                                     callback=self.http_static_js_cb)
        self.http_server.add_websocket_handler("/ws/player", None, None,
                                               self.player_websocket_cb)
        self.http_server.add_handler(path="/", callback=self.http_root_cb)

        self.http_listen()
    def __init__(self, plugin, sprite_name, size=None):
        super(GenreConfiguredSpriteSheet, self).__init__(plugin, sprite_name,
                                                         size)
        self.genre_alternate = {}  # contains GenreType tuples
        self._alt_icons = {}
        self._sprite_name = sprite_name
        self._size = size

        popups = rb.find_plugin_file(plugin, 'img/popups.xml')
        root = ET.parse(open(popups)).getroot()
        self._parse_popups(plugin, root, self.GENRE_SYSTEM)

        try:
            # self._user_popups = RB.find_user_data_file('plugins/coverart_browser/img/usericons/popups.xml')
            self._user_popups = RB.user_cache_dir() + "/coverart_browser/usericons/popups.xml"
            root = ET.parse(open(self._user_popups)).getroot()
            self._parse_popups(plugin, root, self.GENRE_USER)
            elem = root.xpath(self._sprite_name + '/index')
            curr_index = int(elem[0].text)

            for index in range(0, curr_index + 1):
                key = RB.ExtDBKey.create_lookup('icon', str(index))
                icon_location = self._genre_db.lookup(key)
                sprite = GdkPixbuf.Pixbuf.new_from_file(icon_location)
                if self._size:
                    sprite = sprite.scale_simple(self._size[0], self._size[1],
                                                 GdkPixbuf.InterpType.BILINEAR)

                self._alt_icons[str(index)] = sprite
                self.names.append(str(index))
        except:
            pass
    def __init__(self, plugin, sprite_name, size=None):
        super(GenreConfiguredSpriteSheet,
              self).__init__(plugin, sprite_name, size)
        self.genre_alternate = {}  # contains GenreType tuples
        self._alt_icons = {}
        self._sprite_name = sprite_name
        self._size = size

        popups = rb.find_plugin_file(plugin, 'img/popups.xml')
        root = ET.parse(open(popups)).getroot()
        self._parse_popups(plugin, root, self.GENRE_SYSTEM)

        try:
            # self._user_popups = RB.find_user_data_file('plugins/coverart_browser/img/usericons/popups.xml')
            self._user_popups = RB.user_cache_dir(
            ) + "/coverart_browser/usericons/popups.xml"
            root = ET.parse(open(self._user_popups)).getroot()
            self._parse_popups(plugin, root, self.GENRE_USER)
            elem = root.xpath(self._sprite_name + '/index')
            curr_index = int(elem[0].text)

            for index in range(0, curr_index + 1):
                key = RB.ExtDBKey.create_lookup('icon', str(index))
                icon_location = self._genre_db.lookup(key)
                sprite = GdkPixbuf.Pixbuf.new_from_file(icon_location)
                if self._size:
                    sprite = sprite.scale_simple(self._size[0], self._size[1],
                                                 GdkPixbuf.InterpType.BILINEAR)

                self._alt_icons[str(index)] = sprite
                self.names.append(str(index))
        except:
            pass
Example #10
0
 def getFilterResultsDir(self):
     cachedir = RB.user_cache_dir() + "/DRC"
     filterResultsDir = cachedir + "/DRCFilters"
     if not os.path.exists(filterResultsDir):
         print(("DRC cache dir does not exist : creating -> " +
                filterResultsDir))
         os.makedirs(filterResultsDir)
     return filterResultsDir
Example #11
0
File: DRCUi.py Project: TheBigW/DRC
 def getFilterResultsDir(self):
     cachedir = RB.user_cache_dir() + "/DRC"
     filterResultsDir = cachedir + "/DRCFilters"
     if not os.path.exists(filterResultsDir):
         print(
             ("DRC cache dir does not exist : creating -> " +
             filterResultsDir))
         os.makedirs(filterResultsDir)
     return filterResultsDir
        def __init__(self, name):
            super(CoverArtExtDB._impl, self).__init__()
            self.cachedir = RB.user_cache_dir() + "/" + name
            if not os.path.exists(self.cachedir):
                os.makedirs(self.cachedir)

            filename = self.cachedir + "/store.db"
            self.db = gdbm.open(filename, 'c')
            self.queue = Queue()
            self._store_request_in_progress = False
    def __init__(self, **kwargs):
        '''
        Initializes the source.
        '''
        super(CoverArtPlaySource, self).__init__(**kwargs)
        #self.external_plugins = None
        self.hasActivated = False

        self.save_in_progress = False
        self.save_interrupt = False
        self.filename = RB.user_cache_dir() + "/coverart_browser/playlist.xml"
Example #14
0
    def __init__(self, **kwargs):
        '''
        Initializes the source.
        '''
        super(CoverArtPlaySource, self).__init__(**kwargs)
        #self.external_plugins = None
        self.hasActivated = False

        self.save_in_progress = False
        self.save_interrupt = False
        self.filename = RB.user_cache_dir() + "/coverart_browser/playlist.xml"
Example #15
0
 def build_cache_path(self, artist, title):
     folder = os.path.join(RB.user_cache_dir(), "lyrics")
 
     lyrics_folder = os.path.expanduser (folder)
     if not os.path.exists (lyrics_folder):
         os.mkdir (lyrics_folder)
 
     artist_folder = os.path.join(lyrics_folder, artist[:128])
     if not os.path.exists (artist_folder):
         os.mkdir (artist_folder)
 
     return os.path.join(artist_folder, title[:128] + '.lyric')
Example #16
0
        def enumerate_cache_files():
            for filename in os.listdir(
                    os.path.join(RB.user_cache_dir(), 'ampache')):
                name = os.path.splitext(filename)[0]
                if name == self.__songs_cache:
                    self.__caches.appendleft(name)
                else:
                    self.__caches.append(name)

            print('caches: %s' % self.__caches)

            # start processing first cache
            load_iterate()
Example #17
0
                def enumerate_cache_files():
                        for filename in os.listdir(
                                os.path.join(RB.user_cache_dir(), 'ampache')):
                                name = os.path.splitext(filename)[0]
                                if name == self.__songs_cache:
                                        self.__caches.appendleft(name)
                                else:
                                        self.__caches.append(name)

                        print('caches: %s' % self.__caches)

                        # start processing first cache
                        load_iterate()
Example #18
0
def build_cache_path(artist, title):
    settings = Gio.Settings("org.gnome.rhythmbox.plugins.lyrics")
    folder = settings['folder']
    if folder is None or folder == "":
        folder = os.path.join(RB.user_cache_dir(), "lyrics")

    lyrics_folder = os.path.expanduser(folder)
    if not os.path.exists(lyrics_folder):
        os.mkdir(lyrics_folder)

    artist_folder = os.path.join(lyrics_folder, artist[:128])
    if not os.path.exists(artist_folder):
        os.mkdir(artist_folder)

    return os.path.join(artist_folder, title[:128] + '.lyric')
Example #19
0
def build_cache_path(artist, title):
	settings = Gio.Settings("org.gnome.rhythmbox.plugins.lyrics")
	folder = settings['folder']
	if folder is None or folder == "":
		folder = os.path.join(RB.user_cache_dir(), "lyrics")

	lyrics_folder = os.path.expanduser (folder)
	if not os.path.exists (lyrics_folder):
		os.mkdir (lyrics_folder)

	artist_folder = os.path.join(lyrics_folder, artist[:128])
	if not os.path.exists (artist_folder):
		os.mkdir (artist_folder)

	return os.path.join(artist_folder, title[:128] + '.lyric')
Example #20
0
 def __init__(self):
     configDir = RB.user_cache_dir() + "/DRC"
     if not os.path.exists(configDir):
         os.makedirs(configDir)
     self.cfgFileName = configDir + "/" + DRC_CFG_FILE
     self.filterFile = ""
     self.recordGain = 0.5
     self.sweepDuration = 40
     self.numFilterChanels = 1
     self.FIRFilterMode = 0
     self.playHardwareIndex = 0
     self.recHardwareIndex = 0
     self.recHardwareChannelIndex = 0
     self.MicCalibrationFile = ""
     #0 - None
     #1 - GStreamerFIR
     #2 - BruteFIR
     self.load()
Example #21
0
    def __init__(self, name, path, refresh=-1, discard=-1, lifetime=-1):
        """
        Creates a new cache.  'name' is a symbolic name for the cache.
        'path' is either an absolute path to the cache directory, or a
        path relative to the user cache directory.
        'refresh' is the length of time for which cache entries are always
        considered valid.  'lifetime' is the maximum time an entry can live
        in the cache.  'discard' is the length of time for which a cache entry
        can go unused before being discarded.  These are all specified in days,
        with -1 meaning unlimited.
        """
        self.name = name
        if path.startswith("/"):
            self.path = path
        else:
            self.path = os.path.join(RB.user_cache_dir(), path)

        self.refresh = refresh
        self.discard = discard
        self.lifetime = lifetime
Example #22
0
    def check_lyrics_folder(self):
        folder = self.settings["lyrics-folder"]
        changed = False

        # expand user directory
        if "~" in folder:
            folder = os.path.expanduser(folder)
            changed = True

        # path not set or invalid
        if not folder or not os.path.exists(folder):
            folder = os.path.join(RB.user_cache_dir(), "lyrics")
            folder = os.path.expanduser(folder)
            if not os.path.exists(folder):
                os.mkdir(folder)
            changed = True
            print("invalid path in lyrics-folder, set to default")

        if changed:
            self.settings["lyrics-folder"] = folder
Example #23
0
    def __init__(self, name, path, refresh=-1, discard=-1, lifetime=-1):
        """
        Creates a new cache.  'name' is a symbolic name for the cache.
        'path' is either an absolute path to the cache directory, or a
        path relative to the user cache directory.
        'refresh' is the length of time for which cache entries are always
        considered valid.  'lifetime' is the maximum time an entry can live
        in the cache.  'discard' is the length of time for which a cache entry
        can go unused before being discarded.  These are all specified in days,
        with -1 meaning unlimited.
        """
        self.name = name
        if path.startswith("/"):
            self.path = path
        else:
            self.path = os.path.join(RB.user_cache_dir(), path)

        self.refresh = refresh
        self.discard = discard
        self.lifetime = lifetime
Example #24
0
    def check_lyrics_folder(self):
        folder = self.settings["lyrics-folder"]
        changed = False

        # expand user directory
        if "~" in folder:
            folder = os.path.expanduser(folder)
            changed = True

        # path not set or invalid
        if not folder or not os.path.exists(folder):
            folder = os.path.join(RB.user_cache_dir(), "lyrics")
            folder = os.path.expanduser(folder)
            if not os.path.exists(folder):
                os.mkdir(folder)
            changed = True
            print("invalid path in lyrics-folder, set to default")

        if changed:
            self.settings["lyrics-folder"] = folder
Example #25
0
 def set_folder_default(self, button, file_chooser):
     file_chooser.set_current_folder(os.path.join(RB.user_cache_dir(),
                                                  "lyrics"))
Example #26
0
from gi.repository import GdkPixbuf
from gi.repository import RB

from PodcastCoverArtSearch import PodcastCoverArtSearch
from MusicBrainzCoverArtSearch import MusicBrainzCoverArtSearch
from LastFMCoverArtSearch import LastFMCoverArtSearch
from EmbeddedCoverArtSearch import EmbeddedCoverArtSearch
from LocalCoverArtSearch import LocalCoverArtSearch

from urllib import unquote, pathname2url

ART_SEARCHES_LOCAL = [LocalCoverArtSearch, EmbeddedCoverArtSearch]
ART_SEARCHES_REMOTE = [PodcastCoverArtSearch, LastFMCoverArtSearch, MusicBrainzCoverArtSearch]
OLD_ART_FOLDER = "~/.gnome2/rhythmbox/covers"

ART_FOLDER = os.path.join(RB.user_cache_dir(), "covers")
ART_CACHE_EXTENSION_JPG = "jpg"
ART_CACHE_EXTENSION_PNG = "png"
ART_CACHE_EXTENSION_META = "rb-meta"
ART_CACHE_FORMAT_JPG = "jpeg"
ART_CACHE_FORMAT_PNG = "png"
ART_CACHE_SETTINGS_NAMES_JPG = ["quality"]
ART_CACHE_SETTINGS_VALUES_JPG = ["100"]
ART_CACHE_SETTINGS_NAMES_PNG = ["compression"]
ART_CACHE_SETTINGS_VALUES_PNG = ["9"]


class TicketSystem:
    def __init__(self):
        self.counter = itertools.count()
        self.hash = {}
    def _create_display_contents(self, plugin):
        print ("DEBUG - create_display_contents")
        # create the ui
        self._first_run = True
        cl = CoverLocale()
        cl.switch_locale(cl.Locale.LOCALE_DOMAIN)
        builder = Gtk.Builder()
        builder.set_translation_domain(cl.Locale.LOCALE_DOMAIN)
        builder.add_from_file(rb.find_plugin_file(plugin,
                                                  'ui/coverart_browser_prefs.ui'))
        self.launchpad_button = builder.get_object('show_launchpad')
        self.launchpad_label = builder.get_object('launchpad_label')

        builder.connect_signals(self)

        #. TRANSLATORS: Do not translate this string.  
        translators = _('translator-credits')

        if translators != "translator-credits":
            self.launchpad_label.set_text(translators)
        else:
            self.launchpad_button.set_visible(False)

        gs = GSetting()
        # bind the toggles to the settings
        toggle_statusbar = builder.get_object('custom_statusbar_checkbox')
        self.settings.bind(gs.PluginKey.CUSTOM_STATUSBAR,
                           toggle_statusbar, 'active', Gio.SettingsBindFlags.DEFAULT)

        toggle_text = builder.get_object('display_text_checkbox')
        self.settings.bind(gs.PluginKey.DISPLAY_TEXT, toggle_text, 'active',
                           Gio.SettingsBindFlags.DEFAULT)


        box_text = builder.get_object('display_text_box')
        self.settings.bind(gs.PluginKey.DISPLAY_TEXT, box_text, 'sensitive',
                           Gio.SettingsBindFlags.GET)

        self.display_text_pos = self.settings[gs.PluginKey.DISPLAY_TEXT_POS]
        self.display_text_under_radiobutton = builder.get_object('display_text_under_radiobutton')
        self.display_text_within_radiobutton = builder.get_object('display_text_within_radiobutton')

        if self.display_text_pos:
            self.display_text_under_radiobutton.set_active(True)
        else:
            self.display_text_within_radiobutton.set_active(True)

        random_scale = builder.get_object('random_adjustment')
        self.settings.bind(gs.PluginKey.RANDOM, random_scale, 'value',
                           Gio.SettingsBindFlags.DEFAULT)

        toggle_text_ellipsize = builder.get_object(
            'display_text_ellipsize_checkbox')
        self.settings.bind(gs.PluginKey.DISPLAY_TEXT_ELLIPSIZE,
                           toggle_text_ellipsize, 'active', Gio.SettingsBindFlags.DEFAULT)

        box_text_ellipsize_length = builder.get_object(
            'display_text_ellipsize_length_box')
        self.settings.bind(gs.PluginKey.DISPLAY_TEXT_ELLIPSIZE,
                           box_text_ellipsize_length, 'sensitive', Gio.SettingsBindFlags.GET)

        spinner_text_ellipsize_length = builder.get_object(
            'display_text_ellipsize_length_spin')
        self.settings.bind(gs.PluginKey.DISPLAY_TEXT_ELLIPSIZE_LENGTH,
                           spinner_text_ellipsize_length, 'value',
                           Gio.SettingsBindFlags.DEFAULT)

        spinner_font_size = builder.get_object(
            'display_font_spin')
        self.settings.bind(gs.PluginKey.DISPLAY_FONT_SIZE,
                           spinner_font_size, 'value',
                           Gio.SettingsBindFlags.DEFAULT)

        cover_size_scale = builder.get_object('cover_size_adjustment')
        self.settings.bind(gs.PluginKey.COVER_SIZE, cover_size_scale, 'value',
                           Gio.SettingsBindFlags.DEFAULT)

        add_shadow = builder.get_object('add_shadow_checkbox')
        self.settings.bind(gs.PluginKey.ADD_SHADOW, add_shadow, 'active',
                           Gio.SettingsBindFlags.DEFAULT)

        rated_box = builder.get_object('rated_box')
        self.stars = ReactiveStar(size=StarSize.BIG)

        self.stars.connect('changed', self.rating_changed_callback)

        align = Gtk.Alignment.new(0.5, 0, 0, 0.1)
        align.add(self.stars)
        rated_box.add(align)

        self.stars.set_rating(self.settings[gs.PluginKey.RATING])

        autostart = builder.get_object('autostart_checkbox')
        self.settings.bind(gs.PluginKey.AUTOSTART,
                           autostart, 'active', Gio.SettingsBindFlags.DEFAULT)

        toolbar_pos_combo = builder.get_object('show_in_combobox')
        renderer = Gtk.CellRendererText()
        toolbar_pos_combo.pack_start(renderer, True)
        toolbar_pos_combo.add_attribute(renderer, 'text', 1)
        self.settings.bind(gs.PluginKey.TOOLBAR_POS, toolbar_pos_combo,
                           'active-id', Gio.SettingsBindFlags.DEFAULT)

        light_source_combo = builder.get_object('light_source_combobox')
        renderer = Gtk.CellRendererText()
        light_source_combo.pack_start(renderer, True)
        light_source_combo.add_attribute(renderer, 'text', 1)
        self.settings.bind(gs.PluginKey.SHADOW_IMAGE, light_source_combo,
                           'active-id', Gio.SettingsBindFlags.DEFAULT)

        combo_liststore = builder.get_object('combo_liststore')

        from coverart_utils import Theme

        for theme in Theme(self).themes:
            combo_liststore.append([theme, theme])

        theme_combo = builder.get_object('theme_combobox')
        renderer = Gtk.CellRendererText()
        theme_combo.pack_start(renderer, True)
        theme_combo.add_attribute(renderer, 'text', 1)
        self.settings.bind(gs.PluginKey.THEME, theme_combo,
                           'active-id', Gio.SettingsBindFlags.DEFAULT)

        button_relief = builder.get_object('button_relief_checkbox')
        self.settings.bind(gs.PluginKey.BUTTON_RELIEF, button_relief, 'active',
                           Gio.SettingsBindFlags.DEFAULT)

        # create user data files
        cachedir = RB.user_cache_dir() + "/coverart_browser/usericons"
        if not os.path.exists(cachedir):
            os.makedirs(cachedir)

        popup = cachedir + "/popups.xml"

        temp = RB.find_user_data_file('plugins/coverart_browser/img/usericons/popups.xml')

        # lets see if there is a legacy file - if necessary copy it to the cache dir
        if os.path.isfile(temp) and not os.path.isfile(popup):
            shutil.copyfile(temp, popup)

        if not os.path.isfile(popup):
            template = rb.find_plugin_file(plugin, 'template/popups.xml')
            folder = os.path.split(popup)[0]
            if not os.path.exists(folder):
                os.makedirs(folder)
            shutil.copyfile(template, popup)

        # now prepare the genre tab
        from coverart_utils import GenreConfiguredSpriteSheet
        from coverart_utils import get_stock_size

        self._sheet = GenreConfiguredSpriteSheet(plugin, "genre", get_stock_size())

        self.alt_liststore = builder.get_object('alt_liststore')
        self.alt_user_liststore = builder.get_object('alt_user_liststore')
        self._iters = {}
        for key in list(self._sheet.keys()):
            store_iter = self.alt_liststore.append([key, self._sheet[key]])
            self._iters[(key, self.GENRE_POPUP)] = store_iter

        for key, value in self._sheet.genre_alternate.items():
            if key.genre_type == GenreConfiguredSpriteSheet.GENRE_USER:
                store_iter = self.alt_user_liststore.append([key.name,
                                                             self._sheet[self._sheet.genre_alternate[key]],
                                                             self._sheet.genre_alternate[key]])
                self._iters[(key.name, self.GENRE_LIST)] = store_iter

        self.amend_mode = False
        self.blank_iter = None
        self.genre_combobox = builder.get_object('genre_combobox')
        self.genre_entry = builder.get_object('genre_entry')
        self.genre_view = builder.get_object('genre_view')
        self.save_button = builder.get_object('save_button')
        self.filechooserdialog = builder.get_object('filechooserdialog')
        last_genre_folder = self.settings[gs.PluginKey.LAST_GENRE_FOLDER]
        if last_genre_folder != "":
            self.filechooserdialog.set_current_folder(last_genre_folder)

        padding_scale = builder.get_object('padding_adjustment')
        self.settings.bind(gs.PluginKey.ICON_PADDING, padding_scale, 'value',
                           Gio.SettingsBindFlags.DEFAULT)

        spacing_scale = builder.get_object('spacing_adjustment')
        self.settings.bind(gs.PluginKey.ICON_SPACING, spacing_scale, 'value',
                           Gio.SettingsBindFlags.DEFAULT)

        icon_automatic = builder.get_object('icon_automatic_checkbox')
        self.settings.bind(gs.PluginKey.ICON_AUTOMATIC,
                           icon_automatic, 'active', Gio.SettingsBindFlags.DEFAULT)

        #flow tab
        flow_combo = builder.get_object('flow_combobox')
        renderer = Gtk.CellRendererText()
        flow_combo.pack_start(renderer, True)
        flow_combo.add_attribute(renderer, 'text', 1)
        self.settings.bind(gs.PluginKey.FLOW_APPEARANCE, flow_combo,
                           'active-id', Gio.SettingsBindFlags.DEFAULT)

        flow_hide = builder.get_object('hide_caption_checkbox')
        self.settings.bind(gs.PluginKey.FLOW_HIDE_CAPTION,
                           flow_hide, 'active', Gio.SettingsBindFlags.DEFAULT)

        flow_scale = builder.get_object('cover_scale_adjustment')
        self.settings.bind(gs.PluginKey.FLOW_SCALE, flow_scale, 'value',
                           Gio.SettingsBindFlags.DEFAULT)

        flow_width = builder.get_object('cover_width_adjustment')
        self.settings.bind(gs.PluginKey.FLOW_WIDTH, flow_width, 'value',
                           Gio.SettingsBindFlags.DEFAULT)

        flow_max = builder.get_object('flow_max_adjustment')
        self.settings.bind(gs.PluginKey.FLOW_MAX, flow_max, 'value',
                           Gio.SettingsBindFlags.DEFAULT)

        flow_automatic = builder.get_object('automatic_checkbox')
        self.settings.bind(gs.PluginKey.FLOW_AUTOMATIC,
                           flow_automatic, 'active', Gio.SettingsBindFlags.DEFAULT)

        self.background_colour = self.settings[gs.PluginKey.FLOW_BACKGROUND_COLOUR]
        self.white_radiobutton = builder.get_object('white_radiobutton')
        self.black_radiobutton = builder.get_object('black_radiobutton')

        if self.background_colour == 'W':
            self.white_radiobutton.set_active(True)
        else:
            self.black_radiobutton.set_active(True)

        # return the dialog
        self._first_run = False
        print ("end create dialog contents")
        return builder.get_object('main_notebook')
Example #28
0
 def getMeasureResultsDir(self):
     cachedir = RB.user_cache_dir() + "/DRC"
     measureResultsDir = cachedir + "/MeasureResults"
     if not os.path.exists(measureResultsDir):
         os.makedirs(measureResultsDir)
     return measureResultsDir
Example #29
0
File: DRCUi.py Project: TheBigW/DRC
 def getMeasureResultsDir(self):
     cachedir = RB.user_cache_dir() + "/DRC"
     measureResultsDir = cachedir + "/MeasureResults"
     if not os.path.exists(measureResultsDir):
         os.makedirs(measureResultsDir)
     return measureResultsDir
Example #30
0
 def getTmpCfgDir(self):
     cachedir = RB.user_cache_dir() + "/DRC"
     tmpCfgDir = cachedir + "/TmpDRCCfg"
     if not os.path.exists(tmpCfgDir):
         os.makedirs(tmpCfgDir)
     return tmpCfgDir
Example #31
0
from PodcastCoverArtSearch import PodcastCoverArtSearch
from MusicBrainzCoverArtSearch import MusicBrainzCoverArtSearch
from LastFMCoverArtSearch import LastFMCoverArtSearch
from EmbeddedCoverArtSearch import EmbeddedCoverArtSearch
from LocalCoverArtSearch import LocalCoverArtSearch

from urllib import unquote, pathname2url

ART_SEARCHES_LOCAL = [LocalCoverArtSearch, EmbeddedCoverArtSearch]
ART_SEARCHES_REMOTE = [
    PodcastCoverArtSearch, LastFMCoverArtSearch, MusicBrainzCoverArtSearch
]
OLD_ART_FOLDER = '~/.gnome2/rhythmbox/covers'

ART_FOLDER = os.path.join(RB.user_cache_dir(), 'covers')
ART_CACHE_EXTENSION_JPG = 'jpg'
ART_CACHE_EXTENSION_PNG = 'png'
ART_CACHE_EXTENSION_META = 'rb-meta'
ART_CACHE_FORMAT_JPG = 'jpeg'
ART_CACHE_FORMAT_PNG = 'png'
ART_CACHE_SETTINGS_NAMES_JPG = ["quality"]
ART_CACHE_SETTINGS_VALUES_JPG = ["100"]
ART_CACHE_SETTINGS_NAMES_PNG = ["compression"]
ART_CACHE_SETTINGS_VALUES_PNG = ["9"]


class TicketSystem:
    def __init__(self):
        self.counter = itertools.count()
        self.hash = {}
Example #32
0
 def __init__(self):
     self.lyrics = ""
     self.lyrics_cache = os.path.join(RB.user_cache_dir(), "web-lyrics", "")
     self.krc_dir = os.path.join(RB.music_dir(), "kugou-lyric", "")
Example #33
0
 def set_folder_default(self, button, file_chooser):
     file_chooser.set_current_folder(
         os.path.join(RB.user_cache_dir(), "lyrics"))
Example #34
0
from DownloadAlbumHandler import DownloadAlbumHandler, MagnatuneDownloadError
import MagnatuneAccount

import gettext
gettext.install('rhythmbox', RB.locale_dir())

magnatune_partner_id = "rhythmbox"

# URIs
magnatune_song_info_uri = "http://magnatune.com/info/song_info_xml.zip"
magnatune_changed_uri = "http://magnatune.com/info/changed.txt"
magnatune_buy_album_uri = "https://magnatune.com/buy/choose?"
magnatune_api_download_uri = "http://%s:%[email protected]/buy/membership_free_dl_xml?"

magnatune_in_progress_dir = Gio.file_new_for_path(RB.user_data_dir()).resolve_relative_path('magnatune')
magnatune_cache_dir = Gio.file_new_for_path(RB.user_cache_dir()).resolve_relative_path('magnatune')

magnatune_song_info = os.path.join(magnatune_cache_dir.get_path(), 'song_info.xml')
magnatune_song_info_temp = os.path.join(magnatune_cache_dir.get_path(), 'song_info.zip.tmp')
magnatune_changes = os.path.join(magnatune_cache_dir.get_path(), 'changed.txt')


class MagnatuneSource(RB.BrowserSource):
	def __init__(self):
		RB.BrowserSource.__init__(self)
		self.hate = self

		self.__popup = None
		self.__settings = Gio.Settings("org.gnome.rhythmbox.plugins.magnatune")
		# source state
		self.__activated = False
Example #35
0
from DownloadAlbumHandler import DownloadAlbumHandler, MagnatuneDownloadError
import MagnatuneAccount

import gettext
gettext.install('rhythmbox', RB.locale_dir())

magnatune_partner_id = "rhythmbox"

# URIs
magnatune_song_info_uri = "http://magnatune.com/info/song_info_xml.zip"
magnatune_changed_uri = "http://magnatune.com/info/changed.txt"
magnatune_buy_album_uri = "https://magnatune.com/buy/choose?"
magnatune_api_download_uri = "http://%s:%[email protected]/buy/membership_free_dl_xml?"

magnatune_in_progress_dir = Gio.file_new_for_path(RB.user_data_dir()).resolve_relative_path('magnatune')
magnatune_cache_dir = Gio.file_new_for_path(RB.user_cache_dir()).resolve_relative_path('magnatune')

magnatune_song_info = os.path.join(magnatune_cache_dir.get_path(), 'song_info.xml')
magnatune_song_info_temp = os.path.join(magnatune_cache_dir.get_path(), 'song_info.zip.tmp')
magnatune_changes = os.path.join(magnatune_cache_dir.get_path(), 'changed.txt')


class MagnatuneSource(RB.BrowserSource):
	def __init__(self):
		RB.BrowserSource.__init__(self)
		self.hate = self

		self.__popup = None
		self.__settings = Gio.Settings.new("org.gnome.rhythmbox.plugins.magnatune")
		# source state
		self.__activated = False
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA.

import os.path
import gettext

from gi.repository import RB

import rb3compat

gettext.install('rhythmbox', RB.locale_dir())

ART_FOLDER = os.path.expanduser(os.path.join(RB.user_cache_dir(), 'covers'))
USEFUL = os.path.exists(ART_FOLDER)


class OldCacheSearch(object):
    def __init__(self):
        pass

    def filename(self, album, artist, extension):
        artist = artist.replace('/', '-')
        album = album.replace('/', '-')
        return os.path.join(ART_FOLDER, '%s - %s.%s' % (artist, album, extension))

    def search(self, key, last_time, store, callback, *args):
        print("OldCacheSearch")
        print(ART_FOLDER)
Example #37
0
    def _create_display_contents(self, plugin):
        print("DEBUG - create_display_contents")
        # create the ui
        self._first_run = True
        cl = CoverLocale()
        cl.switch_locale(cl.Locale.LOCALE_DOMAIN)
        builder = Gtk.Builder()
        builder.set_translation_domain(cl.Locale.LOCALE_DOMAIN)
        builder.add_from_file(
            rb.find_plugin_file(plugin, 'ui/coverart_browser_prefs.ui'))
        self.launchpad_button = builder.get_object('show_launchpad')
        self.launchpad_label = builder.get_object('launchpad_label')

        builder.connect_signals(self)

        # . TRANSLATORS: Do not translate this string.
        translators = _('translator-credits')

        if translators != "translator-credits":
            self.launchpad_label.set_text(translators)
        else:
            self.launchpad_button.set_visible(False)

        gs = GSetting()
        # bind the toggles to the settings
        toggle_statusbar = builder.get_object('custom_statusbar_checkbox')
        self.settings.bind(gs.PluginKey.CUSTOM_STATUSBAR, toggle_statusbar,
                           'active', Gio.SettingsBindFlags.DEFAULT)

        toggle_text = builder.get_object('display_text_checkbox')
        self.settings.bind(gs.PluginKey.DISPLAY_TEXT, toggle_text, 'active',
                           Gio.SettingsBindFlags.DEFAULT)

        box_text = builder.get_object('display_text_box')
        self.settings.bind(gs.PluginKey.DISPLAY_TEXT, box_text, 'sensitive',
                           Gio.SettingsBindFlags.GET)

        self.display_text_pos = self.settings[gs.PluginKey.DISPLAY_TEXT_POS]
        self.display_text_under_radiobutton = builder.get_object(
            'display_text_under_radiobutton')
        self.display_text_within_radiobutton = builder.get_object(
            'display_text_within_radiobutton')

        if self.display_text_pos:
            self.display_text_under_radiobutton.set_active(True)
        else:
            self.display_text_within_radiobutton.set_active(True)

        random_scale = builder.get_object('random_adjustment')
        self.settings.bind(gs.PluginKey.RANDOM, random_scale, 'value',
                           Gio.SettingsBindFlags.DEFAULT)

        toggle_text_ellipsize = builder.get_object(
            'display_text_ellipsize_checkbox')
        self.settings.bind(gs.PluginKey.DISPLAY_TEXT_ELLIPSIZE,
                           toggle_text_ellipsize, 'active',
                           Gio.SettingsBindFlags.DEFAULT)

        box_text_ellipsize_length = builder.get_object(
            'display_text_ellipsize_length_box')
        self.settings.bind(gs.PluginKey.DISPLAY_TEXT_ELLIPSIZE,
                           box_text_ellipsize_length, 'sensitive',
                           Gio.SettingsBindFlags.GET)

        spinner_text_ellipsize_length = builder.get_object(
            'display_text_ellipsize_length_spin')
        self.settings.bind(gs.PluginKey.DISPLAY_TEXT_ELLIPSIZE_LENGTH,
                           spinner_text_ellipsize_length, 'value',
                           Gio.SettingsBindFlags.DEFAULT)

        spinner_font_size = builder.get_object('display_font_spin')
        self.settings.bind(gs.PluginKey.DISPLAY_FONT_SIZE, spinner_font_size,
                           'value', Gio.SettingsBindFlags.DEFAULT)

        cover_size_scale = builder.get_object('cover_size_adjustment')

        #self.settings.bind(gs.PluginKey.COVER_SIZE, cover_size_scale, 'value',
        #                   Gio.SettingsBindFlags.DEFAULT)
        self._cover_size = self.settings[gs.PluginKey.COVER_SIZE]
        cover_size_scale.set_value(self._cover_size)
        cover_size_scale.connect('value-changed',
                                 self.on_cover_size_scale_changed)

        add_shadow = builder.get_object('add_shadow_checkbox')
        self.settings.bind(gs.PluginKey.ADD_SHADOW, add_shadow, 'active',
                           Gio.SettingsBindFlags.DEFAULT)

        rated_box = builder.get_object('rated_box')
        self.stars = ReactiveStar(size=StarSize.BIG)

        self.stars.connect('changed', self.rating_changed_callback)

        align = Gtk.Alignment.new(0.5, 0, 0, 0.1)
        align.add(self.stars)
        rated_box.add(align)

        self.stars.set_rating(self.settings[gs.PluginKey.RATING])

        autostart = builder.get_object('autostart_checkbox')
        self.settings.bind(gs.PluginKey.AUTOSTART, autostart, 'active',
                           Gio.SettingsBindFlags.DEFAULT)

        toolbar_pos_combo = builder.get_object('show_in_combobox')
        renderer = Gtk.CellRendererText()
        toolbar_pos_combo.pack_start(renderer, True)
        toolbar_pos_combo.add_attribute(renderer, 'text', 1)
        self.settings.bind(gs.PluginKey.TOOLBAR_POS, toolbar_pos_combo,
                           'active-id', Gio.SettingsBindFlags.DEFAULT)

        light_source_combo = builder.get_object('light_source_combobox')
        renderer = Gtk.CellRendererText()
        light_source_combo.pack_start(renderer, True)
        light_source_combo.add_attribute(renderer, 'text', 1)
        self.settings.bind(gs.PluginKey.SHADOW_IMAGE, light_source_combo,
                           'active-id', Gio.SettingsBindFlags.DEFAULT)

        combo_liststore = builder.get_object('combo_liststore')

        from coverart_utils import Theme

        for theme in Theme(self).themes:
            combo_liststore.append([theme, theme])

        theme_combo = builder.get_object('theme_combobox')
        renderer = Gtk.CellRendererText()
        theme_combo.pack_start(renderer, True)
        theme_combo.add_attribute(renderer, 'text', 1)
        self.settings.bind(gs.PluginKey.THEME, theme_combo, 'active-id',
                           Gio.SettingsBindFlags.DEFAULT)

        button_relief = builder.get_object('button_relief_checkbox')
        self.settings.bind(gs.PluginKey.BUTTON_RELIEF, button_relief, 'active',
                           Gio.SettingsBindFlags.DEFAULT)

        # create user data files
        cachedir = RB.user_cache_dir() + "/coverart_browser/usericons"
        if not os.path.exists(cachedir):
            os.makedirs(cachedir)

        popup = cachedir + "/popups.xml"

        temp = RB.find_user_data_file(
            'plugins/coverart_browser/img/usericons/popups.xml')

        # lets see if there is a legacy file - if necessary copy it to the cache dir
        if os.path.isfile(temp) and not os.path.isfile(popup):
            shutil.copyfile(temp, popup)

        if not os.path.isfile(popup):
            template = rb.find_plugin_file(plugin, 'template/popups.xml')
            folder = os.path.split(popup)[0]
            if not os.path.exists(folder):
                os.makedirs(folder)
            shutil.copyfile(template, popup)

        # now prepare the genre tab
        from coverart_utils import GenreConfiguredSpriteSheet
        from coverart_utils import get_stock_size

        self._sheet = GenreConfiguredSpriteSheet(plugin, "genre",
                                                 get_stock_size())

        self.alt_liststore = builder.get_object('alt_liststore')
        self.alt_user_liststore = builder.get_object('alt_user_liststore')
        self._iters = {}
        for key in list(self._sheet.keys()):
            store_iter = self.alt_liststore.append([key, self._sheet[key]])
            self._iters[(key, self.GENRE_POPUP)] = store_iter

        for key, value in self._sheet.genre_alternate.items():
            if key.genre_type == GenreConfiguredSpriteSheet.GENRE_USER:
                store_iter = self.alt_user_liststore.append([
                    key.name, self._sheet[self._sheet.genre_alternate[key]],
                    self._sheet.genre_alternate[key]
                ])
                self._iters[(key.name, self.GENRE_LIST)] = store_iter

        self.amend_mode = False
        self.blank_iter = None
        self.genre_combobox = builder.get_object('genre_combobox')
        self.genre_entry = builder.get_object('genre_entry')
        self.genre_view = builder.get_object('genre_view')
        self.save_button = builder.get_object('save_button')
        self.filechooserdialog = builder.get_object('filechooserdialog')
        last_genre_folder = self.settings[gs.PluginKey.LAST_GENRE_FOLDER]
        if last_genre_folder != "":
            self.filechooserdialog.set_current_folder(last_genre_folder)

        padding_scale = builder.get_object('padding_adjustment')
        self.settings.bind(gs.PluginKey.ICON_PADDING, padding_scale, 'value',
                           Gio.SettingsBindFlags.DEFAULT)

        spacing_scale = builder.get_object('spacing_adjustment')
        self.settings.bind(gs.PluginKey.ICON_SPACING, spacing_scale, 'value',
                           Gio.SettingsBindFlags.DEFAULT)

        icon_automatic = builder.get_object('icon_automatic_checkbox')
        self.settings.bind(gs.PluginKey.ICON_AUTOMATIC, icon_automatic,
                           'active', Gio.SettingsBindFlags.DEFAULT)

        #flow tab
        flow_combo = builder.get_object('flow_combobox')
        renderer = Gtk.CellRendererText()
        flow_combo.pack_start(renderer, True)
        flow_combo.add_attribute(renderer, 'text', 1)
        self.settings.bind(gs.PluginKey.FLOW_APPEARANCE, flow_combo,
                           'active-id', Gio.SettingsBindFlags.DEFAULT)

        flow_hide = builder.get_object('hide_caption_checkbox')
        self.settings.bind(gs.PluginKey.FLOW_HIDE_CAPTION, flow_hide, 'active',
                           Gio.SettingsBindFlags.DEFAULT)

        flow_scale = builder.get_object('cover_scale_adjustment')
        self.settings.bind(gs.PluginKey.FLOW_SCALE, flow_scale, 'value',
                           Gio.SettingsBindFlags.DEFAULT)

        flow_width = builder.get_object('cover_width_adjustment')
        self.settings.bind(gs.PluginKey.FLOW_WIDTH, flow_width, 'value',
                           Gio.SettingsBindFlags.DEFAULT)

        flow_max = builder.get_object('flow_max_adjustment')
        self.settings.bind(gs.PluginKey.FLOW_MAX, flow_max, 'value',
                           Gio.SettingsBindFlags.DEFAULT)

        flow_automatic = builder.get_object('automatic_checkbox')
        self.settings.bind(gs.PluginKey.FLOW_AUTOMATIC, flow_automatic,
                           'active', Gio.SettingsBindFlags.DEFAULT)

        self.background_colour = self.settings[
            gs.PluginKey.FLOW_BACKGROUND_COLOUR]
        self.white_radiobutton = builder.get_object('white_radiobutton')
        self.black_radiobutton = builder.get_object('black_radiobutton')

        if self.background_colour == 'W':
            self.white_radiobutton.set_active(True)
        else:
            self.black_radiobutton.set_active(True)

        self.text_alignment = self.settings[gs.PluginKey.TEXT_ALIGNMENT]
        self.text_alignment_left_radiobutton = builder.get_object(
            'left_alignment_radiobutton')
        self.text_alignment_centre_radiobutton = builder.get_object(
            'centre_alignment_radiobutton')
        self.text_alignment_right_radiobutton = builder.get_object(
            'right_alignment_radiobutton')

        if self.text_alignment == 0:
            self.text_alignment_left_radiobutton.set_active(True)
        elif self.text_alignment == 1:
            self.text_alignment_centre_radiobutton.set_active(True)
        else:
            self.text_alignment_right_radiobutton.set_active(True)

        # return the dialog
        self._first_run = False
        print("end create dialog contents")
        return builder.get_object('main_notebook')
Example #38
0
import gettext
gettext.install('rhythmbox', RB.locale_dir())

magnatune_partner_id = "rhythmbox"

# URIs
magnatune_song_info_uri = "http://magnatune.com/info/song_info_xml.zip"
magnatune_changed_uri = "http://magnatune.com/info/changed.txt"
magnatune_buy_album_uri = "https://magnatune.com/buy/choose?"
magnatune_api_download_uri = "http://%s:%[email protected]/buy/membership_free_dl_xml?"

magnatune_in_progress_dir = Gio.file_new_for_path(
    RB.user_data_dir()).resolve_relative_path('magnatune')
magnatune_cache_dir = Gio.file_new_for_path(
    RB.user_cache_dir()).resolve_relative_path('magnatune')

magnatune_song_info = os.path.join(magnatune_cache_dir.get_path(),
                                   'song_info.xml')
magnatune_song_info_temp = os.path.join(magnatune_cache_dir.get_path(),
                                        'song_info.zip.tmp')
magnatune_changes = os.path.join(magnatune_cache_dir.get_path(), 'changed.txt')


class MagnatuneSource(RB.BrowserSource):
    def __init__(self):
        RB.BrowserSource.__init__(self)
        self.hate = self

        self.__popup = None
        self.__settings = Gio.Settings("org.gnome.rhythmbox.plugins.magnatune")
Example #39
0
File: DRCUi.py Project: TheBigW/DRC
 def getTmpCfgDir(self):
     cachedir = RB.user_cache_dir() + "/DRC"
     tmpCfgDir = cachedir + "/TmpDRCCfg"
     if not os.path.exists(tmpCfgDir):
         os.makedirs(tmpCfgDir)
     return tmpCfgDir