Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Config file bug fix #710

Merged
merged 3 commits into from
Jun 7, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 8 additions & 47 deletions NEMbox/__init__.py
Original file line number Diff line number Diff line change
@@ -1,47 +1,8 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
网易云音乐 Entry
'''
from __future__ import (
print_function, unicode_literals, division, absolute_import
)
import curses
import traceback
import argparse
import sys

from future.builtins import str

from .menu import Menu
from .__version__ import __version__ as version


def start():
parser = argparse.ArgumentParser()
parser.add_argument("-v",
"--version",
help="show this version and exit",
action="store_true")
args = parser.parse_args()
if args.version:
latest = Menu().check_version()
curses.endwin()
print('NetEase-MusicBox installed version:' + version)
if latest != version:
print('NetEase-MusicBox latest version:' + str(latest))
sys.exit()

nembox_menu = Menu()
try:
nembox_menu.start_fork(version)
except (OSError, TypeError, ValueError, KeyError, IndexError):
# clean up terminal while failed
curses.echo()
curses.nocbreak()
curses.endwin()
traceback.print_exc()


if __name__ == '__main__':
start()
from .utils import create_dir, create_file
from .const import Constant

create_dir(Constant.conf_dir)
create_dir(Constant.download_dir)
create_file(Constant.storage_path)
create_file(Constant.log_path, default='')
create_file(Constant.cookie_path, default='#LWP-Cookies-2.0\n')
47 changes: 47 additions & 0 deletions NEMbox/__main__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
网易云音乐 Entry
'''
from __future__ import (
print_function, unicode_literals, division, absolute_import
)
import curses
import traceback
import argparse
import sys

from future.builtins import str

from .menu import Menu
from .__version__ import __version__ as version


def start():
parser = argparse.ArgumentParser()
parser.add_argument("-v",
"--version",
help="show this version and exit",
action="store_true")
args = parser.parse_args()
if args.version:
latest = Menu().check_version()
curses.endwin()
print('NetEase-MusicBox installed version:' + version)
if latest != version:
print('NetEase-MusicBox latest version:' + str(latest))
sys.exit()

nembox_menu = Menu()
try:
nembox_menu.start_fork(version)
except (OSError, TypeError, ValueError, KeyError, IndexError):
# clean up terminal while failed
curses.echo()
curses.nocbreak()
curses.endwin()
traceback.print_exc()


if __name__ == '__main__':
start()
2 changes: 1 addition & 1 deletion NEMbox/__version__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

