Files
PiliPlus/lib/http/msg.dart
bggRGjQaUbCoE 67182d2641 feat: create vote
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
2025-07-04 22:08:35 +08:00

625 lines
16 KiB
Dart

import 'package:PiliPlus/http/api.dart';
import 'package:PiliPlus/http/constants.dart';
import 'package:PiliPlus/http/init.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models_new/msg/im_user_infos/datum.dart';
import 'package:PiliPlus/models_new/msg/msg_at/data.dart';
import 'package:PiliPlus/models_new/msg/msg_dnd/uid_setting.dart';
import 'package:PiliPlus/models_new/msg/msg_like/data.dart';
import 'package:PiliPlus/models_new/msg/msg_like_detail/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/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/utils/accounts.dart';
import 'package:PiliPlus/utils/wbi_sign.dart';
import 'package:dio/dio.dart';
import 'package:uuid/uuid.dart';
class MsgHttp {
static Future<LoadingState<MsgReplyData>> msgFeedReplyMe({
int? cursor,
int? cursorTime,
}) async {
var res = await Request().get(
Api.msgFeedReply,
queryParameters: {
if (cursor != null) 'id': cursor,
if (cursorTime != null) 'reply_time': cursorTime,
'platform': 'web',
'mobi_app': 'web',
'build': 0,
'web_location': 333.40164,
},
);
if (res.data['code'] == 0) {
return Success(MsgReplyData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}
}
static Future<LoadingState<MsgAtData>> msgFeedAtMe(
{int? cursor, int? cursorTime}) async {
var res = await Request().get(
Api.msgFeedAt,
queryParameters: {
if (cursor != null) 'id': cursor,
if (cursorTime != null) 'at_time': cursorTime,
'platform': 'web',
'mobi_app': 'web',
'build': 0,
'web_location': 333.40164,
},
);
if (res.data['code'] == 0) {
return Success(MsgAtData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}
}
static Future<LoadingState<MsgLikeData>> msgFeedLikeMe(
{int? cursor, int? cursorTime}) async {
var res = await Request().get(Api.msgFeedLike, queryParameters: {
if (cursor != null) 'id': cursor,
if (cursorTime != null) 'like_time': cursorTime,
'platform': 'web',
'mobi_app': 'web',
'build': 0,
'web_location': 333.40164,
});
if (res.data['code'] == 0) {
return Success(MsgLikeData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}
}
static Future<LoadingState<MsgLikeDetailData>> msgLikeDetail({
required dynamic cardId,
required int pn,
}) async {
var res = await Request().get(
Api.msgLikeDetail,
queryParameters: {
'card_id': cardId,
'pn': pn,
'last_view_at': 0,
'platform': 'web',
'build': 0,
'mobi_app': 'web',
'web_location': 333.40164,
},
);
if (res.data['code'] == 0) {
return Success(MsgLikeDetailData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}
}
static Future<LoadingState<List<MsgSysItem>?>> msgFeedNotify(
{int? cursor, int pageSize = 20}) async {
var res = await Request().get(
Api.msgSysNotify,
queryParameters: {
if (cursor != null) 'cursor': cursor,
'page_size': pageSize,
'mobi_app': 'web',
'build': 0,
'web_location': 333.40164,
},
);
if (res.data['code'] == 0) {
return Success((res.data['data'] as List?)
?.map((e) => MsgSysItem.fromJson(e))
.toList());
} else {
return Error(res.data['message']);
}
}
static Future msgSysUpdateCursor(int cursor) async {
String csrf = Accounts.main.csrf;
var res = await Request().get(Api.msgSysUpdateCursor, queryParameters: {
'csrf': csrf,
'cursor': cursor,
});
if (res.data['code'] == 0) {
return {
'status': true,
};
} else {
return {
'status': false,
'msg': res.data['message'],
};
}
}
static Future uploadImage({
required dynamic path,
required String bucket,
required String dir,
}) async {
var res = await Request().post(
Api.uploadImage,
data: FormData.fromMap({
'bucket': bucket,
'file': await MultipartFile.fromFile(path),
'dir': dir,
'csrf': Accounts.main.csrf,
}),
);
if (res.data['code'] == 0) {
return {
'status': true,
'data': res.data['data'],
};
} else {
return {
'status': false,
'msg': res.data['message'],
};
}
}
static Future uploadBfs({
required String path,
String? category,
String? biz,
CancelToken? cancelToken,
}) async {
final file = await MultipartFile.fromFile(path);
Map<String, dynamic> data = {
'file_up': file,
if (category != null) 'category': category,
if (biz != null) 'biz': biz,
'csrf': Accounts.main.csrf,
};
var res = await Request().post(
Api.uploadBfs,
data: FormData.fromMap(data),
cancelToken: cancelToken,
);
if (res.data['code'] == 0) {
return {
'status': true,
'data': UploadBfsResData.fromJson(res.data['data']),
};
} else {
return {
'status': false,
'msg': res.data['message'],
};
}
}
static Future createTextDynamic(
dynamic content,
) async {
String csrf = Accounts.main.csrf;
Map<String, dynamic> data = await WbiSign.makSign({
'dynamic_id': 0,
'type': 4,
'rid': 0,
'content': content,
'csrf_token': csrf,
'csrf': csrf,
});
var res = await Request().post(
HttpString.tUrl + Api.createTextDynamic,
data: FormData.fromMap(data),
);
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {
'status': false,
'msg': res.data['message'],
};
}
}
static Future removeDynamic({required dynIdStr, dynType, ridStr}) async {
var res = await Request().post(
Api.removeDynamic,
queryParameters: {
'platform': 'web',
'csrf': Accounts.main.csrf,
},
data: {
"dyn_id_str": dynIdStr,
if (dynType != null) "dyn_type": dynType,
if (ridStr != null) "rid_str": ridStr,
},
);
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future removeMsg(
dynamic talkerId,
) async {
String csrf = Accounts.main.csrf;
Map<String, dynamic> data = await WbiSign.makSign({
'talker_id': talkerId,
'session_type': 1,
'build': 0,
'mobi_app': 'web',
'csrf_token': csrf,
'csrf': csrf
});
var res = await Request().post(
HttpString.tUrl + Api.removeMsg,
data: FormData.fromMap(data),
);
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future delMsgfeed(
int tp,
dynamic id,
) async {
String csrf = Accounts.main.csrf;
var res = await Request().post(
Api.delMsgfeed,
data: {
'tp': tp,
'id': id,
'build': 0,
'mobi_app': 'web',
'csrf_token': csrf,
'csrf': csrf,
},
options: Options(
contentType: Headers.formUrlEncodedContentType,
),
);
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {
'status': false,
'msg': res.data['message'],
};
}
}
static Future delSysMsg(
dynamic id,
) async {
String csrf = Accounts.main.csrf;
var res = await Request().post(
HttpString.messageBaseUrl + Api.delSysMsg,
queryParameters: {
'mobi_app': 'android',
'csrf': csrf,
},
data: {
'csrf': csrf,
'ids': [id],
'station_ids': [],
'type': 4,
'mobi_app': 'android',
},
);
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {
'status': false,
'msg': res.data['message'],
};
}
}
static Future setTop({
required dynamic talkerId,
required int opType,
}) async {
String csrf = Accounts.main.csrf;
Map<String, dynamic> data = await WbiSign.makSign({
'talker_id': talkerId,
'session_type': 1,
'op_type': opType,
'build': 0,
'mobi_app': 'web',
'csrf_token': csrf,
'csrf': csrf
});
var res = await Request()
.post(HttpString.tUrl + Api.setTop, data: FormData.fromMap(data));
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {
'status': false,
'msg': res.data['message'],
};
}
}
// 消息标记已读
static Future ackSessionMsg({
int? talkerId,
int? ackSeqno,
}) async {
String csrf = Accounts.main.csrf;
final params = await WbiSign.makSign({
'talker_id': talkerId,
'session_type': 1,
'ack_seqno': ackSeqno,
'build': 0,
'mobi_app': 'web',
'csrf_token': csrf,
'csrf': csrf
});
var res = await Request().get(Api.ackSessionMsg, queryParameters: params);
if (res.data['code'] == 0) {
return {
'status': true,
'data': res.data['data'],
};
} else {
return {
'status': false,
'msg': "message: ${res.data['message']},"
" msg: ${res.data['msg']},"
" code: ${res.data['code']}",
};
}
}
// 发送私信
static Future sendMsg({
int? senderUid,
int? receiverId,
int? msgType,
dynamic content,
}) async {
String csrf = Accounts.main.csrf;
final devId = getDevId();
Map<String, dynamic> base = {
'msg': {
'sender_uid': senderUid,
'receiver_id': receiverId,
'receiver_type': 1,
'msg_type': msgType ?? 1,
'msg_status': 0,
'dev_id': devId,
'timestamp': DateTime.now().millisecondsSinceEpoch ~/ 1000,
'new_face_version': 1,
'content': content,
},
'from_firework': 0,
'build': 0,
'mobi_app': 'web',
'csrf_token': csrf,
'csrf': csrf,
};
Map<String, dynamic> params = await WbiSign.makSign(base);
var res = await Request().post(
Api.sendMsg,
queryParameters: <String, dynamic>{
'w_sender_uid': senderUid,
'w_receiver_id': receiverId,
'w_dev_id': devId,
'w_rid': params['w_rid'],
'wts': params['wts'],
},
data: base,
options: Options(
contentType: Headers.formUrlEncodedContentType,
),
);
if (res.data['code'] == 0) {
return {
'status': true,
'data': res.data['data'],
};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static String getDevId() {
return const Uuid().v4();
}
static Future msgSetNotice({
required dynamic id,
required int noticeState,
}) async {
final csrf = Accounts.main.csrf;
var res = await Request().post(
Api.msgSetNotice,
data: {
'mobi_app': 'web',
'platform': 'web',
'tp': 0,
'id': id,
'notice_state': noticeState,
'build': 0,
'csrf_token': csrf,
'csrf': csrf,
},
options: Options(
contentType: Headers.formUrlEncodedContentType,
),
);
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future setMsgDnd({
required uid,
required int setting,
required dndUid,
}) async {
final csrf = Accounts.main.csrf;
var res = await Request().post(
Api.setMsgDnd,
data: {
'uid': uid,
'setting': setting,
'dnd_uid': dndUid,
'build': 0,
'mobi_app': 'web',
'csrf_token': csrf,
'csrf': csrf,
},
options: Options(contentType: Headers.formUrlEncodedContentType),
);
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future setPushSs({
required int setting,
required talkerUid,
}) async {
final csrf = Accounts.main.csrf;
var res = await Request().post(
Api.setPushSs,
data: {
'setting': setting,
'talker_uid': talkerUid,
'build': 0,
'mobi_app': 'web',
'csrf_token': csrf,
'csrf': csrf,
},
options: Options(contentType: Headers.formUrlEncodedContentType),
);
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future<LoadingState<List<ImUserInfosData>?>> imUserInfos({
required List uids,
}) async {
final csrf = Accounts.main.csrf;
var res = await Request().get(
Api.imUserInfos,
queryParameters: {
'uids': uids.join(','),
'build': 0,
'mobi_app': 'web',
'csrf_token': csrf,
'csrf': csrf,
},
);
if (res.data['code'] == 0) {
return Success((res.data['data'] as List?)
?.map((e) => ImUserInfosData.fromJson(e))
.toList());
} else {
return Error(res.data['message']);
}
}
static Future<LoadingState<SessionSsData>> getSessionSs({
required talkerUid,
}) async {
final csrf = Accounts.main.csrf;
var res = await Request().get(
Api.getSessionSs,
queryParameters: {
'talker_uid': talkerUid,
'build': 0,
'mobi_app': 'web',
'csrf_token': csrf,
'csrf': csrf,
},
);
if (res.data['code'] == 0) {
return Success(SessionSsData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}
}
static Future<LoadingState<List<UidSetting>?>> getMsgDnd({
required uidsStr,
}) async {
final csrf = Accounts.main.csrf;
var res = await Request().get(
Api.getMsgDnd,
queryParameters: {
'own_uid': Accounts.main.mid,
'uids_str': uidsStr,
'build': 0,
'mobi_app': 'web',
'csrf_token': csrf,
'csrf': csrf,
},
);
if (res.data['code'] == 0) {
return Success((res.data['data']?['uid_settings'] as List?)
?.map((e) => UidSetting.fromJson(e))
.toList());
} else {
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']};
}
}
}