예제 #1
0
 def load_cookies(self):
     try:
         with open(DATA_PATH + self.cookies_filename) as f:
             data_str = f.read()
             self.cookies = json.loads(data_str)
     except Exception as e:
         LOG.error(str(e))
예제 #2
0
파일: mac.py 프로젝트: seem-sky/FeelUOwn
def keyboard_tap_callback(proxy, type_, event, refcon):
        from AppKit import NSKeyUp, NSEvent
        if type_ < 0 or type_ > 0x7fffffff:
            LOG.error('Unkown mac event')
            run_event_loop()
            LOG.error('restart mac key board event loop')
            return event
        try:
            key_event = NSEvent.eventWithCGEvent_(event)
        except:
            LOG.info("mac event cast error")
            return event
        if key_event.subtype() == 8:
            key_code = (key_event.data1() & 0xFFFF0000) >> 16
            key_state = (key_event.data1() & 0xFF00) >> 8
            if key_code in (16, 19, 20):
                # 16 for play-pause, 19 for next, 20 for previous
                if key_state == NSKeyUp:
                    if key_code is 19:
                        ControllerApi.player.play_next()
                    elif key_code is 20:
                        ControllerApi.player.play_last()
                    elif key_code is 16:
                        ControllerApi.player.play_or_pause()
                return None
        return event
예제 #3
0
 def http_request(self,
                  method,
                  action,
                  query=None,
                  urlencoded=None,
                  callback=None,
                  timeout=1):
     try:
         res = None
         if method == "GET":
             res = requests.get(action,
                                headers=self.headers,
                                cookies=self.cookies,
                                timeout=timeout)
         elif method == "POST":
             res = requests.post(action,
                                 query,
                                 headers=self.headers,
                                 cookies=self.cookies,
                                 timeout=timeout)
         elif method == "POST_UPDATE":
             res = requests.post(action,
                                 query,
                                 headers=self.headers,
                                 cookies=self.cookies,
                                 timeout=timeout)
             self.cookies.update(res.cookies.get_dict())
             self.save_cookies()
         content = self.show_progress(res)
         content_str = content.decode('utf-8')
         content_dict = json.loads(content_str)
         return content_dict
     except Exception as e:
         LOG.error(str(e))
         return {"code": 408}
예제 #4
0
파일: api.py 프로젝트: ufbycd/FeelUOwn
 def load_cookies(self):
     try:
         with open(DATA_PATH + self.cookies_filename) as f:
             data_str = f.read()
             self.cookies = json.loads(data_str)
     except Exception as e:
         LOG.error(str(e))
예제 #5
0
파일: api.py 프로젝트: ufbycd/FeelUOwn
 def save_cookies(self):
     try:
         write_json_into_file(self.cookies, DATA_PATH + self.cookies_filename)
         LOG.info("Save cookies successfully")
     except Exception as e:
         LOG.error(str(e))
         LOG.error("Save cookies failed")
예제 #6
0
파일: mac.py 프로젝트: seem-sky/FeelUOwn
def run_event_loop():
    LOG.info("try to load mac hotkey event loop")
    import Quartz
    from AppKit import NSSystemDefined

    # Set up a tap, with type of tap, location, options and event mask
    tap = Quartz.CGEventTapCreate(
        Quartz.kCGSessionEventTap,  # Session level is enough for our needs
        Quartz.kCGHeadInsertEventTap,  # Insert wherever, we do not filter
        Quartz.kCGEventTapOptionDefault,
        # NSSystemDefined for media keys
        Quartz.CGEventMaskBit(NSSystemDefined),
        keyboard_tap_callback,
        None
    )

    run_loop_source = Quartz.CFMachPortCreateRunLoopSource(
        None, tap, 0)
    Quartz.CFRunLoopAddSource(
        Quartz.CFRunLoopGetCurrent(),
        run_loop_source,
        Quartz.kCFRunLoopDefaultMode
    )
    # Enable the tap
    Quartz.CGEventTapEnable(tap, True)
    # and run! This won't return until we exit or are terminated.
    Quartz.CFRunLoopRun()
    LOG.error('Mac hotkey event loop exit')
    return []
