Re-download sticker if backing file data no longer exists.
parent
2ee04bd1b6
commit
867e95eef1
|
@ -24,6 +24,7 @@ import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri;
|
|||
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;
|
||||
|
@ -105,6 +106,12 @@ public class StickerDatabase extends Database {
|
|||
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();
|
||||
|
|
|
@ -5,15 +5,18 @@ import androidx.annotation.NonNull;
|
|||
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;
|
||||
|
||||
|
@ -76,9 +79,16 @@ public class StickerDownloadJob extends BaseJob {
|
|||
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()) {
|
||||
|
|
Loading…
Reference in New Issue