def __init__(self, args, config): self.mode = config.MODE # DEPRECATED: use app.config.MODE instead self.config = config self.args = args self.initialized = Signal() self.about_to_shutdown = Signal() self.plugin_mgr = PluginsManager(self) self.request = Request() # TODO: rename request to http self.version_mgr = VersionManager(self) self.task_mgr = TaskManager(self) # Library. self.library = Library(config.PROVIDERS_STANDBY) # TODO: initialization should be moved into initialize Resolver.library = self.library # Player. self.player = Player( audio_device=bytes(config.MPV_AUDIO_DEVICE, 'utf-8')) self.playlist = Playlist( self, audio_select_policy=config.AUDIO_SELECT_POLICY) self.live_lyric = LiveLyric(self) self.fm = FM(self) # TODO: initialization should be moved into initialize self.player.set_playlist(self.playlist) self.about_to_shutdown.connect(lambda _: self.dump_state(), weak=False)
def attach_attrs(app): """初始化 app 属性""" loop = asyncio.get_event_loop() app.library = Library(app.config.PROVIDERS_STANDBY) app.live_lyric = LiveLyric(app) player_kwargs = dict( audio_device=bytes(app.config.MPV_AUDIO_DEVICE, 'utf-8')) app.playlist = Playlist(app, audio_select_policy=app.config.AUDIO_SELECT_POLICY) app.player = Player(app.playlist, **(player_kwargs or {})) app.plugin_mgr = PluginsManager(app) app.request = Request() app.task_mgr = TaskManager(app, loop) app.fm = FM(app) if app.mode & (app.DaemonMode | app.GuiMode): app.version_mgr = VersionManager(app) if app.mode & app.DaemonMode: app.server = FuoServer(app) app.pubsub_gateway = PubsubGateway() app._ll_publisher = LiveLyricPublisher(app.pubsub_gateway) if app.mode & app.GuiMode: from feeluown.uimodels.provider import ProviderUiManager from feeluown.uimodels.playlist import PlaylistUiManager from feeluown.uimodels.my_music import MyMusicUiManager from feeluown.uimodels.collection import CollectionUiManager from feeluown.collection import CollectionManager from .gui.browser import Browser from .gui.hotkey import HotkeyManager from .gui.image import ImgManager from .gui.theme import ThemeManager from .gui.tips import TipsManager from .gui.ui import Ui from .gui.tray import Tray # GUI 的一些辅助管理模块 app.coll_mgr = CollectionManager(app) app.theme_mgr = ThemeManager(app) app.tips_mgr = TipsManager(app) app.hotkey_mgr = HotkeyManager(app) app.img_mgr = ImgManager(app) # GUI 组件的数据管理模块 app.pvd_uimgr = ProviderUiManager(app) app.pl_uimgr = PlaylistUiManager(app) app.mymusic_uimgr = MyMusicUiManager(app) app.coll_uimgr = CollectionUiManager(app) app.browser = Browser(app) app.ui = Ui(app) if app.config.ENABLE_TRAY: app.tray = Tray(app) app.show_msg = app.ui.toolbar.status_line.get_item( 'notify').widget.show_msg
1. fuo-netease 2. fuo-xiami """ import logging from feeluown.library import Library from fuo_xiami import provider as xp from fuo_netease import provider as np logging.basicConfig() logger = logging.getLogger('feeluown') logger.setLevel(logging.DEBUG) lib = Library() lib.register(xp) lib.register(np) def test_list_song_standby(): """ 使用 library.list_song_standby 接口 """ result = xp.search('小小恋歌 新垣结衣', limit=2) song = result.songs[0] # 虾米音乐没有这首歌的资源 assert song.url == '' standby_songs = lib.list_song_standby(song) for index, ss in enumerate(standby_songs): # pylint: disable=all print(index, ss.source, ss.title, ss.artists_name, ss.url)
async def test_library_a_list_songs_standby_with_specified_providers(song): library = Library(providers_standby=['xxx']) song.source = 'dummy-1' songs = await library.a_list_song_standby(song) assert len(songs) == 0
def library(provider, ekaf_provider): library = Library() library.register(provider) library.register(ekaf_provider) return library