feat: Send optional document metadata with KOSync progress uploads (#1820)

This commit is contained in:
Nick Perez
2026-07-12 23:50:38 -04:00
committed by GitHub
parent 39ea4b045f
commit 3a97f3e63e
33 changed files with 95 additions and 11 deletions
+1
View File
@@ -87,6 +87,7 @@ STR_USERNAME: "Імя карыстальніка"
STR_PASSWORD: "Пароль"
STR_SYNC_SERVER_URL: "URL сервера сінхранізацыі"
STR_DOCUMENT_MATCHING: "Супастаўленне дакументаў"
STR_SEND_METADATA: "Адпраўляць метаданыя дакумента"
STR_AUTHENTICATE: "Аўтарызацыя"
STR_KOREADER_USERNAME: "Імя карыстальніка KOReader"
STR_KOREADER_PASSWORD: "Пароль KOReader"
+1
View File
@@ -103,6 +103,7 @@ STR_USERNAME: "Nom d'usuari"
STR_PASSWORD: "Contrasenya"
STR_SYNC_SERVER_URL: "URL del servidor de sincronització"
STR_DOCUMENT_MATCHING: "Coincidència de documents"
STR_SEND_METADATA: "Envia metadades del document"
STR_AUTHENTICATE: "Autentica"
STR_KOREADER_USERNAME: "Nom d'usuari del KOReader"
STR_KOREADER_PASSWORD: "Contrasenya del KOReader"
+1
View File
@@ -92,6 +92,7 @@ STR_USERNAME: "Uživatelské jméno"
STR_PASSWORD: "Heslo"
STR_SYNC_SERVER_URL: "URL synch. serveru"
STR_DOCUMENT_MATCHING: "Párování dokumentů"
STR_SEND_METADATA: "Odesílat metadata dokumentu"
STR_AUTHENTICATE: "Ověření"
STR_KOREADER_USERNAME: "Uživ. jméno KOReaderu"
STR_KOREADER_PASSWORD: "Heslo KOReaderu"
+1
View File
@@ -97,6 +97,7 @@ STR_USERNAME: "Brugernavn"
STR_PASSWORD: "Adgangskode"
STR_SYNC_SERVER_URL: "Synkroniseringsserver-URL"
STR_DOCUMENT_MATCHING: "Dokumentsammenkobling"
STR_SEND_METADATA: "Send dokumentmetadata"
STR_AUTHENTICATE: "Godkend"
STR_KOREADER_USERNAME: "KOReader brugernavn"
STR_KOREADER_PASSWORD: "KOReader adgangskode"
+1
View File
@@ -97,6 +97,7 @@ STR_USERNAME: "Gebruikersnaam"
STR_PASSWORD: "Wachtwoord"
STR_SYNC_SERVER_URL: "Sync-server URL"
STR_DOCUMENT_MATCHING: "Documentkoppeling"
STR_SEND_METADATA: "Documentmetadata versturen"
STR_AUTHENTICATE: "Authenticatie"
STR_KOREADER_USERNAME: "KOReader gebruikersnaam"
STR_KOREADER_PASSWORD: "KOReader wachtwoord"
+1
View File
@@ -105,6 +105,7 @@ STR_USERNAME: "Username"
STR_PASSWORD: "Password"
STR_SYNC_SERVER_URL: "Sync Server URL"
STR_DOCUMENT_MATCHING: "Document Matching"
STR_SEND_METADATA: "Send Document Metadata"
STR_AUTHENTICATE: "Authenticate"
STR_KOREADER_USERNAME: "KOReader Username"
STR_KOREADER_PASSWORD: "KOReader Password"
+1
View File
@@ -92,6 +92,7 @@ STR_USERNAME: "Käyttäjänimi"
STR_PASSWORD: "Salasana"
STR_SYNC_SERVER_URL: "Synkronointipalvelimen osoite"
STR_DOCUMENT_MATCHING: "Dokumenttien tunnistus"
STR_SEND_METADATA: "Lähetä asiakirjan metatiedot"
STR_AUTHENTICATE: "Tunnistaudu"
STR_KOREADER_USERNAME: "KOReader-käyttäjänimi"
STR_KOREADER_PASSWORD: "KOReader-salasana"
+1
View File
@@ -97,6 +97,7 @@ STR_USERNAME: "Nom dutilisateur"
STR_PASSWORD: "Mot de passe"
STR_SYNC_SERVER_URL: "URL du serveur"
STR_DOCUMENT_MATCHING: "Correspondance"
STR_SEND_METADATA: "Envoyer métadonnées"
STR_AUTHENTICATE: "Connexion"
STR_KOREADER_USERNAME: "Utilisateur"
STR_KOREADER_PASSWORD: "Mot de passe"
+1
View File
@@ -91,6 +91,7 @@ STR_USERNAME: "Benutzername"
STR_PASSWORD: "Passwort"
STR_SYNC_SERVER_URL: "Sync-Server-URL"
STR_DOCUMENT_MATCHING: "Dateizuordnung"
STR_SEND_METADATA: "Metadaten senden"
STR_AUTHENTICATE: "Authentifizieren"
STR_KOREADER_USERNAME: "KOReader-Benutzername"
STR_KOREADER_PASSWORD: "KOReader-Passwort"
+1
View File
@@ -95,6 +95,7 @@ STR_USERNAME: "שם משתמש"
STR_PASSWORD: "סיסמה"
STR_SYNC_SERVER_URL: "כתובת שרת סנכרון"
STR_DOCUMENT_MATCHING: "התאמת מסמכים"
STR_SEND_METADATA: "שלח מטא-נתוני מסמך"
STR_AUTHENTICATE: "התחבר"
STR_KOREADER_USERNAME: "שם משתמש ב-KOReader"
STR_KOREADER_PASSWORD: "סיסמת KOReader"
+1
View File
@@ -94,6 +94,7 @@ STR_USERNAME: "Felhasználónév"
STR_PASSWORD: "Jelszó"
STR_SYNC_SERVER_URL: "Szinkronizálás szerver URL"
STR_DOCUMENT_MATCHING: "Dokumentum egyeztetés"
STR_SEND_METADATA: "Dokumentum metaadatok küldése"
STR_AUTHENTICATE: "Hitelesítés"
STR_KOREADER_USERNAME: "KOReader felhasználónév"
STR_KOREADER_PASSWORD: "KOReader jelszó"
+2 -1
View File
@@ -98,6 +98,7 @@ STR_USERNAME: "Nome utente"
STR_PASSWORD: "Password"
STR_SYNC_SERVER_URL: "URL server di sincronizzazione"
STR_DOCUMENT_MATCHING: "Corrispondenza documenti"
STR_SEND_METADATA: "Invia metadati documento"
STR_AUTHENTICATE: "Autentica"
STR_KOREADER_USERNAME: "Nome utente KOReader"
STR_KOREADER_PASSWORD: "Password KOReader"
@@ -385,4 +386,4 @@ STR_KOSYNC: "KOSync"
STR_PWR_BTN_FOOTNOTE_BACK: "Rientro rapido dalle note"
STR_EOB_CONTINUE_WITH: "Continua con"
STR_EOB_HOME: "Home"
STR_INDEX_FAILED: "Indicizzazione fallita - libro non valido"
STR_INDEX_FAILED: "Indicizzazione fallita - libro non valido"
+1
View File
@@ -88,6 +88,7 @@ STR_USERNAME: "Пайдаланушы аты"
STR_PASSWORD: "Құпия сөз"
STR_SYNC_SERVER_URL: "Синхрондау сервері URL"
STR_DOCUMENT_MATCHING: "Құжат сәйкестендіру"
STR_SEND_METADATA: "Құжат метадеректерін жіберу"
STR_AUTHENTICATE: "Аутентификация"
STR_KOREADER_USERNAME: "KOReader пайдаланушы аты"
STR_KOREADER_PASSWORD: "KOReader құпия сөзі"
+1
View File
@@ -94,6 +94,7 @@ STR_USERNAME: "Vartotojas"
STR_PASSWORD: "Slaptažodis"
STR_SYNC_SERVER_URL: "Serverio URL"
STR_DOCUMENT_MATCHING: "Atpažinimas"
STR_SEND_METADATA: "Siųsti dokumento metaduomenis"
STR_AUTHENTICATE: "Prisijungti"
STR_KOREADER_USERNAME: "KOReader vartotojas"
STR_KOREADER_PASSWORD: "KOReader slaptažodis"
+1
View File
@@ -97,6 +97,7 @@ STR_USERNAME: "Użytkownik"
STR_PASSWORD: "Hasło"
STR_SYNC_SERVER_URL: "Serwer URL synchronizacji"
STR_DOCUMENT_MATCHING: "Dopasowanie dokumentów"
STR_SEND_METADATA: "Wyślij metadane dokumentu"
STR_AUTHENTICATE: "Uwierzytelnianie"
STR_KOREADER_USERNAME: "Użytkownik KOReader"
STR_KOREADER_PASSWORD: "Hasło KOReader"
+1
View File
@@ -99,6 +99,7 @@ STR_USERNAME: "Nome de usuário"
STR_PASSWORD: "Senha"
STR_SYNC_SERVER_URL: "URL servidor sincronização"
STR_DOCUMENT_MATCHING: "Documento correspondente"
STR_SEND_METADATA: "Enviar metadados do doc."
STR_AUTHENTICATE: "Autenticar"
STR_KOREADER_USERNAME: "Usuário do KOReader"
STR_KOREADER_PASSWORD: "Senha do KOReader"
+1
View File
@@ -97,6 +97,7 @@ STR_USERNAME: "Utilizator"
STR_PASSWORD: "Parolă"
STR_SYNC_SERVER_URL: "URL server sincronizare"
STR_DOCUMENT_MATCHING: "Corespondenţă document"
STR_SEND_METADATA: "Trimite metadate document"
STR_AUTHENTICATE: "Autentificare"
STR_KOREADER_USERNAME: "Nume utilizator KOReader"
STR_KOREADER_PASSWORD: "Parolă KOReader"
+1
View File
@@ -99,6 +99,7 @@ STR_USERNAME: "Имя пользователя"
STR_PASSWORD: "Пароль"
STR_SYNC_SERVER_URL: "URL сервера синхронизации"
STR_DOCUMENT_MATCHING: "Сопоставление документов"
STR_SEND_METADATA: "Отправлять метаданные"
STR_AUTHENTICATE: "Авторизация"
STR_KOREADER_USERNAME: "Имя пользователя KOReader"
STR_KOREADER_PASSWORD: "Пароль KOReader"
+2 -1
View File
@@ -97,7 +97,8 @@ STR_CLEAR_READING_CACHE: "Vymazať vyrovnávaciu pamäť čítania"
STR_USERNAME: "Používateľské meno"
STR_PASSWORD: "Heslo"
STR_SYNC_SERVER_URL: "URL synchronizačného servera"
STR_DOCUMENT_MATCHING: "Párovanie dokumentov"
STR_DOCUMENT_MATCHING: "Párovanie dokumentov"
STR_SEND_METADATA: "Odosielať metadáta dokumentu"
STR_AUTHENTICATE: "Overiť"
STR_KOREADER_USERNAME: "Používateľské meno KOReader"
STR_KOREADER_PASSWORD: "Heslo KOReader"
+1
View File
@@ -94,6 +94,7 @@ STR_USERNAME: "Uporabniško ime"
STR_PASSWORD: "Geslo"
STR_SYNC_SERVER_URL: "URL strežnika za sinhronizacijo"
STR_DOCUMENT_MATCHING: "Ujemanje dokumentov"
STR_SEND_METADATA: "Pošlji metapodatke dokumenta"
STR_AUTHENTICATE: "Avtentikacija"
STR_KOREADER_USERNAME: "KOReader uporabnik"
STR_KOREADER_PASSWORD: "KOReader geslo"
+1
View File
@@ -104,6 +104,7 @@ STR_USERNAME: "Usuario"
STR_PASSWORD: "Contraseña"
STR_SYNC_SERVER_URL: "URL del servidor de sinc."
STR_DOCUMENT_MATCHING: "Coincidencia de doc."
STR_SEND_METADATA: "Enviar metadatos doc."
STR_AUTHENTICATE: "Autenticar"
STR_KOREADER_USERNAME: "Usuario de KOReader"
STR_KOREADER_PASSWORD: "Contraseña de KOReader"
+1
View File
@@ -102,6 +102,7 @@ STR_USERNAME: "Användarnamn"
STR_PASSWORD: "Lösenord"
STR_SYNC_SERVER_URL: "Synkronisera serveradress"
STR_DOCUMENT_MATCHING: "Dokumentmatchning"
STR_SEND_METADATA: "Skicka dokumentmetadata"
STR_AUTHENTICATE: "Autentisera "
STR_KOREADER_USERNAME: "KOReader användarnamn"
STR_KOREADER_PASSWORD: "KOReader lösenord"
+1
View File
@@ -92,6 +92,7 @@ STR_USERNAME: "Kullanıcı Adı"
STR_PASSWORD: "Şifre"
STR_SYNC_SERVER_URL: "Senkronizasyon Sunucu Adresi"
STR_DOCUMENT_MATCHING: "Belge Eşleştirme"
STR_SEND_METADATA: "Belge üst verisi gönder"
STR_AUTHENTICATE: "Kimlik Doğrula"
STR_KOREADER_USERNAME: "KOReader Kullanıcı Adı"
STR_KOREADER_PASSWORD: "KOReader Şifresi"
+1
View File
@@ -98,6 +98,7 @@ STR_USERNAME: "Ім'я користувача"
STR_PASSWORD: "Пароль"
STR_SYNC_SERVER_URL: "URL для синхронізації"
STR_DOCUMENT_MATCHING: "Порівняння документів"
STR_SEND_METADATA: "Надсилати метадані"
STR_AUTHENTICATE: "Автентифікувати"
STR_KOREADER_USERNAME: "Ім'я користувача KOReader"
STR_KOREADER_PASSWORD: "Пароль KOReader"
+1
View File
@@ -109,6 +109,7 @@ STR_USERNAME: "Nom d'usuari"
STR_PASSWORD: "Contrasenya"
STR_SYNC_SERVER_URL: "URL del servidor de sincronització"
STR_DOCUMENT_MATCHING: "Coincidència de documents"
STR_SEND_METADATA: "Envia metadades del document"
STR_AUTHENTICATE: "Autentica"
STR_KOREADER_USERNAME: "Nom d'usuari del KOReader"
STR_KOREADER_PASSWORD: "Contrasenya del KOReader"
+1
View File
@@ -98,6 +98,7 @@ STR_USERNAME: "Tên đăng nhập"
STR_PASSWORD: "Mật khẩu"
STR_SYNC_SERVER_URL: "URL máy chủ đồng bộ"
STR_DOCUMENT_MATCHING: "Khớp tài liệu"
STR_SEND_METADATA: "Gửi siêu dữ liệu tài liệu"
STR_AUTHENTICATE: "Xác thực"
STR_KOREADER_USERNAME: "Tên đăng nhập KOReader"
STR_KOREADER_PASSWORD: "Mật khẩu KOReader"
@@ -14,6 +14,7 @@ void KOReaderCredentialStore::toJson(JsonDocument& doc) const {
doc["password_obf"] = obfuscation::obfuscateToBase64(getPassword());
doc["serverUrl"] = getServerUrl();
doc["matchMethod"] = static_cast<uint8_t>(getMatchMethod());
doc["sendMetadata"] = getSendMetadata();
}
bool KOReaderCredentialStore::fromJson(JsonVariantConst doc) {
@@ -32,6 +33,7 @@ bool KOReaderCredentialStore::fromJson(JsonVariantConst doc) {
LOG_DBG("KRS", "Invalid matchMethod %u in JSON, resetting to FILENAME", method);
setMatchMethod(DocumentMatchMethod::FILENAME);
}
setSendMetadata(doc["sendMetadata"] | false);
if (needsResave) {
LOG_DBG("KRS", "Resaved KOReader credentials to update format");
@@ -98,3 +100,8 @@ void KOReaderCredentialStore::setMatchMethod(DocumentMatchMethod method) {
matchMethod = method;
LOG_DBG("KRS", "Set match method: %s", method == DocumentMatchMethod::FILENAME ? "Filename" : "Binary");
}
void KOReaderCredentialStore::setSendMetadata(bool enabled) {
sendMetadata = enabled;
LOG_DBG("KRS", "Set send metadata: %s", enabled ? "true" : "false");
}
@@ -24,6 +24,7 @@ class KOReaderCredentialStore : public PersistableStore<KOReaderCredentialStore>
std::string password;
std::string serverUrl; // Custom sync server URL (empty = default)
DocumentMatchMethod matchMethod = DocumentMatchMethod::FILENAME; // Default to filename for compatibility
bool sendMetadata = false; // Send document metadata with progress sync
// Private constructor for singleton
KOReaderCredentialStore() = default;
@@ -60,6 +61,10 @@ class KOReaderCredentialStore : public PersistableStore<KOReaderCredentialStore>
// Document matching method
void setMatchMethod(DocumentMatchMethod method);
DocumentMatchMethod getMatchMethod() const { return matchMethod; }
// Send metadata setting
void setSendMetadata(bool enabled);
bool getSendMetadata() const { return sendMetadata; }
};
// Helper macro to access credential store
+6
View File
@@ -148,6 +148,12 @@ KOReaderSyncClient::Error KOReaderSyncClient::updateProgress(const KOReaderProgr
// Build JSON body
JsonDocument doc;
doc["document"] = progress.document;
if (progress.metadata.has_value()) {
auto meta = doc["metadata"].to<JsonObject>();
meta["filename"] = progress.metadata->filename;
meta["title"] = progress.metadata->title;
meta["authors"] = progress.metadata->authors;
}
doc["progress"] = progress.progress;
doc["percentage"] = progress.percentage;
doc["device"] = DEVICE_NAME;
+20 -6
View File
@@ -1,16 +1,30 @@
#pragma once
#include <cstdint>
#include <optional>
#include <string>
/**
* Optional document metadata sent alongside progress sync requests.
* Mirrors the metadata object added in KOReader PR #15306.
* The official sync server ignores this field; custom servers may use it.
*/
struct KOReaderMetadata {
std::string filename; // e.g. "my_book.epub"
std::string title; // Document title from EPUB metadata
std::string authors; // Author(s) from EPUB metadata
};
/**
* Progress data from KOReader sync server.
*/
struct KOReaderProgress {
std::string document; // Document hash
std::string progress; // XPath-like progress string
float percentage; // Progress percentage (0.0 to 1.0)
std::string device; // Device name
std::string deviceId; // Device ID
int64_t timestamp; // Unix timestamp of last update
std::string document; // Document hash
std::string progress; // XPath-like progress string
float percentage; // Progress percentage (0.0 to 1.0)
std::string device; // Device name
std::string deviceId; // Device ID
int64_t timestamp; // Unix timestamp of last update
std::optional<KOReaderMetadata> metadata; // Optional document metadata
};
/**