mirror of
https://github.com/Athou/commafeed.git
synced 2026-09-28 15:04:44 +00:00
limit the number of favicon retries
This commit is contained in:
@@ -10,11 +10,18 @@ export interface FeedFaviconProps {
|
|||||||
export function FeedFavicon({ url, size = 18 }: Readonly<FeedFaviconProps>) {
|
export function FeedFavicon({ url, size = 18 }: Readonly<FeedFaviconProps>) {
|
||||||
// the backend always returns a favicon except when the feed has never been fetched
|
// the backend always returns a favicon except when the feed has never been fetched
|
||||||
// this can happen when the user subscribes to a feed, the feed is added to the tree but the feed has not been fetched yet
|
// this can happen when the user subscribes to a feed, the feed is added to the tree but the feed has not been fetched yet
|
||||||
// in this case we just retry every second until the feed is fetched and the favicon is available
|
// in this case we retry every second up to 3 times until the feed is fetched and the favicon is available
|
||||||
const [timestamp, setTimestamp] = useState(0)
|
const [timestamp, setTimestamp] = useState(0)
|
||||||
|
const [retryCount, setRetryCount] = useState(0)
|
||||||
const { start: retry } = useTimeout(() => setTimestamp(Date.now()), 1000)
|
const { start: retry } = useTimeout(() => setTimestamp(Date.now()), 1000)
|
||||||
|
|
||||||
const urlWithTimestamp = url + (timestamp === 0 ? "" : `?t=${timestamp}`)
|
const urlWithTimestamp = url + (timestamp === 0 ? "" : `?t=${timestamp}`)
|
||||||
|
const handleError = () => {
|
||||||
|
if (retryCount < 3) {
|
||||||
|
setRetryCount(c => c + 1)
|
||||||
|
retry()
|
||||||
|
}
|
||||||
|
}
|
||||||
return (
|
return (
|
||||||
<ImageWithPlaceholderWhileLoading
|
<ImageWithPlaceholderWhileLoading
|
||||||
src={urlWithTimestamp}
|
src={urlWithTimestamp}
|
||||||
@@ -25,7 +32,7 @@ export function FeedFavicon({ url, size = 18 }: Readonly<FeedFaviconProps>) {
|
|||||||
placeholderHeight={size}
|
placeholderHeight={size}
|
||||||
placeholderBackgroundColor="inherit"
|
placeholderBackgroundColor="inherit"
|
||||||
placeholderIconSize={size}
|
placeholderIconSize={size}
|
||||||
onError={retry}
|
onError={handleError}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,9 +30,10 @@ public class RootFaviconFetcher implements FaviconFetcher {
|
|||||||
url = feed.getUrl();
|
url = feed.getUrl();
|
||||||
}
|
}
|
||||||
|
|
||||||
URI uri = URI.create(url);
|
|
||||||
String faviconUrl = "%s://%s/favicon.ico".formatted(uri.getScheme(), uri.getHost());
|
|
||||||
try {
|
try {
|
||||||
|
URI uri = URI.create(url.trim());
|
||||||
|
String faviconUrl = "%s://%s/favicon.ico".formatted(uri.getScheme(), uri.getHost());
|
||||||
|
|
||||||
log.debug("getting root icon at {}", faviconUrl);
|
log.debug("getting root icon at {}", faviconUrl);
|
||||||
HttpResult result = getter.get(faviconUrl);
|
HttpResult result = getter.get(faviconUrl);
|
||||||
return new Favicon(result.content(), result.contentType());
|
return new Favicon(result.content(), result.contentType());
|
||||||
|
|||||||
Reference in New Issue
Block a user