Release v0.6.49: Viber chat language profiles with local OCR

This commit is contained in:
agrynco committed 2026-11-05 23:52:50 +02:00
1 parent 4e7a683c47
commit 178573233b
15 files changed
+181 -63

No files matched your search

+10 -7
View File
@@ -1013,7 +1013,7 @@ LRESULT CALLBACK chatLanguagesProc(HWND w, UINT msg, WPARAM wp, LPARAM lp)
{
int selected = (int)SendDlgItemMessageW(w, 710, LB_GETCURSEL, 0, 0);
if (selected < 0 || selected >= (int)v->keys.size())
throw std::runtime_error("Open a Telegram or Teams chat, then reopen this dialog.");
throw std::runtime_error("Open a Telegram, Teams or Viber chat, then reopen this dialog. Viber requires Tesseract.");
auto next = v->settings->draft;
if (id == 713) next.chatCycles.erase(v->keys[selected]);
else
@@ -1050,24 +1050,27 @@ void showChatLanguages(HWND parent, SettingsView *settings)
{
std::set<std::wstring> keys;
for (const auto &[key, cycle] : settings->draft.chatCycles) keys.insert(key);
struct Context { std::set<std::wstring> &keys; const Settings &settings; } context{keys, settings->draft};
EnumWindows([](HWND candidate, LPARAM context) -> BOOL
{
if (!IsWindowVisible(candidate)) return TRUE;
auto key = windowChatKey(candidate);
if (!key.empty()) ((std::set<std::wstring> *)context)->insert(std::move(key));
auto &data = *(Context *)context;
auto key = lower(processName(candidate)) == L"viber"
? recognizeViberChat(candidate, data.settings) : windowChatKey(candidate);
if (!key.empty()) data.keys.insert(std::move(key));
return TRUE;
}, (LPARAM)&keys);
}, (LPARAM)&context);
HWND w = makeWindow(*settings->app, L"KSwitcher.ChatLanguages", L"Languages for a chat", chatLanguagesProc, 640, 524);
auto *v = new ChatLanguagesView{parent, settings, {keys.begin(), keys.end()}};
SetWindowLongPtrW(w, GWLP_HWNDPARENT, (LONG_PTR)parent);
SetWindowLongPtrW(w, GWLP_USERDATA, (LONG_PTR)v);
label(w, L"Saved profiles and currently open Telegram / Teams chats", 18, 16, 604);
label(w, L"Telegram / Teams / Viber (experimental OCR) chat profiles", 18, 16, 604);
control(w, L"LISTBOX", L"", WS_TABSTOP | WS_VSCROLL | LBS_NOTIFY | LBS_NOINTEGRALHEIGHT | WS_BORDER,
710, 18, 44, 604, 140);
for (const auto &key : v->keys)
{
auto split = key.find(L'\n');
auto name = std::wstring(key.starts_with(L"telegram\n") ? L"Telegram: " : L"Teams: ") + key.substr(split + 1);
auto name = std::wstring(key.starts_with(L"telegram\n") ? L"Telegram: " : key.starts_with(L"viber\n") ? L"Viber: " : L"Teams: ") + key.substr(split + 1);
SendDlgItemMessageW(w, 710, LB_ADDSTRING, 0, (LPARAM)name.c_str());
}
control(w, L"STATIC", L"Open a chat, then reopen this dialog to add it.", 0, 712, 18, 194, 604, 26);
@@ -1986,7 +1989,7 @@ void showSettings(App &app, bool visible)
label(w, L"Backspace / Delete clears it", 454, 270, 230);
button(w, L"Re&fresh layouts", 253, 454, 322, 230);
button(w, L"Languages for a &chat...", 259, 24, 378, 230);
label(w, L"Choose a separate set for each Telegram or Teams chat.", 272, 382, 412);
label(w, L"Chat languages: Telegram, Teams, Viber (OCR).", 272, 382, 412);
page();
label(w, L"Click a shortcut field and press the desired keys", 24, 76, 660);