예제 #7
0
 def http_request(self,
                  method,
                  action,
                  query=None,
                  urlencoded=None,
                  callback=None,
                  timeout=3):
     LOG.info('method=%s url=%s query=%s' % (method, action, query))
     try:
         res = None
         if method == "GET":
             res = requests.get(action,
                                headers=self.headers,
                                cookies=self.cookies,
                                timeout=timeout)
         elif method == "POST":
             res = requests.post(action,
                                 data=query,
                                 headers=self.headers,
                                 cookies=self.cookies,
                                 timeout=timeout)
         elif method == "POST_UPDATE":
             res = requests.post(action,
                                 data=query,
                                 headers=self.headers,
                                 cookies=self.cookies,
                                 timeout=timeout)
             self.cookies.update(res.cookies.get_dict())
         content = show_requests_progress(res, self.signal_load_progress)
         content_str = content.decode('utf-8')
         content_dict = json.loads(content_str)
         return content_dict
     except Exception as e:
         LOG.error(str(e))
         return {"code": 408}
예제 #8
0
 def save_cookies(self):
     try:
         write_json_into_file(self.cookies,
                              DATA_PATH + self.cookies_filename)
         LOG.info("Save cookies successfully")
     except Exception as e:
         LOG.error(str(e))
         LOG.error("Save cookies failed")
예제 #9
0
파일: web.py 프로젝트: Tonyzhangl/FeelUOwn
 def save_cookies(self):
     try:
         with open(DATA_PATH + "cookies.dat", "wb") as f:
             pickle.dump(self.cookies, f)
         return True
     except Exception as e:
         LOG.error(str(e))
         return False
예제 #10
0
파일: web.py 프로젝트: Tonyzhangl/FeelUOwn
 def load_cookies(self):
     try:
         with open(DATA_PATH + "cookies.data", "rb") as f:
             self.cookies = pickle.load(f)
             requests.session().cookies = self.cookies
         return True
     except Exception as e:
         LOG.error(str(e))
         return False
예제 #11
0
def write_json_into_file(data_json, filepath):
    try:
        with open(filepath, "w") as f:
            data_str = json.dumps(data_json, indent=4)
            f.write(data_str)
        return True
    except Exception as e:
        LOG.error(str(e))
        LOG.error("Write json into file failed")
        return False
예제 #12
0
 def start(cls, port=12100):
     try:
         cls.sock.bind(('0.0.0.0', port))
         cls.sock.listen(10)
         LOG.info("the cli server start at port %d" % port)
         cls.loop()
     except Exception as e:
         LOG.error(str(e))
         port += 1
         cls.start(port)
예제 #13
0
 def post_and_updatecookies(self, url, data):
     try:
         res = requests.post(url, data=data, headers=self.headers, cookies=self.cookies)
         self.cookies.update(res.cookies.get_dict())
         requests.session().cookies = self.cookies
         self.save_cookies()
         return res.json()
     except Exception as e:
         LOG.error(str(e))
         return {"code": 408}
예제 #14
0
파일: utils.py 프로젝트: ykelvis/FeelUOwn
def write_json_into_file(data_json, filepath):
    try:
        with open(filepath, "w") as f:
            data_str = json.dumps(data_json, indent=4)
            f.write(data_str)
        return True
    except Exception as e:
        LOG.error(str(e))
        LOG.error("Write json into file failed")
        return False
예제 #15
0
파일: web.py 프로젝트: Tonyzhangl/FeelUOwn
 def post_and_updatecookies(self, url, data):
     try:
         res = requests.post(url, data=data, headers=self.headers, cookies=self.cookies)
         self.cookies.update(res.cookies.get_dict())
         requests.session().cookies = self.cookies
         self.save_cookies()
         return res.json()
     except Exception as e:
         LOG.error(str(e))
         return b'{"code": 408}'
