Browse Source

neon: Fix article body fixing

pull/84/head
jld3103 2 years ago
parent
commit
13258c6bc6
No known key found for this signature in database
GPG Key ID: 9062417B9E8EB7B3
  1. 2
      packages/neon/lib/src/apps/news/app.dart
  2. 46
      packages/neon/lib/src/apps/news/widgets/articles_view.dart

2
packages/neon/lib/src/apps/news/app.dart

@ -12,9 +12,7 @@ import 'package:material_design_icons_flutter/material_design_icons_flutter.dart
import 'package:neon/l10n/localizations.dart'; import 'package:neon/l10n/localizations.dart';
import 'package:neon/src/apps/news/blocs/articles.dart'; import 'package:neon/src/apps/news/blocs/articles.dart';
import 'package:neon/src/apps/news/blocs/news.dart'; import 'package:neon/src/apps/news/blocs/news.dart';
import 'package:neon/src/blocs/accounts.dart';
import 'package:neon/src/blocs/apps.dart'; import 'package:neon/src/blocs/apps.dart';
import 'package:neon/src/models/account.dart';
import 'package:neon/src/neon.dart'; import 'package:neon/src/neon.dart';
import 'package:nextcloud/nextcloud.dart'; import 'package:nextcloud/nextcloud.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';

46
packages/neon/lib/src/apps/news/widgets/articles_view.dart

@ -132,21 +132,6 @@ class _NewsArticlesViewState extends State<NewsArticlesView> {
final NewsArticlesBloc bloc, final NewsArticlesBloc bloc,
final NewsArticle article, final NewsArticle article,
final NewsFeed feed, final NewsFeed feed,
) {
final clientID = RxBlocProvider.of<AccountsBloc>(context).activeAccount.value!.client.id;
return ResultStreamBuilder<String>(
stream: Provider.of<RequestManager>(context).wrapString(
clientID,
'news-articles-body-${article.id}',
() async => _fixArticleBody(article.body!),
preferCache: true,
),
builder: (
final context,
final bodyData,
final bodyError,
final bodyLoading,
) => ) =>
ListTile( ListTile(
title: Row( title: Row(
@ -225,10 +210,17 @@ class _NewsArticlesViewState extends State<NewsArticlesView> {
bloc.markArticleAsUnread(article); bloc.markArticleAsUnread(article);
} }
}, },
onTap: bodyData != null onTap: () async {
? () async {
final viewType = bloc.newsBloc.options.articleViewTypeOption.value; final viewType = bloc.newsBloc.options.articleViewTypeOption.value;
if (viewType == ArticleViewType.direct) { String? bodyData;
try {
bodyData = _fixArticleBody(article.body!);
} catch (e, s) {
debugPrint(e.toString());
debugPrint(s.toString());
}
if (viewType == ArticleViewType.direct && bodyData != null) {
await Navigator.of(context).push( await Navigator.of(context).push(
MaterialPageRoute( MaterialPageRoute(
builder: (final context) => NewsArticlePage( builder: (final context) => NewsArticlePage(
@ -259,22 +251,12 @@ class _NewsArticlesViewState extends State<NewsArticlesView> {
mode: LaunchMode.externalApplication, mode: LaunchMode.externalApplication,
); );
} }
} },
: null,
),
); );
}
String _fixArticleBody(final String b) => _fixTree(html_parser.parse(b).documentElement!).outerHtml; String _fixArticleBody(final String b) => _fixArticleBodyElement(html_parser.parse(b).documentElement!).outerHtml;
html_dom.Element _fixTree(final html_dom.Element element) { html_dom.Element _fixArticleBodyElement(final html_dom.Element element) {
_fixElement(element);
element.children.forEach(_fixTree);
return element;
}
html_dom.Element _fixElement(final html_dom.Element element) {
for (final attributeName in ['src', 'href']) { for (final attributeName in ['src', 'href']) {
final attributeValue = element.attributes[attributeName]; final attributeValue = element.attributes[attributeName];
if (attributeValue != null && attributeValue.startsWith('//')) { if (attributeValue != null && attributeValue.startsWith('//')) {
@ -282,6 +264,8 @@ class _NewsArticlesViewState extends State<NewsArticlesView> {
} }
} }
element.children.forEach(_fixArticleBodyElement);
return element; return element;
} }
} }

Loading…
Cancel
Save