std::string UIStyleSettings::GetActiveColorScheme() { RimeConfig config = {0}; api_->settings_get_config(settings_, &config); const char* value = rime_get_api()->config_get_cstring(&config, "style/color_scheme"); if (!value) return std::string(); return std::string(value); }
LRESULT DictManagementDialog::OnBackup(WORD, WORD code, HWND, BOOL&) { int sel = user_dict_list_.GetCurSel(); if (sel < 0 || sel >= user_dict_list_.GetCount()) { MessageBox(L"請在左列選擇要導出的詞典名稱。", L":-(", MB_OK | MB_ICONINFORMATION); return 0; } boost::filesystem::wpath path; { char dir[MAX_PATH] = {0}; rime_get_api()->get_user_data_sync_dir(dir, _countof(dir)); WCHAR wdir[MAX_PATH] = {0}; MultiByteToWideChar(CP_ACP, 0, dir, -1, wdir, _countof(wdir)); path = wdir; } if (_waccess(path.wstring().c_str(), 0) != 0 && !boost::filesystem::create_directories(path)) { MessageBox(L"未能完成導出操作。會不會是同步文件夾無法訪問?", L":-(", MB_OK | MB_ICONERROR); return 0; } WCHAR dict_name[100] = {0}; user_dict_list_.GetText(sel, dict_name); path /= std::wstring(dict_name) + L".userdb.txt"; if (!api_->backup_user_dict(wcstoutf8(dict_name))) { MessageBox(L"不知哪裏出錯了,未能完成導出操作。", L":-(", MB_OK | MB_ICONERROR); return 0; } else if (_waccess(path.wstring().c_str(), 0) != 0) { MessageBox(L"咦,輸出的快照文件找不着了。", L":-(", MB_OK | MB_ICONERROR); return 0; } std::wstring param = L"/select, \"" + path.wstring() + L"\""; ShellExecute(NULL, L"open", L"explorer.exe", param.c_str(), NULL, SW_SHOWNORMAL); return 0; }
int Configurator::Run(bool installing) { RimeModule* levers = rime_get_api()->find_module("levers"); if (!levers) return 1; RimeLeversApi* api = (RimeLeversApi*)levers->get_api(); if (!api) return 1; bool reconfigured = false; RimeSwitcherSettings* switcher_settings = api->switcher_settings_init(); UIStyleSettings ui_style_settings; bool skip_switcher_settings = installing && !api->is_first_run((RimeCustomSettings*)switcher_settings); bool skip_ui_style_settings = installing && !api->is_first_run(ui_style_settings.settings()); (skip_switcher_settings || configure_switcher(api, switcher_settings, &reconfigured)) && (skip_ui_style_settings || configure_ui(api, &ui_style_settings, &reconfigured)); api->custom_settings_destroy((RimeCustomSettings*)switcher_settings); if (installing || reconfigured) { return UpdateWorkspace(reconfigured); } return 0; }
bool UIStyleSettings::GetPresetColorSchemes(std::vector<ColorSchemeInfo>* result) { if (!result) return false; result->clear(); RimeConfig config = {0}; api_->settings_get_config(settings_, &config); RimeApi* rime = rime_get_api(); RimeConfigIterator preset = {0}; if (!rime->config_begin_map(&preset, &config, "preset_color_schemes")) { return false; } while (rime->config_next(&preset)) { std::string name_key(preset.path); name_key += "/name"; const char* name = rime->config_get_cstring(&config, name_key.c_str()); std::string author_key(preset.path); author_key += "/author"; const char* author = rime->config_get_cstring(&config, author_key.c_str()); if (!name) continue; ColorSchemeInfo info; info.color_scheme_id = preset.key; info.name = name; if (author) info.author = author; result->push_back(info); } return true; }
int Configurator::UpdateWorkspace(bool report_errors) { HANDLE hMutex = CreateMutex(NULL, TRUE, L"WeaselDeployerMutex"); if (!hMutex) { LOG(ERROR) << "Error creating WeaselDeployerMutex."; return 1; } if (GetLastError() == ERROR_ALREADY_EXISTS) { LOG(WARNING) << "another deployer process is running; aborting operation."; CloseHandle(hMutex); if (report_errors) { MessageBox(NULL, L"正在執行另一項部署任務,方纔所做的修改將在輸入法再次啓動後生效。", L"【小狼毫】", MB_OK | MB_ICONINFORMATION); } return 1; } weasel::Client client; if (client.Connect()) { LOG(INFO) << "Turning WeaselServer into maintenance mode."; client.StartMaintenance(); } { RimeApi* rime = rime_get_api(); // initialize default config, preset schemas rime->deploy(); // initialize weasel config rime->deploy_config_file("weasel.yaml", "config_version"); } CloseHandle(hMutex); // should be closed before resuming service. if (client.Connect()) { LOG(INFO) << "Resuming service."; client.EndMaintenance(); } return 0; }
int Configurator::SyncUserData() { HANDLE hMutex = CreateMutex(NULL, TRUE, L"WeaselDeployerMutex"); if (!hMutex) { LOG(ERROR) << "Error creating WeaselDeployerMutex."; return 1; } if (GetLastError() == ERROR_ALREADY_EXISTS) { LOG(WARNING) << "another deployer process is running; aborting operation."; CloseHandle(hMutex); MessageBox(NULL, L"正在執行另一項部署任務,請稍候再試。", L"【小狼毫】", MB_OK | MB_ICONINFORMATION); return 1; } weasel::Client client; if (client.Connect()) { LOG(INFO) << "Turning WeaselServer into maintenance mode."; client.StartMaintenance(); } { RimeApi* rime = rime_get_api(); if (!rime->sync_user_data()) { LOG(ERROR) << "Error synching user data."; return 1; } rime->join_maintenance_thread(); } CloseHandle(hMutex); // should be closed before resuming service. if (client.Connect()) { LOG(INFO) << "Resuming service."; client.EndMaintenance(); } return 0; }
int Configurator::DictManagement() { HANDLE hMutex = CreateMutex(NULL, TRUE, L"WeaselDeployerMutex"); if (!hMutex) { LOG(ERROR) << "Error creating WeaselDeployerMutex."; return 1; } if (GetLastError() == ERROR_ALREADY_EXISTS) { LOG(WARNING) << "another deployer process is running; aborting operation."; CloseHandle(hMutex); MessageBox(NULL, L"正在執行另一項部署任務,請稍候再試。", L"【小狼毫】", MB_OK | MB_ICONINFORMATION); return 1; } weasel::Client client; if (client.Connect()) { LOG(INFO) << "Turning WeaselServer into maintenance mode."; client.StartMaintenance(); } { RimeApi* rime = rime_get_api(); if (RIME_API_AVAILABLE(rime, run_task)) { rime->run_task("installation_update"); // setup user data sync dir } DictManagementDialog dlg; dlg.DoModal(); } CloseHandle(hMutex); // should be closed before resuming service. if (client.Connect()) { LOG(INFO) << "Resuming service."; client.EndMaintenance(); } return 0; }
SwitcherSettingsDialog::SwitcherSettingsDialog(RimeSwitcherSettings* settings) : settings_(settings), loaded_(false), modified_(false) { api_ = (RimeLeversApi*)rime_get_api()->find_module("levers")->get_api(); }
static void* FcitxRimeCreate(FcitxInstance* instance) { FcitxRime* rime = (FcitxRime*) fcitx_utils_malloc0(sizeof(FcitxRime)); rime->owner = instance; rime->api = rime_get_api(); rime->firstRun = true; if (!rime->api) { free(rime); return NULL; } FcitxRimeStart(rime, false); FcitxIMIFace iface; memset(&iface, 0, sizeof(FcitxIMIFace)); iface.Init = FcitxRimeInit; iface.ResetIM = FcitxRimeReset; iface.DoInput = FcitxRimeDoInput; iface.DoReleaseInput = FcitxRimeDoReleaseInput; iface.GetCandWords = FcitxRimeGetCandWords; iface.ReloadConfig = FcitxRimeReloadConfig; FcitxInstanceRegisterIMv2( instance, rime, "rime", _("Rime"), "rime", iface, 10, "zh" ); FcitxUIRegisterComplexStatus( instance, rime, "rime-enzh", "", "", FcitxRimeToggleEnZh, FcitxRimeGetIMIcon); FcitxUIRegisterComplexStatus( instance, rime, "rime-deploy", _("Deploy"), _("Deploy"), FcitxRimeToggleDeploy, FcitxRimeGetDeployIcon); FcitxUIRegisterComplexStatus( instance, rime, "rime-sync", _("Synchronize"), _("Synchronize"), FcitxRimeToggleSync, FcitxRimeGetSyncIcon); FcitxUISetStatusVisable(instance, "rime-enzh", false); FcitxUISetStatusVisable(instance, "rime-sync", false); FcitxUISetStatusVisable(instance, "rime-deploy", false); FcitxIMEventHook hk; hk.arg = rime; hk.func = FcitxRimeResetUI; FcitxInstanceRegisterResetInputHook(instance, hk); FcitxMenuInit(&rime->schemamenu); rime->schemamenu.name = strdup(_("Schema List")); rime->schemamenu.candStatusBind = strdup("rime-enzh"); rime->schemamenu.MenuAction = FcitxRimeSchemaMenuAction; rime->schemamenu.UpdateMenu = FcitxRimeSchemaMenuUpdate; rime->schemamenu.priv = rime; rime->schemamenu.isSubMenu = false; FcitxUIRegisterMenu(rime->owner, &rime->schemamenu); return rime; }
DictManagementDialog::DictManagementDialog() { api_ = (RimeLeversApi*)rime_get_api()->find_module("levers")->get_api(); }
static jstring get_version(JNIEnv *env, jobject thiz) { RimeApi* rime = rime_get_api(); const char* c = rime->get_version(); return newJstring(env, c); }
static jboolean select_candidate(JNIEnv *env, jobject thiz, jint session_id, jint index) { RimeApi* rime = rime_get_api(); return rime->select_candidate(session_id, index); }
UIStyleSettings::UIStyleSettings() { api_ = (RimeLeversApi*)rime_get_api()->find_module("levers")->get_api(); settings_ = api_->custom_settings_init("weasel", "Weasel::UIStyleSettings"); }
std::string UIStyleSettings::GetColorSchemePreview(const std::string& color_scheme_id) { return std::string(rime_get_api()->get_shared_data_dir()) + "\\preview\\color_scheme_" + color_scheme_id + ".png"; }