Skip to content

Commit f33921d

Browse files
committed
Merge branch 'pr/SlotSun/793' into dev
2 parents 82e6dc1 + b49e662 commit f33921d

File tree

23 files changed

+1038
-422
lines changed

23 files changed

+1038
-422
lines changed

assets/tv_app_version.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"version": "1.3.5",
3+
"version_num": 10305,
4+
"version_desc": "- 修复虎牙播放中断 #723 @SlotSun\n- 修复哔哩哔哩加载失败",
5+
"prerelease":true,
6+
"download_url": "https://github.com/xiaoyaocz/dart_simple_live/releases"
7+
}

simple_live_app/lib/main.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import 'package:simple_live_app/app/log.dart';
1818
import 'package:simple_live_app/app/utils.dart';
1919
import 'package:simple_live_app/app/utils/listen_fourth_button.dart';
2020
import 'package:simple_live_app/models/db/follow_user.dart';
21+
import 'package:simple_live_app/models/db/follow_user_tag.dart';
2122
import 'package:simple_live_app/models/db/history.dart';
2223
import 'package:simple_live_app/modules/other/debug_log_page.dart';
2324
import 'package:simple_live_app/routes/app_pages.dart';
@@ -66,6 +67,7 @@ Future migrateData() async {
6667
"followuser",
6768
//旧版本写错成hostiry了
6869
"hostiry",
70+
"followusertag",
6971
"localstorage",
7072
"danmushield",
7173
];
@@ -116,6 +118,7 @@ Future initWindow() async {
116118
Future initServices() async {
117119
Hive.registerAdapter(FollowUserAdapter());
118120
Hive.registerAdapter(HistoryAdapter());
121+
Hive.registerAdapter(FollowUserTagAdapter());
119122

120123
//包信息
121124
Utils.packageInfo = await PackageInfo.fromPlatform();

simple_live_app/lib/models/db/follow_user.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class FollowUser {
1212
required this.userName,
1313
required this.face,
1414
required this.addTime,
15+
this.tag = "全部"
1516
});
1617

1718
///id=siteId_roomId
@@ -33,6 +34,9 @@ class FollowUser {
3334
@HiveField(5)
3435
DateTime addTime;
3536

37+
@HiveField(6)
38+
String tag;
39+
3640
/// 直播状态
3741
/// 0=未知(加载中) 1=未开播 2=直播中
3842
Rx<int> liveStatus = 0.obs;
@@ -47,6 +51,7 @@ class FollowUser {
4751
userName: json['userName'],
4852
face: json['face'],
4953
addTime: DateTime.parse(json['addTime']),
54+
tag: json["tag"]??"全部",
5055
);
5156

5257
Map<String, dynamic> toJson() => {
@@ -56,5 +61,6 @@ class FollowUser {
5661
'userName': userName,
5762
'face': face,
5863
'addTime': addTime.toString(),
64+
'tag':tag,
5965
};
6066
}

simple_live_app/lib/models/db/follow_user.g.dart

Lines changed: 5 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import 'package:hive/hive.dart';
2+
3+
part 'follow_user_tag.g.dart';
4+
5+
@HiveType(typeId: 3)
6+
class FollowUserTag {
7+
@HiveField(1)
8+
String id;
9+
10+
// 用户自定义tag
11+
@HiveField(2)
12+
String tag;
13+
14+
// followUserId
15+
@HiveField(3)
16+
List<String> userId;
17+
18+
FollowUserTag({
19+
required this.id,
20+
required this.tag,
21+
required this.userId,
22+
});
23+
24+
factory FollowUserTag.fromJson(Map<String, dynamic> json) {
25+
return FollowUserTag(
26+
id: json['id'],
27+
tag: json['tag'],
28+
userId: List<String>.from(json['userId']),
29+
);
30+
}
31+
32+
Map<String, dynamic> toJson() {
33+
return {
34+
'id': id,
35+
'tag': tag,
36+
'userId': userId,
37+
};
38+
}
39+
40+
FollowUserTag copyWith({
41+
String? id,
42+
String? tag,
43+
List<String>? userId,
44+
}) {
45+
return FollowUserTag(
46+
id: id ?? this.id,
47+
tag: tag ?? this.tag,
48+
userId: userId ?? this.userId,
49+
);
50+
}
51+
}

simple_live_app/lib/models/db/follow_user_tag.g.dart

Lines changed: 47 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

simple_live_app/lib/modules/follow_user/follow_user_controller.dart

Lines changed: 117 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
// ignore_for_file: invalid_use_of_protected_member
22

33
import 'dart:async';
4+
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
45
import 'package:get/get.dart';
56
import 'package:simple_live_app/app/controller/base_controller.dart';
67
import 'package:simple_live_app/app/event_bus.dart';
8+
import 'package:simple_live_app/app/log.dart';
79
import 'package:simple_live_app/app/utils.dart';
810
import 'package:simple_live_app/models/db/follow_user.dart';
11+
import 'package:simple_live_app/models/db/follow_user_tag.dart';
912
import 'package:simple_live_app/services/db_service.dart';
1013
import 'package:simple_live_app/services/follow_service.dart';
1114

@@ -14,13 +17,21 @@ class FollowUserController extends BasePageController<FollowUser> {
1417
StreamSubscription<dynamic>? onUpdatedListStream;
1518

1619
/// 0:全部 1:直播中 2:未直播
17-
var filterMode = 0.obs;
20+
var filterMode = FollowUserTag(id: "0", tag: "全部", userId: []).obs;
21+
RxList<FollowUserTag> tagList = [
22+
FollowUserTag(id: "0", tag: "全部", userId: []),
23+
FollowUserTag(id: "1", tag: "直播中", userId: []),
24+
FollowUserTag(id: "2", tag: "未开播", userId: []),
25+
].obs;
26+
27+
// 用户自定义标签
28+
RxList<FollowUserTag> userTagList = <FollowUserTag>[].obs;
1829

1930
@override
2031
void onInit() {
2132
onUpdatedIndexedStream = EventBus.instance.listen(
2233
EventBus.kBottomNavigationBarClicked,
23-
(index) {
34+
(index) {
2435
if (index == 1) {
2536
scrollToTopOrRefresh();
2637
}
@@ -36,6 +47,7 @@ class FollowUserController extends BasePageController<FollowUser> {
3647
@override
3748
Future refreshData() async {
3849
await FollowService.instance.loadData();
50+
updateTagList();
3951
super.refreshData();
4052
}
4153

@@ -44,40 +56,134 @@ class FollowUserController extends BasePageController<FollowUser> {
4456
if (page > 1) {
4557
return Future.value([]);
4658
}
47-
if (filterMode.value == 0) {
59+
if (filterMode.value.tag == "全部") {
4860
return FollowService.instance.followList.value;
49-
} else if (filterMode.value == 1) {
61+
} else if (filterMode.value.tag == "直播中") {
5062
return FollowService.instance.liveList.value;
51-
} else {
63+
} else if (filterMode.value.tag == "未开播") {
5264
return FollowService.instance.notLiveList.value;
65+
} else {
66+
FollowService.instance.filterDataByTag(filterMode.value);
67+
return FollowService.instance.curTagFollowList.value;
68+
}
69+
}
70+
71+
void updateTagList() {
72+
userTagList.assignAll(FollowService.instance.followTagList);
73+
tagList.value = tagList.take(3).toList();
74+
for (var i in userTagList) {
75+
if (!tagList.contains(i)) {
76+
tagList.add(i);
77+
}
5378
}
5479
}
5580

5681
void filterData() {
57-
if (filterMode.value == 0) {
82+
if (filterMode.value.tag == "全部") {
5883
list.assignAll(FollowService.instance.followList.value);
59-
} else if (filterMode.value == 1) {
84+
} else if (filterMode.value.tag == "直播中") {
6085
list.assignAll(FollowService.instance.liveList.value);
61-
} else if (filterMode.value == 2) {
86+
} else if (filterMode.value.tag == "未开播") {
6287
list.assignAll(FollowService.instance.notLiveList.value);
88+
} else {
89+
FollowService.instance.filterDataByTag(filterMode.value);
90+
list.assignAll(FollowService.instance.curTagFollowList);
6391
}
6492
}
6593

66-
void setFilterMode(int mode) {
67-
filterMode.value = mode;
94+
void setFilterMode(FollowUserTag tag) {
95+
filterMode.value = tag;
6896
filterData();
6997
}
7098

7199
void removeItem(FollowUser item) async {
72100
var result =
73-
await Utils.showAlertDialog("确定要取消关注${item.userName}吗?", title: "取消关注");
101+
await Utils.showAlertDialog("确定要取消关注${item.userName}吗?", title: "取消关注");
74102
if (!result) {
75103
return;
76104
}
105+
// 取消关注同时删除标签内的 userId
106+
if(item.tag != "全部"){
107+
var tag = tagList.firstWhere((tag) => tag.tag == item.tag);
108+
tag.userId.remove(item.id);
109+
updateTag(tag);
110+
}
77111
await DBService.instance.followBox.delete(item.id);
78112
refreshData();
79113
}
80114

115+
void updateItem(FollowUser item){
116+
FollowService.instance.addFollow(item);
117+
}
118+
// 修改item的标签
119+
void setItemTag(FollowUser item, FollowUserTag targetTag) {
120+
FollowUserTag tarTag = targetTag;
121+
FollowUserTag curTag =
122+
tagList.firstWhere((tag) => tag.tag == item.tag);
123+
// 从当前标签(非全部)删除item 向目标标签(全部包含所有item == 非全部)添加item
124+
curTag.userId.remove(item.id);
125+
tarTag.userId.addIf(!tarTag.userId.contains(item.id), item.id);
126+
// 数据库更新
127+
item.tag = tarTag.tag;
128+
updateTag(curTag);
129+
updateTag(tarTag);
130+
updateItem(item);
131+
filterData();
132+
}
133+
134+
void removeTag(FollowUserTag tag) {
135+
// 将tag下的所有follow设置为全部
136+
for(var i in tag.userId){
137+
var follow = DBService.instance.followBox.get(i);
138+
if(follow != null){
139+
follow.tag = "全部";
140+
updateItem(follow);
141+
}
142+
}
143+
FollowService.instance.delFollowUserTag(tag);
144+
updateTagList();
145+
Log.i('删除tag${tag.tag}');
146+
}
147+
148+
void addTag(String tag) async {
149+
FollowService.instance
150+
.addFollowUserTag(tag)
151+
.then((value) => updateTagList());
152+
}
153+
154+
void updateTag(FollowUserTag followUserTag) {
155+
if(followUserTag.tag == '全部'){
156+
return;
157+
}
158+
FollowService.instance.updateFollowUserTag(followUserTag);
159+
}
160+
161+
void updateTagName(FollowUserTag followUserTag, String tag) {
162+
// 未操作
163+
if (followUserTag.tag == tag) {
164+
return;
165+
}
166+
// 避免重名
167+
if (tagList.any((item) => item.tag == tag)) {
168+
SmartDialog.showToast("标签名重复,修改失败");
169+
return;
170+
}
171+
final FollowUserTag item = followUserTag.copyWith(tag: tag);
172+
updateTag(item);
173+
SmartDialog.showToast("修改成功");
174+
updateTagList();
175+
}
176+
177+
// 调整标签顺序
178+
void updateTagOrder(int oldIndex, int newIndex) {
179+
if (newIndex > oldIndex) newIndex -= 1; // 处理索引调整
180+
final item = userTagList.removeAt(oldIndex);
181+
userTagList.insert(newIndex, item);
182+
tagList.value = tagList.take(3).toList();
183+
tagList.addAll(userTagList);
184+
DBService.instance.updateFollowTagOrder(userTagList);
185+
}
186+
81187
@override
82188
void onClose() {
83189
onUpdatedIndexedStream?.cancel();

0 commit comments

Comments
 (0)