From 12fd3cdcfcd91163817720c2d73b30fc38f212d5 Mon Sep 17 00:00:00 2001
From: ThaUnknown <6506529+ThaUnknown@users.noreply.github.com>
Date: Fri, 11 Mar 2022 22:20:45 +0100
Subject: [PATCH] torrent work
---
package.json | 2 +-
src/renderer/index.html | 2 +-
src/renderer/src/App.svelte | 10 ++
src/renderer/src/lib/Cards.svelte | 159 -----------------
src/renderer/src/lib/ViewAnime.svelte | 14 +-
src/renderer/src/lib/pages/home/Cards.svelte | 161 ++++++++++++++++++
.../src/lib/pages/home/Gallery.svelte | 2 +-
src/renderer/src/lib/pages/home/Home.svelte | 6 +-
.../src/lib/pages/home/Section.svelte | 2 +-
src/renderer/src/modules/anime.js | 4 +-
src/renderer/src/modules/rss.js | 37 ++--
src/renderer/src/modules/torrent.js | 30 +++-
src/renderer/src/modules/util.js | 2 +-
vite.config.js | 3 +-
14 files changed, 229 insertions(+), 205 deletions(-)
delete mode 100644 src/renderer/src/lib/Cards.svelte
create mode 100644 src/renderer/src/lib/pages/home/Cards.svelte
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 _}
-
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'}>
+
+
+

+
+
+
+
{[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
]