Skip to content

Commit 6c71c7e

Browse files
refactor
1 parent 9ac5df9 commit 6c71c7e

File tree

4 files changed

+35
-52
lines changed

4 files changed

+35
-52
lines changed

src/android/AckDatabase.java

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,35 +2,22 @@
22

33
import android.content.Context;
44

5-
import androidx.annotation.NonNull;
65
import androidx.room.Database;
76
import androidx.room.Room;
87
import androidx.room.RoomDatabase;
98
import androidx.room.TypeConverters;
10-
import androidx.room.migration.Migration;
11-
import androidx.sqlite.db.SupportSQLiteDatabase;
129
import androidx.work.Data;
1310

14-
@Database(entities = {UploadEvent.class}, version = 6)
11+
@Database(entities = {UploadEvent.class}, version = 5)
1512
@TypeConverters(value = {Data.class})
1613
public abstract class AckDatabase extends RoomDatabase {
1714
private static AckDatabase instance;
1815

19-
static final Migration MIGRATION_5_6 = new Migration(5, 6) {
20-
@Override
21-
public void migrate(@NonNull SupportSQLiteDatabase database) {
22-
database.execSQL("ALTER TABLE upload_events ADD COLUMN start_upload_time INTEGER NOT NULL DEFAULT 0");
23-
database.execSQL("ALTER TABLE upload_events ADD COLUMN finish_upload_time INTEGER NOT NULL DEFAULT 0");
24-
}
25-
};
26-
27-
28-
public static synchronized AckDatabase getInstance(final Context context) {
16+
public static AckDatabase getInstance(final Context context) {
2917
if (instance == null) {
3018
instance = Room
3119
.databaseBuilder(context, AckDatabase.class, "cordova-plugin-background-upload.db")
3220
.fallbackToDestructiveMigration()
33-
.addMigrations(MIGRATION_5_6)
3421
.build();
3522
}
3623
return instance;
@@ -43,4 +30,4 @@ public static void closeInstance() {
4330
}
4431

4532
public abstract UploadEventDao uploadEventDao();
46-
}
33+
}

src/android/FileTransferBackground.java

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,13 @@ private void sendProgress(final String id, int progressPercent) {
8282
}
8383
}
8484

