Browse Source

Merge pull request #115 from jld3103/fix/news-article-without-url

Fix news article without url
pull/116/head
jld3103 2 years ago committed by GitHub
parent
commit
1e20e361ab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      packages/neon/lib/src/apps/news/blocs/article.dart
  2. 41
      packages/neon/lib/src/apps/news/pages/article.dart
  3. 19
      packages/neon/lib/src/apps/news/widgets/articles_view.dart
  4. 4
      packages/nextcloud/lib/src/nextcloud.openapi.dart
  5. 2
      packages/nextcloud/lib/src/nextcloud.openapi.g.dart
  6. 1
      packages/nextcloud/lib/src/nextcloud.openapi.json
  7. 1
      specs/news.json

2
packages/neon/lib/src/apps/news/blocs/article.dart

@ -64,7 +64,6 @@ class NewsArticleBloc extends $NewsArticleBloc {
_unreadSubject.add(article.unread);
_starredSubject.add(article.starred);
url = article.url;
}
void _wrapArticleAction(final Future Function() call) {
@ -79,7 +78,6 @@ class NewsArticleBloc extends $NewsArticleBloc {
final NextcloudClient _client;
final NewsArticlesBloc _newsArticlesBloc;
late final String url;
final _unreadSubject = BehaviorSubject<bool>();
final _starredSubject = BehaviorSubject<bool>();
final _errorsStreamController = StreamController<Exception>();

41
packages/neon/lib/src/apps/news/pages/article.dart

@ -6,13 +6,16 @@ class NewsArticlePage extends StatefulWidget {
required this.articlesBloc,
required this.useWebView,
this.bodyData,
this.url,
super.key,
}) : assert(useWebView || bodyData != null, 'bodyData has to be set when not using a WebView');
}) : assert(useWebView || bodyData != null, 'bodyData has to be set when not using a WebView'),
assert(!useWebView || url != null, 'url has to be set when using a WebView');
final NewsArticleBloc bloc;
final NewsArticlesBloc articlesBloc;
final bool useWebView;
final String? bodyData;
final String? url;
@override
State<NewsArticlePage> createState() => _NewsArticlePageState();
@ -75,7 +78,7 @@ class _NewsArticlePageState extends State<NewsArticlePage> {
return (await _webviewController!.currentUrl())!;
}
return widget.bloc.url;
return widget.url!;
}
@override
@ -129,21 +132,23 @@ class _NewsArticlePageState extends State<NewsArticlePage> {
);
},
),
IconButton(
onPressed: () async {
await launchUrlString(
await _getURL(),
mode: LaunchMode.externalApplication,
);
},
icon: const Icon(Icons.open_in_new),
),
IconButton(
onPressed: () async {
await Share.share(await _getURL());
},
icon: const Icon(Icons.share),
),
if (widget.url != null) ...[
IconButton(
onPressed: () async {
await launchUrlString(
await _getURL(),
mode: LaunchMode.externalApplication,
);
},
icon: const Icon(Icons.open_in_new),
),
IconButton(
onPressed: () async {
await Share.share(await _getURL());
},
icon: const Icon(Icons.share),
),
],
],
),
body: widget.useWebView
@ -155,7 +160,7 @@ class _NewsArticlePageState extends State<NewsArticlePage> {
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (final controller) async {
_webviewController = controller;
await controller.loadUrl(widget.bloc.url);
await controller.loadUrl(widget.url!);
},
onPageStarted: (final _) {
setState(() {

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

@ -218,7 +218,7 @@ class _NewsArticlesViewState extends State<NewsArticlesView> {
debugPrint(s.toString());
}
if (viewType == ArticleViewType.direct && bodyData != null) {
if ((viewType == ArticleViewType.direct || article.url == null) && bodyData != null) {
await Navigator.of(context).push(
MaterialPageRoute(
builder: (final context) => NewsArticlePage(
@ -231,11 +231,13 @@ class _NewsArticlesViewState extends State<NewsArticlesView> {
articlesBloc: widget.bloc,
useWebView: false,
bodyData: bodyData,
url: article.url,
),
),
);
} else if (Provider.of<NeonPlatform>(context, listen: false).canUseWebView &&
viewType == ArticleViewType.internalBrowser) {
} else if (viewType == ArticleViewType.internalBrowser &&
article.url != null &&
Provider.of<NeonPlatform>(context, listen: false).canUseWebView) {
await Navigator.of(context).push(
MaterialPageRoute(
builder: (final context) => NewsArticlePage(
@ -247,6 +249,7 @@ class _NewsArticlesViewState extends State<NewsArticlesView> {
),
articlesBloc: widget.bloc,
useWebView: true,
url: article.url,
),
),
);
@ -254,10 +257,12 @@ class _NewsArticlesViewState extends State<NewsArticlesView> {
if (article.unread) {
bloc.markArticleAsRead(article);
}
await launchUrlString(
article.url,
mode: LaunchMode.externalApplication,
);
if (article.url != null) {
await launchUrlString(
article.url!,
mode: LaunchMode.externalApplication,
);
}
}
},
);

4
packages/nextcloud/lib/src/nextcloud.openapi.dart

@ -1670,7 +1670,7 @@ class NewsArticle {
required this.id,
required this.guid,
required this.guidHash,
required this.url,
this.url,
required this.title,
this.author,
required this.pubDate,
@ -1697,7 +1697,7 @@ class NewsArticle {
final String guidHash;
final String url;
final String? url;
final String title;

2
packages/nextcloud/lib/src/nextcloud.openapi.g.dart

@ -1002,7 +1002,7 @@ NewsArticle _$NewsArticleFromJson(Map<String, dynamic> json) => NewsArticle(
id: json['id'] as int,
guid: json['guid'] as String,
guidHash: json['guidHash'] as String,
url: json['url'] as String,
url: json['url'] as String?,
title: json['title'] as String,
author: json['author'] as String?,
pubDate: json['pubDate'] as int,

1
packages/nextcloud/lib/src/nextcloud.openapi.json

@ -1162,7 +1162,6 @@
"id",
"guid",
"guidHash",
"url",
"title",
"pubDate",
"body",

1
specs/news.json

@ -144,7 +144,6 @@
"id",
"guid",
"guidHash",
"url",
"title",
"pubDate",
"body",

Loading…
Cancel
Save