def __init__(self, exaile): self.window = None # add menu item to tools menu self.MENU_ITEM = menu.simple_menu_item('equalizer', ['plugin-sep'], _('Equalizer'), callback=lambda *x: self.show_gui(exaile)) providers.register('menubar-tools-menu', self.MENU_ITEM) self.presets_path = os.path.join(xdg.get_config_dir(), 'eq-presets.dat') self.presets = gtk.ListStore(str, float, float, float, float, float, float, float, float, float, float, float) self.load_presets() self.check_default_settings()
def __init__(self, exaile): self.window = None # add menu item to tools menu self.MENU_ITEM = menu.simple_menu_item( 'equalizer', ['plugin-sep'], _('_Equalizer'), callback=lambda *x: self.show_gui(exaile)) providers.register('menubar-tools-menu', self.MENU_ITEM) self.presets_path = os.path.join(xdg.get_config_dir(), 'eq-presets.dat') self.presets = Gtk.ListStore(str, float, float, float, float, float, float, float, float, float, float, float) self.load_presets() self.check_default_settings()
def migration_needed(): # check for the presence of old exaile settings for file in ('~/.exaile/music.db', '~/.exaile/settings.ini'): if not os.path.exists(os.path.expanduser(file)): logger.debug("%s did not exist, old exaile version not detected" % file) return False # check for Exaile 0.3.x+ settings and music database if os.path.exists(os.path.join(xdg.get_data_dirs()[0], 'music.db')): logger.debug( "Found a newer version of the database, no migration needed") return False if os.path.exists(os.path.join(xdg.get_config_dir(), 'settings.ini')): logger.debug("Found a newer version of the settings " \ "file, no migration needed") return False if not olddb.SQLITE_AVAIL: raise MigrationException("Sqlite not available. " "Cannot migrate 0.2.14 settings") # if we've gotten this far, check for sqlite, but if it's not available, # throw a migration exception # open up the old database, and make sure it's at least the version used # in 0.2.14 db = olddb.DBManager(os.path.expanduser('~/.exaile/music.db'), False) cur = db.cursor() row = db.read_one('db_version', 'version', '1=1', tuple()) db.close() if row[0] != 4: logger.debug("Cannot migrate from db_version %d" % row[0]) return False return True
def migration_needed(): # check for the presence of old exaile settings for file in ('~/.exaile/music.db', '~/.exaile/settings.ini'): if not os.path.exists(os.path.expanduser(file)): logger.debug("%s did not exist, old exaile version not detected" % file) return False # check for Exaile 0.3.x+ settings and music database if os.path.exists(os.path.join(xdg.get_data_dirs()[0], 'music.db')): logger.debug("Found a newer version of the database, no migration needed") return False if os.path.exists(os.path.join(xdg.get_config_dir(), 'settings.ini')): logger.debug("Found a newer version of the settings " \ "file, no migration needed") return False if not olddb.SQLITE_AVAIL: raise MigrationException("Sqlite not available. " "Cannot migrate 0.2.14 settings") # if we've gotten this far, check for sqlite, but if it's not available, # throw a migration exception # open up the old database, and make sure it's at least the version used # in 0.2.14 db = olddb.DBManager(os.path.expanduser('~/.exaile/music.db'), False) cur = db.cursor() row = db.read_one('db_version', 'version', '1=1', tuple()) db.close() if row[0] != 4: logger.debug("Cannot migrate from db_version %d" % row[0]) return False return True
try: os.rename(self.location, self.location + ".old") except: pass # if it doesn'texist we don't care os.rename(self.location + ".new", self.location) try: os.remove(self.location + ".old") except: pass self._saving = False self._dirty = False location = xdg.get_config_dir() # Provide a mechanism for setting up default settings for different platforms if sys.platform == 'win32': __settings_file = 'settings-win32.ini' elif sys.platform == 'darwin': __settings_file = 'settings-osx.ini' else: __settings_file = 'settings.ini' MANAGER = SettingsManager( os.path.join(location, "settings.ini"), xdg.get_config_path("settings.ini") )
def setup_logging(self): console_format = "%(levelname)-8s: %(message)s" loglevel = logging.INFO if self.options.DebugThreads: console_format = "%(threadName)s:" + console_format if self.options.Debug: loglevel = logging.DEBUG console_format = "%(asctime)s,%(msecs)3d:" + console_format console_format += " (%(name)s)" # add module name elif self.options.Quiet: loglevel = logging.WARNING # Logfile level should always be INFO or higher if self.options.Quiet: logfilelevel = logging.INFO else: logfilelevel = loglevel datefmt = "%H:%M:%S" # Logging to terminal logging.basicConfig(level=loglevel, format=console_format, datefmt=datefmt) class FilterLogger(logging.Logger): class Filter(logging.Filter): def filter(self, record): pass_record = True if FilterLogger.module is not None: pass_record = record.name == self.module if FilterLogger.level != logging.NOTSET and pass_record: pass_record = record.levelno == self.level return pass_record module = None level = logging.NOTSET def __init__(self, name): logging.Logger.__init__(self, name) log_filter = self.Filter(name) log_filter.module = FilterLogger.module log_filter.level = FilterLogger.level self.addFilter(log_filter) FilterLogger.module = self.options.ModuleFilter if self.options.LevelFilter is not None: FilterLogger.level = getattr(logging, self.options.LevelFilter) logging.setLoggerClass(FilterLogger) # Create log directory logdir = os.path.join(xdg.get_data_dir(), 'logs') if not os.path.exists(logdir): os.makedirs(logdir) # Try to migrate logs from old location from glob import glob logfiles = glob(os.path.join(xdg.get_config_dir(), 'exaile.log*')) for logfile in logfiles: try: # Try to move to new location os.rename(logfile, os.path.join(logdir, os.path.basename(logfile))) except OSError: # Give up and simply remove os.remove(logfile) # Logging to file; this also automatically rotates the logs logfile = logging.handlers.RotatingFileHandler( os.path.join(logdir, 'exaile.log'), mode='a', backupCount=5) logfile.doRollover() # each session gets its own file logfile.setLevel(logfilelevel) formatter = logging.Formatter( '%(asctime)s %(levelname)-8s: %(message)s (%(name)s)', datefmt=datefmt) logfile.setFormatter(formatter) logging.getLogger("").addHandler(logfile)
class EqualizerWindow(Gtk.Window): __gtype_name__ = 'EqualizerWindow' PRESETS_PATH = os.path.join(xdg.get_config_dir(), 'eq-presets.dat') ( band0, band1, band2, band3, band4, band5, band6, band7, band8, band9, chk_enabled, combo_presets, presets, pre, ) = GtkTemplate.Child.widgets(14) def __init__(self): Gtk.Window.__init__(self) self.init_template() self.pre.set_value(settings.get_option("plugin/equalizer/pre")) self.chk_enabled.set_active( settings.get_option("plugin/equalizer/enabled")) # Setup bands/preamp from current equalizer settings for number in (0, 1, 2, 3, 4, 5, 6, 7, 8, 9): band = getattr(self, 'band%s' % number) band.set_value(self.get_band(number)) self.combo_presets.set_entry_text_column(0) self.combo_presets.set_active(0) self.load_presets() @staticmethod def get_band(band_number): """ Get the current value of band x """ return settings.get_option("plugin/equalizer/band%s" % band_number) @GtkTemplate.Callback def adjust_band(self, widget): """ Adjust the specified band """ # Buildable.get_name clashes with Widget.get_name. See # https://bugzilla.gnome.org/show_bug.cgi?id=591085#c19 widget_name = Gtk.Buildable.get_name(widget) band = widget_name[-1] settings_value = settings.get_option("plugin/equalizer/band" + band) if not isclose(widget.get_value(), settings_value): settings.set_option("plugin/equalizer/band" + band, widget.get_value()) self.combo_presets.set_active(0) @GtkTemplate.Callback def adjust_preamp(self, widget): """ Adjust the preamp """ if widget.get_value() != settings.get_option("plugin/equalizer/pre"): settings.set_option("plugin/equalizer/pre", widget.get_value()) self.combo_presets.set_active(0) @GtkTemplate.Callback def add_preset(self, _widget): new_preset = [] new_preset.append(self.combo_presets.get_child().get_text()) new_preset.append(settings.get_option("plugin/equalizer/pre")) for band in range(10): new_preset.append( settings.get_option("plugin/equalizer/band%s" % band)) self.presets.append(new_preset) self.save_presets() @GtkTemplate.Callback def remove_preset(self, _widget): entry = self.combo_presets.get_active() if entry > 1: self.presets.remove(self.presets.get_iter(entry)) self.combo_presets.set_active(0) self.save_presets() @GtkTemplate.Callback def preset_changed(self, widget): model = widget.get_model() index = widget.get_active() # If an option other than "Custom" is chosen: if index > 0: settings.set_option("plugin/equalizer/pre", model.get_value(model.get_iter(index), 1)) self.pre.set_value(model.get_value(model.get_iter(index), 1)) for band in range(10): settings.set_option( "plugin/equalizer/band%s" % band, model.get_value(model.get_iter(index), band + 2), ) band_widget = getattr(self, "band%s" % band) band_widget.set_value( model.get_value(model.get_iter(index), band + 2)) @GtkTemplate.Callback def check_enabled(self, widget): settings.set_option("plugin/equalizer/enabled", widget.get_active()) def save_presets(self): if os.path.exists(self.PRESETS_PATH): os.remove(self.PRESETS_PATH) with open(self.PRESETS_PATH, 'w') as config_file: for row in self.presets: config_file.write(row[0] + '\n') line = "".join(str(row[i]) + " " for i in range(1, 12)) line += "\n" config_file.write(line) def load_presets(self): """ Populate the GTK ListStore with presets """ load_defaults = True if os.path.exists(self.PRESETS_PATH): try: with open(self.PRESETS_PATH, 'r') as presets_file: line = presets_file.readline() while line != "": preset = [] preset.append(line[:-1]) line = presets_file.readline() vals = line.split(" ") for i in range(11): preset.append(float(vals[i])) self.presets.append(preset) line = presets_file.readline() except Exception: logger.exception( "Error loading equalizer presets, reverting to defaults") else: load_defaults = False if load_defaults: for preset in DEFAULT_PRESETS: self.presets.append(preset)
def setup_logging(self): console_format = "%(levelname)-8s: %(message)s" loglevel = logging.INFO if self.options.DebugThreads: console_format = "%(threadName)s:" + console_format if self.options.Debug: loglevel = logging.DEBUG console_format = "%(asctime)s,%(msecs)3d:" + console_format console_format += " (%(name)s)" # add module name elif self.options.Quiet: loglevel = logging.WARNING # Logfile level should always be INFO or higher if self.options.Quiet: logfilelevel = logging.INFO else: logfilelevel = loglevel datefmt = "%H:%M:%S" # Logging to terminal logging.basicConfig(level=loglevel, format=console_format, datefmt=datefmt) class FilterLogger(logging.Logger): class Filter(logging.Filter): def filter(self, record): pass_record = True if FilterLogger.module is not None: pass_record = record.name == self.module if FilterLogger.level != logging.NOTSET and pass_record: pass_record = record.levelno == self.level return pass_record module = None level = logging.NOTSET def __init__(self, name): logging.Logger.__init__(self, name) log_filter = self.Filter(name) log_filter.module = FilterLogger.module log_filter.level = FilterLogger.level self.addFilter(log_filter) FilterLogger.module = self.options.ModuleFilter if self.options.LevelFilter is not None: FilterLogger.level = getattr(logging, self.options.LevelFilter) logging.setLoggerClass(FilterLogger) # Create log directory logdir = os.path.join(xdg.get_data_dir(), 'logs') if not os.path.exists(logdir): os.makedirs(logdir) # Try to migrate logs from old location from glob import glob logfiles = glob(os.path.join(xdg.get_config_dir(), 'exaile.log*')) for logfile in logfiles: try: # Try to move to new location os.rename(logfile, os.path.join(logdir, os.path.basename(logfile))) except OSError: # Give up and simply remove os.remove(logfile) # Logging to file; this also automatically rotates the logs logfile = logging.handlers.RotatingFileHandler(os.path.join( logdir, 'exaile.log'), mode='a', backupCount=5) logfile.doRollover() # each session gets its own file logfile.setLevel(logfilelevel) formatter = logging.Formatter( '%(asctime)s %(levelname)-8s: %(message)s (%(name)s)', datefmt=datefmt) logfile.setFormatter(formatter) logging.getLogger("").addHandler(logfile)