From bfd3818c0aace8bd3997ff684984f5a9d43ed8ca Mon Sep 17 00:00:00 2001 From: Jakob Kukla Date: Mon, 16 May 2022 23:36:48 +0200 Subject: [PATCH] fix database concurrency issue --- .../com/dkanada/gramophone/database/QueueSongDao.java | 11 +++++++++++ .../com/dkanada/gramophone/service/QueueManager.java | 9 +-------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/dkanada/gramophone/database/QueueSongDao.java b/app/src/main/java/com/dkanada/gramophone/database/QueueSongDao.java index 69796902..9cf9ec9d 100644 --- a/app/src/main/java/com/dkanada/gramophone/database/QueueSongDao.java +++ b/app/src/main/java/com/dkanada/gramophone/database/QueueSongDao.java @@ -45,4 +45,15 @@ public abstract class QueueSongDao { insertQueueSongs(queueSongs); } + + @Transaction + public void updateQueues(List playingQueue, List shuffledQueue) { + // copy queues by value to avoid concurrent modification exceptions from database + App.getDatabase().songDao().deleteSongs(); + App.getDatabase().songDao().insertSongs(new ArrayList<>(playingQueue)); + + deleteQueueSongs(); + setQueue(new ArrayList<>(playingQueue), 0); + setQueue(new ArrayList<>(shuffledQueue), 1); + } } diff --git a/app/src/main/java/com/dkanada/gramophone/service/QueueManager.java b/app/src/main/java/com/dkanada/gramophone/service/QueueManager.java index 86604c8e..ed783563 100644 --- a/app/src/main/java/com/dkanada/gramophone/service/QueueManager.java +++ b/app/src/main/java/com/dkanada/gramophone/service/QueueManager.java @@ -294,14 +294,7 @@ public class QueueManager { public void saveQueue() { PreferenceUtil.getInstance(context).setPosition(position); - - // copy queues by value to avoid concurrent modification exceptions from database - App.getDatabase().songDao().deleteSongs(); - App.getDatabase().songDao().insertSongs(new ArrayList<>(playingQueue)); - - App.getDatabase().queueSongDao().deleteQueueSongs(); - App.getDatabase().queueSongDao().setQueue(new ArrayList<>(playingQueue), 0); - App.getDatabase().queueSongDao().setQueue(new ArrayList<>(shuffledQueue), 1); + App.getDatabase().queueSongDao().updateQueues(playingQueue, shuffledQueue); } public int getRestoredProgress() {