def speak(self, text, language=None): """@reimp@""" if self.isOnline(): if not self.isValid(): growl.warn(my.tr("Missing QuickTime needed by text-to-speech")) else: self.engine.speak(text, language=language or self.language)
def confirmUpdateComments(game=None): """ @param game dataman.Game or None @return bool """ #if not game: # growl.notify(my.tr("Unknown game. Please try updating the database.")) # return if not netman.manager().isOnline(): growl.warn(my.tr("Cannot perform update when offline")) return _speak(u"今すぐ字幕を更新しますか?") msg = "\n\n".join(( my.tr("VNR will automatically check for updates."), my.tr("""Do you want to update now? It might take a couple of seconds to complete."""), )) t = game.commentsUpdateTime or game.visitTime if game else 0 if t > 0: msg = "\n".join((my.tr("Comments are updated on: {0}.").format( i18n.timestamp2datetime(t)), msg)) return Yes == QMessageBox.question( _parent(), my.tr("Update user-contributed comments"), msg, Yes | No, No)
def confirmUpdateRefs(game=None): """ @param game dataman.Game or None @return bool """ #if not game: # growl.notify(my.tr("Unknown game. Please try updating the database.")) # return if not netman.manager().isOnline(): growl.warn(my.tr("Cannot perform update when offline")) return #_speak(u"今すぐゲーム情報を更新しますか?") msg = "" if game: t = game.refsUpdateTime or game.visitTime or config.VERSION_TIMESTAMP msg += my.tr("Game references are updated on: {0}.").format( i18n.timestamp2datetime(t)) + "\n" msg += "\n\n".join(( my.tr("VNR will automatically check for updates."), my.tr("""Do you want to update now? It might take a couple of seconds to complete."""), )) return Yes == QMessageBox.question(_parent(), my.tr("Update game references"), msg, Yes | No, No)
def confirmUpdateTerms(): """ @return {reset=bool} or None """ if not netman.manager().isOnline(): growl.warn(my.tr("Cannot perform update when offline")) return #_speak(u"今すぐ辞書を更新しますか?") t = settings.global_().termsTime() or config.VERSION_TIMESTAMP sel = QMessageBox.question( _parent(), my.tr("Update user-contributed dictionary"), "\n\n".join(( "\n". join((my.tr( "Dictionary terms for machine translation are updated on: {0}." ), my. tr("VNR will check for automatically updates. Do you want to update now?" ))), my.tr(""" VNR will do incremental update by default. But if you press Reset, VNR will redownload the entire data, which is slow.""" ), )).format(i18n.timestamp2datetime(t)), Yes | No | Reset, No) if sel == Yes: return {'reset': False} elif sel == Reset: return {'reset': True}
def confirmUpdateSubs(timestamp=0): """ @param* timestamp long @return {reset=bool} or None """ if not netman.manager().isOnline(): growl.warn(my.tr("Cannot perform update when offline")) return ts = i18n.timestamp2datetime(timestamp) if timestamp else tr_('empty') sel = QMessageBox.question( _parent(), my.tr("Update user-contributed subtitles"), "\n\n".join(( "\n".join(( my.tr("Shared subtitles are updated on: {0}."), my. tr("VNR will check for automatically updates. Do you want to update now?" ))), my.tr(""" VNR will do incremental update by default. But if you press Reset, VNR will redownload the entire data, which is slow.""" ), )).format(ts), Yes | No | Reset, No) if sel == Yes: return {'reset': False} elif sel == Reset: return {'reset': True}
def _submitTopic(self, topic, image, tickets): """ @param topic kw @param image kw or None @param tickets [kw] """ dprint("enter") nm = netman.manager() if tickets: self._submitTickets(tickets) if image: data = skfileio.readdata(image['filename']) if data: topic['image'] = nm.submitImage(data, image) if image and not topic.get('image'): growl.warn("<br/>".join(( my.tr("Failed to submit topic"), my.tr("Please try again"), ))) return if nm.submitTopic(topic): self._onTopicSubmitted(topic, tickets) else: growl.warn("<br/>".join(( my.tr("Failed to submit topic"), my.tr("Please try again"), ))) dprint("leave")
def speak(self, text, language=None, gender=''): """@reimp@""" if not self.isValid(): growl.warn( my.tr("Missing Windows Media Player needed by text-to-speech")) else: language = language[:2] if language else 'ja' OnlineEngine.thread().requestPlay(self, text, language, gender)
def lookup(self, *args, **kwargs): # override if self.valid(): return self.d.lookup(*args, **kwargs) else: growl.warn( my. tr("{0} does not exist. Please try redownload it in Preferences" ).format('Lingoes ' + self.language))
def _continue(self): if self._cvid and self._cpath and not _is_good_video(self._cpath): if os.path.exists(self._cpath): growl.warn("[main] %s: %s" % (my.tr("remove failed file"), self._cpath)) skfileio.removefile(self._cpath) self._retry() else: self._next()
def translate(self, *args, **kwargs): d = self.d if d.valid(): return d.translate(*args, **kwargs) else: growl.warn( my. tr("{0} does not exist. Please try redownload it in Preferences" ).format('EDICT'))
def lookup(self, *args, **kwargs): # override if self.valid(): for it in self.d.lookup(*args, **kwargs): yield it else: growl.warn( my. tr("{0} does not exist. Please try redownload it in Preferences" ).format('EDICT'))
def _iterEB(self): """ @yield EB """ ss = settings.global_() if ss.isZhongriEnabled(): eb = ebdict.zhongri() if eb.exists(): yield eb else: growl.warn("<br/>".join( (my.tr("Cannot load {0}").format(u"Zhongri (日中統合辞典)"), my.tr("Please double check its location in Preferences.") ))) if ss.isWadokuEnabled(): eb = ebdict.wadoku() if eb.exists(): yield eb else: growl.warn("<br/>".join( (my.tr("Cannot load {0}").format(u"Wadoku (和独辞書)"), my.tr("Please double check its location in Preferences.") ))) for lang in config.JMDICT_LANGS: if ss.isJMDictEnabled(lang): eb = ebdict.jmdict(lang) if eb.exists(): yield eb else: growl.warn("<br/>".join( (my.tr("Cannot load {0}").format("JMDict (%s)" % lang), my. tr("Please double check its location in Preferences.") ))) if ss.isDaijirinEnabled(): eb = ebdict.daijirin() if eb.exists(): yield eb else: growl.warn("<br/>".join( (my.tr("Cannot load {0}").format(u"DAIJIRIN (大辞林)"), my.tr("Please double check its location in Preferences.") ))) if ss.isKojienEnabled(): eb = ebdict.kojien() if eb.exists(): yield eb else: growl.warn("<br/>".join( (my.tr("Cannot load {0}").format(u"KOJIEN6 (広辞苑)"), my.tr("Please double check its location in Preferences.") )))
def abort(self): dprint('enter') msg = self.reply.errorString() if self.reply else '' self._removeTmpFile() self.stop() self.q.aborted.emit() growl.warn("[download] %s: %s" % (my.tr("error"), msg or my.tr("unknown error"))) growl.warn("[download] %s" % my.tr("abort")) dprint('leave:', msg)
def _getParserWithoutUserdic(self): if not self._parserWithoutUserdic: if not os.path.exists(rc.DIR_UNIDIC): dwarn("missing unidic") growl.warn(my.tr("MeCab UniDic dictionary not found")) return from mecabparser import mecabparser self._parserWithoutUserdic = mecabparser.MeCabParser() dprint("create mecab without userdic") return self._parserWithoutUserdic
def lookup(self, text): # override d = self.d if d.valid(): if self.language == 'hanja': return self.lookupHanja(text) return d.query(text) else: growl.warn( my. tr("{0} does not exist. Please try redownload it in Preferences" ).format('StarDict ' + self.language))
def _retry(self): if not self._quited: if self._cvid: self._retryCount += 1 if self._retryCount > _MAX_RETRIES: growl.error("[main] %s (%i/%i)" % (my.tr("too many retries"), _MAX_RETRIES, _MAX_RETRIES)) self._failedVids.append(self._cvid) else: growl.warn("[main] %s (%i/%i)" % (my.tr("retry"), self._retryCount, _MAX_RETRIES)) self.vids.insert(0, self._cvid) self._next()
def _save(self): vids = list(self._iterVids()) if not vids: growl.warn(my.tr("Not found YouTube videos")) else: growl.msg(my.tr("Found {0} YouTube videos").format(len(vids))) path = skpaths.DESKTOP if len(vids) > 1: path = os.path.join(path, 'YouTube') procutil.getyoutube(vids, path=path) self.q.hide()
def saveVideos(self): # prompt and save all youtube videos to the desktop if not self.info or not self.info.hasVideos(): growl.warn(my.tr("Please try updating game database first")) elif prompt.confirmDownloadGameVideos(): growl.msg(my.tr("Downloading YouTube videos") + " ...") from sakurakit import skfileio, skpaths name = u"%s (動画)" % skfileio.escape(self.info.title) path = os.path.join(skpaths.DESKTOP, name) videos = list(self.info.iterVideoIds()) import procutil procutil.getyoutube(videos, path=path)
def render(self, *args, **kwargs): # override if not self.exists(): from mytr import my import growl # Note: The following warning is not translated into Chinese growl.warn( my. tr("{0} does not exist. Please try redownload it in Preferences" ).format(self.name())) else: for it in super(FreePWING, self).render(*args, **kwargs): yield it
def _save(self, url, name): """ @param url QString @param name QString """ if url in self._visitedUrls: growl.warn(("[main] %s: %s" % (my.tr("pass"), url))) else: self._visitedUrls.add(url) growl.notify("[main] %s: %s" % (my.tr("download"), name)) growl.notify("[main] %s: %s" % (my.tr("url"), url)) self._cpath = os.path.join(self.location, name) self.downloader.get(url, self._cpath)
def _browseImage(self): FILTERS = "%s (%s)" % (tr_("Image"), defs.UPLOAD_IMAGE_FILTER) path, filter = QtWidgets.QFileDialog.getOpenFileName( self.q, my.tr("Select the file to upload"), "", FILTERS) if path: sz = skfileio.filesize(path) if sz > defs.MAX_UPLOAD_IMAGE_SIZE: growl.warn( my.tr("File to upload is too large") + " >= %s" % defs.MAX_UPLOAD_IMAGE_SIZE) elif sz: self.imagePath = path self._refreshImage()
def run(self): e = self.engine if e: growl.msg(' '.join(( my.tr("Activate Voiceroid+"), self.name, ))) e.run() else: growl.warn(' '.join(( my.tr("Cannot find Voiceroid+"), self.name, )))
def _getParserWithUserdic(self): if not self._parserWithUserdic: userdic = rc.MECAB_EDICT_PATH userdic = os.path.relpath(userdic, os.getcwd()) # use relative path to avoid spaces and illegal unicode characters if not os.path.exists(userdic): dwarn("missing edict: %s" % userdic) growl.warn(my.tr("MeCab EDICT dictionary not found")) return self._getParserWithoutUserdic() from mecabparser import mecabparser ret = mecabparser.MeCabParser() ret.tagger().setUserdic(userdic) self._parserWithUserdic = ret dprint("create mecab with userdic") return self._parserWithUserdic
def saveImages(self): # prompt and save all images to the desktop if not self.info: growl.warn(my.tr("Please try updating game database first")) elif prompt.confirmDownloadGameImages(): growl.msg(my.tr("Saving game images") + " ...") from sakurakit import skfileio, skpaths name = u"%s (画像)" % skfileio.escape(self.info.title) path = os.path.join(skpaths.DESKTOP, name) try: skfileio.makedirs(path) images = [(url, os.path.join(path, name + '.jpg')) for url, name in self.info.iterImageUrlsWithName()] skthreads.runasync(partial(_getimages, images, path=path)) except Exception, e: growl.warn(my.tr("Failed to save all images")) dwarn(e)
def showGame(self, game=None, id=None, md5=None): """ @param game dataman.Game @param id long @param md5 unicode """ if not game and (md5 or id): game = dataman.manager().queryGame(id=id, md5=md5) if not game: growl.warn(my.tr("Game is not found. Did you delete it?") ) # This should seldom happen else: w = self.__d.findDialog(id=id, md5=md5) if not w: w = self.__d.getDialog() w.setGame(game) w.show() w.raise_()
def confirmUpdateGameFiles(): """ @return bool """ if not netman.manager().isOnline(): growl.warn(my.tr("Cannot perform update when offline")) return _speak(u"今すぐゲーム情報を更新しますか?") t = settings.global_().gameFilesTime() or config.VERSION_TIMESTAMP return Yes == QMessageBox.question( _parent(), my.tr("Update online game database"), "\n\n".join(( my.tr("""Game database is updated on: {0}. The database is used to detect new games. VNR will automatically check for updates."""), my.tr("""Do you want to update now? It might take a couple of seconds to complete."""), )).format(i18n.timestamp2datetime(t)), Yes | No, No)
def _updatePost(self, post, image): """ @param post kw @param image kw or None """ dprint("enter") nm = netman.manager() if image: data = skfileio.readdata(image['filename']) if data: post['image'] = nm.submitImage(data, image) if image and not post.get('image') or not nm.updatePost(post): growl.warn("<br/>".join(( my.tr("Failed to update post"), my.tr("Please try again"), ))) dprint("leave")
def _onCall(self, socket, cmd, *params): # on serverMessageReceived """ @param socket QTcpSocket @param cmd str @param params [unicode] """ dprint(cmd) if cmd == 'app.activate': self.q.activated.emit() elif cmd == 'growl.msg': if params: growl.msg(params[0]) elif cmd == 'growl.warn': if params: growl.warn(params[0]) elif cmd == 'growl.error': if params: growl.error(params[0]) elif cmd == 'growl.notify': if params: growl.notify(params[0]) elif cmd == 'agent.ping': if params: pid = _unmarshalInteger(params[0]) if pid: self._onAgentPing(socket, pid) elif cmd == 'agent.window.text': if params: self._onWindowTexts(params[0]) elif cmd == 'agent.engine.name': if params: self.q.engineReceived.emit(params[0]) elif cmd == 'agent.engine.text': if len(params) == 5: self._onEngineText(*params) else: dwarn("invalid parameter count:", params) else: dwarn("unknown command: %s" % cmd)
def getSapiEngine(self, key): ret = self._sapiEngines.get(key) if not ret: ret = _ttsman.SapiEngine( key=key, speed=self.getSpeed(key), pitch=self.getPitch(key), ) if ret.isValid(): growl.msg(' '.join(( i18n.tr("Load TTS"), ret.name, ))) self._sapiEngines[key] = ret else: growl.warn(' '.join(( i18n.tr("Failed to load TTS"), key, ))) ret = None return ret
def translate(self, t, **kwargs): """ @param t unicode @param* kwargs parameters passed to parse @return unicode or None """ d = self.d if not d.valid(): growl.warn( my. tr("{0} does not exist. Please try redownload it in Preferences" ).format('StarDict ' + self.language)) return parse = self._getTranslationParser() if parse: q = d.query(t) if q: for it in q: ret = parse(it, **kwargs) if ret: return ret