Beispiel #1
0
 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)
Beispiel #2
0
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)
Beispiel #3
0
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)
Beispiel #4
0
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}
Beispiel #5
0
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}
Beispiel #6
0
    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")
Beispiel #7
0
 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)
Beispiel #8
0
 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))
Beispiel #9
0
 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()
Beispiel #10
0
 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'))
Beispiel #11
0
 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'))
Beispiel #12
0
    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.")
                     )))
Beispiel #13
0
 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)
Beispiel #14
0
 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
Beispiel #15
0
 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))
Beispiel #16
0
 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()
Beispiel #17
0
 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()
Beispiel #18
0
    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)
Beispiel #19
0
 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
Beispiel #20
0
 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)
Beispiel #21
0
 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") +
                 " &gt;= %s" % defs.MAX_UPLOAD_IMAGE_SIZE)
         elif sz:
             self.imagePath = path
             self._refreshImage()
Beispiel #22
0
 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,
         )))
Beispiel #23
0
 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
Beispiel #24
0
 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)
Beispiel #25
0
 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_()
Beispiel #26
0
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)
Beispiel #27
0
    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")
Beispiel #28
0
    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)
Beispiel #29
0
 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
Beispiel #30
0
 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