Skip to content

Commit

Permalink
refactor: change project structure
Browse files Browse the repository at this point in the history
  • Loading branch information
cosven committed Feb 12, 2016
1 parent f474013 commit 6559bde
Show file tree
Hide file tree
Showing 26 changed files with 123 additions and 90 deletions.
1 change: 1 addition & 0 deletions feeluown/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# -*- coding: utf-8 -*-
3 changes: 0 additions & 3 deletions feeluown/base/__init__.py

This file was deleted.

18 changes: 11 additions & 7 deletions feeluown/controller_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QApplication

from feeluown.base.logger import LOG
from feeluown.logger import LOG


class ControllerApi(object):
Expand Down Expand Up @@ -42,20 +42,23 @@ def play_mv_by_mvid(cls, mvid):
clipboard = QApplication.clipboard()
clipboard.setText(url_high)

cls.view.ui.STATUS_BAR.showMessage(u"程序已经将视频的播放地址复制到剪切板", 5000)
cls.view.ui.STATUS_BAR.showMessage(
u"程序已经将视频的播放地址复制到剪切板", 5000)
if platform.system() == "Linux":
ControllerApi.player.pause()
ControllerApi.notify_widget.show_message("通知", "正在尝试调用VLC视频播放器播放MV")
ControllerApi.notify_widget.show_message(
"通知", "正在尝试调用VLC视频播放器播放MV")
try:
subprocess.Popen(['vlc', url_high, '--play-and-exit', '-f'])
except Exception as e:
except:
LOG.error('call vlc player failed')
elif platform.system().lower() == 'Darwin'.lower():
ControllerApi.player.pause()
ControllerApi.notify_widget.show_message("通知", "准备调用 QuickTime Player 播放mv")
ControllerApi.notify_widget.show_message(
"通知", "准备调用 QuickTime Player 播放mv")
try:
subprocess.Popen(['open', '-a', 'QuickTime Player', url_high])
except Exception as e:
except:
LOG.error('call quicktime player failed')

@classmethod
Expand All @@ -71,7 +74,8 @@ def toggle_desktop_mini(cls):
ControllerApi.desktop_mini.close()
else:
ControllerApi.desktop_mini.show()
ControllerApi.notify_widget.show_message("Tips", "按ESC可以退出mini模式哦 ~")
ControllerApi.notify_widget.show_message(
"Tips", "按ESC可以退出mini模式哦 ~")

@classmethod
@pyqtSlot(int)
Expand Down
2 changes: 1 addition & 1 deletion feeluown/controllers/version_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import requests
from functools import partial

from feeluown.base.logger import LOG
from feeluown.logger import LOG
from feeluown.controller_api import ControllerApi
from feeluown.view_api import ViewOp

Expand Down
95 changes: 58 additions & 37 deletions feeluown/glue.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,17 @@
import asyncio
import platform

from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QKeySequence, QIcon, QPainter
from PyQt5.QtCore import Qt, pyqtSlot
from PyQt5.QtWidgets import QStyle, QStyleOption, QShortcut, QWidget,\
QApplication

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

from feeluown.network_manager import NetworkManager
from feeluown.player import Player
from feeluown.logger import LOG
from feeluown.controller_api import ControllerApi
from feeluown.view_api import ViewOp
from feeluown.widgets.login_dialog import LoginDialog
Expand All @@ -20,17 +24,14 @@
from feeluown.widgets.desktop_mini import DesktopMiniLayer
from feeluown.widgets.notify import NotifyWidget
from feeluown.ui import UiMainWidget
from feeluown.base.logger import LOG
from feeluown.base.network_manger import NetworkManager
from feeluown.base.player import Player
from feeluown.base.utils import measure_time
from feeluown.utils import measure_time
from feeluown.controllers.focus_manager import FocusManager
from feeluown.controllers.modes import ModesManger
from feeluown.controllers.tips_manager import TipsManager
from feeluown.controllers.version_manager import VersionManager
from feeluown.constants import WINDOW_ICON, DATABASE_SQLITE

from feeluown.plugin import NetEaseMusic, MprisEx
from feeluown.plugin import NetEaseMusic, Hotkey, MprisEx
from feeluown.plugin.NetEaseMusic.model import Base