예제 #16
0
 def start(cls, port=12100):
     try:
         cls.sock.bind(('0.0.0.0', port))
         cls.sock.listen(10)
         LOG.info("the cli server start at port %d" % port)
         cls.loop()
     except Exception as e:
         LOG.error(str(e))
         port += 1
         cls.start(port)
예제 #17
0
파일: player.py 프로젝트: ufbycd/FeelUOwn
 def on_error_occured(self, error):
     self.pause()
     if error == 2 or error == 5:
         m = QMessageBox(QMessageBox.Warning, u"错误提示", "第一次运行出现该错误可能是由于缺少解码器,请参考项目主页\
         https://github.com/cosven/FeelUOwn 安装依赖。\n 如果不是第一次运行,那就可能是网络已经断开,请检查您的网络连接", QMessageBox.Yes | QMessageBox.No)
         if m.exec() == QMessageBox.Yes:
             QApplication.quit()
         else:
             LOG.error(u'播放器出现error, 类型为' + str(error))
     if error == 3 or error == 1:
         LOG.error(u'播放器出现错误。可能是网络连接失败,也有可能缺少解码器')
     return
예제 #18
0
파일: mac.py 프로젝트: phpengineer/FeelUOwn
def run_event_loop(player):
    LOG.info("try to load mac hotkey event loop")
    import Quartz
    from AppKit import NSKeyUp, NSSystemDefined, NSEvent

    def keyboard_tap_callback(proxy, type_, event, refcon):
        if type_ < 0 or type_ > 0x7fffffff:
            LOG.error('Unkown mac event')
            Quartz.CFRunLoopRun()
            return run_event_loop(ControllerApi.player)
        try:
            key_event = NSEvent.eventWithCGEvent_(event)
        except:
            LOG.info("mac event cast error")
            return event
        if key_event.subtype() == 8:
            key_code = (key_event.data1() & 0xFFFF0000) >> 16
            key_state = (key_event.data1() & 0xFF00) >> 8
            if key_code is 16 or key_code is 19 or key_code is 20:
                # 16 for play-pause, 19 for next, 20 for previous
                if key_state == NSKeyUp:
                    if key_code is 19:
                        player.play_next()
                    elif key_code is 20:
                        player.play_last()
                    elif key_code is 16:
                        player.play_or_pause()
                return None
        return event

    # Set up a tap, with type of tap, location, options and event mask
    tap = Quartz.CGEventTapCreate(
        Quartz.kCGSessionEventTap,  # Session level is enough for our needs
        Quartz.kCGHeadInsertEventTap,  # Insert wherever, we do not filter
        Quartz.kCGEventTapOptionDefault,
        # NSSystemDefined for media keys
        Quartz.CGEventMaskBit(NSSystemDefined),
        keyboard_tap_callback,
        None
    )

    run_loop_source = Quartz.CFMachPortCreateRunLoopSource(
        Quartz.kCFAllocatorDefault, tap, 0)
    Quartz.CFRunLoopAddSource(
        Quartz.CFRunLoopGetCurrent(),
        run_loop_source,
        Quartz.kCFRunLoopDefaultMode
    )
    # Enable the tap
    Quartz.CGEventTapEnable(tap, True)
    # and run! This won't return until we exit or are terminated.
    Quartz.CFRunLoopRun()
    LOG.error('Mac hotkey exit event ')
예제 #19
0
    def get(self, url):
        """Load data from the server using a HTTP GET request.

        :param url: the URL to which the request is sent.
        :return content: return HTTPResponse Objects, generally speaking, we use READ method.
        """
        request = urllib.request.Request(url, None, self.header)
        try:
            response = urllib.request.urlopen(request)
            return self.show_progress(response)
        except Exception as e:
            LOG.error(str(e))
            return {'code': 408}
