From bf4ecc85ddb845570ef1cccfd080397a2224b97d Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Wed, 5 Mar 2025 14:25:50 +0800 Subject: [PATCH] mod: article req Closes #305 Signed-off-by: bggRGjQaUbCoE --- lib/http/html.dart | 18 +++++++++++++----- lib/pages/html/view.dart | 38 ++++++++++++++++++++++---------------- 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/lib/http/html.dart b/lib/http/html.dart index 21c3b51f..e4e1548d 100644 --- a/lib/http/html.dart +++ b/lib/http/html.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'package:PiliPlus/models/dynamics/article_content_model.dart'; +import 'package:PiliPlus/utils/url_utils.dart'; import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:html/dom.dart' as dom; @@ -48,10 +49,11 @@ class HtmlHttp { String opusContent = opusDetail.querySelector('.opus-module-content')!.innerHtml; String? test; - test = opusDetail - .querySelector('.horizontal-scroll-album__pic__img') - ?.innerHtml ?? - ''; + try { + test = opusDetail + .querySelector('.horizontal-scroll-album__pic__img')! + .innerHtml; + } catch (_) {} String commentId = opusDetail .querySelector('.bili-comment-container')! @@ -64,7 +66,7 @@ class HtmlHttp { 'avatar': avatar, 'uname': uname, 'updateTime': updateTime, - 'content': test + opusContent, + 'content': (test ?? '') + opusContent, 'commentId': int.parse(commentId) }; } catch (err) { @@ -74,6 +76,12 @@ class HtmlHttp { // read static Future reqReadHtml(id, dynamicType) async { + String? redirectUrl = await UrlUtils.parseRedirectUrl( + 'https://www.bilibili.com/$dynamicType/$id/'); + if (redirectUrl != null) { + return await reqHtml(redirectUrl.split('/').last, dynamicType); + } + var response = await Request().get( "https://www.bilibili.com/$dynamicType/$id/", extra: {'ua': 'pc'}, diff --git a/lib/pages/html/view.dart b/lib/pages/html/view.dart index c77439ed..41897fcc 100644 --- a/lib/pages/html/view.dart +++ b/lib/pages/html/view.dart @@ -3,6 +3,7 @@ import 'dart:math'; import 'package:PiliPlus/common/widgets/article_content.dart'; import 'package:PiliPlus/common/widgets/http_error.dart'; import 'package:PiliPlus/common/widgets/loading_widget.dart'; +import 'package:PiliPlus/common/widgets/refresh_indicator.dart'; import 'package:PiliPlus/http/constants.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models/common/reply_sort_type.dart'; @@ -404,24 +405,29 @@ class _HtmlRenderPageState extends State child: Scaffold( key: _key, backgroundColor: Colors.transparent, - body: CustomScrollView( - controller: _htmlRenderCtr.scrollController, - physics: const AlwaysScrollableScrollPhysics(), - slivers: [ - SliverPadding( - padding: EdgeInsets.only(right: padding / 4), - sliver: SliverToBoxAdapter( - child: replyHeader(), + body: refreshIndicator( + onRefresh: () async { + await _htmlRenderCtr.onRefresh(); + }, + child: CustomScrollView( + controller: _htmlRenderCtr.scrollController, + physics: const AlwaysScrollableScrollPhysics(), + slivers: [ + SliverPadding( + padding: EdgeInsets.only(right: padding / 4), + sliver: SliverToBoxAdapter( + child: replyHeader(), + ), ), - ), - SliverPadding( - padding: EdgeInsets.only(right: padding / 4), - sliver: Obx( - () => replyList( - _htmlRenderCtr.loadingState.value), + SliverPadding( + padding: EdgeInsets.only(right: padding / 4), + sliver: Obx( + () => replyList( + _htmlRenderCtr.loadingState.value), + ), ), - ), - ], + ], + ), ), ), ),