Expand All @@ -54,26 +55,25 @@ def __init__(self, parent=None):
session = Session()
LOG.info('db connected: %s' % DATABASE_SQLITE)

ControllerApi.player = Player()
ControllerApi.player = Player(self)
ControllerApi.session = session
ControllerApi.view = ViewOp
ControllerApi.desktop_mini = DesktopMiniLayer()
ControllerApi.lyric_widget = LyricWidget()
ControllerApi.notify_widget = NotifyWidget()

ControllerApi.network_manager = NetworkManager()
ControllerApi.network_manager = NetworkManager(self)
ControllerApi.current_playlist_widget = MusicTableWidget()

self._search_shortcut = QShortcut(QKeySequence('Ctrl+F'), self)
self._minimize_shortcut = QShortcut(QKeySequence('Ctrl+M'), self)
self._pre_focus = QShortcut(QKeySequence('Ctrl+['), self)
self._next_focus = QShortcut(QKeySequence('Ctrl+]'), self)
# self._switch_mode_shortcut = QShortcut(QKeySequence(Qt.Key_Escape), self)

self.setAttribute(Qt.WA_MacShowFocusRect, False)
self.setWindowIcon(QIcon(WINDOW_ICON))
self.setWindowTitle('FeelUOwn')
self.resize(960, 600)
self.resize(1000, 608)

self.mode_manager = ModesManger()
self._init_signal_binding()
Expand All @@ -85,35 +85,42 @@ def __init__(self, parent=None):

def _init_plugins(self):
NetEaseMusic.init(self) # 特别意义的插件
# Hotkey.init()
Hotkey.init()
MprisEx.init()

def _init_signal_binding(self):
"""初始化部分信号绑定
"""
"""init signal binding among widgets"""
ViewOp.ui.LOGIN_BTN.clicked.connect(self.pop_login)
ViewOp.ui.QUIT_ACTION.triggered.connect(sys.exit)
ViewOp.ui.SONG_PROGRESS_SLIDER.sliderMoved.connect(ControllerApi.seek)
ViewOp.ui.SHOW_CURRENT_SONGS.clicked.connect(self._show_current_playlist)
ViewOp.ui.SHOW_CURRENT_SONGS.clicked.connect(
self._show_current_playlist)

ViewOp.ui.SEARCH_BOX.returnPressed.connect(self._search_music)
ViewOp.ui.LOVE_SONG_BTN.clicked.connect(ViewOp.on_set_favorite_btn_clicked)
ViewOp.ui.SIMI_SONGS_BTN.clicked.connect(self.mode_manager.change_to_simi)
ViewOp.ui.LOVE_SONG_BTN.clicked.connect(
ViewOp.on_set_favorite_btn_clicked)
ViewOp.ui.SIMI_SONGS_BTN.clicked.connect(
self.mode_manager.change_to_simi)

ViewOp.ui.SHOW_DESKTOP_MINI.clicked.connect(self.switch_desktop_mini)

ViewOp.ui.PLAY_OR_PAUSE.clicked.connect(ViewOp.on_play_or_pause_clicked)
ViewOp.ui.PLAY_OR_PAUSE.clicked.connect(
ViewOp.on_play_or_pause_clicked)

ViewOp.ui.WEBVIEW.signal_play.connect(self.on_play_song_clicked)
ViewOp.ui.WEBVIEW.signal_play_songs.connect(self.on_play_songs)
ViewOp.ui.WEBVIEW.signal_play_mv.connect(ControllerApi.play_mv_by_mvid)
ViewOp.ui.WEBVIEW.signal_search_album.connect(self.search_album)
ViewOp.ui.WEBVIEW.signal_search_artist.connect(self.search_artist)

ViewOp.ui.PLAY_PREVIOUS_SONG_BTN.clicked.connect(ControllerApi.player.play_last)
ViewOp.ui.PLAY_NEXT_SONG_BTN.clicked.connect(ControllerApi.player.play_next)
ViewOp.ui.PLAY_MV_BTN.clicked.connect(ViewOp.on_play_current_song_mv_clicked)
ViewOp.ui.SHOW_LYRIC_BTN.clicked.connect(ControllerApi.toggle_lyric_widget)
ViewOp.ui.PLAY_PREVIOUS_SONG_BTN.clicked.connect(
ControllerApi.player.play_last)
ViewOp.ui.PLAY_NEXT_SONG_BTN.clicked.connect(
ControllerApi.player.play_next)
ViewOp.ui.PLAY_MV_BTN.clicked.connect(
ViewOp.on_play_current_song_mv_clicked)
ViewOp.ui.SHOW_LYRIC_BTN.clicked.connect(
ControllerApi.toggle_lyric_widget)

