mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
74 lines
2.2 KiB
Dart
74 lines
2.2 KiB
Dart
import 'package:PiliPalaX/http/loading_state.dart';
|
||
import 'package:PiliPalaX/pages/common/common_controller.dart';
|
||
import 'package:get/get.dart';
|
||
import 'package:PiliPalaX/http/search.dart';
|
||
import 'package:PiliPalaX/models/common/search_type.dart';
|
||
import 'package:PiliPalaX/utils/id_utils.dart';
|
||
import 'package:PiliPalaX/utils/utils.dart';
|
||
|
||
class SearchPanelController extends CommonController {
|
||
SearchPanelController({this.keyword, this.searchType});
|
||
String? keyword;
|
||
SearchType? searchType;
|
||
// 结果排序方式 搜索类型为视频、专栏及相簿时
|
||
RxString order = ''.obs;
|
||
// 视频时长筛选 仅用于搜索视频
|
||
RxInt duration = 0.obs;
|
||
|
||
@override
|
||
void onInit() {
|
||
super.onInit();
|
||
queryData();
|
||
}
|
||
|
||
@override
|
||
void handleSuccess(List currentList, List dataList) {
|
||
onPushDetail(dataList);
|
||
}
|
||
|
||
void onPushDetail(resultList) async {
|
||
// 匹配输入内容,如果是AV、BV号且有结果 直接跳转详情页
|
||
Map matchRes = IdUtils.matchAvorBv(input: keyword);
|
||
List matchKeys = matchRes.keys.toList();
|
||
String? bvid;
|
||
try {
|
||
bvid = resultList.first.bvid;
|
||
} catch (_) {
|
||
bvid = null;
|
||
}
|
||
// keyword 可能输入纯数字
|
||
int? aid;
|
||
try {
|
||
aid = resultList.first.aid;
|
||
} catch (_) {
|
||
aid = null;
|
||
}
|
||
if (matchKeys.isNotEmpty && searchType == SearchType.video ||
|
||
aid.toString() == keyword) {
|
||
String heroTag = Utils.makeHeroTag(bvid);
|
||
int cid = await SearchHttp.ab2c(aid: aid, bvid: bvid);
|
||
if (matchKeys.isNotEmpty &&
|
||
matchKeys.first == 'BV' &&
|
||
matchRes[matchKeys.first] == bvid ||
|
||
matchKeys.isNotEmpty &&
|
||
matchKeys.first == 'AV' &&
|
||
matchRes[matchKeys.first] == aid ||
|
||
aid.toString() == keyword) {
|
||
Get.toNamed(
|
||
'/video?bvid=$bvid&cid=$cid',
|
||
arguments: {'videoItem': resultList.first, 'heroTag': heroTag},
|
||
);
|
||
}
|
||
}
|
||
}
|
||
|
||
@override
|
||
Future<LoadingState> customGetData() => SearchHttp.searchByType(
|
||
searchType: searchType!,
|
||
keyword: keyword!,
|
||
page: currentPage,
|
||
order: searchType!.type != 'video' ? null : order.value,
|
||
duration: searchType!.type != 'video' ? null : duration.value,
|
||
);
|
||
}
|