chore: remove looksLikeFeedUrl e188e3a3
- Removed `looksLikeFeedUrl` and instead try attempting direct URL
before mapping through possibilities
Steve · 2025-11-23 22:29 3 file(s) · +46 −44
src/App.tsx +23 −15
9 9
	fetchFeedWithFallback,
10 10
	parseFeedXml,
11 11
	discoverFeed,
12 -
	looksLikeFeedUrl,
13 12
	extractPostContent,
14 13
	extractPostDate,
15 14
	sanitizeFeedData,
240 239
241 240
				feedUrl = youtubeFeedUrl;
242 241
				xmlData = await fetchFeedWithFallback(feedUrl);
243 -
			} else if (!looksLikeFeedUrl(urlInput)) {
244 -
				setErrorMessage("Discovering RSS feed...");
245 -
				const discovered = await discoverFeed(urlInput);
242 +
			} else {
243 +
				// First, try to fetch the URL directly as a feed
244 +
				setErrorMessage("Checking URL...");
245 +
				try {
246 +
					xmlData = await fetchFeedWithFallback(urlInput);
247 +
					// Try to parse it to see if it's a valid feed
248 +
					parseFeedXml(xmlData);
249 +
					// If parsing succeeds, it's a valid feed
250 +
					feedUrl = urlInput;
251 +
				} catch {
252 +
					// If direct fetch/parse fails, try feed discovery
253 +
					setErrorMessage("Discovering RSS feed...");
254 +
					const discovered = await discoverFeed(urlInput);
255 +
256 +
					if (!discovered) {
257 +
						setErrorMessage(
258 +
							"Could not find an RSS feed at this URL. Please enter a direct feed URL.",
259 +
						);
260 +
						setIsAddingFeed(false);
261 +
						return;
262 +
					}
246 263
247 -
				if (!discovered) {
248 -
					setErrorMessage(
249 -
						"Could not find an RSS feed at this URL. Please enter a direct feed URL.",
250 -
					);
251 -
					setIsAddingFeed(false);
252 -
					return;
264 +
					feedUrl = discovered.feedUrl;
265 +
					xmlData = discovered.xmlData;
253 266
				}
254 -
255 -
				feedUrl = discovered.feedUrl;
256 -
				xmlData = discovered.xmlData;
257 -
			} else {
258 -
				xmlData = await fetchFeedWithFallback(feedUrl);
259 267
			}
260 268
261 269
			const { feedData, posts, isAtom } = parseFeedXml(xmlData);
src/components/add-feed-dialog.tsx +23 −17
17 17
	fetchFeedWithFallback,
18 18
	parseFeedXml,
19 19
	discoverFeed,
20 -
	looksLikeFeedUrl,
21 20
	extractPostContent,
22 21
	extractPostDate,
23 22
	sanitizeFeedData,
50 49
		setStatusMessage("");
51 50
52 51
		try {
53 -
			// Try to discover feeds if the URL doesn't look like a direct feed URL
54 52
			let feedUrl = urlInput;
55 53
			let xmlData: string | null = null;
56 54
69 67
70 68
				feedUrl = youtubeFeedUrl;
71 69
				xmlData = await fetchFeedWithFallback(feedUrl);
72 -
			} else if (!looksLikeFeedUrl(urlInput)) {
73 -
				setStatusMessage("Discovering RSS feed...");
74 -
				const discovered = await discoverFeed(urlInput);
70 +
			} else {
71 +
				// First, try to fetch the URL directly as a feed
72 +
				setStatusMessage("Checking URL...");
73 +
				try {
74 +
					xmlData = await fetchFeedWithFallback(urlInput);
75 +
					// Try to parse it to see if it's a valid feed
76 +
					parseFeedXml(xmlData);
77 +
					// If parsing succeeds, it's a valid feed
78 +
					feedUrl = urlInput;
79 +
				} catch {
80 +
					// If direct fetch/parse fails, try feed discovery
81 +
					setStatusMessage("Discovering RSS feed...");
82 +
					const discovered = await discoverFeed(urlInput);
75 83
76 -
				if (!discovered) {
77 -
					setStatusMessage(
78 -
						"Could not find an RSS feed at this URL. Please enter a direct feed URL.",
79 -
					);
80 -
					setIsAddingFeed(false);
81 -
					return;
82 -
				}
84 +
					if (!discovered) {
85 +
						setStatusMessage(
86 +
							"Could not find an RSS feed at this URL. Please enter a direct feed URL.",
87 +
						);
88 +
						setIsAddingFeed(false);
89 +
						return;
90 +
					}
83 91
84 -
				feedUrl = discovered.feedUrl;
85 -
				xmlData = discovered.xmlData;
86 -
			} else {
87 -
				// Direct feed URL - try to fetch it
88 -
				xmlData = await fetchFeedWithFallback(feedUrl);
92 +
					feedUrl = discovered.feedUrl;
93 +
					xmlData = discovered.xmlData;
94 +
				}
89 95
			}
90 96
91 97
			const { feedData, posts, isAtom } = parseFeedXml(xmlData);
src/lib/feed-operations.ts +0 −12
193 193
}
194 194
195 195
/**
196 -
 * Checks if a URL looks like a direct feed URL
197 -
 */
198 -
export function looksLikeFeedUrl(url: string): boolean {
199 -
	return (
200 -
		url.includes("/feed") ||
201 -
		url.includes("/rss") ||
202 -
		url.includes(".xml") ||
203 -
		url.includes("/atom")
204 -
	);
205 -
}
206 -
207 -
/**
208 196
 * Extracts YouTube channel ID from various YouTube URL formats
209 197
 * Supports:
210 198
 * - https://www.youtube.com/@ChannelHandle