def run_app(app): loop = asyncio.get_event_loop() if app.mode & (App.DaemonMode | App.GuiMode): loop.call_later( 10, partial(loop.create_task, app.version_mgr.check_release())) if app.mode & App.DaemonMode: if sys.platform.lower() == 'darwin': try: from .global_hotkey_mac import MacGlobalHotkeyManager except ImportError as e: logger.warning("Can't start mac hotkey listener: %s", str(e)) else: mac_global_hotkey_mgr = MacGlobalHotkeyManager() mac_global_hotkey_mgr.start() loop.create_task(app.server.run()) run_pubsub(app.pubsub_gateway, app.pubsub_server) try: if not (app.config.MODE & (App.GuiMode | App.DaemonMode)): logger.warning('Fuo running with no daemon and no window') loop.run_forever() except KeyboardInterrupt: # NOTE: gracefully shutdown? pass finally: loop.stop() _shutdown_app(app) loop.close()
def main(): sys.excepthook = excepthook parse_args(sys.argv) cli_only = '-nw' in sys.argv if not cli_only: try: import PyQt5 # noqa except ImportError: logger.warning('PyQt5 is not installed,can only use CLI mode.') cli_only = True if not cli_only: from PyQt5.QtWidgets import QApplication from quamash import QEventLoop from feeluown.guiapp import GuiApp q_app = QApplication(sys.argv) q_app.setQuitOnLastWindowClosed(True) q_app.setApplicationName('FeelUOwn') app_event_loop = QEventLoop(q_app) asyncio.set_event_loop(app_event_loop) pubsub_gateway, pubsub_server = run_pubsub() app = GuiApp(pubsub_gateway) app.initialize() load_rcfile(app) # TODO: 调用 show 时,会弹出主界面,但这时界面还没开始绘制 # 为了让提升启动速度,一些非必须的初始化操作可以在 show 之后进行 app.show() else: from feeluown.app import CliApp pubsub_gateway, pubsub_server = run_pubsub() app = CliApp(pubsub_gateway) app.initialize() live_lyric = app.live_lyric event_loop = asyncio.get_event_loop() event_loop.create_task(run_server(app, live_lyric)) try: event_loop.run_forever() logger.info('Event loop stopped.') except KeyboardInterrupt: # NOTE: gracefully shutdown? pass finally: pubsub_server.close() event_loop.close()
def main(): parser = setup_argparse() args = parser.parse_args() debug = args.debug mpv_audio_device = args.mpv_audio_device setup_logger(debug=debug) player = MpvPlayer(audio_device=bytes(mpv_audio_device, 'utf-8')) player.initialize() library = Library() library.register(lp) library.register(np) library.register(qp) pubsub_gateway, pubsub_server = run_pubsub() app = App(player, library, pubsub_gateway) live_lyric = app.live_lyric event_loop = asyncio.get_event_loop() event_loop.create_task(run_server(app, live_lyric)) try: event_loop.run_forever() logger.info('Event loop stopped.') except KeyboardInterrupt: # NOTE: gracefully shutdown? pass finally: pubsub_server.close() event_loop.close()
def initialize(app): app.player.position_changed.connect(app.live_lyric.on_position_changed) app.playlist.song_changed.connect(app.live_lyric.on_song_changed) app.plugin_mgr.scan() if app.mode & app.DaemonMode: app.server = FuoServer(library=app.library, player=app.player, playlist=app.playlist, live_lyric=app.live_lyric) app.pubsub_gateway, app.pubsub_server = run_pubsub() app.server.run() app._ll_publisher = LiveLyricPublisher(app.pubsub_gateway) app.live_lyric.sentence_changed.connect(app._ll_publisher.publish) if app.mode & App.GuiMode: app.theme_mgr.autoload() app.tips_mgr.show_random_tip() app.coll_uimgr.initialize() if app.mode & (App.DaemonMode | App.GuiMode): loop = asyncio.get_event_loop() loop.call_later( 10, partial(loop.create_task, app.version_mgr.check_release())) bind_signals(app) app.initialized.emit(app)
def initialize(app): app.player.position_changed.connect(app.live_lyric.on_position_changed) app.playlist.song_changed.connect(app.live_lyric.on_song_changed) app.pubsub_gateway, app.pubsub_server = run_pubsub() app.plugin_mgr.scan() app.protocol.run_server() if app.mode & App.GuiMode: app.theme_mgr.load_light() app.tips_mgr.show_random_tip() app.coll_mgr.scan() app._ll_publisher = LiveLyricPublisher(app.pubsub_gateway) app.live_lyric.sentence_changed.connect(app._ll_publisher.publish) loop = asyncio.get_event_loop() loop.call_later(10, partial(loop.create_task, app.version_mgr.check_release()))
def main(): parser = setup_argparse() args = parser.parse_args() if is_port_used(23333) or is_port_used(23334): print('\033[0;31m', end='') print( 'Port(23333 or 23334) is used, maybe another feeluown is running?') print('\033[0m', end='') sys.exit(1) debug = args.debug mpv_audio_device = args.mpv_audio_device cli_only = args.no_window logger_config(debug, to_file=args.log_to_file) from fuocore.player import MpvPlayer player = MpvPlayer(audio_device=bytes(mpv_audio_device, 'utf-8')) player.initialize() # 设置 exception hook sys.excepthook = excepthook if not cli_only: try: import PyQt5 # noqa except ImportError: logger.warning('PyQt5 is not installed,can only use CLI mode.') cli_only = True if not cli_only: from PyQt5.QtWidgets import QApplication from quamash import QEventLoop from feeluown.guiapp import GuiApp q_app = QApplication(sys.argv) q_app.setQuitOnLastWindowClosed(True) q_app.setApplicationName('FeelUOwn') app_event_loop = QEventLoop(q_app) asyncio.set_event_loop(app_event_loop) pubsub_gateway, pubsub_server = run_pubsub() app = GuiApp(pubsub_gateway, player=player) app.initialize() load_rcfile(app) # TODO: 调用 show 时,会弹出主界面,但这时界面还没开始绘制 # 为了让提升启动速度,一些非必须的初始化操作可以在 show 之后进行 app.show() else: from feeluown.app import CliApp pubsub_gateway, pubsub_server = run_pubsub() app = CliApp(pubsub_gateway) app.initialize() live_lyric = app.live_lyric event_loop = asyncio.get_event_loop() event_loop.create_task(run_server(app, live_lyric)) try: event_loop.run_forever() logger.info('Event loop stopped.') except KeyboardInterrupt: # NOTE: gracefully shutdown? pass finally: pubsub_server.close() event_loop.close()
def main(): parser = setup_argparse() args = parser.parse_args() if args.version: print('feeluown {}, fuocore {}'.format(feeluown_version, fuocore_version)) return if is_port_used(23333) or is_port_used(23334): print('\033[0;31m', end='') print('Port(23333 or 23334) is used, maybe another feeluown is running?') print('\033[0m', end='') sys.exit(1) debug = args.debug mpv_audio_device = args.mpv_audio_device cli_only = args.no_window logger_config(debug, to_file=args.log_to_file) load_rcfile() player_kwargs = dict( audio_device=bytes(mpv_audio_device, 'utf-8')) # 设置 exception hook sys.excepthook = excepthook if not cli_only: try: import PyQt5 # noqa except ImportError: logger.warning('PyQt5 is not installed,can only use CLI mode.') cli_only = True if not cli_only: from PyQt5.QtWidgets import QApplication from quamash import QEventLoop from feeluown.guiapp import GuiApp q_app = QApplication(sys.argv) q_app.setQuitOnLastWindowClosed(True) q_app.setApplicationName('FeelUOwn') app_event_loop = QEventLoop(q_app) asyncio.set_event_loop(app_event_loop) pubsub_gateway, pubsub_server = run_pubsub() app = GuiApp(pubsub_gateway, player_kwargs=player_kwargs) app.config = config # 初始化 UI 和组件间信号绑定 app.initialize() # TODO: 调用 show 时,会弹出主界面,但这时界面还没开始绘制 # 为了让提升启动速度,一些非必须的初始化操作可以在 show 之后进行 app.show() else: from feeluown.app import CliApp pubsub_gateway, pubsub_server = run_pubsub() app = CliApp(pubsub_gateway, player_kwargs=player_kwargs) app.config = config app.initialize() bind_signals(app) event_loop = asyncio.get_event_loop() app.protocol.run_server() try: event_loop.run_forever() logger.info('Event loop stopped.') except KeyboardInterrupt: # NOTE: gracefully shutdown? pass finally: pubsub_server.close() event_loop.close()