예제 #20
0
파일: models.py 프로젝트: ufbycd/FeelUOwn
    def validate(self):
        """ check dict keys and data type
        :return:
        """
        for key in self._model:
            if key not in self.data:
                LOG.error(self.data)
                raise KeyError("data should have key: " + key)

            if not isinstance(self.data[key], self._model[key]):
                raise TypeError("Please check your object type: ", key)

        return True
예제 #21
0
    def validate(self):
        """ check dict keys and data type
        :return:
        """
        for key in self._model:
            if key not in self.data:
                LOG.error(self.data)
                raise KeyError('data should have key: ' + key)

            if not isinstance(self.data[key], self._model[key]):
                raise TypeError('Please check your object type: ', key)

        return True
예제 #22
0
파일: web.py 프로젝트: Tonyzhangl/FeelUOwn
    def get(self, url):
        """Load data from the server using a HTTP GET request.

        :param url: the URL to which the request is sent.
        :return content: return HTTPResponse Objects, generally speaking, we use READ method.
        """
        try:
            res = requests.get(url, headers=self.headers)
            content = self.show_progress(res)
            return content
        except Exception as e:
            LOG.error(str(e))
            return b'{"code": 408}'
예제 #23
0
파일: player.py 프로젝트: whuhenry/FeelUOwn
 def on_error_occured(self, error):
     self.setMedia(QMediaContent())
     self.pause()
     if error == QMediaPlayer.FormatError or error == QMediaPlayer.ServiceMissingError:
         m = QMessageBox(
             QMessageBox.Warning, u"错误提示", "第一次运行出现该错误可能是由于缺少解码器,请参考项目主页\
             https://github.com/cosven/FeelUOwn 安装依赖。\n 如果不是第一次运行,那就可能是网络已经断开,请检查您的网络连接",
             QMessageBox.Yes | QMessageBox.No)
         if m.exec() == QMessageBox.Yes:
             QApplication.quit()
         else:
             LOG.error(u'播放器出现error, 类型为' + str(error))
     if error == QMediaPlayer.NetworkError:
         if self._music_error_times >= self._MUSIC_ERROR_MAXIMUM or \
                 self._current_index < 0 or self._current_index >= len(self._music_list):
             self._music_error_times = 0
             self._app_event_loop.call_later(self._RETRY_LATENCY,
                                             self.play_next)
             LOG.error(u'播放器出现错误:网络连接失败,{}秒后尝试播放下一首'.format(
                 self._RETRY_LATENCY))
         else:
             self._music_error_times += 1
             self._app_event_loop.call_later(
                 self._RETRY_LATENCY, self.play,
                 self._music_list[self._current_index])
             LOG.error(u'播放器出现错误:网络连接失败, {}秒后重试'.format(
                 self._RETRY_LATENCY))
     elif error == QMediaPlayer.ResourceError:
         LOG.error(u'播放器出现错误:缺少解码器')
     return
예제 #24
0
 def on_error_occured(self, error):
     self.pause()
     if error == 2 or error == 5:
         m = QMessageBox(
             QMessageBox.Warning, u"错误提示", "可能缺少解码器,请参考项目主页\
         https://git.oschina.net/zjuysw/NetEaseMusic 安装依赖",
             QMessageBox.Yes | QMessageBox.No)
         if m.exec() == QMessageBox.Yes:
             QApplication.quit()
         else:
             LOG.error(u'播放器出现error, 类型为' + str(error))
     if error == 3 or error == 1:
         LOG.error(u'播放器出现错误。可能是网络连接失败,也有可能缺少解码器')
     return
예제 #25
0
 def on_error_occured(self, error):
     self.pause()
     if error == 2 or error == 5:
         m = QMessageBox(
             QMessageBox.Warning, u"错误提示", "第一次运行出现该错误可能是由于缺少解码器,请参考项目主页\
         https://github.com/cosven/FeelUOwn 安装依赖。\n 如果不是第一次运行,那就可能是网络已经断开,请检查您的网络连接",
             QMessageBox.Yes | QMessageBox.No)
         if m.exec() == QMessageBox.Yes:
             QApplication.quit()
         else:
             LOG.error(u'播放器出现error, 类型为' + str(error))
     if error == 3 or error == 1:
         LOG.error(u'播放器出现错误。可能是网络连接失败,也有可能缺少解码器')
     return