'''
__title__ = 'NetEase-MusicBox'
__version__ = '0.2.5.0'
__version__ = '0.2.5.1'
__description__ = 'A sexy command line interface musicbox'
__url__ = 'https://github.com/darknessomi/musicbox'
__author__ = 'omi'
Expand Down
19 changes: 12 additions & 7 deletions NEMbox/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,12 +84,13 @@ def song_url(cls, song):
if url is None:
return Parse._song_url_by_id(song['id'])
br = song['br']
quality_map = {
320000: 'HD 320k',
192000: 'MD 192k',
128000: 'LD 128k',
}
return url, quality_map[br]
if br >= 320000:
quality = 'HD'
elif br >= 192000:
quality = 'MD'
else:
quality = 'LD'
return url, '{} {}k'.format(quality, br // 1000)
else:
# songs_detail resp
return Parse._song_url_by_id(song['id'])
Expand Down Expand Up @@ -278,7 +279,7 @@ def login(self, username, password):

# 每日签到
def daily_task(self, is_mobile=True):
path = '/point/dailyTask'
path = '/weapi/point/dailyTask'
params = dict(type=0 if is_mobile else 1)
return self.request('POST', path, params)

Expand Down Expand Up @@ -508,6 +509,10 @@ def dig_info(self, data, dig_type):
if not data:
return []
if dig_type == 'songs' or dig_type == 'fmsongs':
urls = self.songs_url([s['id'] for s in data])
for s, u in zip(data, urls):
s['url'] = u['url']
s['br'] = u['br']
return Parse.songs(data)
elif dig_type == 'artists':
return Parse.artists(data)
Expand Down
9 changes: 2 additions & 7 deletions NEMbox/cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,12 @@


class Cache(Singleton):

def __init__(self):
if hasattr(self, '_init'):
return
self._init = True

self.const = Constant()
self.config = Config()
self.download_lock = threading.Lock()
Expand All @@ -52,12 +54,6 @@ def _kill(p):
_kill(self.aria2c)
_kill(self.wget)

def _mkdir(self, name):
try:
os.mkdir(name)
except OSError:
pass

def start_download(self):
check = self.download_lock.acquire(False)
if not check:
Expand Down Expand Up @@ -97,7 +93,6 @@ def start_download(self):
except OSError as e:
log.warning('{}.\tAria2c is unavailable, fall back to wget'.format(e))

self._mkdir(output_path)
para = ['wget', '-O', full_path, new_url]
self.wget = subprocess.Popen(para,
stdin=subprocess.PIPE,
Expand Down
118 changes: 9 additions & 109 deletions NEMbox/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,19 @@
import os
from future.builtins import open

from . import logger
from .singleton import Singleton
from .const import Constant
from .utils import utf8_data_to_file

log = logger.getLogger(__name__)


class Config(Singleton):

def __init__(self):
if hasattr(self, '_init'):
return
self._init = True
self.config_file_path = Constant.config_path

self.path = Constant.config_path
self.default_config = {
'version': 8,
'cache': {
Expand Down Expand Up @@ -117,120 +115,22 @@ def __init__(self):
}
}
self.config = {}
if not os.path.isfile(self.config_file_path):
if not os.path.isfile(self.path):
self.generate_config_file()

with open(self.config_file_path, 'r') as f:
with open(self.path, 'r') as f:
try:
self.config = json.load(f)
except ValueError:
log.debug('Load config json data failed.')
return

if not self.check_version():
self.save_config_file()
self.generate_config_file()

def generate_config_file(self):
f = open(self.config_file_path, 'w')
utf8_data_to_file(f, json.dumps(self.default_config, indent=2))
f.close()
with open(self.path, 'w') as f:
utf8_data_to_file(f, json.dumps(self.default_config, indent=2))

def save_config_file(self):
f = open(self.config_file_path, 'w')
utf8_data_to_file(f, json.dumps(self.config, indent=2))
f.close()

def check_version(self):
if self.config['version'] == self.default_config['version']:
return True
else:
# Should do some update. Like
# if self.database['version'] == 2 : self.database.['version'] = 3
# update database form version 1 to version 2
if self.config['version'] == 1:
self.config['version'] = 2
self.config['global_play_pause'] = {
'value': '<ctrl><alt>p',
'default': '<ctrl><alt>p',
'describe': 'Global keybind for play/pause.'
'Uses gtk notation for keybinds.'
}
self.config['global_next'] = {
'value': '<ctrl><alt>j',
'default': '<ctrl><alt>j',
'describe': 'Global keybind for next song.'
'Uses gtk notation for keybinds.'
}
self.config['global_previous'] = {
'value': '<ctrl><alt>k',
'default': '<ctrl><alt>k',
'describe': 'Global keybind for previous song.'
'Uses gtk notation for keybinds.'
}
elif self.config['version'] == 2:
self.config['version'] = 3
self.config['notifier'] = {
'value': True,
'default': True,
'describe': 'Notifier when switching songs.'
}
elif self.config['version'] == 3:
self.config['version'] = 4
self.config['translation'] = {
'value': True,
'default': True,
'describe': 'Foreign language lyrics translation.'
}
elif self.config['version'] == 4:
self.config['version'] = 5
self.config['osdlyrics'] = {
'value': False,
'default': False,
'describe': 'Desktop lyrics for musicbox.'
}
self.config['osdlyrics_color'] = {
'value': [225, 248, 113],
'default': [225, 248, 113],
'describe': 'Desktop lyrics RGB Color.'
}
self.config['osdlyrics_font'] = {
'value': ['Decorative', 16],
'default': ['Decorative', 16],
'describe': 'Desktop lyrics font-family and font-size.'
}
self.config['osdlyrics_background'] = {
'value': 'rgba(100, 100, 100, 120)',
'default': 'rgba(100, 100, 100, 120)',
'describe': 'Desktop lyrics background color.'
}
self.config['osdlyrics_transparent'] = {
'value': False,
'default': False,
'describe': 'Desktop lyrics transparent bg.'
}
elif self.config['version'] == 5:
self.config['version'] = 6
self.config['osdlyrics_on_top'] = {
'value': True,
'default': True,
'describe': 'Desktop lyrics OnTopHint.'
}
elif self.config['version'] == 6:
self.config['version'] = 7
self.config['curses_transparency'] = {
'value': False,
'default': False,
'describe': 'Set true to make curses transparency.'
}
elif self.config['version'] == 7:
self.config['version'] = 8
self.config['osdlyrics_size'] = {
'value': [600, 60],
'default': [600, 60],
'describe': 'Desktop lyrics area size.'
}
self.check_version()
return False
with open(self.path, 'w') as f:
utf8_data_to_file(f, json.dumps(self.config, indent=2))

def get(self, name):
if name not in self.config.keys():
Expand Down
4 changes: 1 addition & 3 deletions NEMbox/logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,14 @@
from __future__ import (
print_function, unicode_literals, division, absolute_import
)
import os
import logging

from future.builtins import open

from . import const

FILE_NAME = const.Constant.log_path
if os.path.isdir(const.Constant.conf_dir) is False:
os.mkdir(const.Constant.conf_dir)


with open(FILE_NAME, 'a+') as f:
f.write('#' * 80)
Expand Down
12 changes: 3 additions & 9 deletions NEMbox/menu.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
from .player import Player
from .ui import Ui
from .osdlyrics import show_lyrics_new_process
from .const import Constant
from .config import Config
from .utils import notify
from .storage import Storage
Expand All @@ -37,10 +36,6 @@

log = logger.getLogger(__name__)

home = os.path.expanduser('~')
if os.path.isdir(Constant.conf_dir) is False:
os.mkdir(Constant.conf_dir)


def carousel(left, right, x):
# carousel x in [left, right]
Expand Down Expand Up @@ -158,7 +153,7 @@ def login(self):
x = self.ui.build_login_error()
if x != ord('1'):
return False
return self.build_login()
return self.login()

def search(self, category):
self.ui.screen.timeout(-1)
Expand Down Expand Up @@ -208,12 +203,11 @@ def check_version(self):
# 检查更新 && 签到
try:
mobile = self.api.daily_task(is_mobile=True)
time.sleep(0.5)
pc = self.api.daily_task(is_mobile=False)

if mobile['code'] not in (-1, -2, 301):
if mobile['code'] == 200:
notify('移动端签到成功', 1)
if pc['code'] not in (-1, -2, 301):
if pc['code'] == 200:
notify('PC端签到成功', 1)

data = self.api.get_version()
Expand Down
Loading