mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
opt: view pgc from dynamic
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:PiliPlus/http/init.dart';
|
||||||
import 'package:PiliPlus/utils/download.dart';
|
import 'package:PiliPlus/utils/download.dart';
|
||||||
import 'package:PiliPlus/utils/extension.dart';
|
import 'package:PiliPlus/utils/extension.dart';
|
||||||
import 'package:PiliPlus/utils/storage.dart';
|
import 'package:PiliPlus/utils/storage.dart';
|
||||||
@@ -362,7 +363,7 @@ class _InteractiveviewerGalleryState extends State<InteractiveviewerGallery>
|
|||||||
// 图片分享
|
// 图片分享
|
||||||
void onShareImg(String imgUrl) async {
|
void onShareImg(String imgUrl) async {
|
||||||
SmartDialog.showLoading();
|
SmartDialog.showLoading();
|
||||||
var response = await Dio()
|
var response = await Request()
|
||||||
.get(imgUrl, options: Options(responseType: ResponseType.bytes));
|
.get(imgUrl, options: Options(responseType: ResponseType.bytes));
|
||||||
final temp = await getTemporaryDirectory();
|
final temp = await getTemporaryDirectory();
|
||||||
SmartDialog.dismiss();
|
SmartDialog.dismiss();
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import 'package:PiliPlus/http/follow.dart';
|
|||||||
import 'package:PiliPlus/pages/dynamics/tab/controller.dart';
|
import 'package:PiliPlus/pages/dynamics/tab/controller.dart';
|
||||||
import 'package:PiliPlus/pages/dynamics/tab/view.dart';
|
import 'package:PiliPlus/pages/dynamics/tab/view.dart';
|
||||||
import 'package:PiliPlus/utils/extension.dart';
|
import 'package:PiliPlus/utils/extension.dart';
|
||||||
|
import 'package:PiliPlus/utils/url_utils.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
@@ -89,6 +90,20 @@ class DynamicsController extends GetxController
|
|||||||
arguments: {'item': item, 'floor': floor});
|
arguments: {'item': item, 'floor': floor});
|
||||||
break;
|
break;
|
||||||
case 'DYNAMIC_TYPE_AV':
|
case 'DYNAMIC_TYPE_AV':
|
||||||
|
if (item.modules.moduleDynamic.major.archive.type == 2) {
|
||||||
|
if (item.modules.moduleDynamic.major.archive.jumpUrl
|
||||||
|
.startsWith('//')) {
|
||||||
|
item.modules.moduleDynamic.major.archive.jumpUrl =
|
||||||
|
'https:${item.modules.moduleDynamic.major.archive.jumpUrl}';
|
||||||
|
}
|
||||||
|
String? redirectUrl = await UrlUtils.parseRedirectUrl(
|
||||||
|
item.modules.moduleDynamic.major.archive.jumpUrl);
|
||||||
|
if (redirectUrl != null) {
|
||||||
|
Utils.viewPgcFromUri(redirectUrl);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
String bvid = item.modules.moduleDynamic.major.archive.bvid;
|
String bvid = item.modules.moduleDynamic.major.archive.bvid;
|
||||||
String cover = item.modules.moduleDynamic.major.archive.cover;
|
String cover = item.modules.moduleDynamic.major.archive.cover;
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -790,7 +790,8 @@ class ReplyItem extends StatelessWidget {
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
final String redirectUrl =
|
final String redirectUrl =
|
||||||
await UrlUtils.parseRedirectUrl(matchStr);
|
(await UrlUtils.parseRedirectUrl(matchStr)) ??
|
||||||
|
matchStr;
|
||||||
// if (redirectUrl == matchStr) {
|
// if (redirectUrl == matchStr) {
|
||||||
// Clipboard.setData(ClipboardData(text: matchStr));
|
// Clipboard.setData(ClipboardData(text: matchStr));
|
||||||
// SmartDialog.showToast('地址可能有误');
|
// SmartDialog.showToast('地址可能有误');
|
||||||
@@ -824,7 +825,8 @@ class ReplyItem extends StatelessWidget {
|
|||||||
parameters: {'keyword': title});
|
parameters: {'keyword': title});
|
||||||
} else if (matchStr.startsWith('https://b23.tv')) {
|
} else if (matchStr.startsWith('https://b23.tv')) {
|
||||||
final String redirectUrl =
|
final String redirectUrl =
|
||||||
await UrlUtils.parseRedirectUrl(matchStr);
|
(await UrlUtils.parseRedirectUrl(matchStr)) ??
|
||||||
|
matchStr;
|
||||||
final String pathSegment =
|
final String pathSegment =
|
||||||
Uri.parse(redirectUrl).path;
|
Uri.parse(redirectUrl).path;
|
||||||
final String lastPathSegment =
|
final String lastPathSegment =
|
||||||
|
|||||||
@@ -822,7 +822,8 @@ class ReplyItemGrpc extends StatelessWidget {
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
final String redirectUrl =
|
final String redirectUrl =
|
||||||
await UrlUtils.parseRedirectUrl(matchStr);
|
(await UrlUtils.parseRedirectUrl(matchStr)) ??
|
||||||
|
matchStr;
|
||||||
// if (redirectUrl == matchStr) {
|
// if (redirectUrl == matchStr) {
|
||||||
// Clipboard.setData(ClipboardData(text: matchStr));
|
// Clipboard.setData(ClipboardData(text: matchStr));
|
||||||
// SmartDialog.showToast('地址可能有误');
|
// SmartDialog.showToast('地址可能有误');
|
||||||
@@ -856,7 +857,8 @@ class ReplyItemGrpc extends StatelessWidget {
|
|||||||
parameters: {'keyword': title});
|
parameters: {'keyword': title});
|
||||||
} else if (matchStr.startsWith('https://b23.tv')) {
|
} else if (matchStr.startsWith('https://b23.tv')) {
|
||||||
final String redirectUrl =
|
final String redirectUrl =
|
||||||
await UrlUtils.parseRedirectUrl(matchStr);
|
(await UrlUtils.parseRedirectUrl(matchStr)) ??
|
||||||
|
matchStr;
|
||||||
final String pathSegment =
|
final String pathSegment =
|
||||||
Uri.parse(redirectUrl).path;
|
Uri.parse(redirectUrl).path;
|
||||||
final String lastPathSegment =
|
final String lastPathSegment =
|
||||||
|
|||||||
@@ -318,7 +318,8 @@ class PiliScheme {
|
|||||||
return;
|
return;
|
||||||
} else if (host == 'b23.tv') {
|
} else if (host == 'b23.tv') {
|
||||||
final String fullPath = 'https://$host$path';
|
final String fullPath = 'https://$host$path';
|
||||||
final String redirectUrl = await UrlUtils.parseRedirectUrl(fullPath);
|
final String redirectUrl =
|
||||||
|
(await UrlUtils.parseRedirectUrl(fullPath)) ?? fullPath;
|
||||||
final String pathSegment = Uri.parse(redirectUrl).path;
|
final String pathSegment = Uri.parse(redirectUrl).path;
|
||||||
final String lastPathSegment = pathSegment.split('/').last;
|
final String lastPathSegment = pathSegment.split('/').last;
|
||||||
final RegExp avRegex = RegExp(r'^[aA][vV]\d+', caseSensitive: false);
|
final RegExp avRegex = RegExp(r'^[aA][vV]\d+', caseSensitive: false);
|
||||||
|
|||||||
@@ -1,35 +1,31 @@
|
|||||||
import 'package:dio/dio.dart';
|
import 'package:dio/dio.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
|
import '../http/init.dart';
|
||||||
import '../http/search.dart';
|
import '../http/search.dart';
|
||||||
import 'id_utils.dart';
|
import 'id_utils.dart';
|
||||||
import 'utils.dart';
|
import 'utils.dart';
|
||||||
|
|
||||||
class UrlUtils {
|
class UrlUtils {
|
||||||
// 302重定向路由截取
|
// 302重定向路由截取
|
||||||
static Future<String> parseRedirectUrl(String url) async {
|
static Future<String?> parseRedirectUrl(String url) async {
|
||||||
late String redirectUrl;
|
|
||||||
final dio = Dio();
|
|
||||||
dio.options.followRedirects = false;
|
|
||||||
dio.options.validateStatus = (status) {
|
|
||||||
return status == 200 || status == 301 || status == 302;
|
|
||||||
};
|
|
||||||
try {
|
try {
|
||||||
final response = await dio.get(url);
|
final response = await Request().get(
|
||||||
if (response.statusCode == 302) {
|
url,
|
||||||
redirectUrl = response.headers['location']?.first as String;
|
options: Options(
|
||||||
if (redirectUrl.endsWith('/')) {
|
followRedirects: false,
|
||||||
redirectUrl = redirectUrl.substring(0, redirectUrl.length - 1);
|
validateStatus: (status) {
|
||||||
}
|
return status == 200 || status == 301 || status == 302;
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
if (response.statusCode == 302 || response.statusCode == 301) {
|
||||||
|
return response.headers['location']?.first;
|
||||||
} else {
|
} else {
|
||||||
if (url.endsWith('/')) {
|
return null;
|
||||||
url = url.substring(0, url.length - 1);
|
|
||||||
}
|
|
||||||
return url;
|
|
||||||
}
|
}
|
||||||
return redirectUrl;
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
return url;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user