Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
    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()
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
        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")
)
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
    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)