Skip to content

Commit

Permalink
Refactor to use loader per library (#384)
Browse files Browse the repository at this point in the history
  • Loading branch information
andiwand authored Feb 9, 2025
1 parent a4c45c8 commit fc1b249
Show file tree
Hide file tree
Showing 9 changed files with 74 additions and 223 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,9 @@
public abstract class FileLoader {

public enum LoaderType {
ODF,
DOC,
OOXML,
PDF,
CORE,
WVWARE,
PDF2HTMLEX,
ONLINE,
RAW,
METADATA
Expand Down
73 changes: 30 additions & 43 deletions app/src/main/java/at/tomtasche/reader/background/LoaderService.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,9 @@ public class LoaderService extends Service implements FileLoader.FileLoaderListe
private AnalyticsManager analyticsManager;

private MetadataLoader metadataLoader;
private OdfLoader odfLoader;
private PdfLoader pdfLoader;
private OoxmlLoader ooxmlLoader;
private DocLoader docLoader;
private OdrCoreLoader odrCoreLoader;
private Pdf2htmlExLoader pdf2htmlExLoader;
private WvwareDocLoader wvwareDocLoader;
private RawLoader rawLoader;
private OnlineLoader onlineLoader;

Expand All @@ -61,22 +60,19 @@ public synchronized void onCreate() {
metadataLoader = new MetadataLoader(context);
metadataLoader.initialize(this, mainHandler, backgroundHandler, analyticsManager, crashManager);

odfLoader = new OdfLoader(context, configManager);
odfLoader.initialize(this, mainHandler, backgroundHandler, analyticsManager, crashManager);
odrCoreLoader = new OdrCoreLoader(context, configManager, true);
odrCoreLoader.initialize(this, mainHandler, backgroundHandler, analyticsManager, crashManager);

pdfLoader = new PdfLoader(context);
pdfLoader.initialize(this, mainHandler, backgroundHandler, analyticsManager, crashManager);
pdf2htmlExLoader = new Pdf2htmlExLoader(context);
pdf2htmlExLoader.initialize(this, mainHandler, backgroundHandler, analyticsManager, crashManager);

ooxmlLoader = new OoxmlLoader(context);
ooxmlLoader.initialize(this, mainHandler, backgroundHandler, analyticsManager, crashManager);

docLoader = new DocLoader(context);
docLoader.initialize(this, mainHandler, backgroundHandler, analyticsManager, crashManager);
wvwareDocLoader = new WvwareDocLoader(context);
wvwareDocLoader.initialize(this, mainHandler, backgroundHandler, analyticsManager, crashManager);

rawLoader = new RawLoader(context);
rawLoader.initialize(this, mainHandler, backgroundHandler, analyticsManager, crashManager);

onlineLoader = new OnlineLoader(context, odfLoader);
onlineLoader = new OnlineLoader(context, odrCoreLoader);
onlineLoader.initialize(this, mainHandler, backgroundHandler, analyticsManager, crashManager);
}

Expand Down Expand Up @@ -121,17 +117,14 @@ private void logMissingListener() {
public synchronized void loadWithType(FileLoader.LoaderType loaderType, FileLoader.Options options) {
FileLoader loader;
switch (loaderType) {
case ODF:
loader = odfLoader;
break;
case DOC:
loader = docLoader;
case CORE:
loader = odrCoreLoader;
break;
case OOXML:
loader = ooxmlLoader;
case WVWARE:
loader = wvwareDocLoader;
break;
case PDF:
loader = pdfLoader;
case PDF2HTMLEX:
loader = pdf2htmlExLoader;
break;
case ONLINE:
loader = onlineLoader;
Expand All @@ -153,12 +146,12 @@ public synchronized void loadWithType(FileLoader.LoaderType loaderType, FileLoad
public void onSuccess(FileLoader.Result result) {
FileLoader.Options options = result.options;
if (result.loaderType == FileLoader.LoaderType.METADATA) {
if (!odfLoader.isSupported(options)) {
if (!odrCoreLoader.isSupported(options)) {
crashManager.log("we do not expect this file to be an ODF: " + options.originalUri.toString());
analyticsManager.report("load_odf_error_expected", FirebaseAnalytics.Param.CONTENT_TYPE, options.fileType);
}

loadWithType(FileLoader.LoaderType.ODF, options);
loadWithType(FileLoader.LoaderType.CORE, options);
} else {
analyticsManager.report("load_success", FirebaseAnalytics.Param.CONTENT_TYPE, options.fileType, FirebaseAnalytics.Param.CONTENT, result.loaderType.toString());

Expand Down Expand Up @@ -187,15 +180,13 @@ public void onError(FileLoader.Result result, Throwable error) {
return;
}

if (result.loaderType == FileLoader.LoaderType.ODF) {
if (result.loaderType == FileLoader.LoaderType.CORE) {
analyticsManager.report("load_odf_error", FirebaseAnalytics.Param.CONTENT_TYPE, options.fileType);

if (pdfLoader.isSupported(options)) {
loadWithType(FileLoader.LoaderType.PDF, options);
} else if (ooxmlLoader.isSupported(options)) {
loadWithType(FileLoader.LoaderType.OOXML, options);
} else if (docLoader.isSupported(options)) {
loadWithType(FileLoader.LoaderType.DOC, options);
if (pdf2htmlExLoader.isSupported(options)) {
loadWithType(FileLoader.LoaderType.PDF2HTMLEX, options);
} else if (wvwareDocLoader.isSupported(options)) {
loadWithType(FileLoader.LoaderType.WVWARE, options);
} else if (rawLoader.isSupported(options)) {
loadWithType(FileLoader.LoaderType.RAW, options);
} else {
Expand Down Expand Up @@ -240,7 +231,7 @@ private void saveSync(FileLoader.Result lastResult, Uri outFile, String htmlDiff
try {
File fileToSave;
if (htmlDiff != null) {
fileToSave = odfLoader.retranslate(lastResult.options, htmlDiff);
fileToSave = odrCoreLoader.retranslate(lastResult.options, htmlDiff);
if (fileToSave == null) {
throw new RuntimeException("retranslate failed");
}
Expand Down Expand Up @@ -282,20 +273,16 @@ public void onDestroy() {
metadataLoader.close();
}

if (odfLoader != null) {
odfLoader.close();
}

if (pdfLoader != null) {
pdfLoader.close();
if (odrCoreLoader != null) {
odrCoreLoader.close();
}

if (ooxmlLoader != null) {
ooxmlLoader.close();
if (pdf2htmlExLoader != null) {
pdf2htmlExLoader.close();
}

if (docLoader != null) {
docLoader.close();
if (wvwareDocLoader != null) {
wvwareDocLoader.close();
}

if (rawLoader != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,33 @@

import at.tomtasche.reader.nonfree.ConfigManager;

public class OdfLoader extends FileLoader {
public class OdrCoreLoader extends FileLoader {

private final ConfigManager configManager;

private CoreWrapper lastCore;
private CoreWrapper.CoreOptions lastCoreOptions;

public OdfLoader(Context context, ConfigManager configManager) {
super(context, LoaderType.ODF);
private final boolean doOoxml;

public OdrCoreLoader(Context context, ConfigManager configManager, boolean doOOXML) {
super(context, LoaderType.CORE);

this.configManager = configManager;
this.doOoxml = doOOXML;
}

@Override
public boolean isSupported(Options options) {
return options.fileType.startsWith("application/vnd.oasis.opendocument") || options.fileType.startsWith("application/x-vnd.oasis.opendocument") || options.fileType.startsWith("application/vnd.oasis.opendocument.text-master");
return options.fileType.startsWith("application/vnd.oasis.opendocument") ||
options.fileType.startsWith("application/x-vnd.oasis.opendocument") ||
options.fileType.startsWith("application/vnd.oasis.opendocument.text-master") ||
(this.doOoxml && (
options.fileType.startsWith("application/vnd.openxmlformats-officedocument.wordprocessingml.document")
// TODO: enable xlsx and pptx too
//options.fileType.startsWith("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") ||
//options.fileType.startsWith("application/vnd.openxmlformats-officedocument.spreadsheetml.presentation");
));
}

@Override
Expand Down Expand Up @@ -69,7 +80,9 @@ private void translate(Options options, Result result) throws Exception {
coreOptions.outputPath = cacheDirectory.getPath();
coreOptions.password = options.password;
coreOptions.editable = options.translatable;
coreOptions.ooxml = false;
coreOptions.ooxml = doOoxml;
coreOptions.txt = false;
coreOptions.pdf = false;

Boolean usePaging = configManager.getBooleanConfig("use_paging");
if (usePaging == null || usePaging) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,13 @@
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.util.UUID;
import java.util.concurrent.ExecutionException;

import at.tomtasche.reader.nonfree.AnalyticsManager;
import at.tomtasche.reader.nonfree.ConfigManager;
import at.tomtasche.reader.nonfree.CrashManager;

public class OnlineLoader extends FileLoader {
Expand Down Expand Up @@ -77,14 +74,14 @@ public class OnlineLoader extends FileLoader {
public static final String GOOGLE_VIEWER_URL = "https://docs.google.com/viewer?embedded=true&url=";
public static final String MICROSOFT_VIEWER_URL = "https://view.officeapps.live.com/op/view.aspx?src=";

private final OdfLoader odfLoader;
private final OdrCoreLoader odrCoreLoader;

private StorageReference storage;
private FirebaseAuth auth;

public OnlineLoader(Context context, OdfLoader odfLoader) {
public OnlineLoader(Context context, OdrCoreLoader odrCoreLoader) {
super(context, LoaderType.ONLINE);
this.odfLoader = odfLoader;
this.odrCoreLoader = odrCoreLoader;
}

@Override
Expand Down Expand Up @@ -129,7 +126,7 @@ public void loadSync(Options options) {
try {
Uri viewerUri;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O &&
("text/rtf".equals(options.fileType) || "application/vnd.wordperfect".equals(options.fileType) || odfLoader.isSupported(options) || "application/vnd.ms-excel".equals(options.fileType) || "application/msword".equals(options.fileType) || "application/vnd.ms-powerpoint".equals(options.fileType) || options.fileType.startsWith("application/vnd.openxmlformats-officedocument.") || options.fileType.equals("application/pdf"))) {
("text/rtf".equals(options.fileType) || "application/vnd.wordperfect".equals(options.fileType) || odrCoreLoader.isSupported(options) || "application/vnd.ms-excel".equals(options.fileType) || "application/msword".equals(options.fileType) || "application/vnd.ms-powerpoint".equals(options.fileType) || options.fileType.startsWith("application/vnd.openxmlformats-officedocument.") || options.fileType.equals("application/pdf"))) {
viewerUri = doOnlineConvert(options);
} else {
viewerUri = doFirebaseConvert(options);
Expand Down Expand Up @@ -209,7 +206,7 @@ private Uri doFirebaseConvert(Options options) throws ExecutionException, Interr

if (uploadTask.isSuccessful()) {
Uri viewerUri;
if (odfLoader.isSupported(options)) {
if (odrCoreLoader.isSupported(options)) {
// ODF does not seem to be supported by google docs viewer
String downloadUrl = "https://us-central1-admob-app-id-9025061963.cloudfunctions.net/download?filePath=" + filePath;

Expand Down
141 changes: 0 additions & 141 deletions app/src/main/java/at/tomtasche/reader/background/OoxmlLoader.java

This file was deleted.

Loading

0 comments on commit fc1b249

Please sign in to comment.