Enable WAL and use non-exclusive transactions
This commit is contained in:
parent
05ef0a91a5
commit
a7368eadd9
@ -10,6 +10,7 @@ import android.database.sqlite.SQLiteDatabase;
|
||||
import android.database.sqlite.SQLiteDatabase.CursorFactory;
|
||||
import android.database.sqlite.SQLiteOpenHelper;
|
||||
import android.media.MediaMetadataRetriever;
|
||||
import android.os.Build;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
|
||||
@ -323,6 +324,9 @@ public class PodDBAdapter {
|
||||
Log.v(TAG, "Opening DB");
|
||||
try {
|
||||
db = dbHelper.getWritableDatabase();
|
||||
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
|
||||
db.enableWriteAheadLogging();
|
||||
}
|
||||
} catch (SQLException ex) {
|
||||
Log.e(TAG, Log.getStackTraceString(ex));
|
||||
db = dbHelper.getReadableDatabase();
|
||||
@ -425,8 +429,14 @@ public class PodDBAdapter {
|
||||
*/
|
||||
public long setImage(FeedImage image) {
|
||||
boolean startedTransaction = false;
|
||||
if(!db.inTransaction()) {
|
||||
|
||||
try {
|
||||
if (!db.inTransaction()) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
|
||||
db.beginTransactionNonExclusive();
|
||||
} else {
|
||||
db.beginTransaction();
|
||||
}
|
||||
startedTransaction = true;
|
||||
}
|
||||
|
||||
@ -450,10 +460,16 @@ public class PodDBAdapter {
|
||||
db.update(TABLE_NAME_FEEDS, values, KEY_ID + "=?", new String[]{String.valueOf(image.getOwner().getId())});
|
||||
}
|
||||
}
|
||||
if(startedTransaction) {
|
||||
if (startedTransaction) {
|
||||
db.setTransactionSuccessful();
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
Log.e(TAG, Log.getStackTraceString(e));
|
||||
} finally {
|
||||
if (startedTransaction) {
|
||||
db.endTransaction();
|
||||
}
|
||||
}
|
||||
return image.getId();
|
||||
}
|
||||
|
||||
@ -522,7 +538,12 @@ public class PodDBAdapter {
|
||||
* transaction
|
||||
*/
|
||||
public void setCompleteFeed(Feed... feeds) {
|
||||
try {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
|
||||
db.beginTransactionNonExclusive();
|
||||
} else {
|
||||
db.beginTransaction();
|
||||
}
|
||||
for (Feed feed : feeds) {
|
||||
setFeed(feed);
|
||||
if (feed.getItems() != null) {
|
||||
@ -535,8 +556,12 @@ public class PodDBAdapter {
|
||||
}
|
||||
}
|
||||
db.setTransactionSuccessful();
|
||||
} catch (SQLException e) {
|
||||
Log.e(TAG, Log.getStackTraceString(e));
|
||||
} finally {
|
||||
db.endTransaction();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the flattr status of a feed
|
||||
@ -598,19 +623,38 @@ public class PodDBAdapter {
|
||||
}
|
||||
|
||||
public void setFeedItemlist(List<FeedItem> items) {
|
||||
try {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
|
||||
db.beginTransactionNonExclusive();
|
||||
} else {
|
||||
db.beginTransaction();
|
||||
}
|
||||
for (FeedItem item : items) {
|
||||
setFeedItem(item, true);
|
||||
}
|
||||
db.setTransactionSuccessful();
|
||||
} catch (SQLException e) {
|
||||
Log.e(TAG, Log.getStackTraceString(e));
|
||||
} finally {
|
||||
db.endTransaction();
|
||||
}
|
||||
}
|
||||
|
||||
public long setSingleFeedItem(FeedItem item) {
|
||||
long result = 0;
|
||||
try {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
|
||||
db.beginTransactionNonExclusive();
|
||||
} else {
|
||||
db.beginTransaction();
|
||||
long result = setFeedItem(item, true);
|
||||
}
|
||||
result = setFeedItem(item, true);
|
||||
db.setTransactionSuccessful();
|
||||
} catch (SQLException e) {
|
||||
Log.e(TAG, Log.getStackTraceString(e));
|
||||
} finally {
|
||||
db.endTransaction();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -728,7 +772,12 @@ public class PodDBAdapter {
|
||||
|
||||
public void setFeedItemRead(int played, long itemId, long mediaId,
|
||||
boolean resetMediaPosition) {
|
||||
try {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
|
||||
db.beginTransactionNonExclusive();
|
||||
} else {
|
||||
db.beginTransaction();
|
||||
}
|
||||
ContentValues values = new ContentValues();
|
||||
|
||||
values.put(KEY_READ, played);
|
||||
@ -741,8 +790,12 @@ public class PodDBAdapter {
|
||||
}
|
||||
|
||||
db.setTransactionSuccessful();
|
||||
} catch (SQLException e) {
|
||||
Log.e(TAG, Log.getStackTraceString(e));
|
||||
} finally {
|
||||
db.endTransaction();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the 'read' attribute of the item.
|
||||
@ -750,7 +803,12 @@ public class PodDBAdapter {
|
||||
* @param itemIds items to change the value of
|
||||
*/
|
||||
public void setFeedItemRead(int read, long... itemIds) {
|
||||
try {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
|
||||
db.beginTransactionNonExclusive();
|
||||
} else {
|
||||
db.beginTransaction();
|
||||
}
|
||||
ContentValues values = new ContentValues();
|
||||
for (long id : itemIds) {
|
||||
values.clear();
|
||||
@ -758,8 +816,12 @@ public class PodDBAdapter {
|
||||
db.update(TABLE_NAME_FEED_ITEMS, values, KEY_ID + "=?", new String[]{String.valueOf(id)});
|
||||
}
|
||||
db.setTransactionSuccessful();
|
||||
} catch (SQLException e) {
|
||||
Log.e(TAG, Log.getStackTraceString(e));
|
||||
} finally {
|
||||
db.endTransaction();
|
||||
}
|
||||
}
|
||||
|
||||
public void setChapters(FeedItem item) {
|
||||
ContentValues values = new ContentValues();
|
||||
@ -822,7 +884,12 @@ public class PodDBAdapter {
|
||||
|
||||
public void setFavorites(List<FeedItem> favorites) {
|
||||
ContentValues values = new ContentValues();
|
||||
try {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
|
||||
db.beginTransactionNonExclusive();
|
||||
} else {
|
||||
db.beginTransaction();
|
||||
}
|
||||
db.delete(TABLE_NAME_FAVORITES, null, null);
|
||||
for (int i = 0; i < favorites.size(); i++) {
|
||||
FeedItem item = favorites.get(i);
|
||||
@ -832,8 +899,12 @@ public class PodDBAdapter {
|
||||
db.insertWithOnConflict(TABLE_NAME_FAVORITES, null, values, SQLiteDatabase.CONFLICT_REPLACE);
|
||||
}
|
||||
db.setTransactionSuccessful();
|
||||
} catch (SQLException e) {
|
||||
Log.e(TAG, Log.getStackTraceString(e));
|
||||
} finally {
|
||||
db.endTransaction();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the item to favorites
|
||||
@ -880,7 +951,12 @@ public class PodDBAdapter {
|
||||
|
||||
public void setQueue(List<FeedItem> queue) {
|
||||
ContentValues values = new ContentValues();
|
||||
try {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
|
||||
db.beginTransactionNonExclusive();
|
||||
} else {
|
||||
db.beginTransaction();
|
||||
}
|
||||
db.delete(TABLE_NAME_QUEUE, null, null);
|
||||
for (int i = 0; i < queue.size(); i++) {
|
||||
FeedItem item = queue.get(i);
|
||||
@ -890,8 +966,12 @@ public class PodDBAdapter {
|
||||
db.insertWithOnConflict(TABLE_NAME_QUEUE, null, values, SQLiteDatabase.CONFLICT_REPLACE);
|
||||
}
|
||||
db.setTransactionSuccessful();
|
||||
} catch (SQLException e) {
|
||||
Log.e(TAG, Log.getStackTraceString(e));
|
||||
} finally {
|
||||
db.endTransaction();
|
||||
}
|
||||
}
|
||||
|
||||
public void clearQueue() {
|
||||
db.delete(TABLE_NAME_QUEUE, null, null);
|
||||
@ -937,7 +1017,12 @@ public class PodDBAdapter {
|
||||
* Remove a feed with all its FeedItems and Media entries.
|
||||
*/
|
||||
public void removeFeed(Feed feed) {
|
||||
try {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
|
||||
db.beginTransactionNonExclusive();
|
||||
} else {
|
||||
db.beginTransaction();
|
||||
}
|
||||
if (feed.getImage() != null) {
|
||||
removeFeedImage(feed.getImage());
|
||||
}
|
||||
@ -947,14 +1032,18 @@ public class PodDBAdapter {
|
||||
}
|
||||
}
|
||||
// delete download log entries for feed
|
||||
db.delete(TABLE_NAME_DOWNLOAD_LOG, KEY_FEEDFILE + "=? AND " + KEY_FEEDFILETYPE +"=?",
|
||||
new String[] { String.valueOf(feed.getId()), String.valueOf(Feed.FEEDFILETYPE_FEED) });
|
||||
db.delete(TABLE_NAME_DOWNLOAD_LOG, KEY_FEEDFILE + "=? AND " + KEY_FEEDFILETYPE + "=?",
|
||||
new String[]{String.valueOf(feed.getId()), String.valueOf(Feed.FEEDFILETYPE_FEED)});
|
||||
|
||||
db.delete(TABLE_NAME_FEEDS, KEY_ID + "=?",
|
||||
new String[]{String.valueOf(feed.getId())});
|
||||
db.setTransactionSuccessful();
|
||||
} catch (SQLException e) {
|
||||
Log.e(TAG, Log.getStackTraceString(e));
|
||||
} finally {
|
||||
db.endTransaction();
|
||||
}
|
||||
}
|
||||
|
||||
public void clearPlaybackHistory() {
|
||||
ContentValues values = new ContentValues();
|
||||
|
Loading…
x
Reference in New Issue
Block a user