Rename NewsSource to Source now that it models every kind (review item 3)

The class and its file (lib/models/source.dart) follow the glossary term.
Persisted JSON keys are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
CedricandClaude Opus 5.5 committed 2026-10-16 16:03:25 +02:00
1 parent 1a3442ea02
commit a47ff28ed1
33 files changed
+119 -119

No files matched your search

+2 -2
View File
@@ -1,7 +1,7 @@
import 'dart:convert';
import 'package:daily_tech_news/models/article.dart';
import 'package:daily_tech_news/models/news_source.dart';
import 'package:daily_tech_news/models/source.dart';
import 'package:daily_tech_news/services/article_extractor.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:http/http.dart' as http;
@@ -88,7 +88,7 @@ void main() {
title: 'Story',
link: 'https://www.golem.de/news/story.html',
excerpt: 'Teaser',
source: NewsSource(
source: Source(
id: 'golem', name: 'Golem.de', feedUrl: '', homepage: '', language: SourceLanguage.de),
);
final content = await extractor.load(article);
+2 -2
View File
@@ -1,14 +1,14 @@
import 'dart:convert';
import 'package:daily_tech_news/models/article.dart';
import 'package:daily_tech_news/models/news_source.dart';
import 'package:daily_tech_news/models/source.dart';
import 'package:daily_tech_news/services/claude_summarizer.dart';
import 'package:daily_tech_news/services/summarizer.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:http/http.dart' as http;
import 'package:http/testing.dart';
const _source = NewsSource(
const _source = Source(
id: 'verge',
name: 'The Verge',
feedUrl: 'https://example.com/feed',
+1 -1
View File
@@ -2,7 +2,7 @@ import 'dart:io';
import 'dart:ui' as ui;
import 'package:daily_tech_news/models/article.dart';
import 'package:daily_tech_news/models/news_source.dart';
import 'package:daily_tech_news/models/source.dart';
import 'package:daily_tech_news/services/article_extractor.dart';
import 'package:daily_tech_news/ui/article_screen.dart';
import 'package:flutter/material.dart';
+2 -2
View File
@@ -1,7 +1,7 @@
import 'dart:convert';
import 'package:daily_tech_news/models/article.dart';
import 'package:daily_tech_news/models/news_source.dart';
import 'package:daily_tech_news/models/source.dart';
import 'package:daily_tech_news/services/article_extractor.dart';
import 'package:daily_tech_news/services/consent_service.dart';
import 'package:flutter_test/flutter_test.dart';
@@ -50,7 +50,7 @@ const _article = Article(
title: 'Story',
link: _articleUrl,
excerpt: 'Teaser',
source: NewsSource(
source: Source(
id: 'golem', name: 'Golem.de', feedUrl: '', homepage: '', language: SourceLanguage.de),
);
+2 -2
View File
@@ -1,8 +1,8 @@
import 'package:daily_tech_news/data/default_sources.dart';
import 'package:daily_tech_news/models/news_source.dart';
import 'package:daily_tech_news/models/source.dart';
import 'package:flutter_test/flutter_test.dart';
NewsSource _byId(String id) => defaultSources.singleWhere((s) => s.id == id);
Source _byId(String id) => defaultSources.singleWhere((s) => s.id == id);
void main() {
test('the News sources on by default are the curated quality set', () {
+2 -2
View File
@@ -1,8 +1,8 @@
import 'package:daily_tech_news/models/news_source.dart';
import 'package:daily_tech_news/models/source.dart';
import 'package:daily_tech_news/services/feed_parser.dart';
import 'package:flutter_test/flutter_test.dart';
const _source = NewsSource(
const _source = Source(
id: 'test',
name: 'Test',
feedUrl: 'https://example.com/feed',
+1 -1
View File
@@ -1,7 +1,7 @@
import 'package:daily_tech_news/data/default_sources.dart';
import 'package:daily_tech_news/models/article.dart';
import 'package:daily_tech_news/models/briefing.dart';
import 'package:daily_tech_news/models/news_source.dart';
import 'package:daily_tech_news/models/source.dart';
import 'package:daily_tech_news/services/summarizer.dart';
import 'package:daily_tech_news/state/app_state.dart';
import 'package:daily_tech_news/ui/feed_screen.dart';
+1 -1
View File
@@ -1,4 +1,4 @@
import 'package:daily_tech_news/models/news_source.dart';
import 'package:daily_tech_news/models/source.dart';
import 'package:daily_tech_news/state/app_state.dart';
import 'package:daily_tech_news/ui/feed_screen.dart';
import 'package:daily_tech_news/ui/home_shell.dart';
+1 -1
View File
@@ -2,7 +2,7 @@
import 'dart:io';
import 'package:daily_tech_news/data/default_sources.dart';
import 'package:daily_tech_news/models/news_source.dart';
import 'package:daily_tech_news/models/source.dart';
import 'package:daily_tech_news/services/article_extractor.dart';
import 'package:daily_tech_news/services/consent_service.dart';
import 'package:daily_tech_news/services/feed_service.dart';
+2 -2
View File
@@ -1,7 +1,7 @@
import 'dart:io';
import 'package:daily_tech_news/models/article.dart';
import 'package:daily_tech_news/models/news_source.dart';
import 'package:daily_tech_news/models/source.dart';
import 'package:daily_tech_news/services/feed_parser.dart';
import 'package:daily_tech_news/services/feed_service.dart';
import 'package:flutter_test/flutter_test.dart';
@@ -17,7 +17,7 @@ class _SavedFeeds extends FeedService {
final Map<String, String> fixtureByFeedUrl;
@override
Future<List<Article>> fetchSource(NewsSource source, {String corsProxy = ''}) async {
Future<List<Article>> fetchSource(Source source, {String corsProxy = ''}) async {
final xml = File(fixtureByFeedUrl[source.feedUrl]!).readAsStringSync();
final anHourAgo = DateTime.now().toUtc().subtract(const Duration(hours: 1));
return [
+2 -2
View File
@@ -1,7 +1,7 @@
import 'dart:io';
import 'package:daily_tech_news/models/article.dart';
import 'package:daily_tech_news/models/news_source.dart';
import 'package:daily_tech_news/models/source.dart';
import 'package:daily_tech_news/services/feed_parser.dart';
import 'package:daily_tech_news/services/paywall_service.dart';
import 'package:daily_tech_news/services/storage.dart';
@@ -10,7 +10,7 @@ import 'package:http/http.dart' as http;
import 'package:http/testing.dart';
import 'package:shared_preferences/shared_preferences.dart';
NewsSource _source({bool checkPage = false}) => NewsSource(
Source _source({bool checkPage = false}) => Source(
id: 'src',
name: 'Source',
feedUrl: 'https://example.com/feed',
+1 -1
View File
@@ -3,7 +3,7 @@ import 'dart:convert';
import 'package:daily_tech_news/data/default_sources.dart';
import 'package:daily_tech_news/models/article.dart';
import 'package:daily_tech_news/models/briefing.dart';
import 'package:daily_tech_news/models/news_source.dart';
import 'package:daily_tech_news/models/source.dart';
import 'package:daily_tech_news/services/summarizer.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:shared_preferences/shared_preferences.dart';
+5 -5
View File
@@ -1,5 +1,5 @@
import 'package:daily_tech_news/data/default_sources.dart';
import 'package:daily_tech_news/models/news_source.dart';
import 'package:daily_tech_news/models/source.dart';
import 'package:daily_tech_news/services/feed_service.dart';
import 'package:daily_tech_news/services/storage.dart';
import 'package:daily_tech_news/state/app_state.dart';
@@ -9,12 +9,12 @@ import 'package:shared_preferences/shared_preferences.dart';
/// Returns no articles, so starting the app doesn't hit the network.
class _NoFeeds extends FeedService {
@override
Future<FeedResult> fetchAll(List<NewsSource> sources,
{required Duration Function(NewsSource source) maxAgeOf, String corsProxy = ''}) async =>
Future<FeedResult> fetchAll(List<Source> sources,
{required Duration Function(Source source) maxAgeOf, String corsProxy = ''}) async =>
const FeedResult([], {});
}
NewsSource _source(String id, {bool onByDefault = false}) => NewsSource(
Source _source(String id, {bool onByDefault = false}) => Source(
id: id,
name: id,
feedUrl: 'https://example.com/$id.xml',
@@ -31,7 +31,7 @@ const _learningOnByDefault = {
};
/// Starts the app the way a launch does, against whatever is in preferences.
Future<AppState> _launch(List<NewsSource> curatedSources) async {
Future<AppState> _launch(List<Source> curatedSources) async {
final state =
AppState(await Storage.open(), feedService: _NoFeeds(), curatedSources: curatedSources);
await state.init();
+3 -3
View File
@@ -1,4 +1,4 @@
import 'package:daily_tech_news/models/news_source.dart';
import 'package:daily_tech_news/models/source.dart';
import 'package:daily_tech_news/state/app_state.dart';
import 'package:daily_tech_news/ui/home_shell.dart';
import 'package:daily_tech_news/ui/learn_screen.dart';
@@ -9,7 +9,7 @@ import 'package:shared_preferences/shared_preferences.dart';
import 'support/fake_app.dart';
NewsSource _source(String id, SourceKind kind, SourceLanguage language) => NewsSource(
Source _source(String id, SourceKind kind, SourceLanguage language) => Source(
id: id,
name: id,
feedUrl: 'https://example.com/$id.xml',
@@ -30,7 +30,7 @@ void main() {
setUp(() => SharedPreferences.setMockInitialValues({}));
Future<AppState> launch(WidgetTester tester, List<NewsSource> sources) async =>
Future<AppState> launch(WidgetTester tester, List<Source> sources) async =>
(await tester.runAsync(() => launchApp(sources)))!;
Future<void> showSources(WidgetTester tester, AppState state) async {
+6 -6
View File
@@ -1,5 +1,5 @@
import 'package:daily_tech_news/models/article.dart';
import 'package:daily_tech_news/models/news_source.dart';
import 'package:daily_tech_news/models/source.dart';
import 'package:daily_tech_news/services/article_extractor.dart';
import 'package:daily_tech_news/services/feed_service.dart';
import 'package:daily_tech_news/services/storage.dart';
@@ -18,14 +18,14 @@ class FakeFeeds extends FeedService {
int refreshes = 0;
@override
Future<FeedResult> fetchAll(List<NewsSource> sources,
{required Duration Function(NewsSource source) maxAgeOf, String corsProxy = ''}) {
Future<FeedResult> fetchAll(List<Source> sources,
{required Duration Function(Source source) maxAgeOf, String corsProxy = ''}) {
refreshes++;
return super.fetchAll(sources, maxAgeOf: maxAgeOf, corsProxy: corsProxy);
}
@override
Future<List<Article>> fetchSource(NewsSource source, {String corsProxy = ''}) async {
Future<List<Article>> fetchSource(Source source, {String corsProxy = ''}) async {
final now = DateTime.now().toUtc();
// A feed nobody set up still has an article, so it can be added.
if (!byFeedUrl.containsKey(source.feedUrl)) {
@@ -43,7 +43,7 @@ class FakeFeeds extends FeedService {
}
}
NewsSource testSource(String id, SourceKind kind) => NewsSource(
Source testSource(String id, SourceKind kind) => Source(
id: id,
name: id,
feedUrl: 'https://example.com/$id.xml',
@@ -55,7 +55,7 @@ NewsSource testSource(String id, SourceKind kind) => NewsSource(
/// Starts the app the way a launch does, against whatever is in preferences.
Future<AppState> launchApp(
List<NewsSource> curatedSources, {
List<Source> curatedSources, {
Map<String, List<(String, Duration)>> feeds = const {},
FeedService? feedService,
Summarizer? summarizer,