-
Notifications
You must be signed in to change notification settings - Fork 31
/
Copy pathdb_provider.dart
143 lines (127 loc) · 5 KB
/
db_provider.dart
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
import 'dart:io';
import 'package:flutter_picgo/resources/pb_type_keys.dart';
import 'package:flutter_picgo/resources/table_name_keys.dart';
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
class DbProvider {
static Database db;
/// 获取数据库中所有的表
Future<List> getTables() async {
if (db == null) {
return Future.value([]);
}
List tables = await db
.rawQuery('SELECT name FROM sqlite_master WHERE type = "table"');
List<String> targetList = [];
tables.forEach((item) {
targetList.add(item['name']);
});
return targetList;
}
/// 检查数据库中, 表是否存在
Future checkTableIsRight(String expectTables) async {
List<String> tables = await getTables();
return tables.contains(expectTables);
}
/// 初始化数据库
Future init({bool isCreate = false}) async {
String dbPath = await getDatabasesPath();
String path = join(dbPath, 'picgo.db');
try {
db = await openDatabase(
path,
version: 9,
onCreate: (db, version) async {
// 创建pb_setting表
_initPb(db);
// 创建uploaded表
await db.execute('''
CREATE TABLE $TABLE_NAME_UPLOADED (
id INTEGER PRIMARY KEY AUTOINCREMENT,
path varchar(255) NOT NULL,
type varchar(20) NOT NULL,
info varchar(255)
)''');
},
onUpgrade: (db, oldVersion, newVersion) {
_initPb(db);
/// v1 to v2
if (oldVersion == 1) {
_upgradeDbV1ToV2(db);
}
},
);
} catch (e) {
var file = File(path);
file.deleteSync();
}
}
/// 初始化图床设置表
_initPb(Database db) async {
List tables = await db
.rawQuery('SELECT name FROM sqlite_master WHERE type = "table"');
bool isExists = false;
tables.forEach((item) {
if (item['name'] == TABLE_NAME_PBSETTING) {
isExists = true;
}
});
if (isExists) {
await db.execute(
'ALTER TABLE $TABLE_NAME_PBSETTING RENAME TO ${TABLE_NAME_PBSETTING + "_backup"}');
}
// 创建pb_setting表
await db.execute('''
CREATE TABLE $TABLE_NAME_PBSETTING (
id INTEGER PRIMARY KEY AUTOINCREMENT,
type varchar(20) NOT NULL UNIQUE,
path varchar(20) NOT NULL UNIQUE,
name varchar(50) DEFAULT NULL,
config varchar(255) DEFAULT NULL,
visible INTEGER DEFAULT 1
)''');
/// github图床
await db.rawInsert(
'INSERT INTO $TABLE_NAME_PBSETTING(type, path, name, config, visible) VALUES("${PBTypeKeys.github}", "/setting/pb/github", "Github图床", NULL, 1)');
/// SM.MS图床
await db.rawInsert(
'INSERT INTO $TABLE_NAME_PBSETTING(type, path, name, config, visible) VALUES("${PBTypeKeys.smms}", "/setting/pb/smms", "SM.MS图床", NULL, 1)');
/// Gitee图床
await db.rawInsert(
'INSERT INTO $TABLE_NAME_PBSETTING(type, path, name, config, visible) VALUES("${PBTypeKeys.gitee}", "/setting/pb/gitee", "Gitee图床", NULL, 1)');
/// Qiniu图床
await db.rawInsert(
'INSERT INTO $TABLE_NAME_PBSETTING(type, path, name, config, visible) VALUES("${PBTypeKeys.qiniu}", "/setting/pb/qiniu", "七牛图床", NULL, 1)');
/// 阿里云OSS
await db.rawInsert(
'INSERT INTO $TABLE_NAME_PBSETTING(type, path, name, config, visible) VALUES("${PBTypeKeys.aliyun}", "/setting/pb/aliyun", "阿里云OSS图床", NULL, 1)');
/// 腾讯云COS
await db.rawInsert(
'INSERT INTO $TABLE_NAME_PBSETTING(type, path, name, config, visible) VALUES("${PBTypeKeys.tcyun}", "/setting/pb/tcyun", "腾讯云COS图床", NULL, 1)');
/// 牛图网
await db.rawInsert(
'INSERT INTO $TABLE_NAME_PBSETTING(type, path, name, config, visible) VALUES("${PBTypeKeys.niupic}", "/setting/pb/niupic", "牛图网图床", NULL, 1)');
/// 兰空图床
await db.rawInsert(
'INSERT INTO $TABLE_NAME_PBSETTING(type, path, name, config, visible) VALUES("${PBTypeKeys.lsky}", "/setting/pb/lsky", "兰空图床", NULL, 1)');
/// 又拍云图床
await db.rawInsert(
'INSERT INTO $TABLE_NAME_PBSETTING(type, path, name, config, visible) VALUES("${PBTypeKeys.upyun}", "/setting/pb/upyun", "又拍云图床", NULL, 1)');
// copy data
// update authors set dynasty_index=(select id from dynasties where dynasties .name=authors.dynasty) where dynasty in (select name from dynasties )
if (isExists) {
await db.execute('''
UPDATE $TABLE_NAME_PBSETTING SET config =
(SELECT config FROM ${TABLE_NAME_PBSETTING + "_backup"} WHERE ${TABLE_NAME_PBSETTING + "_backup"}.type = $TABLE_NAME_PBSETTING.type)
''');
// drop backup
await db
.execute('DROP TABLE IF EXISTS ${TABLE_NAME_PBSETTING + "_backup"}');
}
}
/// db版本升级
_upgradeDbV1ToV2(Database db) async {
await db.execute(
'ALTER TABLE $TABLE_NAME_UPLOADED ADD COLUMN info varchar(255)');
}
}