From d2399a7ce0af49098a065c48409d1512f37c7c21 Mon Sep 17 00:00:00 2001 From: Nick White Date: Tue, 6 Feb 2024 08:17:24 +0000 Subject: Fix selecting a custom training file in flatpak This is done by copying any training to the temporary tesseract directory, and always using that as the TESSDIR. This works as it's writeable (unlike the /app/share directory that flatpak would otherwise work) --- cmd/rescribe/gui.go | 8 ++++++-- cmd/rescribe/main.go | 32 +++++++++++++++++++++++++++----- cmd/rescribe/xyz.rescribe.rescribe.yml | 16 ++++++++++------ 3 files changed, 43 insertions(+), 13 deletions(-) (limited to 'cmd') diff --git a/cmd/rescribe/gui.go b/cmd/rescribe/gui.go index 8790f03..73f1db2 100644 --- a/cmd/rescribe/gui.go +++ b/cmd/rescribe/gui.go @@ -134,14 +134,18 @@ func trainingSelectOnChange(sel *widget.Select, parent fyne.Window) func(string) newpath := filepath.Join(os.Getenv("TESSDATA_PREFIX"), name) f, err := os.Create(newpath) if err != nil { - // TODO: surface error somewhere, prob with a dialog box + msg := fmt.Sprintf("Error creating temporary file to store custom training: %v\n", err) + dialog.ShowError(errors.New(msg), parent) + fmt.Fprintf(os.Stderr, msg) sel.SetSelectedIndex(0) return } defer f.Close() _, err = io.Copy(f, uri) if err != nil { - // TODO: surface error somewhere, prob with a dialog box + msg := fmt.Sprintf("Error copying custom training to temporary file: %v\n", err) + dialog.ShowError(errors.New(msg), parent) + fmt.Fprintf(os.Stderr, msg) sel.SetSelectedIndex(0) return } diff --git a/cmd/rescribe/main.go b/cmd/rescribe/main.go index b33a66c..f532678 100644 --- a/cmd/rescribe/main.go +++ b/cmd/rescribe/main.go @@ -241,11 +241,33 @@ These training files are included in rescribe, and are always available: } } - // if trainingPath doesn't exist, set it to the embedded training instead - _, err = os.Stat(trainingPath) - if err != nil && !os.IsExist(err) { - trainingPath = filepath.Base(trainingPath) - trainingPath = filepath.Join(tessdatadir, trainingPath) + // copy training path to the tessdir directory, so that we can keep that a + // writeable space, which is needed opening other trainings in sandboxes + // like flatpak + in, err := os.Open(trainingPath) + trainingPath = filepath.Join(tessdatadir, filepath.Base(trainingPath)) + if err != nil { + in, err = os.Open(trainingPath) + if err != nil { + log.Fatalf("Error opening training file %s: %v", trainingPath, err) + } + } + defer in.Close() + newPath := trainingPath + ".new" + out, err := os.Create(newPath) + if err != nil { + log.Fatalf("Error creating training file %s: %v", newPath, err) + } + defer out.Close() + _, err = io.Copy(out, in) + if err != nil { + log.Fatalf("Error copying training file to %s: %v", newPath, err) + } + in.Close() + out.Close() + err = os.Rename(newPath, trainingPath) + if err != nil { + log.Fatalf("Error moving new training file to %s: %v", trainingPath, err) } abstraining, err := filepath.Abs(trainingPath) diff --git a/cmd/rescribe/xyz.rescribe.rescribe.yml b/cmd/rescribe/xyz.rescribe.rescribe.yml index ae87d59..d994b88 100644 --- a/cmd/rescribe/xyz.rescribe.rescribe.yml +++ b/cmd/rescribe/xyz.rescribe.rescribe.yml @@ -1,6 +1,6 @@ app-id: xyz.rescribe.rescribe runtime: org.freedesktop.Platform -runtime-version: '22.08' +runtime-version: '23.08' sdk: org.freedesktop.Sdk sdk-extensions: org.freedesktop.Sdk.Extension.golang build-options: @@ -30,12 +30,16 @@ modules: - cp -r tessdata/* $FLATPAK_DEST/share/tessdata/ sources: - type: git - url: https://github.com/rescribe/bookpipeline - tag: v1.1.0 - commit: 3dd003691436ed954d3b7de54affbb10b509d5a6 + url: ../.. + commit: HEAD + #url: https://github.com/rescribe/bookpipeline + #tag: v1.1.0 + #commit: 3dd003691436ed954d3b7de54affbb10b509d5a6 - type: archive - url: https://rescribe.xyz/rescribe/modules-20230213-3dd003.tar.xz - sha256: 36553c4b97ceefc2c4711d18f26c98d89a9a610cb99bd2a38b7a0bbf3236eb4a + url: https://rescribe.xyz/tmp/modules.tar.xz # TODO: move to /rescribe once stable + sha256: 98b769cf61cc4178303e7d9e0aa0e036f819a46041aa442982713cb847e4657a + #url: https://rescribe.xyz/rescribe/modules-20230213-3dd003.tar.xz + #sha256: 36553c4b97ceefc2c4711d18f26c98d89a9a610cb99bd2a38b7a0bbf3236eb4a strip-components: 0 - type: archive url: https://rescribe.xyz/rescribe/embeds/tessdata.20220322.zip -- cgit v1.2.1-24-ge1ad