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)
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
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
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)
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
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
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 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"
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')
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()
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')
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')
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()
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
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
def set_folder_default(self, button, file_chooser): file_chooser.set_current_folder(os.path.join(RB.user_cache_dir(), "lyrics"))
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')
def getMeasureResultsDir(self): cachedir = RB.user_cache_dir() + "/DRC" measureResultsDir = cachedir + "/MeasureResults" if not os.path.exists(measureResultsDir): os.makedirs(measureResultsDir) return measureResultsDir
def getTmpCfgDir(self): cachedir = RB.user_cache_dir() + "/DRC" tmpCfgDir = cachedir + "/TmpDRCCfg" if not os.path.exists(tmpCfgDir): os.makedirs(tmpCfgDir) return tmpCfgDir
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 __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", "")
def set_folder_default(self, button, file_chooser): file_chooser.set_current_folder( os.path.join(RB.user_cache_dir(), "lyrics"))
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
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)
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')
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")