Example #1
0
def run():
    import config

    mustQuit = False

    # home on win32 is broken
    if sys.platform == "win32":
        # use appdata if available
        if 'APPDATA' in os.environ:
            oldConf = os.path.expanduser("~/.anki/config.db")
            oldPlugins = os.path.expanduser("~/.anki/plugins")
            os.environ['HOME'] = os.environ['APPDATA']
        else:
            oldConf = None
            os.environ['HOME'] = "c:\\anki"
        # make and check accessible
        try:
            os.makedirs(os.path.expanduser("~/.anki"))
        except:
            pass
        try:
            os.listdir(os.path.expanduser("~/.anki"))
        except:
            oldConf = None
            os.environ['HOME'] = "c:\\anki"
        # check accessible again
        try:
            os.makedirs(os.path.expanduser("~/.anki"))
        except:
            pass
        try:
            os.listdir(os.path.expanduser("~/.anki"))
        except:
            mustQuit = True
        if (oldConf and os.path.exists(oldConf) and not os.path.exists(
            oldConf.replace("config.db", "config.db.old"))):
            try:
                shutil.copy2(oldConf,
                             os.path.expanduser("~/.anki/config.db"))
                shutil.copytree(oldPlugins,
                             os.path.expanduser("~/.anki/plugins"))
            except:
                pass
            os.rename(oldConf, oldConf.replace("config.db",
                                               "config.db.old"))
    # setup paths for forms, icons
    sys.path.append(modDir)
    # jpeg module
    rd = runningDir
    if sys.platform.startswith("darwin"):
        rd = os.path.abspath(runningDir + "/../../..")
        QCoreApplication.setLibraryPaths(QStringList([rd]))

    app = AnkiApp(sys.argv)
    QCoreApplication.setApplicationName("Anki")

    if mustQuit:
        QMessageBox.warning(
            None, "Anki", "Can't open APPDATA, nor c:\\anki.\n"
            "Please try removing foreign characters from your username.")
        sys.exit(1)

    import forms
    import ui

    ui.splash = SplashScreen(3)

    import anki
    if anki.version != appVersion:
        print "You have libanki %s, but this is ankiqt %s" % (
            anki.version, appVersion)
        print "\nPlease ensure versions match."
        return

    # parse args
    import optparse
    parser = optparse.OptionParser()
    parser.usage = "%prog [<deck.anki>]"
    parser.add_option("-c", "--config", help="path to config dir",
                      default=os.path.expanduser("~/.anki"))
    (opts, args) = parser.parse_args(sys.argv[1:])

    # configuration
    import ankiqt.config
    conf = ankiqt.config.Config(
        unicode(os.path.abspath(opts.config), sys.getfilesystemencoding()))

    # qt translations
    translationPath = ''
    if 'linux' in sys.platform or 'unix' in sys.platform:
        translationPath = "/usr/share/qt4/translations/"
    if translationPath:
        long = conf['interfaceLang']
        if long == "ja_JP":
            # qt is inconsistent
            long = long.lower()
        short = long.split('_')[0]
        qtTranslator = QTranslator()
        if qtTranslator.load("qt_" + long, translationPath) or \
               qtTranslator.load("qt_" + short, translationPath):
            app.installTranslator(qtTranslator)

    if conf['alternativeTheme']:
        app.setStyle("plastique")

    # load main window
    ui.importAll()
    ui.dialogs.registerDialogs()
    ui.splash.update()

    mw = ui.main.AnkiQt(app, conf, args)

    app.exec_()

    if sys.platform.startswith("darwin"):
        # buggy on osx
        from anki.sound import stopMplayer
        stopMplayer()
        os._exit(0)
    else:
        # ensure we kill any other threads
        sys.exit(0)
Example #2
0
def run():
    import config

    mustQuit = False

    # home on win32 is broken
    if sys.platform == "win32":
        # use appdata if available
        if 'APPDATA' in os.environ:
            oldConf = os.path.expanduser("~/.anki/config.db")
            oldPlugins = os.path.expanduser("~/.anki/plugins")
            os.environ['HOME'] = os.environ['APPDATA']
        else:
            oldConf = None
            os.environ['HOME'] = "c:\\anki"
        # make and check accessible
        try:
            os.makedirs(os.path.expanduser("~/.anki"))
        except:
            pass
        try:
            os.listdir(os.path.expanduser("~/.anki"))
        except:
            oldConf = None
            os.environ['HOME'] = "c:\\anki"
        # check accessible again
        try:
            os.makedirs(os.path.expanduser("~/.anki"))
        except:
            pass
        try:
            os.listdir(os.path.expanduser("~/.anki"))
        except:
            mustQuit = True
        if (oldConf and os.path.exists(oldConf) and not os.path.exists(
                oldConf.replace("config.db", "config.db.old"))):
            try:
                shutil.copy2(oldConf, os.path.expanduser("~/.anki/config.db"))
                shutil.copytree(oldPlugins,
                                os.path.expanduser("~/.anki/plugins"))
            except:
                pass
            os.rename(oldConf, oldConf.replace("config.db", "config.db.old"))
    # setup paths for forms, icons
    sys.path.append(modDir)
    # jpeg module
    rd = runningDir
    if sys.platform.startswith("darwin"):
        rd = os.path.abspath(runningDir + "/../../..")
        QCoreApplication.setLibraryPaths(QStringList([rd]))

    app = AnkiApp(sys.argv)
    QCoreApplication.setApplicationName("Anki")

    if mustQuit:
        QMessageBox.warning(
            None, "Anki", "Can't open APPDATA, nor c:\\anki.\n"
            "Please try removing foreign characters from your username.")
        sys.exit(1)

    import forms
    import ui

    ui.splash = SplashScreen(3)

    import anki
    if anki.version != appVersion:
        print "You have libanki %s, but this is ankiqt %s" % (anki.version,
                                                              appVersion)
        print "\nPlease ensure versions match."
        return

    # parse args
    import optparse
    parser = optparse.OptionParser()
    parser.usage = "%prog [<deck.anki>]"
    parser.add_option("-c",
                      "--config",
                      help="path to config dir",
                      default=os.path.expanduser("~/.anki"))
    (opts, args) = parser.parse_args(sys.argv[1:])

    # configuration
    import ankiqt.config
    conf = ankiqt.config.Config(
        unicode(os.path.abspath(opts.config), sys.getfilesystemencoding()))

    # qt translations
    translationPath = ''
    if 'linux' in sys.platform or 'unix' in sys.platform:
        translationPath = "/usr/share/qt4/translations/"
    if translationPath:
        long = conf['interfaceLang']
        if long == "ja_JP":
            # qt is inconsistent
            long = long.lower()
        short = long.split('_')[0]
        qtTranslator = QTranslator()
        if qtTranslator.load("qt_" + long, translationPath) or \
               qtTranslator.load("qt_" + short, translationPath):
            app.installTranslator(qtTranslator)

    if conf['alternativeTheme']:
        app.setStyle("plastique")

    # load main window
    ui.importAll()
    ui.dialogs.registerDialogs()
    ui.splash.update()

    mw = ui.main.AnkiQt(app, conf, args)

    app.exec_()

    if sys.platform.startswith("darwin"):
        # buggy on osx
        from anki.sound import stopMplayer
        stopMplayer()
        os._exit(0)
    else:
        # ensure we kill any other threads
        sys.exit(0)