85-
private void sendSuccess(final String id, final String response, int statusCode, long uploadDuration, long finishUploadTime) {
85+
private void sendSuccess(HashMap<String, Object> uploadData) {
86+
String id = (String) uploadData.get("outputId");
87+
String response = (String) uploadData.get("response");
88+
int statusCode = (int) uploadData.get("statusCode");
89+
long uploadDuration = (long) uploadData.get("uploadDuration");
90+
long finishUploadTime = (long) uploadData.get("finishUploadTime");
91+
8692
if (response != null && !response.isEmpty()) {
8793
logMessage("eventLabel='Uploader onSuccess' uploadId='" + id + "' response='" + response.substring(0, Math.min(2000, response.length() - 1)) + "'");
8894
} else {
@@ -195,8 +201,11 @@ private void initManager(String options, final CallbackContext callbackContext)
195201

196202
int ackDelay = 0;
197203
for (UploadEvent ack : uploadEvents) {
204+
long startUploadTime = ack.getOutputData().getLong("output_upload_start_time", 0);
205+
long endUploadTime = ack.getOutputData().getLong("output_upload_end_time", 0);
206+
long uploadDuration = endUploadTime - startUploadTime;
198207
executorService.schedule(() -> {
199-
handleAck(ack.getOutputData(), ack.calculateUploadDuration(), ack.getFinishUploadTime());
208+
handleAck(ack.getOutputData(), uploadDuration, endUploadTime);
200209
}, ackDelay, TimeUnit.MILLISECONDS);
201210
ackDelay += 200;
202211
}
@@ -230,7 +239,10 @@ private void initManager(String options, final CallbackContext callbackContext)
230239
// The corresponding ACK is already in the DB, if it not, the task is just a leftover
231240
String id = info.getOutputData().getString(UploadTask.KEY_OUTPUT_ID);
232241
if (ackDatabase.uploadEventDao().exists(id)) {
233-
handleAck(info.getOutputData(), ackDatabase.uploadEventDao().getById(id).calculateUploadDuration(), ackDatabase.uploadEventDao().getById(id).getFinishUploadTime());
242+
long startUploadTime = info.getOutputData().getLong("output_upload_start_time", 0);
243+
long endUploadTime = info.getOutputData().getLong("output_upload_end_time", 0);
244+
long uploadDuration = endUploadTime - startUploadTime;
245+
handleAck(info.getOutputData(), uploadDuration, endUploadTime);
234246
}
235247
}, 0, TimeUnit.MILLISECONDS);
236248
break;
@@ -412,14 +424,14 @@ private void handleAck(final Data ackData, final long uploadDuration, final long
412424
response = readFileToStringNoThrow(ackData.getString(UploadTask.KEY_OUTPUT_RESPONSE_FILE));
413425
}
414426

415-
sendSuccess(
416-
ackData.getString(UploadTask.KEY_OUTPUT_ID),
417-
response,
418-
ackData.getInt(UploadTask.KEY_OUTPUT_STATUS_CODE, -1 /* If this is sent, something is really wrong */),
419-
uploadDuration,
420-
finishUploadTime
421-
);
427+
HashMap<String, Object> uploadData = new HashMap<>();
428+
uploadData.put("outputId", ackData.getString(UploadTask.KEY_OUTPUT_ID));
429+
uploadData.put("response", response);
430+
uploadData.put("statusCode", ackData.getInt(UploadTask.KEY_OUTPUT_STATUS_CODE, -1));
431+
uploadData.put("uploadDuration", uploadDuration);
432+
uploadData.put("finishUploadTime", finishUploadTime);
422433

434+
sendSuccess(uploadData);
423435
} else {
424436
// The upload was a failure
425437
sendError(

src/android/UploadEvent.java

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,9 @@ public class UploadEvent {
1616
@NonNull
1717
private Data outputData;
1818

19-
@ColumnInfo(name = "start_upload_time")
20-
@NonNull
21-
private long startUploadTime;
22-
23-
@ColumnInfo(name = "finish_upload_time")
24-
@NonNull
25-
private long finishUploadTime;
26-
27-
public UploadEvent(@NonNull final String id, @NonNull final Data outputData, @NonNull final long startUploadTime, @NonNull final long finishUploadTime) {
19+
public UploadEvent(@NonNull final String id, @NonNull final Data outputData ) {
2820
this.id = id;
2921
this.outputData = outputData;
30-
this.startUploadTime = startUploadTime;
31-
this.finishUploadTime = finishUploadTime;
3222
}
3323

3424
@NonNull
@@ -40,16 +30,4 @@ public String getId() {
4030
public Data getOutputData() {
4131
return outputData;
4232
}
43-
44-
public long getStartUploadTime() {
45-
return startUploadTime;
46-
}
47-
48-
public long getFinishUploadTime() {
49-
return finishUploadTime;
50-
}
51-
52-
public long calculateUploadDuration() {
53-
return finishUploadTime - startUploadTime;
54-
}
5533
}

src/android/UploadTask.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ public final class UploadTask extends Worker {
7979
public static final String KEY_OUTPUT_STATUS_CODE = "output_status_code";
8080
public static final String KEY_OUTPUT_FAILURE_REASON = "output_failure_reason";
8181
public static final String KEY_OUTPUT_FAILURE_CANCELED = "output_failure_canceled";
82+
public static final String KEY_OUTPUT_UPLOAD_START_TIME = "output_upload_start_time";
83+
public static final String KEY_OUTPUT_UPLOAD_END_TIME = "output_upload_end_time";
8284
// </editor-fold>
8385

8486
private static UploadNotification uploadNotification = null;
@@ -239,8 +241,10 @@ public Result doWork() {
239241
.putBoolean(KEY_OUTPUT_IS_ERROR, true)
240242
.putString(KEY_OUTPUT_FAILURE_REASON, "User cancelled")
241243
.putBoolean(KEY_OUTPUT_FAILURE_CANCELED, true)
244+
.putLong(KEY_OUTPUT_UPLOAD_START_TIME, startTime)
245+
.putLong(KEY_OUTPUT_UPLOAD_END_TIME, endTime)
242246
.build();
243-
AckDatabase.getInstance(getApplicationContext()).uploadEventDao().insert(new UploadEvent(id, data, startTime, endTime));
247+
AckDatabase.getInstance(getApplicationContext()).uploadEventDao().insert(new UploadEvent(id, data));
244248
return Result.success(data);
245249
} else {
246250
// But if it was not it must be a connectivity problem or
@@ -258,7 +262,9 @@ public Result doWork() {
258262
final Data.Builder outputData = new Data.Builder()
259263
.putString(KEY_OUTPUT_ID, id)
260264
.putBoolean(KEY_OUTPUT_IS_ERROR, false)
261-
.putInt(KEY_OUTPUT_STATUS_CODE, (!DEBUG_SKIP_UPLOAD) ? response.code() : 200);
265+
.putInt(KEY_OUTPUT_STATUS_CODE, (!DEBUG_SKIP_UPLOAD) ? response.code() : 200)
266+
.putLong(KEY_OUTPUT_UPLOAD_START_TIME, startTime)
267+
.putLong(KEY_OUTPUT_UPLOAD_END_TIME, endTime);
262268

263269
// Try read the response body, if any
264270
try {
@@ -285,7 +291,7 @@ public Result doWork() {
285291
}
286292

287293
final Data data = outputData.build();
288-
AckDatabase.getInstance(getApplicationContext()).uploadEventDao().insert(new UploadEvent(id, data, startTime, endTime));
294+
AckDatabase.getInstance(getApplicationContext()).uploadEventDao().insert(new UploadEvent(id, data));
289295
return Result.success(data);
290296
}
291297

0 commit comments

Comments
 (0)