diff --git a/lib/main.dart b/lib/main.dart index c2222f8..65fadae 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -5,9 +5,6 @@ import 'package:once_power/config/config.dart'; import 'package:once_power/provider/provider.dart'; import 'package:once_power/views/home.dart'; -// TODO 添加上传 excel 或 csv 文件重命名的功能 -// TODO 添加自动重命名视频文件名的功能 - void main() async { await Global.init(); runApp(const ProviderScope(child: MyApp())); diff --git a/lib/model/tv_model.dart b/lib/model/tv_model.dart deleted file mode 100644 index 88dc093..0000000 --- a/lib/model/tv_model.dart +++ /dev/null @@ -1,132 +0,0 @@ -// To parse this JSON data, do -// -// final tvSearchListInfo = tvSearchListInfoFromJson(jsonString); - -import 'dart:convert'; - -TvSearchListInfo tvSearchListInfoFromJson(String str) => - TvSearchListInfo.fromJson(json.decode(str)); - -String tvSearchListInfoToJson(TvSearchListInfo data) => - json.encode(data.toJson()); - -class TvSearchListInfo { - int page; - List results; - int totalPages; - int totalResults; - - TvSearchListInfo({ - required this.page, - required this.results, - required this.totalPages, - required this.totalResults, - }); - - factory TvSearchListInfo.fromJson(Map json) => - TvSearchListInfo( - page: json["page"], - results: - List.from(json["results"].map((x) => Result.fromJson(x))), - totalPages: json["total_pages"], - totalResults: json["total_results"], - ); - - Map toJson() => { - "page": page, - "results": List.from(results.map((x) => x.toJson())), - "total_pages": totalPages, - "total_results": totalResults, - }; -} - -class Result { - bool adult; - String? backdropPath; - List genreIds; - int id; - List originCountry; - OriginalLanguage originalLanguage; - String originalName; - String overview; - double popularity; - String? posterPath; - DateTime firstAirDate; - String name; - double voteAverage; - int voteCount; - - Result({ - required this.adult, - required this.backdropPath, - required this.genreIds, - required this.id, - required this.originCountry, - required this.originalLanguage, - required this.originalName, - required this.overview, - required this.popularity, - required this.posterPath, - required this.firstAirDate, - required this.name, - required this.voteAverage, - required this.voteCount, - }); - - factory Result.fromJson(Map json) => Result( - adult: json["adult"], - backdropPath: json["backdrop_path"], - genreIds: List.from(json["genre_ids"].map((x) => x)), - id: json["id"], - originCountry: List.from(json["origin_country"].map((x) => x)), - originalLanguage: - originalLanguageValues.map[json["original_language"]]!, - originalName: json["original_name"], - overview: json["overview"], - popularity: json["popularity"]?.toDouble(), - posterPath: json["poster_path"], - firstAirDate: DateTime.parse(json["first_air_date"]), - name: json["name"], - voteAverage: json["vote_average"]?.toDouble(), - voteCount: json["vote_count"], - ); - - Map toJson() => { - "adult": adult, - "backdrop_path": backdropPath, - "genre_ids": List.from(genreIds.map((x) => x)), - "id": id, - "origin_country": List.from(originCountry.map((x) => x)), - "original_language": originalLanguageValues.reverse[originalLanguage], - "original_name": originalName, - "overview": overview, - "popularity": popularity, - "poster_path": posterPath, - "first_air_date": - "${firstAirDate.year.toString().padLeft(4, '0')}-${firstAirDate.month.toString().padLeft(2, '0')}-${firstAirDate.day.toString().padLeft(2, '0')}", - "name": name, - "vote_average": voteAverage, - "vote_count": voteCount, - }; -} - -enum OriginalLanguage { EN, JA, KO, RU } - -final originalLanguageValues = EnumValues({ - "en": OriginalLanguage.EN, - "ja": OriginalLanguage.JA, - "ko": OriginalLanguage.KO, - "ru": OriginalLanguage.RU -}); - -class EnumValues { - Map map; - late Map reverseMap; - - EnumValues(this.map); - - Map get reverse { - reverseMap = map.map((k, v) => MapEntry(v, k)); - return reverseMap; - } -} diff --git a/lib/network/api/movies.dart b/lib/network/api/movies.dart deleted file mode 100644 index 237ea2f..0000000 --- a/lib/network/api/movies.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:dio/dio.dart'; -import 'package:flutter/material.dart'; -import 'package:once_power/constants/constants.dart'; -import 'package:once_power/network/http/http.dart'; -import 'package:once_power/utils/utils.dart'; - -class MoviesAPI { - static search(String keyword) async { - Locale? cacheLocale = StorageUtil.getLocale(AppKeys.locale); - String language = 'en_US'; - if (cacheLocale?.languageCode == 'zh') language = 'zh_CN'; - Response response = await HttpUtil().get( - '/search/movie', - queryParameters: { - 'query': keyword, - 'language': language, - 'page': 1, - }, - ); - print(response.data); - } -} diff --git a/lib/network/api/tv.dart b/lib/network/api/tv.dart deleted file mode 100644 index c619288..0000000 --- a/lib/network/api/tv.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:dio/dio.dart'; -import 'package:flutter/material.dart'; -import 'package:once_power/constants/constants.dart'; -import 'package:once_power/network/http/http.dart'; -import 'package:once_power/utils/utils.dart'; - -class TVAPI { - static search(String keyword) async { - Locale? cacheLocale = StorageUtil.getLocale(AppKeys.locale); - String language = 'en_US'; - if (cacheLocale?.languageCode == 'zh') language = 'zh_CN'; - Response response = await HttpUtil().get( - '/search/tv', - queryParameters: { - 'query': keyword, - 'include_adult': false, - 'language': language, - 'page': 1, - }, - ); - print(response.data); - } -} diff --git a/lib/network/http/error_interceptors.dart b/lib/network/http/error_interceptors.dart deleted file mode 100644 index 0516bfb..0000000 --- a/lib/network/http/error_interceptors.dart +++ /dev/null @@ -1,50 +0,0 @@ -import 'package:dio/dio.dart'; - -class ErrorInterceptors extends Interceptor { - @override - void onError(DioException err, ErrorInterceptorHandler handler) { - switch (err.type) { - case DioExceptionType.badResponse: - errorTip(err, '响应错误'); - break; - case DioExceptionType.receiveTimeout: - errorTip(err, '接收超时'); - break; - case DioExceptionType.sendTimeout: - errorTip(err, '发送超时'); - break; - case DioExceptionType.connectionTimeout: - errorTip(err, '连接超时'); - break; - case DioExceptionType.cancel: - errorTip(err, '连接已取消'); - break; - case DioExceptionType.badCertificate: - errorTip(err, '证书错误'); - break; - case DioExceptionType.connectionError: - errorTip(err, '连接错误'); - break; - case DioExceptionType.unknown: - errorTip(err, '未知错误'); - break; - default: - errorTip(err, '其他错误'); - } - - if (err.response != null && err.response?.data != null) { - print(err.response?.data); - // AppToast.showToast(err.response?.data['message']); - } - } -} - -errorTip(DioError err, String message) { - print('-------------------- ERROR --------------------'); - print('type: ${err.type}'); - print('type: ${err.response}'); - print('type: ${err.error}'); - print('type: ${err.requestOptions}'); - print('type: ${err.message}'); - print('-------------------- END --------------------'); -} diff --git a/lib/network/http/http.dart b/lib/network/http/http.dart deleted file mode 100644 index ca11f76..0000000 --- a/lib/network/http/http.dart +++ /dev/null @@ -1,90 +0,0 @@ -import 'package:cookie_jar/cookie_jar.dart'; -import 'package:dio/dio.dart'; -import 'package:dio_cache_interceptor/dio_cache_interceptor.dart'; -import 'package:dio_cookie_manager/dio_cookie_manager.dart'; -import 'package:once_power/constants/constants.dart'; -import 'package:once_power/utils/storage.dart'; -import 'package:pretty_dio_logger/pretty_dio_logger.dart'; - -import 'error_interceptors.dart'; - -const String baseUrl = 'https://api.themoviedb.org/3'; - -class HttpUtil { - factory HttpUtil() => _instance; - static final HttpUtil _instance = HttpUtil._internal(); - - late Dio dio; - CancelToken cancelToken = CancelToken(); - - HttpUtil._internal() { - BaseOptions options = BaseOptions( - baseUrl: baseUrl, - connectTimeout: const Duration(seconds: 5), - receiveTimeout: const Duration(seconds: 5), - sendTimeout: const Duration(seconds: 5), - // headers: {'Content-Type': 'application/json'}, - contentType: 'application/json; charset=utf-8', - responseType: ResponseType.json, - ); - - dio = Dio(options); - dio.interceptors.add(PrettyDioLogger()); - dio.interceptors.add(ErrorInterceptors()); - - CookieJar cookieJar = CookieJar(); - dio.interceptors.add(CookieManager(cookieJar)); - - final cacheOptions = CacheOptions( - store: MemCacheStore(), - policy: CachePolicy.request, - hitCacheOnErrorExcept: [401, 403], - maxStale: const Duration(days: 7), - priority: CachePriority.normal, - cipher: null, - keyBuilder: CacheOptions.defaultCacheKeyBuilder, - allowPostMethod: false, - ); - - dio.interceptors.add(DioCacheInterceptor(options: cacheOptions)); - } - - void cancelRequest() { - cancelToken.cancel('cancelled'); - } - - Map? getAuthorization() { - Map? headers; - String? accessToken = StorageUtil.getString(AppKeys.apiKey); - if (accessToken != null) { - headers = { - 'accept': 'application/json', - 'Authorization': 'Bearer $accessToken', - }; - } - return headers; - } - - Future get( - String path, { - Object? data, - Map? queryParameters, - Options? options, - ProgressCallback? onReceiveProgress, - }) async { - Options requestOptions = options ?? Options(); - Map? authorization = getAuthorization(); - if (authorization != null) { - requestOptions = requestOptions.copyWith(headers: authorization); - } - Response response = await dio.get( - path, - data: data, - queryParameters: queryParameters, - options: requestOptions, - cancelToken: cancelToken, - onReceiveProgress: onReceiveProgress, - ); - return response.data; - } -} diff --git a/lib/views/bottom_bar/bottom_bar.dart b/lib/views/bottom_bar/bottom_bar.dart index be74e3b..82eb554 100644 --- a/lib/views/bottom_bar/bottom_bar.dart +++ b/lib/views/bottom_bar/bottom_bar.dart @@ -5,7 +5,6 @@ import 'package:once_power/generated/l10n.dart'; import 'package:once_power/provider/provider.dart'; import 'package:once_power/utils/utils.dart'; import 'package:once_power/views/bottom_bar/download_button.dart'; -import 'package:once_power/views/bottom_bar/get_tv_info.dart'; import 'package:once_power/views/bottom_bar/undo_button.dart'; import 'package:once_power/views/bottom_bar/upload_csv.dart'; import 'package:once_power/views/bottom_bar/view_mode_button.dart'; @@ -45,8 +44,6 @@ class BottomBar extends ConsumerWidget { const SizedBox(width: AppNum.bottomBarInterval - 4), const ViewModeButton(), const SizedBox(width: AppNum.bottomBarInterval - 4), - const GetTvInfo(), - const SizedBox(width: AppNum.bottomBarInterval - 4), const UploadCSV(), const SizedBox(width: AppNum.bottomBarInterval - 4), const EnableOrganizeCheckbox(), diff --git a/lib/views/bottom_bar/get_tv_info.dart b/lib/views/bottom_bar/get_tv_info.dart deleted file mode 100644 index 28efee9..0000000 --- a/lib/views/bottom_bar/get_tv_info.dart +++ /dev/null @@ -1,74 +0,0 @@ -import 'package:chinese_font_library/chinese_font_library.dart'; -import 'package:dio/dio.dart'; -import 'package:flutter/material.dart'; -import 'package:once_power/constants/constants.dart'; -import 'package:once_power/generated/l10n.dart'; -import 'package:once_power/network/http/http.dart'; -import 'package:once_power/utils/utils.dart'; -import 'package:once_power/widgets/click_icon.dart'; -import 'package:once_power/widgets/custom_tooltip.dart'; -import 'package:tolyui_feedback/tolyui_feedback.dart'; - -class GetTvInfo extends StatefulWidget { - const GetTvInfo({super.key}); - - @override - State createState() => _GetTvInfoState(); -} - -class _GetTvInfoState extends State { - void getInfo() async { - String apiKey = - await DefaultAssetBundle.of(context).loadString(".tmdb_secret"); - StorageUtil.setString(AppKeys.apiKey, apiKey.split('=').last); - HttpUtil(); - feedback(); - } - - void feedback() async { - await showDialog( - context: context, - builder: (context) => UnconstrainedBox( - child: Container( - width: 600, - height: 450, - color: Colors.white, - alignment: Alignment.center, - child: TextButton( - // onPressed: () => TVAPI.search('The Boys'), - onPressed: () async { - try { - Dio dio = Dio(BaseOptions(responseType: ResponseType.plain)); - Response response = await dio - .get('https://api.52vmy.cn/api/wl/top/movie?type=text'); - String textData = response.data; - print(textData); - } catch (e) { - print(e); - } - }, - child: const Text('发送请求'), - ), - ), - ), - ); - } - - @override - Widget build(BuildContext context) { - final String tvSeriesInfo = S.of(context).tvSeriesInfo; - - return CustomTooltip( - message: tvSeriesInfo, - textStyle: const TextStyle(fontSize: 13, color: Color(0xFF666666)) - .useSystemChineseFont(), - placement: Placement.top, - child: ClickIcon( - size: 24, - svg: AppIcons.tv, - color: Colors.grey, - onTap: getInfo, - ), - ); - } -}