コード例 #1
0
ファイル: _ttsman.py プロジェクト: blackknifes/VNR-Core
 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)
コード例 #2
0
ファイル: prompt.py プロジェクト: blackknifes/VNR-Core
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)
コード例 #3
0
ファイル: prompt.py プロジェクト: blackknifes/VNR-Core
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)
コード例 #4
0
ファイル: prompt.py プロジェクト: blackknifes/VNR-Core
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}
コード例 #5
0
ファイル: prompt.py プロジェクト: blackknifes/VNR-Core
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}
コード例 #6
0
ファイル: forumapi.py プロジェクト: blackknifes/VNR-Core
    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")
コード例 #7
0
ファイル: _ttsman.py プロジェクト: blackknifes/VNR-Core
 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)
コード例 #8
0
ファイル: dicts.py プロジェクト: blackknifes/VNR-Core
 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))
コード例 #9
0
ファイル: main.py プロジェクト: blackknifes/VNR-Core
 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()
コード例 #10
0
ファイル: dicts.py プロジェクト: blackknifes/VNR-Core
 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'))
コード例 #11
0
ファイル: dicts.py プロジェクト: blackknifes/VNR-Core
 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'))
コード例 #12
0
ファイル: dictman.py プロジェクト: blackknifes/VNR-Core
    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.")
                     )))
コード例 #13
0
ファイル: dl.py プロジェクト: blackknifes/VNR-Core
 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)
コード例 #14
0
ファイル: mecabman.py プロジェクト: blackknifes/VNR-Core
 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
コード例 #15
0
ファイル: dicts.py プロジェクト: blackknifes/VNR-Core
 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))
コード例 #16
0
ファイル: main.py プロジェクト: blackknifes/VNR-Core
 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()
コード例 #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()
コード例 #18
0
ファイル: gameview.py プロジェクト: blackknifes/VNR-Core
    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)
コード例 #19
0
ファイル: ebdict.py プロジェクト: blackknifes/VNR-Core
 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
コード例 #20
0
ファイル: main.py プロジェクト: blackknifes/VNR-Core
 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)
コード例 #21
0
ファイル: topicinput.py プロジェクト: blackknifes/VNR-Core
 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()
コード例 #22
0
ファイル: _ttsman.py プロジェクト: blackknifes/VNR-Core
 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,
         )))
コード例 #23
0
ファイル: mecabman.py プロジェクト: blackknifes/VNR-Core
 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
コード例 #24
0
ファイル: gameview.py プロジェクト: blackknifes/VNR-Core
 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)
コード例 #25
0
ファイル: gameedit.py プロジェクト: blackknifes/VNR-Core
 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_()
コード例 #26
0
ファイル: prompt.py プロジェクト: blackknifes/VNR-Core
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)
コード例 #27
0
ファイル: forumapi.py プロジェクト: blackknifes/VNR-Core
    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")
コード例 #28
0
ファイル: rpcman.py プロジェクト: blackknifes/VNR-Core
    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)
コード例 #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
コード例 #30
0
ファイル: dicts.py プロジェクト: blackknifes/VNR-Core
 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