ViewOp.ui.SPREAD_BTN_FOR_MY_LIST.clicked.connect(
ViewOp.ui.MY_LIST_WIDGET.fold_spread_with_animation)
Expand All @@ -123,32 +130,46 @@ def _init_signal_binding(self):
ViewOp.ui.LOCAL_LIST_WIDGET.fold_spread_with_animation)
ViewOp.ui.NEW_PLAYLIST_BTN.clicked.connect(ViewOp.new_playlist)

ControllerApi.player.signal_player_media_changed.connect(ViewOp.on_player_media_changed)
ControllerApi.player.stateChanged.connect(ViewOp.on_player_state_changed)
ControllerApi.player.positionChanged.connect(ViewOp.on_player_position_changed)
ControllerApi.player.durationChanged.connect(ViewOp.on_player_duration_changed)
ControllerApi.player.signal_playlist_is_empty.connect(self.on_playlist_empty)
ControllerApi.player.signal_player_media_changed.connect(
ViewOp.on_player_media_changed)
ControllerApi.player.stateChanged.connect(
ViewOp.on_player_state_changed)
ControllerApi.player.positionChanged.connect(
ViewOp.on_player_position_changed)
ControllerApi.player.durationChanged.connect(
ViewOp.on_player_duration_changed)
ControllerApi.player.signal_playlist_is_empty.connect(
self.on_playlist_empty)
ControllerApi.player.signal_playback_mode_changed.connect(
ViewOp.ui.STATUS_BAR.playmode_switch_label.on_mode_changed)

ControllerApi.network_manager.finished.connect(ControllerApi.network_manager.access_network_queue)
ControllerApi.network_manager.finished.connect(
ControllerApi.network_manager.access_network_queue)

ControllerApi.desktop_mini.content.set_song_like_signal.connect(ViewOp.on_set_favorite_btn_clicked)
ControllerApi.desktop_mini.content.play_last_music_signal.connect(ControllerApi.player.play_last)
ControllerApi.desktop_mini.content.play_next_music_signal.connect(ControllerApi.player.play_next)
ControllerApi.desktop_mini.content.set_song_like_signal.connect(
ViewOp.on_set_favorite_btn_clicked)
ControllerApi.desktop_mini.content.play_last_music_signal.connect(
ControllerApi.player.play_last)
ControllerApi.desktop_mini.content.play_next_music_signal.connect(
ControllerApi.player.play_next)
ControllerApi.desktop_mini.close_signal.connect(self.show)

ViewOp.ui.FM_ITEM.signal_text_btn_clicked.connect(self.mode_manager.change_to_fm)
ViewOp.ui.RECOMMEND_ITEM.signal_text_btn_clicked.connect(ViewOp.on_recommend_item_clicked)
ViewOp.ui.FM_ITEM.signal_text_btn_clicked.connect(
self.mode_manager.change_to_fm)
ViewOp.ui.RECOMMEND_ITEM.signal_text_btn_clicked.connect(
ViewOp.on_recommend_item_clicked)

ControllerApi.current_playlist_widget.signal_play_music.connect(self.on_play_song_clicked)
ControllerApi.current_playlist_widget.signal_remove_music_from_list.connect(self.remove_music_from_list)
ControllerApi.current_playlist_widget.signal_play_music.connect(
self.on_play_song_clicked)
ControllerApi.current_playlist_widget.signal_remove_music_from_list.\
connect(self.remove_music_from_list)

ControllerApi.current_playlist_widget.resize(500, 200)
ControllerApi.current_playlist_widget.close()
ViewOp.ui.PROGRESS.setRange(0, 100)

ControllerApi.player.signal_download_progress.connect(ViewOp.ui.PROGRESS.setValue)
ControllerApi.player.signal_download_progress.connect(
ViewOp.ui.PROGRESS.setValue)

