-
Notifications
You must be signed in to change notification settings - Fork 529
/
Copy pathTaskDbHelper.kt
90 lines (80 loc) · 3.64 KB
/
TaskDbHelper.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package vn.hunghd.flutterdownloader
import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
import android.provider.BaseColumns
class TaskDbHelper private constructor(context: Context) :
SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) {
override fun onCreate(db: SQLiteDatabase) {
db.execSQL(SQL_CREATE_ENTRIES)
}
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
update1to2(db, oldVersion)
update2to3(db, oldVersion)
update3to4(db, oldVersion)
update4to5(db, oldVersion)
}
private fun update1to2(db: SQLiteDatabase, oldVersion: Int) {
if (oldVersion > 1) {
return
}
db.execSQL(SQL_DELETE_ENTRIES)
onCreate(db)
}
private fun update2to3(db: SQLiteDatabase, oldVersion: Int) {
if (oldVersion > 2) {
return
}
db.execSQL("ALTER TABLE " + TaskEntry.TABLE_NAME + " ADD COLUMN " + TaskEntry.COLUMN_SAVE_IN_PUBLIC_STORAGE + " TINYINT DEFAULT 0")
}
private fun update3to4(db: SQLiteDatabase, oldVersion: Int) {
if (oldVersion > 3) {
return
}
db.execSQL("ALTER TABLE ${TaskEntry.TABLE_NAME} ADD COLUMN ${TaskEntry.COLUMN_ALLOW_CELLULAR} TINYINT DEFAULT 1")
}
private fun update4to5(db: SQLiteDatabase, oldVersion: Int) {
if (oldVersion > 4) {
return
}
db.execSQL("ALTER TABLE ${TaskEntry.TABLE_NAME} ADD COLUMN ${TaskEntry.COLUMN_NAME_NOTIFICATION_TITLE} TEXT")
}
override fun onDowngrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
onUpgrade(db, oldVersion, newVersion)
}
companion object {
const val DATABASE_VERSION = 5
const val DATABASE_NAME = "download_tasks.db"
private var instance: TaskDbHelper? = null
private const val SQL_CREATE_ENTRIES = (
"CREATE TABLE " + TaskEntry.TABLE_NAME + " (" +
BaseColumns._ID + " INTEGER PRIMARY KEY," +
TaskEntry.COLUMN_NAME_TASK_ID + " VARCHAR(256), " +
TaskEntry.COLUMN_NAME_URL + " TEXT, " +
TaskEntry.COLUMN_NAME_STATUS + " INTEGER DEFAULT 0, " +
TaskEntry.COLUMN_NAME_PROGRESS + " INTEGER DEFAULT 0, " +
TaskEntry.COLUMN_NAME_FILE_NAME + " TEXT, " +
TaskEntry.COLUMN_NAME_SAVED_DIR + " TEXT, " +
TaskEntry.COLUMN_NAME_HEADERS + " TEXT, " +
TaskEntry.COLUMN_NAME_MIME_TYPE + " VARCHAR(128), " +
TaskEntry.COLUMN_NAME_RESUMABLE + " TINYINT DEFAULT 0, " +
TaskEntry.COLUMN_NAME_NOTIFICATION_TITLE + " TEXT, " +
TaskEntry.COLUMN_NAME_SHOW_NOTIFICATION + " TINYINT DEFAULT 0, " +
TaskEntry.COLUMN_NAME_OPEN_FILE_FROM_NOTIFICATION + " TINYINT DEFAULT 0, " +
TaskEntry.COLUMN_NAME_TIME_CREATED + " INTEGER DEFAULT 0, " +
TaskEntry.COLUMN_SAVE_IN_PUBLIC_STORAGE + " TINYINT DEFAULT 0, " +
TaskEntry.COLUMN_ALLOW_CELLULAR + " TINYINT DEFAULT 1" +
")"
)
private const val SQL_DELETE_ENTRIES = "DROP TABLE IF EXISTS ${TaskEntry.TABLE_NAME}"
fun getInstance(ctx: Context?): TaskDbHelper {
// Use the application context, which will ensure that you
// don't accidentally leak an Activity's context.
// See this article for more information: http://bit.ly/6LRzfx
if (instance == null) {
instance = TaskDbHelper(ctx!!.applicationContext)
}
return instance!!
}
}
}