예제 #26
0
파일: web.py 프로젝트: Tonyzhangl/FeelUOwn
    def post(self, url, data):
        """Load data from the server using a HTTP POST request.

        :param string posturl: the URL to which the request is sent.
        :param dict dictdata: a dict object that is sent to the server with the request.
        """


        try:
            res = requests.post(url, data=data, headers=self.headers, cookies=self.cookies)
            content = self.show_progress(res)
            return content
        except Exception as e:
            LOG.error(str(e))
            return b'{"code": 408}'
예제 #27
0
 def save_login_info(self, login_data):
     if login_data['is_remember']:
         try:
             f = open(DATA_PATH + self.pw_filename, 'w')
             if self.is_autofill is not True:    # 如果不是自动填充,说明密码时已经没有加密过
                 password = login_data['password'].encode('utf-8')
                 login_data['password'] = hashlib.md5(password).hexdigest()
             data_json = json.dumps(login_data)
             write_json_into_file(data_json, f)
         except Exception as e:
             LOG.error(str(e))
     else:
         try:
             os.remove(DATA_PATH + self.pw_filename)
         except Exception as e:
             LOG.warning(str(e))
예제 #28
0
 def save_login_info(self, login_data):
     if login_data['is_remember']:
         try:
             f = open(self.filename, 'w')
             if self.is_autofill is not True:    # 如果不是自动填充,说明密码时已经没有加密过
                 password = login_data['password'].encode('utf-8')
                 login_data['password'] = hashlib.md5(password).hexdigest()
             jsondata = json.dumps(login_data)
             f.write(jsondata)
             f.close()
         except Exception as e:
             LOG.error(str(e))
     else:
         try:
             os.remove(self.filename)
         except Exception as e:
             LOG.warning(str(e))
예제 #29
0
 def on_error_occured(self, error):
     self.pause()
     if error == 2 or error == 5:
         m = QMessageBox(
             QMessageBox.Warning,
             u"错误提示",
             "可能缺少解码器,请参考项目主页\
         https://git.oschina.net/zjuysw/NetEaseMusic 安装依赖",
             QMessageBox.Yes | QMessageBox.No,
         )
         if m.exec() == QMessageBox.Yes:
             QApplication.quit()
         else:
             LOG.error(u"播放器出现error, 类型为" + str(error))
     if error == 3 or error == 1:
         LOG.error(u"播放器出现错误。可能是网络连接失败,也有可能缺少解码器")
     return
예제 #30
0
    def post(self, posturl, dictdata):
        """Load data from the server using a HTTP POST request.

        :param string posturl: the URL to which the request is sent.
        :param dict dictdata: a dict object that is sent to the server with the request.
        """

        postdata = urllib.parse.urlencode(dictdata)
        postdata = postdata.encode('utf-8')
        request = urllib.request.Request(posturl, postdata, self.header)
        try:
            response = urllib.request.urlopen(request)
            res = self.show_progress(response)
            return res
        except Exception as e:
            LOG.error(str(e))
            return {'code': 408}
예제 #31
0
 def fill_content(self):
     """
     判断之前是否保存了用户名和密码:
         保存了就是直接加载
     """
     if self.has_saved_userinfo():
         try:
             f = open(DATA_PATH + self.pw_filename, 'r')
             login_data = json.load(f)
             f.close()
             if 'is_remember' in login_data.keys() and login_data['is_remember']:
                 self.username_widget.setText(str(login_data['username']))
                 self.password_widget.setText(str(login_data['password']))
                 self.is_remember_chb.setCheckState(2)
                 self.is_autofill = True
         except Exception as e:
             LOG.error(str(e))
