Skip to content

Commit 25973ab

Browse files
committed
Extract the ile compression logic into a separate class
1 parent 5744fc2 commit 25973ab

4 files changed

Lines changed: 79 additions & 60 deletions

File tree

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# Changelog
22

3+
**Version 2.0.7**
4+
5+
Date: 11.09.2019
6+
7+
- Made the file compression logic usable separately via the FileCompressor class.
8+
- Bug fixes - LogViewBuilder now also supports the log file compression parameter.
9+
310
**Version 2.0.6**
411

512
Date: 10.09.2019

scrolls-lib/src/main/java/mobi/lab/scrolls/LogPostImpl.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import java.io.File;
1313
import java.io.InputStream;
1414

15+
import mobi.lab.scrolls.tools.FileCompressor;
1516
import mobi.lab.scrolls.tools.LogHelper;
1617
import mobi.lab.scrolls.tools.Util;
1718

@@ -63,12 +64,12 @@ private void doPostSync(@NonNull Context context, @NonNull String callbackTag, @
6364
}
6465

6566
private File compressAttachmentIfNeeded(File originalAttachment) {
66-
if (!compressLogFile) {
67+
if (!compressLogFile || originalAttachment == null) {
6768
return originalAttachment;
6869
}
69-
final File compressedFile = new File(originalAttachment.getParentFile(), originalAttachment.getName().replaceFirst("[.][^.]+$", "") + ".zip");
70-
Util.compressFiles(new File[]{originalAttachment}, compressedFile);
71-
return compressedFile;
70+
final File targetFile = FileCompressor.createCompressedFileCandidateFromUncompressedFilePath(originalAttachment);
71+
final boolean success = FileCompressor.compressFiles(new File[]{originalAttachment}, targetFile);
72+
return success ? targetFile : originalAttachment;
7273
}
7374

7475
private Uri createUriIfNeeded(@NonNull Context context, @Nullable File attachment) {
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package mobi.lab.scrolls.tools;
2+
3+
import android.support.annotation.NonNull;
4+
import android.support.annotation.WorkerThread;
5+
import android.util.Log;
6+
7+
import java.io.BufferedInputStream;
8+
import java.io.BufferedOutputStream;
9+
import java.io.File;
10+
import java.io.FileInputStream;
11+
import java.io.FileOutputStream;
12+
import java.util.zip.ZipEntry;
13+
import java.util.zip.ZipOutputStream;
14+
15+
/**
16+
* Helper to compress log files.
17+
*/
18+
public class FileCompressor {
19+
20+
/**
21+
* Takes in a File and creates a new File with the same path and name and replaces the original extension with ".zip".
22+
* This method does not do the actual compression, it just creates a path for the destination file.
23+
* Use {@link #compressFiles(File[], File)} for the actual compression work.
24+
*
25+
* @param uncompressedFile original File
26+
* @return Compressed File candidate
27+
*/
28+
@NonNull
29+
public static File createCompressedFileCandidateFromUncompressedFilePath(@NonNull File uncompressedFile) {
30+
return new File(uncompressedFile.getParentFile(), uncompressedFile.getName().replaceFirst("[.][^.]+$", "") + ".zip");
31+
}
32+
33+
/**
34+
* Compress a N files into one compressed file.
35+
*
36+
* @param targetFiles Target files to compress
37+
* @param compressedFile Compressed file. Will be overwritten if exists.
38+
* @return true if the operation was success
39+
*/
40+
@WorkerThread
41+
public static boolean compressFiles(@NonNull final File[] targetFiles, @NonNull final File compressedFile) {
42+
try {
43+
final int bufferSize = 4096;
44+
BufferedInputStream origin;
45+
final FileOutputStream dest = new FileOutputStream(compressedFile);
46+
final ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest));
47+
final byte[] data = new byte[bufferSize];
48+
for (File file : targetFiles) {
49+
FileInputStream fi = new FileInputStream(file);
50+
origin = new BufferedInputStream(fi, bufferSize);
51+
52+
final ZipEntry entry = new ZipEntry(file.getName());
53+
out.putNextEntry(entry);
54+
int count;
55+
while ((count = origin.read(data, 0, bufferSize)) != -1) {
56+
out.write(data, 0, count);
57+
}
58+
LogHelper.closeStream(origin);
59+
}
60+
LogHelper.closeStream(out);
61+
return true;
62+
} catch (Exception e) {
63+
Log.w("FileCompressor", "compressFiles failed", e);
64+
return false;
65+
}
66+
}
67+
}

scrolls-lib/src/main/java/mobi/lab/scrolls/tools/Util.java

Lines changed: 0 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,11 @@
33
import android.content.Context;
44
import android.content.pm.ApplicationInfo;
55
import android.content.pm.PackageManager;
6-
import android.support.annotation.NonNull;
7-
import android.support.annotation.WorkerThread;
8-
import android.util.Log;
96

10-
import java.io.BufferedInputStream;
11-
import java.io.BufferedOutputStream;
12-
import java.io.File;
13-
import java.io.FileInputStream;
14-
import java.io.FileOutputStream;
15-
import java.io.IOException;
16-
import java.io.InputStream;
177
import java.text.DateFormat;
188
import java.text.SimpleDateFormat;
199
import java.util.Date;
2010
import java.util.Locale;
21-
import java.util.zip.ZipEntry;
22-
import java.util.zip.ZipOutputStream;
2311

2412
public class Util {
2513

@@ -37,53 +25,9 @@ public static String getAppName(Context context) {
3725
return info.loadLabel(context.getPackageManager()).toString();
3826
}
3927

40-
public static String inputStreamToString(InputStream in) {
41-
StringBuilder sb = new StringBuilder();
42-
try {
43-
byte[] buf = new byte[4096]; // not always 4k, but most of the times
44-
while (in.read(buf) != -1) {
45-
sb.append(new String(buf, "UTF-8"));
46-
}
47-
} catch (IOException ioe) {
48-
Log.w("LogPost", "logpost failed", ioe);
49-
} finally {
50-
try {
51-
in.close();
52-
} catch (Exception ignored) {
53-
}
54-
}
55-
return sb.toString();
56-
}
57-
5828
public static String getCurrentTimeString() {
5929
DateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd HH:mm:ssZ", Locale.US);
6030
return dateFormat.format(new Date());
6131
}
6232

63-
@WorkerThread
64-
public static void compressFiles(@NonNull final File[] targetFiles, @NonNull final File compressedFile) {
65-
try {
66-
final int bufferSize = 4096;
67-
BufferedInputStream origin;
68-
final FileOutputStream dest = new FileOutputStream(compressedFile);
69-
final ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest));
70-
final byte[] data = new byte[bufferSize];
71-
for (File file : targetFiles) {
72-
FileInputStream fi = new FileInputStream(file);
73-
origin = new BufferedInputStream(fi, bufferSize);
74-
75-
final ZipEntry entry = new ZipEntry(file.getName());
76-
out.putNextEntry(entry);
77-
int count;
78-
while ((count = origin.read(data, 0, bufferSize)) != -1) {
79-
out.write(data, 0, count);
80-
}
81-
LogHelper.closeStream(origin);
82-
}
83-
LogHelper.closeStream(out);
84-
} catch (Exception e) {
85-
Log.w("LogPost", "compressFiles failed", e);
86-
}
87-
}
88-
8933
}

0 commit comments

Comments
 (0)