Skip to content

Commit cb5007a

Browse files
committed
fix and simplify
1 parent 1aef5f0 commit cb5007a

File tree

6 files changed

+125
-181
lines changed

6 files changed

+125
-181
lines changed

app/conanfile.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[requires]
2-
odrcore/5.0.0-pre1@
2+
odrcore/5.0.0-pre3@
33

44
[generators]
55
CMakeToolchain

app/src/main/cpp/CoreWrapper.cpp

Lines changed: 46 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,17 @@ std::string convertString(JNIEnv *env, jstring string) {
2424
return cppstring;
2525
}
2626

27-
std::string getStringField(JNIEnv *env, jclass clazz, const char *name) {
27+
std::string getStringField(JNIEnv *env, jclass clazz, jobject object, const char *name) {
2828
jfieldID field = env->GetFieldID(clazz, name, "Ljava/lang/String;");
29-
auto string = (jstring) env->GetObjectField(clazz, field);
29+
auto string = (jstring) env->GetObjectField(object, field);
3030
return convertString(env, string);
3131
}
3232

33+
std::string getStringField(JNIEnv *env, jobject object, const char *name) {
34+
jclass clazz = env->GetObjectClass(object);
35+
return getStringField(env, clazz, object, name);
36+
}
37+
3338
}
3439