예제 #32
0
 def save_login_info(self, login_data):
     if login_data["is_remember"]:
         try:
             f = open(self.filename, "w")
             if self.is_autofill is not True:  # 如果不是自动填充,说明密码时已经没有加密过
                 password = login_data["password"].encode("utf-8")
                 login_data["password"] = hashlib.md5(password).hexdigest()
             jsondata = json.dumps(login_data)
             f.write(jsondata)
             f.close()
         except Exception as e:
             LOG.error(str(e))
     else:
         try:
             os.remove(self.filename)
         except Exception as e:
             LOG.warning(str(e))
예제 #33
0
파일: api.py 프로젝트: seem-sky/FeelUOwn
 def http_request(self, method, action, query=None, urlencoded=None, callback=None, timeout=3):
     LOG.info('method=%s url=%s query=%s' % (method, action, query))
     try:
         res = None
         if method == "GET":
             res = requests.get(action, headers=self.headers, cookies=self.cookies, timeout=timeout)
         elif method == "POST":
             res = requests.post(action, data=query, headers=self.headers, cookies=self.cookies, timeout=timeout)
         elif method == "POST_UPDATE":
             res = requests.post(action, data=query, headers=self.headers, cookies=self.cookies, timeout=timeout)
             self.cookies.update(res.cookies.get_dict())
         content = show_requests_progress(res, self.signal_load_progress)
         content_str = content.decode('utf-8')
         content_dict = json.loads(content_str)
         return content_dict
     except Exception as e:
         LOG.error(str(e))
         return {"code": 408}
예제 #34
0
 def fill_content(self):
     """
     判断之前是否保存了用户名和密码:
         保存了就是直接加载
     """
     if self.has_saved_userinfo():
         try:
             f = open(self.filename, "r")
             login_data = dict()
             login_data = json.load(f)
             f.close()
             if "is_remember" in login_data.keys() and login_data["is_remember"]:
                 self.username_widget.setText(login_data["username"])
                 self.password_widget.setText(login_data["password"])
                 self.is_remember_chb.setCheckState(True)
                 self.is_autofill = True
         except Exception as e:
             LOG.error(str(e))
예제 #35
0
파일: api.py 프로젝트: ufbycd/FeelUOwn
 def http_request(self, method, action, query=None, urlencoded=None, callback=None, timeout=10):
     try:
         res = None
         if method == "GET":
             res = requests.get(action, headers=self.headers, cookies=self.cookies, timeout=timeout)
         elif method == "POST":
             res = requests.post(action, query, headers=self.headers, cookies=self.cookies, timeout=timeout)
         elif method == "POST_UPDATE":
             res = requests.post(action, query, headers=self.headers, cookies=self.cookies, timeout=timeout)
             self.cookies.update(res.cookies.get_dict())
             self.save_cookies()
         content = self.show_progress(res)
         content_str = content.decode('utf-8')
         content_dict = json.loads(content_str)
         return content_dict
     except Exception as e:
         LOG.error(str(e))
         return {"code": 408}
예제 #36
0
 def check_release(cls):
     url = 'https://api.github.com/repos/cosven/FeelUOwn/releases'
     LOG.info('正在查找新版本...')
     try:
         loop = asyncio.get_event_loop()
         future = loop.run_in_executor(None,
             partial(requests.get, url, timeout=5))
         res = yield from future
         if not res.status_code == 200:
             LOG.warning('connect to api.github.com timeout')
             return
         releases = res.json()
         for release in releases:
             if release['tag_name'] > cls.current_version:
                 title = u'发现新版本 %s hoho' % release['tag_name']
                 LOG.info(title)
                 content = release['name']
                 ControllerApi.notify_widget.show_message(title, content)
                 ViewOp.ui.STATUS_BAR.showMessage(title, 5000)
                 break
     except Exception as e:
         LOG.error(str(e))
