From cb8cf1ef4300b9342de57db943ada1a294c7e7d4 Mon Sep 17 00:00:00 2001 From: Preston Date: Sun, 13 Dec 2020 23:17:43 -0500 Subject: [PATCH] Start progress on fixing Search and Playlist for local API --- package-lock.json | 18 +++++++++--------- package.json | 4 ++-- .../ft-list-channel/ft-list-channel.js | 8 ++++---- .../ft-list-playlist/ft-list-playlist.js | 12 ++++++------ .../watch-video-playlist.js | 10 +++++----- src/renderer/views/Playlist/Playlist.js | 15 +++++++-------- src/renderer/views/Search/Search.js | 19 ++++++------------- 7 files changed, 39 insertions(+), 47 deletions(-) diff --git a/package-lock.json b/package-lock.json index dee15fde..caba295d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8962,9 +8962,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, "internal-ip": { @@ -18576,9 +18576,9 @@ } }, "ytpl": { - "version": "2.0.0-alpha.3", - "resolved": "https://registry.npmjs.org/ytpl/-/ytpl-2.0.0-alpha.3.tgz", - "integrity": "sha512-c6I6Qc8NxJi2ZgCyNFnBBrGGw3tuBa1+ksMZTG7G8ltZN26wluvgSn9ZW2Xki4DzECdx4k0Bcm5fEvwwOEQsww==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ytpl/-/ytpl-2.0.1.tgz", + "integrity": "sha512-FK6Qz43PKDqKcxI8K9tEOMJ7S/MVN6Ofc9flolPloMN4hJm+N6wZd3Y9oD+amQYHMCVkaXT0BvPMY4BUYg3FpQ==", "requires": { "html-entities": "^1.3.1", "miniget": "^4.1.0" @@ -18592,9 +18592,9 @@ } }, "ytsr": { - "version": "2.0.0-alpha.4", - "resolved": "https://registry.npmjs.org/ytsr/-/ytsr-2.0.0-alpha.4.tgz", - "integrity": "sha512-iEXOu0kFwxr9O+mpG3tnZa6TovEOZ92N0rNmyZFEv5EdcFg9FWH8MEUJVMExCFhSYu1rSFv5napQCzDCozizdg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ytsr/-/ytsr-2.0.1.tgz", + "integrity": "sha512-1m/jmX8X1PJSnX1eJ3sm3s8Z2S/ixYKTZduuLsGn/RsxEI9nqV2iWCRi0qTQ8rOSaoEwkeWcJHLlZPbd499p/w==", "requires": { "html-entities": "^1.3.1", "miniget": "^4.1.0" diff --git a/package.json b/package.json index 8b687f8d..b41cb7f7 100644 --- a/package.json +++ b/package.json @@ -48,8 +48,8 @@ "yt-trending-scraper": "^1.0.4", "yt-xml2vtt": "^1.1.3", "ytdl-core": "^4.1.4", - "ytpl": "^2.0.0-alpha.3", - "ytsr": "^2.0.0-alpha.4" + "ytpl": "^2.0.0", + "ytsr": "^2.0.0" }, "description": "A private YouTube client", "devDependencies": { diff --git a/src/renderer/components/ft-list-channel/ft-list-channel.js b/src/renderer/components/ft-list-channel/ft-list-channel.js index dd09df00..286ab0d3 100644 --- a/src/renderer/components/ft-list-channel/ft-list-channel.js +++ b/src/renderer/components/ft-list-channel/ft-list-channel.js @@ -35,7 +35,7 @@ export default Vue.extend({ } }, mounted: function () { - if (typeof (this.data.avatar) !== 'undefined') { + if (typeof (this.data.avatars) !== 'undefined') { this.parseLocalData() } else { this.parseInvidiousData() @@ -43,18 +43,18 @@ export default Vue.extend({ }, methods: { parseLocalData: function () { - this.thumbnail = this.data.avatar + this.thumbnail = this.data.bestAvatar.url if (!this.thumbnail.includes('https:')) { this.thumbnail = `https:${this.thumbnail}` } this.channelName = this.data.name - this.id = this.data.channel_id + this.id = this.data.channelID if (this.hideChannelSubscriptions) { this.subscriberCount = null } else { - this.subscriberCount = this.data.followers.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + this.subscriberCount = this.data.subscribers.replace(/ subscriber(s)?/, '') } this.videoCount = this.data.videos.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') this.description = this.data.description_short diff --git a/src/renderer/components/ft-list-playlist/ft-list-playlist.js b/src/renderer/components/ft-list-playlist/ft-list-playlist.js index e6eed67b..4379589c 100644 --- a/src/renderer/components/ft-list-playlist/ft-list-playlist.js +++ b/src/renderer/components/ft-list-playlist/ft-list-playlist.js @@ -43,7 +43,7 @@ export default Vue.extend({ } }, mounted: function () { - if (typeof (this.data.author) === 'object') { + if (typeof (this.data.owner) === 'object') { this.parseLocalData() } else { this.parseInvidiousData() @@ -61,11 +61,11 @@ export default Vue.extend({ parseLocalData: function () { this.title = this.data.title - this.thumbnail = this.data.thumbnail - this.channelName = this.data.author.name - this.channelLink = this.data.author.ref - this.playlistLink = this.data.link - this.videoCount = parseInt(this.data.length.split(' ')[0]) + this.thumbnail = this.data.firstVideo.bestThumbnail.url + this.channelName = this.data.owner.name + this.channelLink = this.data.owner.url + this.playlistLink = this.data.url + this.videoCount = this.data.length } } }) diff --git a/src/renderer/components/watch-video-playlist/watch-video-playlist.js b/src/renderer/components/watch-video-playlist/watch-video-playlist.js index 5efdb701..bd333d04 100644 --- a/src/renderer/components/watch-video-playlist/watch-video-playlist.js +++ b/src/renderer/components/watch-video-playlist/watch-video-playlist.js @@ -283,17 +283,17 @@ export default Vue.extend({ this.playlistTitle = result.title this.playlistItems = result.items - this.videoCount = result.total_items - this.channelName = '' // result.author.name - this.channelThumbnail = '' // result.author.avatar - this.channelId = '' // result.author.id + this.videoCount = result.estimatedItemCount + this.channelName = result.author.name + this.channelThumbnail = result.author.bestAvatar.url + this.channelId = result.author.channelID this.playlistItems = result.items.filter((video) => { return !(video.title === '[Private video]' || video.title === '[Deleted video]') }).map((video) => { if (typeof video.author !== 'undefined') { const channelName = video.author.name - const channelId = video.author.ref.replace(/https:\/\/(www\.)?youtube\.com\/(user|channel)\//g, '') + const channelId = video.author.channelID video.author = channelName video.authorId = channelId } else { diff --git a/src/renderer/views/Playlist/Playlist.js b/src/renderer/views/Playlist/Playlist.js index 4b00bf93..72de5fe4 100644 --- a/src/renderer/views/Playlist/Playlist.js +++ b/src/renderer/views/Playlist/Playlist.js @@ -78,7 +78,7 @@ export default Vue.extend({ console.log('done') console.log(result) - const randomVideoIndex = Math.floor((Math.random() * result.items.length) + 1) + const randomVideoIndex = Math.floor((Math.random() * result.items.length)) this.infoData = { id: result.id, @@ -86,18 +86,18 @@ export default Vue.extend({ description: result.description ? result.description : '', randomVideoId: result.items[randomVideoIndex].id, viewCount: result.views, - videoCount: result.estimated_items, - // lastUpdated: result.last_updated ? result.last_updated : '', - // channelName: result.author ? result.author.name : '', - // channelThumbnail: result.author ? result.author.avatar : '', - // channelId: result.author ? result.author.id : '', + videoCount: result.estimatedItemCount, + lastUpdated: result.lastUpdated ? result.lastUpdated : '', + channelName: result.author ? result.author.name : '', + channelThumbnail: result.author ? result.author.bestAvatar.url : '', + channelId: result.author ? result.author.channelID : '', infoSource: 'local' } this.playlistItems = result.items.map((video) => { if (typeof video.author !== 'undefined') { const channelName = video.author.name - const channelId = video.author.ref.replace(/https:\/\/(www\.)?youtube\.com\/(user|channel)\//g, '') + const channelId = video.author.channelID ? video.author.channelID : channelName video.author = channelName video.authorId = channelId } else { @@ -117,7 +117,6 @@ export default Vue.extend({ this.getPlaylistInvidious() } else { this.isLoading = false - // TODO: Show toast with error message } }) }, diff --git a/src/renderer/views/Search/Search.js b/src/renderer/views/Search/Search.js index 6e79082a..192e263d 100644 --- a/src/renderer/views/Search/Search.js +++ b/src/renderer/views/Search/Search.js @@ -132,20 +132,13 @@ export default Vue.extend({ const returnDataInvidious = [] returnData.forEach((video) => { if (video.type === 'video') { - let authId = video.author.ref.match(/user(.)*/) - let publishDate = null - let videoDuration = null - const videoId = video.link.match(/\?v=(.)*/)[0].split('=')[1] - if (authId === null) { - authId = video.author.ref.match(/channel(.)*/) - } - if (video.uploaded_at !== null) { - publishDate = ytTrendScraper.calculate_published(video.uploaded_at, Date.now()) - } + const authId = video.author.channelID + const publishDate = video.uploadedAt + let videoDuration = video.duration + const videoId = video.id if (video.duration !== null && video.duration !== '') { videoDuration = ytTrendScraper.calculate_length_in_seconds(video.duration) } - authId = authId[0].replace(/(user|channel)\//, '') returnDataInvidious.push( { videoId: videoId, @@ -153,12 +146,12 @@ export default Vue.extend({ type: 'video', author: video.author.name, authorId: authId, - authorUrl: video.author.ref, + authorUrl: video.author.url, videoThumbnails: video.thumbnail, description: video.description, viewCount: video.views, published: publishDate, - publishedText: video.uploaded_at, + publishedText: publishDate, lengthSeconds: videoDuration, liveNow: video.live, paid: false,