## Summary * **What is the goal of this PR?** Fix KOSync failing with "Network error" on large/complex EPUBs, and simplify the sync navigation flow by removing the callback/result pattern. * **What changes are included?** This PR combines the approaches from #1855 and #1760 into a single, cleaner solution: **Memory fix (from #1855):** - `EpubReaderActivity` pre-computes the local KOReader position and chapter name, then explicitly releases `epub` and `section` before launching `KOReaderSyncActivity`. This frees ~65KB measured on device, giving the TLS handshake sufficient heap. The root cause was `MBEDTLS_ERR_X509_ALLOC_FAILED` (-0x2880) when a 3-cert chain consumed ~48KB during the handshake with only ~50KB available. - `KOReaderSyncActivity` no longer receives a `shared_ptr<Epub>` at construction — it lazy-loads the Epub after TLS only if remote progress is found (`ensureEpubLoaded()`). - Added `MIN_HEAP_FOR_TLS = 55000` guard in `KOReaderSyncClient` — returns `LOW_MEMORY` early if aggregate free heap is too low before attempting a TLS connection. **Navigation simplification (from #1760):** - Replaced `startActivityForResult` + callback with `activityManager.replaceActivity` / `activityManager.goToReader`. Progress is saved to `progress.bin` before the epub is released (cancel/upload paths) and in `saveProgressAndReturn` (apply remote path). The reader re-launches from the saved position naturally via `goToReader`, eliminating the need to reload the epub in a callback. - Extracted `ReaderUtils::saveProgress()` as a shared helper used by both `EpubReaderActivity` and `KOReaderSyncActivity`. - Added `STR_SAVE_PROGRESS_FAILED` to all 22 language files for the case where writing the synced position to SD fails. **Orientation fix (found during device testing):** - `EpubReaderActivity::onExit()` resets the renderer to portrait before destruction. With `replaceActivity` the reader is fully torn down before KOSync starts, so KOSync was always rendering in portrait even when reading in landscape. Fixed by calling `ReaderUtils::applyOrientation` in `KOReaderSyncActivity::onEnter()`. ## Additional Context Heap measurements on device (large EPUB with complex CSS): | Metric | Before | After | |---|---|---| | Heap before Epub release | 88,156 bytes | — | | Heap after Epub release | — | 153,892 bytes (+65,736) | | Heap at TLS handshake | ~50,000 bytes (fails) | ~116,384 bytes (passes) | | Min-free-ever during sync session | 2,600 bytes | 33,052 bytes | | TLS result | `MBEDTLS_ERR_X509_ALLOC_FAILED` | HTTP 200 | Tested on device: sync from inside a large EPUB in both portrait and landscape, cancel, apply remote progress, upload local progress. --- ### AI Usage Did you use AI tools to help write this code? _**YES**_ --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
295 lines
11 KiB
YAML
295 lines
11 KiB
YAML
_language_name: "Slovenščina"
|
|
_language_code: "SI"
|
|
_order: "21"
|
|
|
|
STR_CROSSPOINT: "CrossPoint"
|
|
STR_BOOTING: "ZAGON"
|
|
STR_SLEEPING: "SPANJE"
|
|
STR_ENTERING_SLEEP: "Prehajanje v spanje"
|
|
STR_BROWSE_FILES: "Prebrskaj datoteke"
|
|
STR_FILE_TRANSFER: "Prenos datotek"
|
|
STR_SETTINGS_TITLE: "Nastavitve"
|
|
STR_CONTINUE_READING: "Nadaljuj z branjem"
|
|
STR_NO_OPEN_BOOK: "Ni odprte knjige"
|
|
STR_START_READING: "Začni brati spodaj"
|
|
STR_NO_FILES_FOUND: "Ni najdenih datotek"
|
|
STR_SELECT_CHAPTER: "Izberi poglavje"
|
|
STR_NO_CHAPTERS: "Ni poglavij"
|
|
STR_END_OF_BOOK: "Konec knjige"
|
|
STR_EMPTY_CHAPTER: "Prazno poglavje"
|
|
STR_INDEXING: "Indeksiranje"
|
|
STR_MEMORY_ERROR: "Napaka pomnilnika"
|
|
STR_PAGE_LOAD_ERROR: "Napaka pri nalaganju strani"
|
|
STR_EMPTY_FILE: "Prazna datoteka"
|
|
STR_OUT_OF_BOUNDS: "Izven meja"
|
|
STR_LOADING: "Nalaganje..."
|
|
STR_LOADING_POPUP: "Nalaganje"
|
|
STR_WIFI_NETWORKS: "WiFi omrežja"
|
|
STR_NO_NETWORKS: "Ni najdenih omrežij"
|
|
STR_NETWORKS_FOUND: "Najdenih omrežij: %zu"
|
|
STR_SCANNING: "Iskanje..."
|
|
STR_CONNECTING: "Povezovanje..."
|
|
STR_CONNECTED: "Povezano!"
|
|
STR_CONNECTION_FAILED: "Povezava ni uspela"
|
|
STR_FORGET_NETWORK: "Pozabi omrežje?"
|
|
STR_SAVE_PASSWORD: "Shranim geslo za naslednjič?"
|
|
STR_PRESS_OK_SCAN: "Pritisni OK za ponovno iskanje"
|
|
STR_JOIN_NETWORK: "Poveži se v omrežje"
|
|
STR_CREATE_HOTSPOT: "Ustvari dostopno točko"
|
|
STR_JOIN_DESC: "Poveži se v obstoječe WiFi omrežje"
|
|
STR_HOTSPOT_DESC: "Ustvari WiFi omrežje, v katerega se lahko povežejo drugi"
|
|
STR_STARTING_HOTSPOT: "Zaganjanje dostopne točke..."
|
|
STR_HOTSPOT_MODE: "Način dostopne točke"
|
|
STR_CONNECT_WIFI_HINT: "Poveži svojo napravo v to WiFi omrežje"
|
|
STR_OPEN_URL_HINT: "Odpri ta URL v svojem brskalniku"
|
|
STR_OR_HTTP_PREFIX: "ali http://"
|
|
STR_SCAN_QR_HINT: "ali skeniraj QR kodo s telefonom:"
|
|
STR_CALIBRE_WIRELESS: "Brezžični Calibre"
|
|
STR_CALIBRE_WEB_URL: "Calibre Web URL"
|
|
STR_NETWORK_LEGEND: "* = Šifrirano | + = Shranjeno"
|
|
STR_MAC_ADDRESS: "MAC naslov:"
|
|
STR_CHECKING_WIFI: "Preverjanje WiFi-ja..."
|
|
STR_ENTER_WIFI_PASSWORD: "Vnesi WiFi geslo"
|
|
STR_TO_PREFIX: "v "
|
|
STR_CALIBRE_RECEIVING: "Prejemanje: "
|
|
STR_CALIBRE_RECEIVED: "Prejeto: "
|
|
STR_CALIBRE_INSTRUCTION_1: "1) Namesti vtičnik CrossPoint Reader"
|
|
STR_CALIBRE_INSTRUCTION_2: "2) Bodi v istem WiFi omrežju"
|
|
STR_CALIBRE_INSTRUCTION_3: "3) V Calibre: \"Pošlji v napravo\""
|
|
STR_CALIBRE_INSTRUCTION_4: "\"Med pošiljanjem pusti ta zaslon odprt\""
|
|
STR_CAT_DISPLAY: "Zaslon"
|
|
STR_CAT_READER: "Bralnik"
|
|
STR_CAT_CONTROLS: "Kontrole"
|
|
STR_CAT_SYSTEM: "Sistem"
|
|
STR_SLEEP_SCREEN: "Zaslon za spanje"
|
|
STR_SLEEP_COVER_MODE: "Način naslovnice v spanju"
|
|
STR_HIDE_BATTERY: "Skrij % baterije"
|
|
STR_EXTRA_SPACING: "Dodaten razmik med odstavki"
|
|
STR_TEXT_AA: "Glajenje besedila (AA)"
|
|
STR_IMAGES: "Slike"
|
|
STR_IMAGES_DISPLAY: "Prikaži"
|
|
STR_IMAGES_PLACEHOLDER: "Oznaka mesta"
|
|
STR_IMAGES_SUPPRESS: "Zatdi"
|
|
STR_SHORT_PWR_BTN: "Kratek pritisk na gumb za vklop"
|
|
STR_ORIENTATION: "Orientacija branja"
|
|
STR_SIDE_BTN_LAYOUT: "Razpored stranskih gumbov"
|
|
STR_LONG_PRESS_SKIP: "Dolgi pritisk za preskok poglavja"
|
|
STR_FONT_FAMILY: "Pisava bralnika"
|
|
STR_FONT_SIZE: "Velikost pisave"
|
|
STR_LINE_SPACING: "Razmik med vrsticami"
|
|
STR_SCREEN_MARGIN: "Robovi zaslona"
|
|
STR_PARA_ALIGNMENT: "Poravnava odstavkov"
|
|
STR_HYPHENATION: "Deljenje besed"
|
|
STR_TIME_TO_SLEEP: "Čas do spanja"
|
|
STR_SHOW_HIDDEN_FILES: "Prikaži skrite datoteke"
|
|
STR_REFRESH_FREQ: "Pogostost osveževanja"
|
|
STR_KOREADER_SYNC: "KOReader sinhronizacija"
|
|
STR_CHECK_UPDATES: "Preveri posodobitve"
|
|
STR_LANGUAGE: "Jezik"
|
|
STR_CLEAR_READING_CACHE: "Počisti predpomnilnik branja"
|
|
STR_USERNAME: "Uporabniško ime"
|
|
STR_PASSWORD: "Geslo"
|
|
STR_SYNC_SERVER_URL: "URL strežnika za sinhronizacijo"
|
|
STR_DOCUMENT_MATCHING: "Ujemanje dokumentov"
|
|
STR_AUTHENTICATE: "Avtentikacija"
|
|
STR_KOREADER_USERNAME: "KOReader uporabnik"
|
|
STR_KOREADER_PASSWORD: "KOReader geslo"
|
|
STR_FILENAME: "Ime datoteke"
|
|
STR_BINARY: "Binarno"
|
|
STR_SET_CREDENTIALS_FIRST: "Najprej nastavi podatke za prijavo"
|
|
STR_WIFI_CONN_FAILED: "WiFi povezava ni uspela"
|
|
STR_AUTHENTICATING: "Preverjanje..."
|
|
STR_AUTH_SUCCESS: "Uspešna prijava!"
|
|
STR_KOREADER_AUTH: "KOReader avtentikacija"
|
|
STR_SYNC_READY: "KOReader sinhronizacija je pripravljena"
|
|
STR_AUTH_FAILED: "Prijava ni uspela"
|
|
STR_DONE: "Končano"
|
|
STR_CLEAR_CACHE_WARNING_1: "To bo izbrisalo vse predpomnjene podatke o knjigah."
|
|
STR_CLEAR_CACHE_WARNING_2: "Ves napredek pri branju bo izgubljen!"
|
|
STR_CLEAR_CACHE_WARNING_3: "Knjige bo treba ob ponovnem odpiranju"
|
|
STR_CLEAR_CACHE_WARNING_4: "ponovno indeksirati."
|
|
STR_CLEARING_CACHE: "Čiščenje predpomnilnika..."
|
|
STR_CACHE_CLEARED: "Predpomnilnik očiščen"
|
|
STR_ITEMS_REMOVED: "elementov odstranjenih"
|
|
STR_FAILED_LOWER: "ni uspelo"
|
|
STR_CLEAR_CACHE_FAILED: "Čiščenje predpomnilnika ni uspelo"
|
|
STR_CHECK_SERIAL_OUTPUT: "Za podrobnosti preveri serijski izhod"
|
|
STR_DARK: "Temno"
|
|
STR_LIGHT: "Svetlo"
|
|
STR_CUSTOM: "Po meri"
|
|
STR_COVER: "Naslovnica"
|
|
STR_NONE_OPT: "Brez"
|
|
STR_FIT: "Prilagodi"
|
|
STR_CROP: "Obreži"
|
|
STR_NEVER: "Nikoli"
|
|
STR_IN_READER: "V bralniku"
|
|
STR_ALWAYS: "Vedno"
|
|
STR_IGNORE: "Prezri"
|
|
STR_SLEEP: "Spanje"
|
|
STR_PAGE_TURN: "Obračanje strani"
|
|
STR_PORTRAIT: "Pokončno"
|
|
STR_LANDSCAPE_CW: "Ležeče (v smeri urinega kazalca)"
|
|
STR_INVERTED: "Obrnjeno"
|
|
STR_LANDSCAPE_CCW: "Ležeče (proti smeri urinega kazalca)"
|
|
STR_PREV_NEXT: "Nazaj/Naprej"
|
|
STR_NEXT_PREV: "Naprej/Nazaj"
|
|
STR_NOTO_SERIF: "Noto Serif"
|
|
STR_NOTO_SANS: "Noto Sans"
|
|
STR_OPEN_DYSLEXIC: "Open Dyslexic"
|
|
STR_SMALL: "Majhno"
|
|
STR_MEDIUM: "Srednje"
|
|
STR_LARGE: "Veliko"
|
|
STR_X_LARGE: "Zelo veliko"
|
|
STR_TIGHT: "Tesno"
|
|
STR_NORMAL: "Normalno"
|
|
STR_WIDE: "Široko"
|
|
STR_JUSTIFY: "Obojestransko"
|
|
STR_ALIGN_LEFT: "Levo"
|
|
STR_CENTER: "Sredinsko"
|
|
STR_ALIGN_RIGHT: "Desno"
|
|
STR_MIN_1: "1 min"
|
|
STR_MIN_5: "5 min"
|
|
STR_MIN_10: "10 min"
|
|
STR_MIN_15: "15 min"
|
|
STR_MIN_30: "30 min"
|
|
STR_PAGES_1: "1 stran"
|
|
STR_PAGES_5: "5 strani"
|
|
STR_PAGES_10: "10 strani"
|
|
STR_PAGES_15: "15 strani"
|
|
STR_PAGES_30: "30 strani"
|
|
STR_UPDATE: "Posodobi"
|
|
STR_CHECKING_UPDATE: "Preverjanje posodobitev..."
|
|
STR_NEW_UPDATE: "Na voljo je nova posodobitev!"
|
|
STR_CURRENT_VERSION: "Trenutna različica: "
|
|
STR_NEW_VERSION: "Nova različica: "
|
|
STR_UPDATING: "Posodabljanje..."
|
|
STR_NO_UPDATE: "Ni novih posodobitev"
|
|
STR_UPDATE_FAILED: "Posodobitev ni uspela"
|
|
STR_UPDATE_COMPLETE: "Posodobitev končana"
|
|
STR_POWER_ON_HINT: "Pridrži gumb za vklop, da napravo znova vklopiš"
|
|
STR_NO_ENTRIES: "Ni najdenih vnosov"
|
|
STR_DOWNLOADING: "Prenašanje..."
|
|
STR_DOWNLOAD_FAILED: "Prenos ni uspel"
|
|
STR_ERROR_MSG: "Napaka:"
|
|
STR_UNNAMED: "Neimenovano"
|
|
STR_NO_SERVER_URL: "URL strežnika ni nastavljen"
|
|
STR_FETCH_FEED_FAILED: "Nalaganje vira ni uspelo"
|
|
STR_PARSE_FEED_FAILED: "Razčlenjevanje vira ni uspelo"
|
|
STR_NETWORK_PREFIX: "Omrežje: "
|
|
STR_IP_ADDRESS_PREFIX: "IP naslov: "
|
|
STR_ERROR_GENERAL_FAILURE: "Napaka: Splošna napaka"
|
|
STR_ERROR_NETWORK_NOT_FOUND: "Napaka: Omrežje ni najdeno"
|
|
STR_ERROR_CONNECTION_TIMEOUT: "Napaka: Časovna omejitev povezave"
|
|
STR_SD_CARD: "SD kartica"
|
|
STR_BACK: "« Nazaj"
|
|
STR_EXIT: "« Izhod"
|
|
STR_HOME: "« Domov"
|
|
STR_SELECT: "Izberi"
|
|
STR_SELECTED: "Izbrano"
|
|
STR_TOGGLE: "Preklopi"
|
|
STR_CONFIRM: "Potrdi"
|
|
STR_CANCEL: "Prekliči"
|
|
STR_CONNECT: "Poveži"
|
|
STR_OPEN: "Odpri"
|
|
STR_DOWNLOAD: "Prenesi"
|
|
STR_RETRY: "Poskusi znova"
|
|
STR_YES: "Da"
|
|
STR_NO: "Ne"
|
|
STR_SHOW: "Prikaži"
|
|
STR_HIDE: "Skrij"
|
|
STR_STATE_ON: "VKLOP"
|
|
STR_STATE_OFF: "IZKLOP"
|
|
STR_NOT_SET: "Ni nastavljeno"
|
|
STR_DIR_LEFT: "Levo"
|
|
STR_DIR_RIGHT: "Desno"
|
|
STR_DIR_UP: "Gor"
|
|
STR_DIR_DOWN: "Dol"
|
|
STR_OK_BUTTON: "V redu"
|
|
STR_SLEEP_COVER_FILTER: "Filter naslovnice v spanju"
|
|
STR_FILTER_CONTRAST: "Kontrast"
|
|
STR_CUSTOMISE_STATUS_BAR: "Prilagodi vrstico stanja"
|
|
STR_CHAPTER_PAGE_COUNT: "Število strani v poglavju"
|
|
STR_BOOK_PROGRESS_PERCENTAGE: "Odstotek napredka v knjigi"
|
|
STR_PROGRESS_BAR: "Vrstica napredka"
|
|
STR_PROGRESS_BAR_THICKNESS: "Debelina vrstice napredka"
|
|
STR_PROGRESS_BAR_THIN: "Tanko"
|
|
STR_PROGRESS_BAR_MEDIUM: "Srednje"
|
|
STR_PROGRESS_BAR_THICK: "Debelo"
|
|
STR_BOOK: "Knjiga"
|
|
STR_CHAPTER: "Poglavje"
|
|
STR_EXAMPLE_CHAPTER: "Poglavje 21"
|
|
STR_EXAMPLE_BOOK: "Naslov knjige"
|
|
STR_PREVIEW: "Predogled"
|
|
STR_TITLE: "Naslov"
|
|
STR_BATTERY: "Baterija"
|
|
STR_UI_THEME: "Tema uporabniškega vmesnika"
|
|
STR_THEME_CLASSIC: "Klasična"
|
|
STR_THEME_LYRA: "Lyra"
|
|
STR_THEME_LYRA_EXTENDED: "Lyra razširjena"
|
|
STR_SUNLIGHT_FADING_FIX: "Popravek bledenja na soncu"
|
|
STR_REMAP_FRONT_BUTTONS: "Prenastavi sprednje gumbe"
|
|
STR_OPDS_BROWSER: "OPDS brskalnik"
|
|
STR_COVER_CUSTOM: "Naslovnica + po meri"
|
|
STR_MENU_RECENT_BOOKS: "Zadnje knjige"
|
|
STR_NO_RECENT_BOOKS: "Ni zadnjih knjig"
|
|
STR_CALIBRE_DESC: "Uporabi brezžični prenos Calibre"
|
|
STR_FORGET_AND_REMOVE: "Pozabi omrežje in odstrani shranjeno geslo?"
|
|
STR_FORGET_BUTTON: "Pozabi"
|
|
STR_CALIBRE_STARTING: "Zaganjanje Calibre..."
|
|
STR_CALIBRE_SETUP: "Nastavitev"
|
|
STR_CALIBRE_STATUS: "Stanje"
|
|
STR_CLEAR_BUTTON: "Počisti"
|
|
STR_DEFAULT_VALUE: "Privzeto"
|
|
STR_REMAP_PROMPT: "Pritisni sprednji gumb za vsako vlogo"
|
|
STR_UNASSIGNED: "Nedodeljeno"
|
|
STR_ALREADY_ASSIGNED: "Že dodeljeno"
|
|
STR_REMAP_RESET_HINT: "Stranski gumb gor: Ponastavi na privzeto"
|
|
STR_REMAP_CANCEL_HINT: "Stranski gumb dol: Prekliči nastavljanje"
|
|
STR_HW_BACK_LABEL: "Nazaj (1. gumb)"
|
|
STR_HW_CONFIRM_LABEL: "Potrdi (2. gumb)"
|
|
STR_HW_LEFT_LABEL: "Levo (3. gumb)"
|
|
STR_HW_RIGHT_LABEL: "Desno (4. gumb)"
|
|
STR_GO_TO_PERCENT: "Pojdi na %"
|
|
STR_GO_HOME_BUTTON: "Pojdi domov"
|
|
STR_SYNC_PROGRESS: "Sinhroniziraj napredek"
|
|
STR_DELETE_CACHE: "Izbriši predpomnilnik knjige"
|
|
STR_DELETE: "Izbriši"
|
|
STR_DISPLAY_QR: "Prikaži stran kot QR"
|
|
STR_CHAPTER_PREFIX: "Poglavje: "
|
|
STR_PAGES_SEPARATOR: " strani | "
|
|
STR_BOOK_PREFIX: "Knjiga: "
|
|
STR_CALIBRE_URL_HINT: "Za Calibre dodaj /opds svojemu URL-ju"
|
|
STR_PERCENT_STEP_HINT: "Levo/desno: 1% Gor/dol: 10%"
|
|
STR_SYNCING_TIME: "Sinhronizacija časa..."
|
|
STR_CALC_HASH: "Izračunavanje podpisa dokumenta..."
|
|
STR_HASH_FAILED: "Izračun podpisa dokumenta ni uspel"
|
|
STR_FETCH_PROGRESS: "Pridobivanje napredka iz oblaka..."
|
|
STR_UPLOAD_PROGRESS: "Nalaganje napredka..."
|
|
STR_NO_CREDENTIALS_MSG: "Podatki za prijavo niso nastavljeni"
|
|
STR_KOREADER_SETUP_HINT: "Nastavi KOReader račun v nastavitvah"
|
|
STR_PROGRESS_FOUND: "Najden napredek!"
|
|
STR_REMOTE_LABEL: "Oddaljeno:"
|
|
STR_LOCAL_LABEL: "Lokalno:"
|
|
STR_PAGE_OVERALL_FORMAT: "Stran %d, %.2f%% skupno"
|
|
STR_PAGE_TOTAL_OVERALL_FORMAT: "Stran %d/%d, %.2f%% skupno"
|
|
STR_DEVICE_FROM_FORMAT: " Iz: %s"
|
|
STR_APPLY_REMOTE: "Uporabi oddaljen napredek"
|
|
STR_UPLOAD_LOCAL: "Naloži lokalni napredek"
|
|
STR_NO_REMOTE_MSG: "Oddaljen napredek ni bil najden"
|
|
STR_UPLOAD_PROMPT: "Naložim trenutno pozicijo?"
|
|
STR_UPLOAD_SUCCESS: "Napredek naložen!"
|
|
STR_SYNC_FAILED_MSG: "Sinhronizacija ni uspela"
|
|
STR_SAVE_PROGRESS_FAILED: "Napredka ni bilo mogoče shraniti"
|
|
STR_SECTION_PREFIX: "Razdelek "
|
|
STR_UPLOAD: "Naloži"
|
|
STR_BOOK_S_STYLE: "Slog knjige"
|
|
STR_EMBEDDED_STYLE: "Vgrajen slog"
|
|
STR_OPDS_SERVER_URL: "URL OPDS strežnika"
|
|
STR_FOOTNOTES: "Opombe"
|
|
STR_NO_FOOTNOTES: "Na tej strani ni opomb"
|
|
STR_LINK: "[povezava]"
|
|
STR_SCREENSHOT_BUTTON: "Naredi posnetek zaslona"
|
|
STR_AUTO_TURN_ENABLED: "Samodejno obračanje: "
|
|
STR_AUTO_TURN_PAGES_PER_MIN: "Samodejno obračanje (strani na minuto)"
|
|
STR_TILT_PAGE_TURN: "Obračanje s priklonom"
|