| 50 | constexpr const char *GlobalObjects::kikoVersion; |
| 51 | |
| 52 | void GlobalObjects::init(QElapsedTimer *elapsedTimer) |
| 53 | { |
| 54 | context()->init(); |
| 55 | |
| 56 | registerCustomSettingType(); |
| 57 | appSetting = new QSettings(context()->dataPath + "settings.ini", QSettings::IniFormat); |
| 58 | Logger::logger(); |
| 59 | |
| 60 | normalFont = appSetting->value("UI/Font", "Microsoft YaHei UI").toString(); |
| 61 | |
| 62 | QThread::currentThread()->setObjectName(QStringLiteral("mainThread")); |
| 63 | workThread = new QThread(); |
| 64 | workThread->setObjectName(QStringLiteral("workThread")); |
| 65 | workThread->start(QThread::NormalPriority); |
| 66 | Logger::logger()->log(Logger::APP, QString::asprintf("worker thread: %p", workThread)); |
| 67 | GlobalObjects::context()->tick(elapsedTimer, "init"); |
| 68 | |
| 69 | DBManager::instance(); |
| 70 | GlobalObjects::context()->tick(elapsedTimer, "db"); |
| 71 | |
| 72 | auto locNames = GlobalObjects::appSetting->value("KikoPlay/Language", "").toStringList(); |
| 73 | if (locNames.join("").isEmpty()) |
| 74 | { |
| 75 | locNames = QLocale().uiLanguages(); |
| 76 | } |
| 77 | static QTranslator translator; |
| 78 | for (const auto &locName:locNames) |
| 79 | { |
| 80 | auto loc = QLocale(locName); |
| 81 | QStringList uiLangs{ loc.uiLanguages() }; |
| 82 | if (!uiLangs.empty() && uiLangs[0].startsWith("en-")) break; |
| 83 | if (translator.load(loc, "", "", ":/res/lang")) |
| 84 | { |
| 85 | qApp->installTranslator(&translator); |
| 86 | GlobalObjects::context()->lang = locName; |
| 87 | break; |
| 88 | } |
| 89 | } |
| 90 | Notifier::getNotifier(); |
| 91 | EventBus::getEventBus(); |
| 92 | |
| 93 | PlayContext::context(); |
| 94 | mpvplayer = new MPVPlayer(); |
| 95 | GlobalObjects::context()->tick(elapsedTimer, "player"); |
| 96 | |
| 97 | danmuPool = new DanmuPool(); |
| 98 | danmuRender = new DanmuRender(); |
| 99 | QObject::connect(mpvplayer, &MPVPlayer::positionChanged, danmuPool, &DanmuPool::mediaTimeElapsed); |
| 100 | QObject::connect(mpvplayer, &MPVPlayer::positionJumped, danmuPool, &DanmuPool::mediaTimeJumped); |
| 101 | playlist = new PlayList(); |
| 102 | QObject::connect(playlist, &PlayList::currentMatchChanged, danmuPool, &DanmuPool::setPoolID); |
| 103 | blocker = new Blocker(); |
| 104 | GlobalObjects::context()->tick(elapsedTimer, "list"); |
| 105 | |
| 106 | scriptManager = new ScriptManager(); |
| 107 | danmuProvider = new DanmuProvider(); |
| 108 | animeProvider = new AnimeProvider(); |
| 109 | QObject workObj; |