diff --git a/package.json b/package.json index 7724969..1b1acac 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "svelte": "^3.46.4", "vite": "^2.8.6", "vite-plugin-commonjs-externals": "^0.1.1", - "webtorrent": "^1.8.5" + "webtorrent": "^1.7.2" }, "standard": { "ignore": [ diff --git a/src/renderer/index.html b/src/renderer/index.html index c6ae581..924fc2b 100644 --- a/src/renderer/index.html +++ b/src/renderer/index.html @@ -14,7 +14,7 @@ - + \ No newline at end of file diff --git a/src/renderer/src/App.svelte b/src/renderer/src/App.svelte index 523cac7..3a1cce2 100644 --- a/src/renderer/src/App.svelte +++ b/src/renderer/src/App.svelte @@ -44,10 +44,20 @@ overscroll-behavior: none; user-select: none; } + :global(img){ + -webkit-user-drag: none; + } /* sidebar patches */ .page-wrapper.with-sidebar[data-sidebar-hidden] { --sidebar-width: var(--sidebar-minimised); } + :global(::-webkit-inner-spin-button) { + opacity: 1; + margin-left: 0.4rem; + margin-right: -0.5rem; + filter: invert(0.84); + padding-top: 2rem; + } @media (max-width: 768px) { .page-wrapper.with-sidebar[data-sidebar-type~='overlayed-sm-and-down'] > :global(.content-wrapper) { diff --git a/src/renderer/src/lib/Cards.svelte b/src/renderer/src/lib/Cards.svelte deleted file mode 100644 index 2586ff9..0000000 --- a/src/renderer/src/lib/Cards.svelte +++ /dev/null @@ -1,159 +0,0 @@ - - -{#await cards} - {#each Array(5) as _} -
-
-
-
-

-

-

-

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

-

-

-
-
- {:else} -
viewMedia(card.media))} style:--color={card.media.coverImage.color || '#1890ff'}> -
-
- cover -
-
-
-
{[card.media.title.userPreferred, card.episodeNumber].filter(s => s).join(' - ')}
- {#if card.schedule && card.media.nextAiringEpisode} - - {'EP ' + card.media.nextAiringEpisode.episode + ' in ' + countdown(card.media.nextAiringEpisode.timeUntilAiring)} - - {/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 + ' Episodes'} - {:else if card.media.duration} - {card.media.duration + ' Minutes'} - {/if} - {#if card.media.status} - {card.media.status?.toLowerCase().replace(/_/g, ' ')} - {/if} - - {[card.media.season?.toLowerCase(), card.media.seasonYear].filter(s => s).join(' ')} - -

-
-
- {@html card.media.description} -
-
- {#each card.media.genres as genre} - {genre} - {/each} -
-
-
-
- {/if} - {/each} -{/await} - - diff --git a/src/renderer/src/lib/ViewAnime.svelte b/src/renderer/src/lib/ViewAnime.svelte index 2f3941e..d604b5f 100644 --- a/src/renderer/src/lib/ViewAnime.svelte +++ b/src/renderer/src/lib/ViewAnime.svelte @@ -3,7 +3,6 @@ import { countdown } from '@/modules/util.js' let view = getContext('view') - $: console.log($view) function close() { $view = null } @@ -108,7 +107,7 @@

Details

diff --git a/src/renderer/src/lib/pages/home/Cards.svelte b/src/renderer/src/lib/pages/home/Cards.svelte new file mode 100644 index 0000000..76712d8 --- /dev/null +++ b/src/renderer/src/lib/pages/home/Cards.svelte @@ -0,0 +1,161 @@ + + +{#await cards} + {#each Array(5) as _} +
+
+
+
+

+

+

+

+
+
+ {/each} +{:then cards} + {#each cards as card} + {#key card} + {#if !card.media} +
+
+
+
+
{[card.parseObject.anime_title, card.parseObject.episode_number].filter(s => s).join(' - ')}
+

+

+

+
+
+ {:else} +
viewMedia(card.media))} style:--color={card.media.coverImage.color || '#1890ff'}> +
+
+ cover +
+
+
+
{[card.media.title.userPreferred, card.episodeNumber].filter(s => s).join(' - ')}
+ {#if card.schedule && card.media.nextAiringEpisode} + + {'EP ' + card.media.nextAiringEpisode.episode + ' in ' + countdown(card.media.nextAiringEpisode.timeUntilAiring)} + + {/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 + ' Episodes'} + {:else if card.media.duration} + {card.media.duration + ' Minutes'} + {/if} + {#if card.media.status} + {card.media.status?.toLowerCase().replace(/_/g, ' ')} + {/if} + + {[card.media.season?.toLowerCase(), card.media.seasonYear].filter(s => s).join(' ')} + +

+
+
+ {@html card.media.description} +
+
+ {#each card.media.genres as genre} + {genre} + {/each} +
+
+
+
+ {/if} + {/key} + {/each} +{/await} + + diff --git a/src/renderer/src/lib/pages/home/Gallery.svelte b/src/renderer/src/lib/pages/home/Gallery.svelte index aa7b2ef..ba26d36 100644 --- a/src/renderer/src/lib/pages/home/Gallery.svelte +++ b/src/renderer/src/lib/pages/home/Gallery.svelte @@ -1,5 +1,5 @@ diff --git a/src/renderer/src/modules/anime.js b/src/renderer/src/modules/anime.js index ea04e3b..be23b6d 100644 --- a/src/renderer/src/modules/anime.js +++ b/src/renderer/src/modules/anime.js @@ -1,5 +1,5 @@ /* global halfmoon */ -import { client } from './torrent.js' +import { add } from './torrent.js' import { DOMPARSER } from './util.js' import { alRequest } from './anilist.js' import { nyaaRss } from './rss.js' @@ -18,7 +18,7 @@ window.addEventListener('paste', async e => { // WAIT image lookup on paste, or item.getAsString(text => { if (torrentRx.exec(text)) { e.preventDefault() - client.playTorrent(text) + add(text) } else if (imageRx.exec(text)) { e.preventDefault() traceAnime(text) diff --git a/src/renderer/src/modules/rss.js b/src/renderer/src/modules/rss.js index f7bf40b..7bb9f1a 100644 --- a/src/renderer/src/modules/rss.js +++ b/src/renderer/src/modules/rss.js @@ -1,12 +1,9 @@ -/* global halfmoon */ - -// import { settings } from './settings.js' +import { set } from '@/lib/pages/Settings.svelte' import { DOMPARSER } from './util.js' -import { client } from './torrent.js' +import { add } from './torrent.js' import { episodeRx } from './anime.js' -const settings = {} -// TODO: settings +const settings = set export function getRSSContent (url) { return fetch(url).then(res => { @@ -17,12 +14,12 @@ export function getRSSContent (url) { } throw Error(res.statusText) }).catch(error => { - halfmoon.initStickyAlert({ - content: 'Failed fetching RSS!
' + error, - title: 'Search Failed', - alertType: 'alert-danger', - fillType: '' - }) + // halfmoon.initStickyAlert({ + // content: 'Failed fetching RSS!
' + error, + // title: 'Search Failed', + // alertType: 'alert-danger', + // fillType: '' + // }) console.error(error) }) } @@ -62,12 +59,8 @@ export async function nyaaRss (media, episode, isOffline) { media: media } if (settings.torrent2) { - if (isOffline) { - client.offlineDownload(entries[0].hash) - } else { - client.playTorrent(entries[0].hash, { media: fileMedia, episode: episode }) - } - halfmoon.toggleModal('tsearch') + add(entries[0].hash) + // { media: fileMedia, episode: episode } } entries.forEach((entry, index) => { const template = document.createElement('tr') @@ -80,12 +73,8 @@ export async function nyaaRss (media, episode, isOffline) { ${entry.downloads} Play` template.onclick = () => { - if (isOffline) { - client.offlineDownload(entry.hash) - } else { - client.playTorrent(entry.hash, { media: fileMedia, episode: episode }) - } - halfmoon.hideModal('tsearch') + add(entry.hash) + // { media: fileMedia, episode: episode } } frag.appendChild(template) }) diff --git a/src/renderer/src/modules/torrent.js b/src/renderer/src/modules/torrent.js index 291f3b6..8cf0e11 100644 --- a/src/renderer/src/modules/torrent.js +++ b/src/renderer/src/modules/torrent.js @@ -1,3 +1,31 @@ const WebTorrent = require('webtorrent') export const client = new WebTorrent() -console.log(client) +window.client = client +// save loaded torrent for persistence + +export function add (torrentID) { + if (torrentID) { + if (client.torrents.length) client.remove(client.torrents[0].infoHash) + client.add(torrentID, { + path: 'E:\\videos\\testing\\', + // destroyStoreOnDestroy: true, + announce: [ + 'wss://tracker.openwebtorrent.com', + 'wss://spacetradersapi-chatbox.herokuapp.com:443/announce', + 'wss://peertube.cpy.re:443/tracker/socket' + ] + }) + } +} + +client.on('torrent', torrent => { + console.log('ready', torrent.name) + const string = JSON.stringify(Array.from(torrent.torrentFile)) + localStorage.setItem('torrent', string) +}) + +// load last used torrent +if (localStorage.getItem('torrent')) { + const buffer = Buffer.from(JSON.parse(localStorage.getItem('torrent'))) + add(buffer) +} diff --git a/src/renderer/src/modules/util.js b/src/renderer/src/modules/util.js index 765b914..4afe257 100644 --- a/src/renderer/src/modules/util.js +++ b/src/renderer/src/modules/util.js @@ -12,6 +12,6 @@ export function countdown (s) { return tmp.join(' ') } -export const DOMPARSER = new DOMParser().parseFromString.bind(new DOMParser()) +export const DOMPARSER = DOMParser.prototype.parseFromString.bind(new DOMParser()) export const sleep = t => new Promise(resolve => setTimeout(resolve, t)) diff --git a/vite.config.js b/vite.config.js index f373a9a..20edafa 100644 --- a/vite.config.js +++ b/vite.config.js @@ -11,7 +11,8 @@ const commonjsPackages = [ // 'electron/common', // 'electron/renderer', // 'original-fs', - 'webtorrent' + 'webtorrent', + 'buffer' // ...builtinModules ]