Skip to content

Commit 1193b9a

Browse files
committed
Merge branch 'dev'
2 parents bb4caba + cc98d06 commit 1193b9a

File tree

12 files changed

+151
-14
lines changed

12 files changed

+151
-14
lines changed

README.md

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ Flutter-PicGo: 一个用于快速上传图片并获取图片URL链接的**手机
2727
# 特色功能
2828

2929
- 长按相册列表项可**同步删除远端的文件**,也可配置仅删除本地列表
30-
- 支持扫描二维码将PicGo(v2.3.0-beta.2以上版本)配置文件转换成Flutter-PicGo的配置,使用请移步[链接](https://github.com/Molunerfinn/PicGo/releases/tag/v2.3.0-beta.2)
30+
- 支持扫描二维码将*PicGo(v2.3.0-beta.2以上版本)*配置文件转换成*Flutter-PicGo*的配置,使用请移步[链接](https://github.com/Molunerfinn/PicGo/releases/tag/v2.3.0-beta.2)
3131
- 适配深色模式,可跟随系统或手动设置
32-
- 支持将flutter-picgo的配置导出至剪切板
32+
- 支持将*Flutter-PicGo*的配置导出至剪切板
3333

3434
> 基本使用配置与PicGo无异,可参考[配置文档](https://picgo.github.io/PicGo-Doc/zh/guide/config.html#%E5%9B%BE%E5%BA%8A%E5%8C%BA)
3535
> 腾讯云COS仅支持v5版配置
@@ -49,14 +49,45 @@ Flutter-PicGo: 一个用于快速上传图片并获取图片URL链接的**手机
4949
5050
# 应用说明
5151

52-
目前仅支持iOS与Android端,由于部分插件例如[sqflite](https://pub.dev/packages/sqflite),所以并不支持Web端
52+
目前仅支持iOS与Android端,由于部分插件例如[sqflite](https://pub.dev/packages/sqflite)不支持Web端,所以应用也并不支持Web端
5353

54-
# 致谢
54+
# 有问题或者有更好的建议
55+
56+
- 欢迎提 [Issues](https://github.com/PicGo/flutter-picgo/issues)
57+
58+
> 如果项目有帮助到你或者喜欢这个项目,可以给个Star支持一下鸭
59+
60+
# 相关
5561

5662
- [PicGo](https://github.com/Molunerfinn/PicGo)
63+
64+
# 致谢
65+
5766
- [Flutter-Go](https://github.com/alibaba/flutter-go)
5867

59-
# License
68+
# [License](https://github.com/hackycy/flutter-picgo/blob/master/LICENSE)
69+
70+
``` txt
71+
MIT License
72+
73+
Copyright (c) 2020 Mr.Yang
74+
75+
Permission is hereby granted, free of charge, to any person obtaining a copy
76+
of this software and associated documentation files (the "Software"), to deal
77+
in the Software without restriction, including without limitation the rights
78+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
79+
copies of the Software, and to permit persons to whom the Software is
80+
furnished to do so, subject to the following conditions:
81+
82+
The above copyright notice and this permission notice shall be included in all
83+
copies or substantial portions of the Software.
6084
61-
[MIT](https://github.com/hackycy/flutter-picgo/blob/master/LICENSE)
85+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
86+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
87+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
88+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
89+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
90+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
91+
SOFTWARE.
92+
```
6293

docs/version.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
22
"iOS": {
3-
"versionName": "1.5.3",
4-
"versionCode": "13"
3+
"versionName": "1.6.0",
4+
"versionCode": "14"
55
},
66
"Android": {
7-
"versionName": "1.5.3",
8-
"versionCode": "13"
7+
"versionName": "1.6.0",
8+
"versionCode": "14"
99
}
1010
}

docs/设计文档.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,5 @@
3030
| 4 | 新增Qiniu图床记录 |
3131
| 5 | 新增阿里云OSS图床记录 |
3232
| 6 | 新增腾讯云COS图床记录 |
33+
| 7 | 新增牛图网图床记录 |
3334

lib/api/niupic_api.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import 'package:dio/dio.dart';
2+
import 'package:flutter_picgo/utils/net.dart';
3+
4+
class NiupicApi {
5+
static const BASE_URL = 'https://www.niupic.com/';
6+
7+
static Future upload(FormData data) async {
8+
Response res = await NetUtils.getInstance()
9+
.post(BASE_URL + 'index/upload/process', data: data);
10+
return res.data;
11+
}
12+
}

lib/resources/pb_type_keys.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,6 @@ class PBTypeKeys {
1010
static const aliyun = 'aliyun';
1111

1212
static const tcyun = 'tcyun';
13+
14+
static const niupic = 'niupic';
1315
}

lib/routers/router_handler.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'package:flutter_picgo/views/pb_setting_page/aliyun_page/aliyun_page.dart
77
import 'package:flutter_picgo/views/pb_setting_page/gitee_page/gitee_page.dart';
88
import 'package:flutter_picgo/views/pb_setting_page/gitee_page/gitee_repo_page.dart';
99
import 'package:flutter_picgo/views/pb_setting_page/github_page/github_repo_page.dart';
10+
import 'package:flutter_picgo/views/pb_setting_page/niupic_page/niupic_page.dart';
1011
import 'package:flutter_picgo/views/pb_setting_page/pb_setting_page.dart';
1112
import 'package:flutter_picgo/views/pb_setting_page/qiniu_page/qiniu_page.dart';
1213
import 'package:flutter_picgo/views/pb_setting_page/smms_page/smms_page.dart';
@@ -120,6 +121,11 @@ var pbsettingTcyunHandler = new Handler(
120121
handlerFunc: (context, parameters) => TcyunPage(),
121122
);
122123

124+
// 牛图网图床设置页面
125+
var pbsettingNiupicHandler = new Handler(
126+
handlerFunc: (context, parameters) => NiupicPage(),
127+
);
128+
123129
// picgo设置页面
124130
var picgosettingHandler = new Handler(
125131
handlerFunc: (BuildContext context, Map<String, List<String>> params) =>

lib/routers/routers.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,12 @@ class Routes {
2828
// --------- aliyun -------------------
2929
static const String settingPbAliyun = '/setting/pb/aliyun';
3030
// -----------------------------------
31-
// --------- aliyun -------------------
31+
// --------- tcyun -------------------
3232
static const String settingPbTcyun = '/setting/pb/tcyun';
3333
// -----------------------------------
34+
// --------- niupic -------------------
35+
static const String settingPbNiupic = '/setting/pb/niupic';
36+
// -----------------------------------
3437

3538
static void configureRoutes(Router router) {
3639
router.notFoundHandler = notfoundHandler;
@@ -50,5 +53,6 @@ class Routes {
5053
router.define(settingPbQiniu, handler: pbsettingQiniuHandler);
5154
router.define(settingPbAliyun, handler: pbsettingAliyunHandler);
5255
router.define(settingPbTcyun, handler: pbsettingTcyunHandler);
56+
router.define(settingPbNiupic, handler: pbsettingNiupicHandler);
5357
}
5458
}

lib/utils/db_provider.dart

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class DbProvider {
3434
try {
3535
db = await openDatabase(
3636
path,
37-
version: 6,
37+
version: 7,
3838
onCreate: (db, version) async {
3939
// 创建pb_setting表
4040
_initPb(db);
@@ -44,7 +44,7 @@ class DbProvider {
4444
id INTEGER PRIMARY KEY AUTOINCREMENT,
4545
path varchar(255) NOT NULL,
4646
type varchar(20) NOT NULL,
47-
info varchar(255) NOT NULL
47+
info varchar(255)
4848
)''');
4949
},
5050
onUpgrade: (db, oldVersion, newVersion) {
@@ -105,6 +105,9 @@ class DbProvider {
105105
// 腾讯云COS
106106
await db.rawInsert(
107107
'INSERT INTO $TABLE_NAME_PBSETTING(type, path, name, config, visible) VALUES("${PBTypeKeys.tcyun}", "/setting/pb/tcyun", "腾讯云COS图床", NULL, 1)');
108+
// 牛图网
109+
await db.rawInsert(
110+
'INSERT INTO $TABLE_NAME_PBSETTING(type, path, name, config, visible) VALUES("${PBTypeKeys.niupic}", "/setting/pb/niupic", "牛图网图床", NULL, 1)');
108111
// copy data
109112
// update authors set dynasty_index=(select id from dynasties where dynasties .name=authors.dynasty) where dynasty in (select name from dynasties )
110113
if (isExists) {
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import 'package:dio/dio.dart';
2+
import 'package:flutter_picgo/api/niupic_api.dart';
3+
import 'package:flutter_picgo/model/uploaded.dart';
4+
import 'package:flutter_picgo/resources/pb_type_keys.dart';
5+
import 'package:flutter_picgo/utils/image_upload.dart';
6+
import 'dart:io';
7+
8+
import 'package:flutter_picgo/utils/strategy/image_upload_strategy.dart';
9+
10+
class NiupicImageUpload implements ImageUploadStrategy {
11+
/// 牛图网不支持删除
12+
@override
13+
Future<Uploaded> delete(Uploaded uploaded) async {
14+
return uploaded;
15+
}
16+
17+
@override
18+
Future<Uploaded> upload(File file, String renameImage) async {
19+
FormData formData = FormData.fromMap({
20+
"image_field":
21+
await MultipartFile.fromFile(file.path, filename: renameImage),
22+
});
23+
var result = await NiupicApi.upload(formData);
24+
if (result["code"] == 200) {
25+
var uploadedItem = Uploaded(
26+
-1, 'https://${result['data']}', PBTypeKeys.niupic,
27+
info: '');
28+
await ImageUploadUtils.saveUploadedItem(uploadedItem);
29+
return uploadedItem;
30+
} else {
31+
throw new NiupicError(error: '${result['msg']}');
32+
}
33+
}
34+
}
35+
36+
class NiupicError implements Exception {
37+
NiupicError({
38+
this.error,
39+
});
40+
41+
dynamic error;
42+
43+
String get message => (error?.toString() ?? '');
44+
45+
@override
46+
String toString() {
47+
var msg = 'NiupicError $message';
48+
if (error is Error) {
49+
msg += '\n${error.stackTrace}';
50+
}
51+
return msg;
52+
}
53+
}

lib/utils/strategy/upload_strategy_factory.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'package:flutter_picgo/utils/strategy/impl/aliyun_image_upload.dart';
33
import 'package:flutter_picgo/utils/strategy/impl/gitee_image_upload.dart';
44
import 'package:flutter_picgo/utils/strategy/impl/github_image_upload.dart';
55
import 'package:flutter_picgo/utils/strategy/image_upload_strategy.dart';
6+
import 'package:flutter_picgo/utils/strategy/impl/niupic_image_upload.dart';
67
import 'package:flutter_picgo/utils/strategy/impl/qiniu_image_upload.dart';
78
import 'package:flutter_picgo/utils/strategy/impl/smms_image_upload.dart';
89
import 'package:flutter_picgo/utils/strategy/impl/tcyun_image_upload.dart';
@@ -35,6 +36,9 @@ class UploadStrategyFactory {
3536
} else if (type == PBTypeKeys.tcyun) {
3637
/// 腾讯云
3738
cache[type] = new TcyunImageUpload();
39+
} else if (type == PBTypeKeys.niupic) {
40+
/// 牛图网
41+
cache[type] = new NiupicImageUpload();
3842
}
3943
}
4044
return cache[type];

0 commit comments

Comments
 (0)