Skip to content

Commit

Permalink
Re-download sticker if backing file data no longer exists.
Browse files Browse the repository at this point in the history
  • Loading branch information
cody-signal committed Sep 9, 2020
1 parent 2ee04bd commit 867e95e
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import org.thoughtcrime.securesms.stickers.BlessedPacks;
import org.thoughtcrime.securesms.stickers.StickerPackInstallEvent;
import org.thoughtcrime.securesms.util.CursorUtil;
import org.thoughtcrime.securesms.util.SqlUtil;
import org.thoughtcrime.securesms.util.Util;

import java.io.Closeable;
Expand Down Expand Up @@ -105,6 +106,12 @@ public void insertSticker(@NonNull IncomingSticker sticker, @NonNull InputStream
contentValues.put(FILE_RANDOM, fileInfo.getRandom());

long id = databaseHelper.getWritableDatabase().insert(TABLE_NAME, null, contentValues);
if (id == -1) {
String selection = PACK_ID + " = ? AND " + STICKER_ID + " = ? AND " + COVER + " = ?";
String[] args = SqlUtil.buildArgs(sticker.getPackId(), sticker.getStickerId(), (sticker.isCover() ? 1 : 0));

id = databaseHelper.getWritableDatabase().update(TABLE_NAME, contentValues, selection, args);
}

if (id > 0) {
notifyStickerListeners();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,18 @@
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.StickerDatabase;
import org.thoughtcrime.securesms.database.model.IncomingSticker;
import org.thoughtcrime.securesms.database.model.StickerRecord;
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
import org.thoughtcrime.securesms.jobmanager.Data;
import org.thoughtcrime.securesms.jobmanager.Job;
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint;
import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.mms.PartAuthority;
import org.thoughtcrime.securesms.util.Hex;
import org.whispersystems.signalservice.api.SignalServiceMessageReceiver;
import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException;

import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.concurrent.TimeUnit;

Expand Down Expand Up @@ -76,9 +79,16 @@ private StickerDownloadJob(@NonNull Job.Parameters parameters, @NonNull Incoming
protected void onRun() throws Exception {
StickerDatabase db = DatabaseFactory.getStickerDatabase(context);

if (db.getSticker(sticker.getPackId(), sticker.getStickerId(), sticker.isCover()) != null) {
Log.w(TAG, "Sticker already downloaded.");
return;
StickerRecord stickerRecord = db.getSticker(sticker.getPackId(), sticker.getStickerId(), sticker.isCover());
if (stickerRecord != null) {
try (InputStream stream = PartAuthority.getAttachmentStream(context, stickerRecord.getUri())) {
if (stream != null) {
Log.w(TAG, "Sticker already downloaded.");
return;
}
} catch (FileNotFoundException e) {
Log.w(TAG, "Sticker file no longer exists, downloading again.");
}
}

if (!db.isPackInstalled(sticker.getPackId()) && !sticker.isCover()) {
Expand Down

0 comments on commit 867e95e

Please sign in to comment.