mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-05-30 23:58:13 +08:00
opt msg unread
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -475,11 +475,11 @@ class Api {
|
|||||||
|
|
||||||
// 获取未读私信数
|
// 获取未读私信数
|
||||||
// https://api.vc.bilibili.com/session_svr/v1/session_svr/single_unread
|
// https://api.vc.bilibili.com/session_svr/v1/session_svr/single_unread
|
||||||
// static const String msgUnread =
|
static const String msgUnread =
|
||||||
// '${HttpString.tUrl}/session_svr/v1/session_svr/single_unread';
|
'${HttpString.tUrl}/session_svr/v1/session_svr/single_unread';
|
||||||
|
|
||||||
// 获取消息中心未读信息
|
// 获取消息中心未读信息
|
||||||
// static const String msgFeedUnread = '/x/msgfeed/unread';
|
static const String msgFeedUnread = '/x/msgfeed/unread';
|
||||||
//https://api.bilibili.com/x/msgfeed/reply?platform=web&build=0&mobi_app=web
|
//https://api.bilibili.com/x/msgfeed/reply?platform=web&build=0&mobi_app=web
|
||||||
static const String msgFeedReply = '/x/msgfeed/reply';
|
static const String msgFeedReply = '/x/msgfeed/reply';
|
||||||
//https://api.bilibili.com/x/msgfeed/at?platform=web&build=0&mobi_app=web
|
//https://api.bilibili.com/x/msgfeed/at?platform=web&build=0&mobi_app=web
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ import 'package:PiliPlus/models_new/msg/msg_like/data.dart';
|
|||||||
import 'package:PiliPlus/models_new/msg/msg_reply/data.dart';
|
import 'package:PiliPlus/models_new/msg/msg_reply/data.dart';
|
||||||
import 'package:PiliPlus/models_new/msg/msg_sys/data.dart';
|
import 'package:PiliPlus/models_new/msg/msg_sys/data.dart';
|
||||||
import 'package:PiliPlus/models_new/msg/session_ss/data.dart';
|
import 'package:PiliPlus/models_new/msg/session_ss/data.dart';
|
||||||
|
import 'package:PiliPlus/models_new/msgfeed_unread/data.dart';
|
||||||
|
import 'package:PiliPlus/models_new/single_unread/data.dart';
|
||||||
import 'package:PiliPlus/models_new/upload_bfs/data.dart';
|
import 'package:PiliPlus/models_new/upload_bfs/data.dart';
|
||||||
import 'package:PiliPlus/utils/storage.dart';
|
import 'package:PiliPlus/utils/storage.dart';
|
||||||
import 'package:PiliPlus/utils/wbi_sign.dart';
|
import 'package:PiliPlus/utils/wbi_sign.dart';
|
||||||
@@ -556,4 +558,43 @@ class MsgHttp {
|
|||||||
return Error(res.data['message']);
|
return Error(res.data['message']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Future msgUnread() async {
|
||||||
|
var res = await Request().get(
|
||||||
|
Api.msgUnread,
|
||||||
|
queryParameters: {
|
||||||
|
'build': 0,
|
||||||
|
'mobi_app': 'web',
|
||||||
|
'unread_type': 0,
|
||||||
|
'web_location': 333.1365,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
if (res.data['code'] == 0) {
|
||||||
|
return {
|
||||||
|
'status': true,
|
||||||
|
'data': SingleUnreadData.fromJson(res.data['data'])
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
return {'status': false, 'data': res.data['message']};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static Future msgFeedUnread() async {
|
||||||
|
var res = await Request().get(
|
||||||
|
Api.msgFeedUnread,
|
||||||
|
queryParameters: {
|
||||||
|
'build': 0,
|
||||||
|
'mobi_app': 'web',
|
||||||
|
'web_location': 333.1365,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
if (res.data['code'] == 0) {
|
||||||
|
return {
|
||||||
|
'status': true,
|
||||||
|
'data': MsgFeedUnreadData.fromJson(res.data['data'])
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
return {'status': false, 'data': res.data['message']};
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
42
lib/models_new/msgfeed_unread/data.dart
Normal file
42
lib/models_new/msgfeed_unread/data.dart
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
class MsgFeedUnreadData {
|
||||||
|
int at;
|
||||||
|
int coin;
|
||||||
|
int danmu;
|
||||||
|
int favorite;
|
||||||
|
int like;
|
||||||
|
int recvLike;
|
||||||
|
int recvReply;
|
||||||
|
int reply;
|
||||||
|
int sysMsg;
|
||||||
|
int sysMsgStyle;
|
||||||
|
int up;
|
||||||
|
|
||||||
|
MsgFeedUnreadData({
|
||||||
|
required this.at,
|
||||||
|
required this.coin,
|
||||||
|
required this.danmu,
|
||||||
|
required this.favorite,
|
||||||
|
required this.like,
|
||||||
|
required this.recvLike,
|
||||||
|
required this.recvReply,
|
||||||
|
required this.reply,
|
||||||
|
required this.sysMsg,
|
||||||
|
required this.sysMsgStyle,
|
||||||
|
required this.up,
|
||||||
|
});
|
||||||
|
|
||||||
|
factory MsgFeedUnreadData.fromJson(Map<String, dynamic> json) =>
|
||||||
|
MsgFeedUnreadData(
|
||||||
|
at: json['at'] ?? 0,
|
||||||
|
coin: json['coin'] ?? 0,
|
||||||
|
danmu: json['danmu'] ?? 0,
|
||||||
|
favorite: json['favorite'] ?? 0,
|
||||||
|
like: json['like'] ?? 0,
|
||||||
|
recvLike: json['recv_like'] ?? 0,
|
||||||
|
recvReply: json['recv_reply'] ?? 0,
|
||||||
|
reply: json['reply'] ?? 0,
|
||||||
|
sysMsg: json['sys_msg'] ?? 0,
|
||||||
|
sysMsgStyle: json['sys_msg_style'] ?? 0,
|
||||||
|
up: json['up'] ?? 0,
|
||||||
|
);
|
||||||
|
}
|
||||||
33
lib/models_new/single_unread/data.dart
Normal file
33
lib/models_new/single_unread/data.dart
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
class SingleUnreadData {
|
||||||
|
int unfollowUnread;
|
||||||
|
int followUnread;
|
||||||
|
int unfollowPushMsg;
|
||||||
|
int dustbinPushMsg;
|
||||||
|
int dustbinUnread;
|
||||||
|
int bizMsgUnfollowUnread;
|
||||||
|
int bizMsgFollowUnread;
|
||||||
|
int customUnread;
|
||||||
|
|
||||||
|
SingleUnreadData({
|
||||||
|
required this.unfollowUnread,
|
||||||
|
required this.followUnread,
|
||||||
|
required this.unfollowPushMsg,
|
||||||
|
required this.dustbinPushMsg,
|
||||||
|
required this.dustbinUnread,
|
||||||
|
required this.bizMsgUnfollowUnread,
|
||||||
|
required this.bizMsgFollowUnread,
|
||||||
|
required this.customUnread,
|
||||||
|
});
|
||||||
|
|
||||||
|
factory SingleUnreadData.fromJson(Map<String, dynamic> json) =>
|
||||||
|
SingleUnreadData(
|
||||||
|
unfollowUnread: json['unfollow_unread'] ?? 0,
|
||||||
|
followUnread: json['follow_unread'] ?? 0,
|
||||||
|
unfollowPushMsg: json['unfollow_push_msg'] ?? 0,
|
||||||
|
dustbinPushMsg: json['dustbin_push_msg'] ?? 0,
|
||||||
|
dustbinUnread: json['dustbin_unread'] ?? 0,
|
||||||
|
bizMsgUnfollowUnread: json['biz_msg_unfollow_unread'] ?? 0,
|
||||||
|
bizMsgFollowUnread: json['biz_msg_follow_unread'] ?? 0,
|
||||||
|
customUnread: json['custom_unread'] ?? 0,
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -2,10 +2,12 @@ import 'dart:async';
|
|||||||
import 'dart:math' show max;
|
import 'dart:math' show max;
|
||||||
|
|
||||||
import 'package:PiliPlus/grpc/dyn.dart';
|
import 'package:PiliPlus/grpc/dyn.dart';
|
||||||
import 'package:PiliPlus/grpc/im.dart';
|
import 'package:PiliPlus/http/msg.dart';
|
||||||
import 'package:PiliPlus/models/common/dynamic/dynamic_badge_mode.dart';
|
import 'package:PiliPlus/models/common/dynamic/dynamic_badge_mode.dart';
|
||||||
import 'package:PiliPlus/models/common/msg/msg_unread_type.dart';
|
import 'package:PiliPlus/models/common/msg/msg_unread_type.dart';
|
||||||
import 'package:PiliPlus/models/common/nav_bar_config.dart';
|
import 'package:PiliPlus/models/common/nav_bar_config.dart';
|
||||||
|
import 'package:PiliPlus/models_new/msgfeed_unread/data.dart';
|
||||||
|
import 'package:PiliPlus/models_new/single_unread/data.dart';
|
||||||
import 'package:PiliPlus/utils/storage.dart';
|
import 'package:PiliPlus/utils/storage.dart';
|
||||||
import 'package:PiliPlus/utils/utils.dart';
|
import 'package:PiliPlus/utils/utils.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
@@ -83,45 +85,65 @@ class MainController extends GetxController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> queryUnreadMsg() async {
|
Future<int> _msgUnread() async {
|
||||||
if (!isLogin.value || homeIndex == -1 || msgUnReadTypes.isEmpty) {
|
if (msgUnReadTypes.contains(MsgUnReadType.pm)) {
|
||||||
msgUnReadCount.value = '';
|
var res = await MsgHttp.msgUnread();
|
||||||
return;
|
if (res['status']) {
|
||||||
|
SingleUnreadData data = res['data'];
|
||||||
|
return data.followUnread +
|
||||||
|
data.unfollowUnread +
|
||||||
|
data.bizMsgFollowUnread +
|
||||||
|
data.bizMsgUnfollowUnread +
|
||||||
|
data.unfollowPushMsg +
|
||||||
|
data.customUnread;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<int> _msgFeedUnread() async {
|
||||||
int count = 0;
|
int count = 0;
|
||||||
final res = await ImGrpc.getTotalUnread();
|
var remainTypes = Set<MsgUnReadType>.from(msgUnReadTypes)
|
||||||
if (res.isSuccess) {
|
..remove(MsgUnReadType.pm);
|
||||||
final data = res.data;
|
if (remainTypes.isNotEmpty) {
|
||||||
if (msgUnReadTypes.length == MsgUnReadType.values.length) {
|
var res = await MsgHttp.msgFeedUnread();
|
||||||
count = data.hasTotalUnread() ? data.totalUnread : 0;
|
if (res['status']) {
|
||||||
} else {
|
MsgFeedUnreadData data = res['data'];
|
||||||
final msgUnread = data.msgFeedUnread.unread;
|
for (var item in remainTypes) {
|
||||||
for (final item in msgUnReadTypes) {
|
|
||||||
switch (item) {
|
switch (item) {
|
||||||
case MsgUnReadType.pm:
|
case MsgUnReadType.pm:
|
||||||
final pmUnread = data.sessionSingleUnread;
|
|
||||||
count += (pmUnread.followUnread +
|
|
||||||
pmUnread.unfollowUnread +
|
|
||||||
pmUnread.dustbinUnread)
|
|
||||||
.toInt();
|
|
||||||
break;
|
break;
|
||||||
case MsgUnReadType.reply:
|
case MsgUnReadType.reply:
|
||||||
count += msgUnread['reply']?.toInt() ?? 0;
|
count += data.reply;
|
||||||
break;
|
break;
|
||||||
case MsgUnReadType.at:
|
case MsgUnReadType.at:
|
||||||
count += msgUnread['at']?.toInt() ?? 0;
|
count += data.at;
|
||||||
break;
|
break;
|
||||||
case MsgUnReadType.like:
|
case MsgUnReadType.like:
|
||||||
count += msgUnread['like']?.toInt() ?? 0;
|
count += data.like;
|
||||||
break;
|
break;
|
||||||
case MsgUnReadType.sysMsg:
|
case MsgUnReadType.sysMsg:
|
||||||
count += msgUnread['sys_msg']?.toInt() ?? 0;
|
count += data.sysMsg;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> queryUnreadMsg([bool isChangeType = false]) async {
|
||||||
|
if (!isLogin.value ||
|
||||||
|
homeIndex == -1 ||
|
||||||
|
msgUnReadTypes.isEmpty ||
|
||||||
|
msgBadgeMode == DynamicBadgeMode.hidden) {
|
||||||
|
msgUnReadCount.value = '';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var res = await Future.wait([_msgUnread(), _msgFeedUnread()]);
|
||||||
|
|
||||||
|
int count = res.fold(0, (prev, e) => prev + e);
|
||||||
|
|
||||||
final countStr = count == 0
|
final countStr = count == 0
|
||||||
? ''
|
? ''
|
||||||
@@ -129,7 +151,9 @@ class MainController extends GetxController
|
|||||||
? '99+'
|
? '99+'
|
||||||
: count.toString();
|
: count.toString();
|
||||||
if (msgUnReadCount.value == countStr) {
|
if (msgUnReadCount.value == countStr) {
|
||||||
msgUnReadCount.refresh();
|
if (isChangeType) {
|
||||||
|
msgUnReadCount.refresh();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
msgUnReadCount.value = countStr;
|
msgUnReadCount.value = countStr;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -373,7 +373,7 @@ List<SettingsModel> get styleSettings => [
|
|||||||
MainController mainController = Get.put(MainController())
|
MainController mainController = Get.put(MainController())
|
||||||
..msgBadgeMode = DynamicBadgeMode.values[result.index];
|
..msgBadgeMode = DynamicBadgeMode.values[result.index];
|
||||||
if (mainController.msgBadgeMode != DynamicBadgeMode.hidden) {
|
if (mainController.msgBadgeMode != DynamicBadgeMode.hidden) {
|
||||||
mainController.queryUnreadMsg();
|
mainController.queryUnreadMsg(true);
|
||||||
} else {
|
} else {
|
||||||
mainController.msgUnReadCount.value = '';
|
mainController.msgUnReadCount.value = '';
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user