예제 #37
0
파일: mac.py 프로젝트: garfieldjty/FeelUOwn
 def keyboard_tap_callback(proxy, type_, event, refcon):
     if type_ < 0 or type_ > 0x7fffffff:
         LOG.error('Unkown mac event')
         Quartz.CFRunLoopRun()
         return None
     try:
         key_event = NSEvent.eventWithCGEvent_(event)
     except:
         LOG.info("mac event cast error")
         return event
     if key_event.subtype() == 8:
         key_code = (key_event.data1() & 0xFFFF0000) >> 16
         key_state = (key_event.data1() & 0xFF00) >> 8
         if key_code is 16 or key_code is 19 or key_code is 20:
             # 16 for play-pause, 19 for next, 20 for previous
             if key_state == NSKeyUp:
                 if key_code is 19:
                     player.play_next()
                 elif key_code is 20:
                     player.play_last()
                 elif key_code is 16:
                     player.play_or_pause()
             return None
     return event
예제 #38
0
파일: mac.py 프로젝트: phpengineer/FeelUOwn
 def keyboard_tap_callback(proxy, type_, event, refcon):
     if type_ < 0 or type_ > 0x7fffffff:
         LOG.error('Unkown mac event')
         Quartz.CFRunLoopRun()
         return run_event_loop(ControllerApi.player)
     try:
         key_event = NSEvent.eventWithCGEvent_(event)
     except:
         LOG.info("mac event cast error")
         return event
     if key_event.subtype() == 8:
         key_code = (key_event.data1() & 0xFFFF0000) >> 16
         key_state = (key_event.data1() & 0xFF00) >> 8
         if key_code is 16 or key_code is 19 or key_code is 20:
             # 16 for play-pause, 19 for next, 20 for previous
             if key_state == NSKeyUp:
                 if key_code is 19:
                     player.play_next()
                 elif key_code is 20:
                     player.play_last()
                 elif key_code is 16:
                     player.play_or_pause()
             return None
     return event
예제 #39
0
 def on_error_occured(self, error):
     self.setMedia(QMediaContent())
     self.pause()
     if error == QMediaPlayer.FormatError or error == QMediaPlayer.ServiceMissingError:
         m = QMessageBox(QMessageBox.Warning, u"错误提示", "第一次运行出现该错误可能是由于缺少解码器,请参考项目主页\
             https://github.com/cosven/FeelUOwn 安装依赖。\n 如果不是第一次运行,那就可能是网络已经断开,请检查您的网络连接", QMessageBox.Yes | QMessageBox.No)
         if m.exec() == QMessageBox.Yes:
             QApplication.quit()
         else:
             LOG.error(u'播放器出现error, 类型为' + str(error))
     if error == QMediaPlayer.NetworkError:
         if self._music_error_times >= self._MUSIC_ERROR_MAXIMUM or \
                 self._current_index < 0 or self._current_index >= len(self._music_list):
             self._music_error_times = 0
             self._app_event_loop.call_later(self._RETRY_LATENCY, self.play_next)
             LOG.error(u'播放器出现错误:网络连接失败,{}秒后尝试播放下一首'.format(self._RETRY_LATENCY))
         else:
             self._music_error_times += 1
             self._app_event_loop.call_later(self._RETRY_LATENCY, self.play, self._music_list[self._current_index])
             LOG.error(u'播放器出现错误:网络连接失败, {}秒后重试'.format(self._RETRY_LATENCY))
     elif error == QMediaPlayer.ResourceError:
         LOG.error(u'播放器出现错误:缺少解码器')
     return
예제 #40
0
파일: api.py 프로젝트: wsdragon/FeelUOwn
def run_func(func):
    data = dict()
    data['code'] = 404
    try:
        result = eval(func)
        LOG.info("执行函数成功 %s " % func)
        data['code'] = 200
        data['result'] = result
    except NameError:
        LOG.error("cli: %s command not found" % func)
        data['message'] = "command not found"
    except TypeError:
        LOG.error("cli: %s unknown arguement" % func)
        data['message'] = "arguments error"
    except Exception as e:
        LOG.error(str(e))
        data['message'] = "unknown error"
    return data