コード例 #1
0
    def test_should_fetch_track_details(self):
        library = Library(self.library_name).create(self.folder_name)
        library_filter = library.view().by("ALBUM").filter()
        album_title = library_filter.ids[0]
        track = library_filter.using(album_title).ids[0]
        track_id = track["_id"]

        tags = library.track_details(track_id)
        self.assertTrue(tags)
コード例 #2
0
    def test_should_save_tags(self):
        library = Library(self.library_name).create(self.folder_name, None)
        library_filter = library.view().by("ALBUM").filter()
        album_title = library_filter.ids[0]
        track = library_filter.using(album_title).ids[0]
        track_id = track["_id"]
        tags = library.track_details(track_id)
        from time import time

        now = str(time() * 1000)
        tags["ALBUM"] = now

        library.store(track_id, tags)

        path = tags["PATH"]
        from tags.tagreader import TagReader

        saved_tags = TagReader().readfile(path)
        self.assertEquals(now, saved_tags["ALBUM"])
コード例 #3
0
    def test_should_store_document(self):
        library = Library(self.library_name).create(self.folder_name, None)
        library_filter = library.view().by("ALBUM").filter()
        album_title = library_filter.ids[0]
        track = library_filter.using(album_title).ids[0]
        track_id = track["_id"]
        tags = library.track_details(track_id)
        from time import time

        now = str(time() * 1000)
        tags["ALBUM"] = now

        library.store(track_id, tags)

        from pymongo import MongoClient

        client = MongoClient()
        db = client[self.library_name]
        self.assertEquals(now, db.tags.find_one({"_id": track_id})["ALBUM"])
コード例 #4
0
ファイル: ui.py プロジェクト: realmassy/MusicLibrary
class Ui:

    def __init__(self):
        super().__init__()
        self.library = Library('music').create(folder_name, Listener())
        views = ['COMPOSER', 'GENRE', 'ALBUM', 'ARTIST']
        library_view = self.library.view()
        for view in views:
            self.filters = library_view.by(view)
        self.filters = self.filters.filter()
        self.track_selection = False

    def prompt(self, items):
        from prompt_toolkit.key_binding.manager import KeyBindingManager
        from prompt_toolkit.keys import Keys
        key_binding_manager = KeyBindingManager()

        @key_binding_manager.registry.add_binding(Keys.F4)
        def _(event):
            self.filters.remove_current_filter()
            self.run()

        @key_binding_manager.registry.add_binding(Keys.F1)
        def _(event):
            if self.filters.current_view() != 'TITLE':
                first_item = self.filters.ids[0]
                event.cli.current_buffer.insert_text(first_item)

        return get_input('> ', completer=WordCompleter(items, ignore_case=True),
                         key_bindings_registry=key_binding_manager.registry,
                         display_completions_in_columns=True)

    def handle_track_selection(self):
        songs = [format_song(song) for (song) in self.filters.ids]
        for song in songs:
            print(song)
        title = self.prompt(songs)
        index = songs.index(title)
        song = self.filters.ids[index]
        track_details = self.library.track_details(song['_id'])
        from bson.json_util import dumps
        print(dumps(track_details))
        self.track_selection = True

    def get_selection(self):
        if self.track_selection:
            for action in actions:
                print(action)
            self.prompt(actions)
        else:
            if self.filters.current_view() == 'TITLE':
                self.handle_track_selection()
            else:
                for item in self.filters.ids:
                    print(item)
                selection = self.prompt(self.filters.ids)
                self.filters.using(selection)
                self.track_selection = False

    def run(self):
        while True:
            self.get_selection()