Exemple #1
0
 def _idle(self):
     """Keep the main thread busy until we're going to shut down"""
     logger.info("SERVER UP!")
     while True:
         if len(get_state().to_raise) > 0:
             exp = get_state().to_raise.pop()
             raise exp
         time.sleep(1)
Exemple #2
0
    def _launch_extras(self):
        """All the add-on stuff"""
        music_database_config = get_config()[SECTION_MUSIC_DATABASE]
        if music_database_config[DATABASE_ENABLED].get(bool):
            from mserv import databases
            get_state().music_database = databases.init_database(music_database_config)
            get_state().beets_database = databases.init_beets_database(music_database_config)
            databases.register_callbacks()

        mpd_config = get_config()[SECTION_MPD_SERVERS]
        mpd_server_configs = mpd_config.all_contents()
        for mpd_server_config in mpd_server_configs:
            mpd_server = MpdServer.create(mpd_server_config.get(MPD_SERVER, None))
            mpd_server.init_all()
        mpdserver.register_callbacks()
Exemple #3
0
def match_beets_items_to_music_database_items(mode="all"):
    if mode == "all":
        bdb = get_state().beets_database
        mdb = get_state().music_database
        beets_base_dir = get_config()[SECTION_MUSIC_DATABASE][BEETS_BASE_DIRECTORY].get()

        bi_class = bdb.get_model("Items")
        fe_class = mdb.get_model("FileEntry")
        bifel_class = mdb.get_model("BeetsItemFileEntryLink")

        bi_entries = bi_class.select().count()
        logger.info("Beginning a full BeetsItem -> FileEntry matching for " + str(bi_entries) + " records")

        for bi in bi_class.select():
            beets_id = bi.id
            # First check it's not got a link already...
            existing_bifel = bifel_class.select().where(bifel_class.beets_item_id == beets_id).exists()
            if existing_bifel:
                logger.debug("Existing match for " + str(beets_id))
            else:
                beets_path = bi.path.decode("utf-8")
                path_to_find = os.path.relpath(beets_path, beets_base_dir)
                try:
                    dir_to_find, filename_to_find = os.path.split(path_to_find)
                    fe_instance = fe_class.select()\
                        .where(fe_class.directory == dir_to_find)\
                        .where(fe_class.filename == filename_to_find)\
                        .get()
                    bifel_instance = bifel_class()
                    bifel_instance.file = fe_instance
                    bifel_instance.beets_item_id = beets_id
                    bifel_instance.save()
                    logger.info("Found match for " + str(path_to_find))
                except fe_class.DoesNotExist:
                    logger.info("No item found for path " + str(path_to_find) + " from beets item " + str(beets_id))
                except ValueError:
                    logger.exception("Problem splitting path " + str(path_to_find))
    else:
        raise Exception("Unsupported mode " + str(mode))
Exemple #4
0
def get_music_model(name):
    return get_state().music_database.get_model(name)
Exemple #5
0
def get_beets_model(name):
    return get_state().beets_database.get_model(name)
Exemple #6
0
 def model(cls):
     if not cls._underlying_model:
         cls._underlying_model = get_state().music_database.get_model(cls.get_table_name())
     return cls._underlying_model
Exemple #7
0
 def get_beets_item(self):
     beets_id = self._data.beets_item_id
     beets_item_class = get_state().beets_database.get_model("Items")
     beets_track = beets_item_class.select().where(beets_item_class.id == beets_id).get()
     return beets_track
Exemple #8
0
def _restart_server():
        get_state().to_raise.append(MServRestartServer)
Exemple #9
0
def _shutdown_server():
    get_state().to_raise.append(MServShutdownServer)
Exemple #10
0
def file_scan():
    db = get_state().music_database
    fe_class = db.get_model("FileEntry")
    base_directory = get_config()[SECTION_MUSIC_DATABASE][MUSIC_BASE_DIRECTORY].get()
    _scan_dir_recursive_saving_file_entries(base_directory, base_directory, fe_class)