self._search_shortcut.activated.connect(ViewOp.ui.SEARCH_BOX.setFocus)
self._pre_focus.activated.connect(FocusManager.change_focus)
Expand Down
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from queue import Queue
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkReply

from feeluown.controller_api import ControllerApi
from .utils import singleton
Expand All @@ -26,5 +26,3 @@ def access_network_queue(self, res):
return
item = ControllerApi.network_manager.network_queue.get_nowait()
item(res)


File renamed without changes.
11 changes: 6 additions & 5 deletions feeluown/plugin/Hotkey/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,16 @@

import sys
import asyncio
from functools import partial


def init():
if sys.platform == "darwin":
from .mac import run
asyncio.Task(run())
elif sys.platform.lower() == "linux":
from .linux import KeyEventLoop
event = KeyEventLoop()
app_event_loop = asyncio.get_event_loop()
app_event_loop.run_in_executor(None, partial(event.run))
# MPRIS respond to the key event by default
pass
# from .linux import KeyEventLoop
# event = KeyEventLoop()
# app_event_loop = asyncio.get_event_loop()
# app_event_loop.run_in_executor(None, partial(event.run))
7 changes: 4 additions & 3 deletions feeluown/plugin/Hotkey/linux.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
# -*- coding=utf8 -*-
__author__ = 'cosven'


from enum import Enum

Expand All @@ -9,9 +7,12 @@
from Xlib.ext import record
from Xlib.protocol import rq

from feeluown.base.logger import LOG
from feeluown.logger import LOG
from feeluown.controller_api import ControllerApi


__author__ = 'cosven'

"""
0x1008ff17 media_next
0x1008ff16 media_previous
Expand Down
5 changes: 3 additions & 2 deletions feeluown/plugin/Hotkey/mac.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
# -*- coding=utf8 -*-
__author__ = 'cosven'

import asyncio

from feeluown.base.logger import LOG
from feeluown.logger import LOG
from feeluown.controller_api import ControllerApi

__author__ = 'cosven'


def keyboard_tap_callback(proxy, type_, event, refcon):
from AppKit import NSKeyUp, NSEvent, NSBundle
Expand Down
2 changes: 1 addition & 1 deletion feeluown/plugin/MprisEx/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

import dbus.mainloop.pyqt5

from feeluown.base.logger import LOG
from feeluown.logger import LOG

from .service import MprisServer

Expand Down
2 changes: 1 addition & 1 deletion feeluown/plugin/MprisEx/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import dbus
import dbus.service

from feeluown.base.logger import LOG
from feeluown.logger import LOG
from feeluown.controller_api import ControllerApi


Expand Down
2 changes: 1 addition & 1 deletion feeluown/plugin/NetEaseMusic/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-

from feeluown.base.logger import LOG
from feeluown.logger import LOG
from feeluown.controller_api import ControllerApi
from feeluown.view_api import ViewOp

Expand Down
4 changes: 2 additions & 2 deletions feeluown/plugin/NetEaseMusic/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@

from PyQt5.QtCore import pyqtSignal, QObject

from feeluown.base.utils import singleton, show_requests_progress
from feeluown.base.logger import LOG
from feeluown.utils import singleton, show_requests_progress
from feeluown.logger import LOG


uri = 'http://music.163.com/api'
Expand Down
6 changes: 3 additions & 3 deletions feeluown/plugin/NetEaseMusic/normalize.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
import re
from functools import partial

from feeluown.base.logger import LOG
from feeluown.base.utils import singleton
from feeluown.base.models import MusicModel, UserModel, PlaylistModel, ArtistModel, \
from feeluown.logger import LOG
from feeluown.utils import singleton
from feeluown.models import MusicModel, UserModel, PlaylistModel, ArtistModel, \
AlbumModel, BriefPlaylistModel, BriefMusicModel, BriefArtistModel, BriefAlbumModel, \
AlbumDetailModel, ArtistDetailModel, MvModel, LyricModel

Expand Down
2 changes: 1 addition & 1 deletion feeluown/tests/test_base_common.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

import pytest

from feeluown.base.utils import *
from feeluown.utils import *


def test_singleton():
Expand Down

0 comments on commit 6559bde

Please sign in to comment.