From 432a4e9ccfc66df2dfbd835a339e815c83f0793a Mon Sep 17 00:00:00 2001 From: ThaUnknown <6506529+ThaUnknown@users.noreply.github.com> Date: Fri, 7 Jul 2023 11:52:59 +0200 Subject: [PATCH] feat: update rss feeds periodically --- jsconfig.json | 8 + src/renderer/modules/rss.js | 16 +- src/renderer/modules/sections.js | 2 +- src/renderer/views/Home/Cards.svelte | 222 ------------------------- src/renderer/views/Home/Home.svelte | 12 +- src/renderer/views/Home/Section.svelte | 5 +- src/renderer/views/Search.svelte | 2 +- 7 files changed, 34 insertions(+), 233 deletions(-) create mode 100644 jsconfig.json delete mode 100644 src/renderer/views/Home/Cards.svelte diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..294dabe --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "baseUrl": "./", + "paths": { + "@/*": ["src/renderer/*"], + } + } +} \ No newline at end of file diff --git a/src/renderer/modules/rss.js b/src/renderer/modules/rss.js index dc24b9d..8c1b9ec 100644 --- a/src/renderer/modules/rss.js +++ b/src/renderer/modules/rss.js @@ -74,18 +74,24 @@ class RSSMediaManager { return array[i] } - async _getMediaForRSS (page, perPage, url) { + async getContentChanged (page, perPage, url) { const content = await getRSSContent(getReleasesRSSurl(url)) - const pubDate = content.querySelector('pubDate').textContent * page * perPage - if (this.resultMap[url]?.date === pubDate) return this.resultMap[url].result + const pubDate = new Date(content.querySelector('pubDate').textContent) * page * perPage + if (this.resultMap[url]?.date === pubDate) return false + return { content, pubDate } + } + + async _getMediaForRSS (page, perPage, url) { + const changed = await this.getContentChanged(page, perPage, url) + if (!changed) return this.resultMap[url].result const index = (page - 1) * perPage - const targetPage = [...content.querySelectorAll('item')].slice(index, index + perPage) + const targetPage = [...changed.content.querySelectorAll('item')].slice(index, index + perPage) const items = parseRSSNodes(targetPage) hasNextPage.value = items.length === perPage const result = items.map(item => this.resolveAnimeFromRSSItem(item)) this.resultMap[url] = { - date: pubDate, + date: changed.pubDate, result } return result diff --git a/src/renderer/modules/sections.js b/src/renderer/modules/sections.js index 5867e6f..22a1bc0 100644 --- a/src/renderer/modules/sections.js +++ b/src/renderer/modules/sections.js @@ -10,7 +10,7 @@ export default class Sections { } add (data) { - for (const { title, variables = {}, type, load = Sections.createFallbackLoad(variables, type), preview } of data) { + for (const { title, variables = {}, type, load = Sections.createFallbackLoad(variables, type), preview = writable() } of data) { this.sections.push({ load, title, preview, variables }) } } diff --git a/src/renderer/views/Home/Cards.svelte b/src/renderer/views/Home/Cards.svelte deleted file mode 100644 index 2ef3ac1..0000000 --- a/src/renderer/views/Home/Cards.svelte +++ /dev/null @@ -1,222 +0,0 @@ - - -{#await cards} - {#each Array(length) as _} -
-
-
-
-

-

-

-

-
-
- {/each} -{:then cards} - {#each cards || [] as card} - {#if typeof card === 'string'} -
{card}
- {:else if !card.media} -
-
-
-
-
{[card.parseObject.anime_title, card.episode].filter(s => s).join(' - ')}
-

-

-

-
-
- {:else} -
viewMedia(card.media))} - on:keydown={wrapEnter(card.onclick || (() => viewMedia(card.media)))} - tabindex={tabable ? 0 : null} role='button' - style:--color={card.media.coverImage.color || '#1890ff'} - title={card.parseObject?.file_name}> -
-
- cover -
-
-
-
- {#if card.media.mediaListEntry?.status} -
- {/if} - {#if card.failed} - Uncertain - {/if} - {[card.media.title.userPreferred, card.episode].filter(s => s).join(' - ')} -
- {#if card.schedule && card.media.nextAiringEpisode} - - {'EP ' + card.media.nextAiringEpisode.episode + ' in ' + countdown(card.media.nextAiringEpisode.timeUntilAiring)} - - {/if} - {#if card.date} - - {since(card.date)} - - {/if} -

- - {#if card.media.format === 'TV'} - TV Show - {:else if card.media.format} - {card.media.format?.toLowerCase().replace(/_/g, ' ')} - {/if} - - {#if card.media.episodes && card.media.episodes !== 1} - - {#if card.media.mediaListEntry?.status === 'CURRENT' && card.media.mediaListEntry?.progress } - {card.media.mediaListEntry.progress} / {card.media.episodes} Episodes - {:else} - {card.media.episodes} Episodes - {/if} - - {:else if card.media.duration} - {card.media.duration + ' Minutes'} - {/if} - {#if card.media.status} - {card.media.status?.toLowerCase().replace(/_/g, ' ')} - {/if} - {#if card.media.season || card.media.seasonYear} - - {[card.media.season?.toLowerCase(), card.media.seasonYear].filter(s => s).join(' ')} - - {/if} -

-
-
- {card.media.description?.replace(/<[^>]*>/g, '') || ''} -
- {#if card.media.genres.length} -
- {#each card.media.genres.slice(0, 3) as genre} - {genre} - {/each} -
- {/if} -
-
-
- {/if} - {:else} -
-

Ooops!

-
Looks like there's nothing here.
-
- {/each} -{/await} - - diff --git a/src/renderer/views/Home/Home.svelte b/src/renderer/views/Home/Home.svelte index 00a8470..dddd2db 100644 --- a/src/renderer/views/Home/Home.svelte +++ b/src/renderer/views/Home/Home.svelte @@ -1,4 +1,5 @@ View More
diff --git a/src/renderer/views/Search.svelte b/src/renderer/views/Search.svelte index 163eccf..03c7a56 100644 --- a/src/renderer/views/Search.svelte +++ b/src/renderer/views/Search.svelte @@ -36,8 +36,8 @@ let canScroll = true async function loadTillFull (element) { + canScroll = false while (hasNextPage.value && element.scrollHeight <= element.clientHeight) { - canScroll = false await loadSearchData() } canScroll = true