• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

feeluown / feeluown-netease / 8986919738

07 May 2024 02:11PM UTC coverage: 22.263% (-0.06%) from 22.319%
8986919738

push

github

cosven
support toplist

4 of 24 new or added lines in 4 files covered. (16.67%)

1 existing line in 1 file now uncovered.

362 of 1626 relevant lines covered (22.26%)

0.22 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/fuo_netease/provider_ui.py
1
import asyncio
×
2
import logging
×
3
import os
×
4
from typing import TYPE_CHECKING, Protocol
×
5

6
from feeluown.utils import aio
×
7
from feeluown.gui.provider_ui import (
×
8
    AbstractProviderUi,
9
    UISupportsLoginOrGoHome,
10
)
11

12
from .excs import NeteaseIOError
×
13
from .provider import provider
×
14
from .login_controller import LoginController
×
15
from .ui import LoginDialog
×
16

17
if TYPE_CHECKING:
×
18
    from feeluown.app.gui_app import GuiApp
×
19

20
logger = logging.getLogger(__name__)
×
21

22

23
class UISupports(UISupportsLoginOrGoHome, Protocol):
×
24
    ...
×
25

26

27
class NeteaseProviderUI(AbstractProviderUi):
×
28
    """
29
    FIXME: 简化 login_as 和 ready_to_login 两个方法的实现逻辑
30
    """
31

32
    def __init__(self, app: 'GuiApp'):
×
33
        self._app = app
×
34
        self.login_dialog = LoginDialog(
×
35
            verify_captcha=LoginController.check_captcha,
36
            verify_userpw=LoginController.check,
37
            create_user=LoginController.create,
38
        )
39
        self._user = None
×
40

41
    def _(self) -> UISupports:
×
42
        return self
×
43

44
    @property
×
45
    def provider(self):
×
46
        return provider
×
47

48
    def get_colorful_svg(self) -> str:
×
49
        return os.path.join(os.path.dirname(__file__), 'assets', 'icon.svg')
×
50

51
    def register_pages(self, route):
×
52
        from .page_fav import render as fav_render  # noqa
×
53

54
        route('/providers/netease/fav')(fav_render)
×
55

56
    def login_or_go_home(self):
×
57
        if self._user is not None:
×
58
            logger.debug('You have already logined in.')
×
59
            asyncio.ensure_future(self.login_as(self._user))
×
60
            return
×
61

62
        logger.debug('Trying to load last login user...')
×
63
        user = LoginController.load()
×
64
        if user is not None:
×
65
            cookies, exists = user.cache_get('cookies')
×
66
            assert exists
×
67
            if 'MUSIC_U' in cookies:
×
68
                logger.debug('Trying to load last login user...done')
×
69
                asyncio.ensure_future(self.login_as(user))
×
70
                return
×
71

72
        logger.debug('Trying to load last login user...failed')
×
73
        self.login_dialog.show()
×
74
        self.login_dialog.load_user_pw()
×
75
        self.login_dialog.login_success.connect(
×
76
            lambda user: asyncio.ensure_future(self.login_as(user)))
77

78
    async def login_as(self, user):
×
79
        provider.auth(user)
×
80
        self._user = user
×
81
        LoginController.save(user)
×
82
        left_panel = self._app.ui.left_panel
×
83
        left_panel.playlists_con.show()
×
84
        left_panel.playlists_con.create_btn.show()
×
85
        left_panel.my_music_con.show()
×
86

NEW
87
        mymusic_fm_item = self._app.mymusic_uimgr.create_item('私人 FM')
×
88
        mymusic_fm_item.clicked.connect(self._activate_fm)
×
NEW
89
        mymusic_cloud_item = self._app.mymusic_uimgr.create_item('云盘歌曲')
×
90
        mymusic_cloud_item.clicked.connect(
×
91
            lambda: self._app.browser.goto(page='/providers/netease/fav'),
92
            weak=False)
93

94
        self._app.mymusic_uimgr.clear()
×
95
        self._app.mymusic_uimgr.add_item(mymusic_fm_item)
×
96
        self._app.mymusic_uimgr.add_item(mymusic_cloud_item)
×
97

98
        await self._refresh_current_user_playlists()
×
99

100
    async def _refresh_current_user_playlists(self):
×
101
        playlists, fav_playlists = await aio.run_fn(self.provider.current_user_playlists)
×
102
        self._app.pl_uimgr.clear()
×
103
        self._app.pl_uimgr.add(playlists)
×
104
        self._app.pl_uimgr.add(fav_playlists, is_fav=True)
×
105

106
    def _activate_fm(self):
×
107
        self._app.fm.activate(self._fetch_fm_songs)
×
108

109
    def _fetch_fm_songs(self, *args, **kwargs):
×
110
        songs = provider.current_user_get_radio_songs()  # noqa
×
111
        if songs is None:
×
112
            raise NeteaseIOError('unknown error: get no radio songs')
×
113
        return songs
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc