From b89dfb6ece936486563734818ed62488a59e5897 Mon Sep 17 00:00:00 2001 From: Niki Roo Date: Thu, 23 Nov 2017 20:01:17 +0100 Subject: [PATCH] Update nikiroo-utils (Progress) + GuiReader perf --- ...es.jar => nikiroo-utils-2.2.1-sources.jar} | Bin 259324 -> 259994 bytes .../nikiroo/fanfix/library/BasicLibrary.java | 35 ++++++++++++ .../nikiroo/fanfix/library/LocalLibrary.java | 53 ++++++++++++++++++ src/be/nikiroo/fanfix/reader/GuiReader.java | 15 +---- 4 files changed, 89 insertions(+), 14 deletions(-) rename libs/{nikiroo-utils-2.2.0-sources.jar => nikiroo-utils-2.2.1-sources.jar} (84%) diff --git a/libs/nikiroo-utils-2.2.0-sources.jar b/libs/nikiroo-utils-2.2.1-sources.jar similarity index 84% rename from libs/nikiroo-utils-2.2.0-sources.jar rename to libs/nikiroo-utils-2.2.1-sources.jar index 3dde5dd5d89e47a3806b8498329932c59f0fe120..199beb397df2393d81a4d924bcff803426fab7e3 100644 GIT binary patch delta 14216 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 delta 13290 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 diff --git a/src/be/nikiroo/fanfix/library/BasicLibrary.java b/src/be/nikiroo/fanfix/library/BasicLibrary.java index 63ffdb65..cf17a2be 100644 --- a/src/be/nikiroo/fanfix/library/BasicLibrary.java +++ b/src/be/nikiroo/fanfix/library/BasicLibrary.java @@ -340,6 +340,41 @@ abstract public class BasicLibrary { return save(support.process(url, pg), null); } + /** + * Import the story from one library to another, and keep the same LUID. + * + * @param other + * the other library to import from + * @param luid + * the Library UID + * @param pg + * the optional progress reporter + * + * @throws IOException + * in case of I/O error + */ + public void imprt(BasicLibrary other, String luid, Progress pg) + throws IOException { + Progress pgGetStory = new Progress(); + Progress pgSave = new Progress(); + if (pg == null) { + pg = new Progress(); + } + + pg.setMinMax(0, 2); + pg.addProgress(pgGetStory, 1); + pg.addProgress(pgSave, 1); + + Story story = other.getStory(luid, pgGetStory); + if (story != null) { + story = this.save(story, luid, pgSave); + pg.done(); + } else { + pg.done(); + throw new IOException("Cannot find story in Library: " + luid); + } + } + /** * Export the {@link Story} to the given target in the given format. * diff --git a/src/be/nikiroo/fanfix/library/LocalLibrary.java b/src/be/nikiroo/fanfix/library/LocalLibrary.java index bc411573..ab5a82b5 100644 --- a/src/be/nikiroo/fanfix/library/LocalLibrary.java +++ b/src/be/nikiroo/fanfix/library/LocalLibrary.java @@ -181,6 +181,59 @@ public class LocalLibrary extends BasicLibrary { } } + @Override + public void imprt(BasicLibrary other, String luid, Progress pg) + throws IOException { + if (pg == null) { + pg = new Progress(); + } + + // Check if we can simply copy the files instead of the whole process + if (other instanceof LocalLibrary) { + LocalLibrary otherLibrary = (LocalLibrary) other; + MetaData meta = otherLibrary.getInfo(luid); + String expectedType = "" + (meta.isImageDocument() ? image : text); + if (meta.getType().equals(expectedType)) { + File from = otherLibrary.getExpectedDir(meta.getSource()); + File to = this.getExpectedDir(meta.getSource()); + List sources = otherLibrary.getRelatedFiles(luid); + if (!sources.isEmpty()) { + pg.setMinMax(0, sources.size()); + } + + for (File source : sources) { + File target = new File(source.getAbsolutePath().replace( + from.getAbsolutePath(), to.getAbsolutePath())); + if (!source.equals(target)) { + InputStream in = null; + try { + in = new FileInputStream(source); + IOUtils.write(in, target); + } catch (IOException e) { + if (in != null) { + try { + in.close(); + } catch (Exception ee) { + } + } + + pg.done(); + throw e; + } + } + + pg.add(1); + } + + clearCache(); + pg.done(); + return; + } + } + + super.imprt(other, luid, pg); + } + /** * Return the {@link OutputType} for this {@link Story}. * diff --git a/src/be/nikiroo/fanfix/reader/GuiReader.java b/src/be/nikiroo/fanfix/reader/GuiReader.java index 73df7fb8..8559cf11 100644 --- a/src/be/nikiroo/fanfix/reader/GuiReader.java +++ b/src/be/nikiroo/fanfix/reader/GuiReader.java @@ -93,21 +93,8 @@ class GuiReader extends BasicReader { * in case of I/O error */ public void imprt(String luid, Progress pg) throws IOException { - Progress pgGetStory = new Progress(); - Progress pgSave = new Progress(); - if (pg != null) { - pg.setMax(2); - pg.addProgress(pgGetStory, 1); - pg.addProgress(pgSave, 1); - } - try { - Story story = getLibrary().getStory(luid, pgGetStory); - if (story != null) { - story = localLibrary.save(story, luid, pgSave); - } else { - throw new IOException("Cannot find story in Library: " + luid); - } + localLibrary.imprt(getLibrary(), luid, pg); } catch (IOException e) { throw new IOException( "Cannot import story from library to LocalReader library: " -- 2.27.0