Skip to content

Commit

Permalink
Merge pull request #234 from wgh136/dev
Browse files Browse the repository at this point in the history
v2.2.4
  • Loading branch information
wgh136 committed Oct 28, 2023
2 parents 3c41d9b + ec77b7d commit 9f21f16
Show file tree
Hide file tree
Showing 147 changed files with 3,855 additions and 3,267 deletions.
16 changes: 9 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Pica Comic

[![flutter](https://img.shields.io/badge/flutter-3.13.7-blue)](https://flutter.dev/)
[![flutter](https://img.shields.io/badge/flutter-3.13.9-blue)](https://flutter.dev/)
[![License](https://img.shields.io/github/license/wgh136/PicaComic)](https://github.com/wgh136/PicaComic/blob/master/LICENSE)
[![Download](https://img.shields.io/github/v/release/wgh136/PicaComic)](https://github.com/wgh136/PicaComic/releases)
[![stars](https://img.shields.io/github/stars/wgh136/PicaComic)](https://github.com/wgh136/PicaComic/stargazers)
Expand Down Expand Up @@ -103,12 +103,11 @@ Web端已被放弃, 仅支持哔咔, 目前部署在Vercel上
### dependencies
- [flutter](https://flutter.dev/)
- [dio](https://pub.dev/packages/dio): 网络请求
- [get](https://pub.dev/packages/get): 路由管理
- [shared_preferences](https://pub.dev/packages/shared_preferences): 数据储存
- [dynamic_color](https://pub.dev/packages/dynamic_color): 动态颜色
- [cached_network_image](https://pub.dev/packages/cached_network_image)&[flutter_cache_manager](https://pub.dev/packages/flutter_cache_manager): 图片缓存
- [uuid](https://pub.dev/packages/uuid): 创建uuid
- [photo_view](https://pub.dev/packages/photo_view): 图片查看
- [photo_view](https://pub.dev/packages/photo_view): 图片查看(经我修改的版本)
- [url_launcher](https://pub.dev/packages/url_launcher): 打开网页
- [file_selector](https://pub.dev/packages/file_selector)&[image_picker](https://pub.dev/packages/image_picker): 选择文件
- [image_gallery_saver](https://pub.dev/packages/image_gallery_saver): 将图片保存至相册
Expand All @@ -117,10 +116,13 @@ Web端已被放弃, 仅支持哔咔, 目前部署在Vercel上
- [flutter_local_notifications](https://pub.dev/packages/flutter_local_notifications): 发送通知
- [share_plus](https://pub.dev/packages/share_plus): 分享
- [local_auth](https://pub.dev/packages/local_auth): 身份认证
- [scrollable_positioned_list](https://pub.dev/packages/scrollable_positioned_list): 能够跳转到指定项目的列表(为了解决手势冲突, 我对其做出了一些修改)
- [flutter_inappwebview](https://pub.flutter-io.cn/packages/flutter_inappwebview): 用于e-hentai在webview中登录
- [dio_cookie_manager](https://pub.flutter-io.cn/packages/dio_cookie_manager): cookie管理
- [image](https://pub.flutter-io.cn/packages/image): 对禁漫图片进行切割并重新组合
- [scrollable_positioned_list](https://pub.dev/packages/scrollable_positioned_list): 能够跳转到指定项目的列表(经我修改的版本)
- [dio_cookie_manager](https://pub.dev/packages/dio_cookie_manager): cookie管理
- [image](https://pub.dev/packages/image): 对禁漫图片进行切割并重新组合
- [webdav_client](https://pub.dev/packages/webdav_client): 使用Webdav进行数据同步(经我修改的版本)
- [flutter_reorderable_grid_view](https://pub.dev/packages/flutter_reorderable_grid_view): 能够由用户调整项目顺序的GridView
- [app_links](https://pub.dev/packages/app_links): 应用链接
- [workmanager](https://pub.dev/packages/workmanager): 后台任务(签到)

### 感谢以下项目
[![Readme Card](https://github-readme-stats.vercel.app/api/pin/?username=tonquer&repo=JMComic-qt)](https://github.com/tonquer/JMComic-qt)
Expand Down
2 changes: 0 additions & 2 deletions android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,6 @@
<data android:host="nhentai.net"/>
<data android:scheme="https"/>
<data android:host="hitomi.la"/>
<data android:scheme="https"/>
<data android:host="nhentai.xxx"/>
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
Expand Down
2 changes: 1 addition & 1 deletion assets/tags.json

Large diffs are not rendered by default.

201 changes: 103 additions & 98 deletions lib/base.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,14 @@ import 'package:shared_preferences/shared_preferences.dart';
import 'network/picacg_network/models.dart';
export 'foundation/def.dart';


//路径分隔符
var pathSep = Platform.pathSeparator;

var downloadManager = DownloadManager();

String? appdataPath;

class Appdata{
class Appdata {
//哔咔相关信息
late String token;
late Profile user;
Expand Down Expand Up @@ -87,17 +86,18 @@ class Appdata{
"", //45 webdav
"0", //46 webdav version
"0", //47 eh warning
"https://nhentai.net", //48 nhentai domain
];

///屏蔽的关键词
List<String> blockingKeyword = [];

///是否第一次使用的判定, 用于显示提示
List<String> firstUse = [
"1",//屏蔽关键词1
"1",//屏蔽关键词2(已废弃)
"1",//漫画详情页
"0",//是否进入过app
"1", //屏蔽关键词1
"1", //屏蔽关键词2(已废弃)
"1", //漫画详情页
"0", //是否进入过app
];

//哔咔
Expand All @@ -119,90 +119,97 @@ class Appdata{
String htName = "";
String htPwd = "";

final jmAuth = <String>[
"1",
"1.5.9",
"18comicAPP",
"Mozilla/5.0 (Linux; Android 13; JM114514 Build/TQ1A.230205.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/114.0.5735.196 Safari/537.36"
];

Appdata(){
Appdata() {
token = "";
var temp = Profile("", defaultAvatarUrl, "", 0, 0, "", "",null,null,null);
var temp =
Profile("", defaultAvatarUrl, "", 0, 0, "", "", null, null, null);
user = temp;
appChannel = "3";
searchHistory = [];
imageQuality = "original";
}

void setQuality(int i){
switch(i){
case 1: imageQuality="low";break;
case 2: imageQuality="middle";break;
case 3: imageQuality="high";break;
case 4: imageQuality="original";break;
void setQuality(int i) {
switch (i) {
case 1:
imageQuality = "low";
break;
case 2:
imageQuality = "middle";
break;
case 3:
imageQuality = "high";
break;
case 4:
imageQuality = "original";
break;
}
writeData();
}

int getQuality(){
switch(imageQuality){
case "low": return 1;
case "middle": return 2;
case "high": return 3;
case "original": return 4;
default: return 4;
int getQuality() {
switch (imageQuality) {
case "low":
return 1;
case "middle":
return 2;
case "high":
return 3;
case "original":
return 4;
default:
return 4;
}
}

var nhentaiData = <String>[
"Pica Comic", // ua
];

void updateNhentai() async{
void updateNhentai() async {
var s = await SharedPreferences.getInstance();
await s.setStringList("nhentaiData", nhentaiData);
}

int getSearchMode(){
var modes = ["dd","da","ld","vd"];
int getSearchMode() {
var modes = ["dd", "da", "ld", "vd"];
return modes.indexOf(settings[1]);
}

void setSearchMode(int mode) async{
var modes = ["dd","da","ld","vd"];
void setSearchMode(int mode) async {
var modes = ["dd", "da", "ld", "vd"];
settings[1] = modes[mode];
var s = await SharedPreferences.getInstance();
await s.setStringList("settings", settings);
}

void updateSettings() async{
void updateSettings() async {
var s = await SharedPreferences.getInstance();
await s.setStringList("settings", settings);
}

void writeFirstUse() async{
void writeFirstUse() async {
var s = await SharedPreferences.getInstance();
await s.setStringList("firstUse", firstUse);
}

void writeHistory() async{
void writeHistory() async {
var s = await SharedPreferences.getInstance();
await s.setStringList("search", searchHistory);
await s.setStringList("pinnedKeywords", pinnedKeyword.toList());
}

Future<void> writeData() async{
Future<void> writeData() async {
var s = await SharedPreferences.getInstance();
await s.setString("token", token);
await s.setString("userName", user.name);
await s.setString("userAvatar", user.avatarUrl);
await s.setString("userId", user.id);
await s.setString("userEmail", user.email);
await s.setInt("userLevel",user.level);
await s.setInt("userExp",user.exp);
await s.setInt("userLevel", user.level);
await s.setInt("userExp", user.exp);
await s.setString("userTitle", user.title);
await s.setString("appChannel",appChannel);
await s.setString("appChannel", appChannel);
await s.setStringList("settings", settings);
await s.setStringList("blockingKeyword", blockingKeyword);
await s.setStringList("firstUse", firstUse);
Expand All @@ -218,81 +225,80 @@ class Appdata{
await s.setString("picacgPassword", picacgPassword);
await s.setString("htName", htName);
await s.setString("htPwd", htPwd);
await s.setStringList("jmAuth", jmAuth);
}
Future<bool> readData() async{

Future<bool> readData() async {
var s = await SharedPreferences.getInstance();
try{
token = (s.getString("token"))??"";
user.name = s.getString("userName")??"";
user.title = s.getString("userTitle")??"";
user.level = s.getInt("userLevel")??0;
user.email = s.getString("userEmail")??"";
user.avatarUrl = s.getString("userAvatar")??defaultAvatarUrl;
user.id = s.getString("userId")??"";
user.exp = s.getInt("userExp")??0;
if(s.getStringList("settings")!=null) {
try {
token = (s.getString("token")) ?? "";
user.name = s.getString("userName") ?? "";
user.title = s.getString("userTitle") ?? "";
user.level = s.getInt("userLevel") ?? 0;
user.email = s.getString("userEmail") ?? "";
user.avatarUrl = s.getString("userAvatar") ?? defaultAvatarUrl;
user.id = s.getString("userId") ?? "";
user.exp = s.getInt("userExp") ?? 0;
if (s.getStringList("settings") != null) {
var st = s.getStringList("settings")!;
for(int i=0;i<st.length&&i<settings.length;i++){
for (int i = 0; i < st.length && i < settings.length; i++) {
settings[i] = st[i];
}
}
while(settings[24].length < 10){
while (settings[24].length < 10) {
settings[24] += "1";
}
if(settings[26].length < 2){
if (settings[26].length < 2) {
settings[26] += "0";
}
appChannel = s.getString("appChannel")??"3";
searchHistory = s.getStringList("search")??[];
pinnedKeyword = (s.getStringList("pinnedKeyword")??[]).toSet();
blockingKeyword = s.getStringList("blockingKeyword")??[];
if(s.getStringList("firstUse")!=null) {
appChannel = s.getString("appChannel") ?? "3";
searchHistory = s.getStringList("search") ?? [];
pinnedKeyword = (s.getStringList("pinnedKeyword") ?? []).toSet();
blockingKeyword = s.getStringList("blockingKeyword") ?? [];
if (s.getStringList("firstUse") != null) {
var st = s.getStringList("firstUse")!;
for(int i=0;i<st.length;i++){
for (int i = 0; i < st.length; i++) {
firstUse[i] = st[i];
}
}
imageQuality = s.getString("image")??"original";
ehId = s.getString("ehId")??"";
ehAccount = s.getString("ehAccount")??"";
ehPassHash = s.getString("ehPassHash")??"";
igneous = s.getString("ehIgneous")??"";
jmName = s.getString("jmName")??"";
jmEmail = s.getString("jmEmail")??"";
jmPwd = s.getString("jmPwd")??"";
picacgAccount = s.getString("picacgAccount")??"";
picacgPassword = s.getString("picacgPassword")??"";
htName = s.getString("htName")??"";
htPwd = s.getString("htPwd")??"";
imageQuality = s.getString("image") ?? "original";
ehId = s.getString("ehId") ?? "";
ehAccount = s.getString("ehAccount") ?? "";
ehPassHash = s.getString("ehPassHash") ?? "";
igneous = s.getString("ehIgneous") ?? "";
jmName = s.getString("jmName") ?? "";
jmEmail = s.getString("jmEmail") ?? "";
jmPwd = s.getString("jmPwd") ?? "";
picacgAccount = s.getString("picacgAccount") ?? "";
picacgPassword = s.getString("picacgPassword") ?? "";
htName = s.getString("htName") ?? "";
htPwd = s.getString("htPwd") ?? "";
nhentaiData = s.getStringList("nhentaiData") ?? nhentaiData;
return firstUse[3]=="1"||token!="";
}
catch(e){
return firstUse[3] == "1" || token != "";
} catch (e) {
return false;
}
}

Map<String, dynamic> toJson() => {
"settings": settings,
"firstUse": firstUse,
"picacgAccount": picacgAccount,
"picacgPassword": picacgPassword,
"token": token,
"ehId": ehId,
"ehPassHash": ehPassHash,
"ehAccount": ehAccount,
"igneous": igneous,
"jmName": jmName,
"jmEmail": jmEmail,
"jmPwd": jmPwd,
"htName": htName,
"htPwd": htPwd,
"history": history.toJson(),
"blockingKeywords": blockingKeyword
};
"settings": settings,
"firstUse": firstUse,
"picacgAccount": picacgAccount,
"picacgPassword": picacgPassword,
"token": token,
"ehId": ehId,
"ehPassHash": ehPassHash,
"ehAccount": ehAccount,
"igneous": igneous,
"jmName": jmName,
"jmEmail": jmEmail,
"jmPwd": jmPwd,
"htName": htName,
"htPwd": htPwd,
"history": history.toJson(),
"blockingKeywords": blockingKeyword
};

bool readDataFromJson(Map<String, dynamic> json){
bool readDataFromJson(Map<String, dynamic> json) {
try {
var newSettings = List<String>.from(json["settings"]);
var downloadPath = settings[22];
Expand Down Expand Up @@ -320,8 +326,7 @@ class Appdata{
blockingKeyword = List.from(json["blockingKeywords"] ?? blockingKeyword);
writeData();
return true;
}
catch(e){
} catch (e) {
readData();
return false;
}
Expand All @@ -332,7 +337,7 @@ var appdata = Appdata();
var notifications = Notifications();

/// clear all data
Future<void> clearAppdata() async{
Future<void> clearAppdata() async {
var s = await SharedPreferences.getInstance();
await s.clear();
appdata.history.clearHistory();
Expand All @@ -344,4 +349,4 @@ Future<void> clearAppdata() async{
await JmNetwork().cookieJar.deleteAll();
await HtmangaNetwork().cookieJar.deleteAll();
await LocalFavoritesManager().clearAll();
}
}
Loading

0 comments on commit 9f21f16

Please sign in to comment.