3540
std::optional<odr::Html> s_html;
@@ -41,10 +46,10 @@ Java_at_tomtasche_reader_background_CoreWrapper_setGlobalParams(JNIEnv *env, jcl
4146

4247
jclass paramsClass = env->GetObjectClass(params);
4348

44-
std::string odrCoreDataPath = getStringField(env, paramsClass, "coreDataPath");
45-
std::string fontconfigDataPath = getStringField(env, paramsClass, "fontconfigDataPath");
46-
std::string popplerDataPath = getStringField(env, paramsClass, "popplerDataPath");
47-
std::string pdf2htmlexDataPath = getStringField(env, paramsClass, "pdf2htmlexDataPath");
49+
std::string odrCoreDataPath = getStringField(env, paramsClass, params, "coreDataPath");
50+
std::string fontconfigDataPath = getStringField(env, paramsClass, params, "fontconfigDataPath");
51+
std::string popplerDataPath = getStringField(env, paramsClass, params, "popplerDataPath");
52+
std::string pdf2htmlexDataPath = getStringField(env, paramsClass, params, "pdf2htmlexDataPath");
4853

4954
odr::GlobalParams::set_odr_core_data_path(odrCoreDataPath);
5055
odr::GlobalParams::set_fontconfig_data_path(fontconfigDataPath);
@@ -62,7 +67,7 @@ Java_at_tomtasche_reader_background_CoreWrapper_parseNative(JNIEnv *env, jclass
6267
jfieldID errorField = env->GetFieldID(resultClass, "errorCode", "I");
6368

6469
jclass optionsClass = env->GetObjectClass(options);
65-
std::string inputPathCpp = getStringField(env, optionsClass, "inputPath");
70+
std::string inputPathCpp = getStringField(env, optionsClass, options, "inputPath");
6671

6772
try {
6873
std::optional<std::string> passwordCpp;
@@ -75,7 +80,7 @@ Java_at_tomtasche_reader_background_CoreWrapper_parseNative(JNIEnv *env, jclass
7580
jfieldID editableField = env->GetFieldID(optionsClass, "editable", "Z");
7681
jboolean editable = env->GetBooleanField(options, editableField);
7782

78-
std::string outputPathCpp = getStringField(env, optionsClass, "outputPath");
83+
std::string outputPathCpp = getStringField(env, optionsClass, options, "outputPath");
7984

8085
jclass listClass = env->FindClass("java/util/List");
8186
jmethodID addMethod = env->GetMethodID(listClass, "add", "(Ljava/lang/Object;)Z");
@@ -112,15 +117,13 @@ Java_at_tomtasche_reader_background_CoreWrapper_parseNative(JNIEnv *env, jclass
112117
fileType = e.file_type;
113118
}
114119

115-
const auto extensionCpp = odr::type_to_string(fileType);
116-
const auto extensionC = extensionCpp.c_str();
117-
jstring extension = env->NewStringUTF(extensionC);
118-
120+
std::string extensionCpp = odr::type_to_string(fileType);
121+
jstring extension = env->NewStringUTF(extensionCpp.c_str());
119122
jfieldID extensionField = env->GetFieldID(resultClass, "extension",
120123
"Ljava/lang/String;");
121124
env->SetObjectField(result, extensionField, extension);
122125

123-
// __android_log_print(ANDROID_LOG_VERBOSE, "smn", "%s", extensionCpp.c_str());
126+
__android_log_print(ANDROID_LOG_VERBOSE, "smn", "Open %s", inputPathCpp.c_str());
124127

125128
const auto file = odr::open(inputPathCpp);
126129
const auto fileCategory = odr::category_by_type(file.file_type());
@@ -154,25 +157,20 @@ Java_at_tomtasche_reader_background_CoreWrapper_parseNative(JNIEnv *env, jclass
154157
}
155158
}
156159

160+
extensionCpp = odr::type_to_string(file.file_type());
161+
extension = env->NewStringUTF(extensionCpp.c_str());
162+
env->SetObjectField(result, extensionField, extension);
163+
157164
odr::HtmlConfig config;
158165
config.editable = editable;
159166

160167
if (paging) {
161168
config.text_document_margin = true;
162169
}
163170

164-
s_html = odr::html::translate(file, outputPathCpp, config);
171+
__android_log_print(ANDROID_LOG_VERBOSE, "smn", "Translate to HTML");
165172

166-
{
167-
const auto extensionCpp = odr::type_to_string(
168-
s_html->file_type());
169-
const auto extensionC = extensionCpp.c_str();
170-
jstring extension = env->NewStringUTF(extensionC);
171-
172-
jfieldID extensionField = env->GetFieldID(resultClass, "extension",
173-
"Ljava/lang/String;");
174-
env->SetObjectField(result, extensionField, extension);
175-
}
173+
s_html = odr::html::translate(file, outputPathCpp, config);
176174

177175
for (auto &&page: s_html->pages()) {
178176
jstring pageName = env->NewStringUTF(page.name.c_str());
@@ -181,13 +179,20 @@ Java_at_tomtasche_reader_background_CoreWrapper_parseNative(JNIEnv *env, jclass
181179
jstring pagePath = env->NewStringUTF(page.path.c_str());
182180
env->CallBooleanMethod(pagePaths, addMethod, pagePath);
183181
}
184-
} catch (odr::UnknownFileType &) {
182+
} catch (const odr::UnknownFileType &e) {
183+
__android_log_print(ANDROID_LOG_ERROR, "smn", "Unknown file type: %s", e.what());
185184
env->SetIntField(result, errorField, -5);
186185
return result;
187-
} catch (odr::UnsupportedFileType &) {
186+
} catch (const odr::UnsupportedFileType &e) {
187+
__android_log_print(ANDROID_LOG_ERROR, "smn", "Unsupported file type: %s", e.what());
188188
env->SetIntField(result, errorField, -5);
189189
return result;
190+
} catch (const std::exception &e) {
191+
__android_log_print(ANDROID_LOG_ERROR, "smn", "Unhandled C++ exception: %s", e.what());
192+
env->SetIntField(result, errorField, -4);
193+
return result;
190194
} catch (...) {
195+
__android_log_print(ANDROID_LOG_ERROR, "smn", "Unhandled C++ exception without further information");
191196
env->SetIntField(result, errorField, -4);
192197
return result;
193198
}
@@ -204,16 +209,14 @@ JNIEXPORT jobject JNICALL
204209
Java_at_tomtasche_reader_background_CoreWrapper_backtranslateNative(JNIEnv *env, jclass clazz,
205210
jobject options,
206211
jstring htmlDiff) {
207-
jclass optionsClass = env->GetObjectClass(options);
208-
209212
jclass resultClass = env->FindClass("at/tomtasche/reader/background/CoreWrapper$CoreResult");
210213
jmethodID resultConstructor = env->GetMethodID(resultClass, "<init>", "()V");
211214
jobject result = env->NewObject(resultClass, resultConstructor);
212215

213216
jfieldID errorField = env->GetFieldID(resultClass, "errorCode", "I");
214217

215218
try {
216-
std::string outputPathPrefixCpp = getStringField(env, optionsClass, "outputPath");
219+
std::string outputPathPrefixCpp = getStringField(env, options, "outputPath");
217220

218221
jboolean isCopy;
219222
const auto htmlDiffC = env->GetStringUTFChars(htmlDiff, &isCopy);
@@ -262,6 +265,8 @@ std::optional<odr::HttpServer> s_server;
262265

263266
JNIEXPORT void JNICALL
264267
Java_at_tomtasche_reader_background_CoreWrapper_createServer(JNIEnv *env, jclass clazz, jstring outputPath) {
268+
__android_log_print(ANDROID_LOG_INFO, "smn", "create server");
269+
265270
std::string output_path = convertString(env, outputPath);
266271

267272
std::filesystem::create_directories(output_path);
@@ -273,34 +278,37 @@ Java_at_tomtasche_reader_background_CoreWrapper_createServer(JNIEnv *env, jclass
273278

274279
JNIEXPORT void JNICALL
275280
Java_at_tomtasche_reader_background_CoreWrapper_hostFile(JNIEnv *env, jclass clazz, jstring prefix, jobject options) {
276-
jboolean isCopy;
277-
278-
jclass optionsClass = env->GetObjectClass(options);
281+
__android_log_print(ANDROID_LOG_INFO, "smn", "host file");
279282

280-
std::string inputPathCpp = getStringField(env, optionsClass, "inputPath");
283+
std::string inputPathCpp = getStringField(env, options, "inputPath");
281284
std::string prefixCpp = convertString(env, prefix);
282285

283286
odr::DecodePreference decodePreference;
284-
decodePreference.engine_priority = {
285-
odr::DecoderEngine::poppler, odr::DecoderEngine::wvware, odr::DecoderEngine::odr};
287+
decodePreference.engine_priority = {odr::DecoderEngine::poppler, odr::DecoderEngine::wvware, odr::DecoderEngine::odr};
286288
odr::DecodedFile file = odr::open(inputPathCpp, decodePreference);
287289

288-
__android_log_print(ANDROID_LOG_INFO, "smn", "file type %i", file.file_type());
289-
290290
try {
291291
s_server->serve_file(file, prefixCpp, odr::HtmlConfig());
292+
} catch (const std::exception &e) {
293+
__android_log_print(ANDROID_LOG_ERROR, "smn", "Unhandled C++ exception: %s", e.what());
292294
} catch (...) {
293-
__android_log_print(ANDROID_LOG_ERROR, "smn", "error");
295+
__android_log_print(ANDROID_LOG_ERROR, "smn", "Unhandled C++ exception without further information");
294296
}
295297
}
296298

297299
JNIEXPORT void JNICALL
298300
Java_at_tomtasche_reader_background_CoreWrapper_listenServer(JNIEnv *env, jclass clazz, jint port) {
301+
__android_log_print(ANDROID_LOG_INFO, "smn", "listen ...");
302+
299303
s_server->listen("127.0.0.1", port);
304+
305+
__android_log_print(ANDROID_LOG_INFO, "smn", "done listening");
300306
}
301307

302308
JNIEXPORT void JNICALL
303309
Java_at_tomtasche_reader_background_CoreWrapper_stopServer(JNIEnv *env, jclass clazz) {
310+
__android_log_print(ANDROID_LOG_INFO, "smn", "stop server");
311+
304312
s_server->stop();
305313
s_server.reset();
306314
}

app/src/main/java/at/tomtasche/reader/background/CoreHttpLoader.java

Lines changed: 0 additions & 110 deletions
This file was deleted.

0 commit comments

Comments
 (0)