0
0
Fork 0
mirror of https://github.com/VueTubeApp/VueTube synced 2024-11-28 22:23:04 +00:00

Remove code duplication for thumbnails loading (#562)

This commit is contained in:
Alex 2022-10-19 00:28:42 +03:00 committed by GitHub
parent 1352008937
commit fa05eec499
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 27 additions and 35 deletions

View file

@ -54,7 +54,7 @@
}rem 0rem 0rem !important` }rem 0rem 0rem !important`
: '0', : '0',
}" }"
:poster="$youtube.getThumbnail($route.query.v, 'max', [])" :poster="getThumbnail($route.query.v)"
@loadedmetadata="checkDimensions()" @loadedmetadata="checkDimensions()"
@click="controlsHandler()" @click="controlsHandler()"
/> />
@ -352,6 +352,7 @@ import progressbar from "~/components/Player/progressbar.vue";
import sponsorblock from "~/components/Player/sponsorblock.vue"; import sponsorblock from "~/components/Player/sponsorblock.vue";
import backType from "~/plugins/classes/backType"; import backType from "~/plugins/classes/backType";
import Thumbnail from "~/plugins/thumbnail";
export default { export default {
components: { components: {
@ -623,6 +624,11 @@ export default {
this.$refs.player.playbackRate = speed; this.$refs.player.playbackRate = speed;
this.$refs.audio.playbackRate = speed; this.$refs.audio.playbackRate = speed;
}, },
getThumbnail(query) {
const thumbnail = new Thumbnail();
return thumbnail.getThumbnail(query, "max", []);
},
checkDimensions() { checkDimensions() {
if (this.$refs.player.videoHeight > this.$refs.player.videoWidth) { if (this.$refs.player.videoHeight > this.$refs.player.videoWidth) {
this.isVerticalVideo = true; this.isVerticalVideo = true;

View file

@ -262,20 +262,6 @@ class Innertube {
}); });
} }
// Static methods
static getThumbnail(id, resolution) {
if (resolution == "max") {
const url = `https://img.youtube.com/vi/${id}/maxresdefault.jpg`;
let img = new Image();
img.src = url;
img.onload = function () {
if (img.height !== 120) return url;
};
}
return `https://img.youtube.com/vi/${id}/mqdefault.jpg`;
}
// Simple Wrappers // Simple Wrappers
async getRecommendationsAsync() { async getRecommendationsAsync() {
const rec = await this.browseAsync("recommendations"); const rec = await this.browseAsync("recommendations");

17
NUXT/plugins/thumbnail.js Normal file
View file

@ -0,0 +1,17 @@
class Thumbnail {
getThumbnail(id, resolution, backupThumbnail) {
if (resolution == "max") {
const url = `https://img.youtube.com/vi/${id}/maxresdefault.jpg`;
let img = new Image();
img.src = url;
img.onload = function () {
if (img.height !== 120) return url;
};
}
if (backupThumbnail[backupThumbnail.length - 1])
return backupThumbnail[backupThumbnail.length - 1].url;
else return `https://img.youtube.com/vi/${id}/mqdefault.jpg`;
}
}
export default Thumbnail;

View file

@ -91,30 +91,14 @@ const innertubeModule = {
async getVid(id) { async getVid(id) {
try { try {
return await InnertubeAPI.VidInfoAsync(id); return await InnertubeAPI.VidInfoAsync(id);
} catch (error) { } catch (error) {}
}
},
getThumbnail(id, resolution, backupThumbnail) {
if (resolution == "max") {
const url = `https://img.youtube.com/vi/${id}/maxresdefault.jpg`;
let img = new Image();
img.src = url;
img.onload = function () {
if (img.height !== 120) return url;
};
}
if (backupThumbnail[backupThumbnail.length - 1])
return backupThumbnail[backupThumbnail.length - 1].url;
else return `https://img.youtube.com/vi/${id}/mqdefault.jpg`;
}, },
async getChannel(url) { async getChannel(url) {
try { try {
const response = await InnertubeAPI.getChannelAsync(url); const response = await InnertubeAPI.getChannelAsync(url);
return response.data; return response.data;
} catch (error) { } catch (error) {}
}
}, },
// It just works™ // It just works™
@ -177,8 +161,7 @@ const innertubeModule = {
try { try {
const response = await InnertubeAPI.getSearchAsync(query); const response = await InnertubeAPI.getSearchAsync(query);
return response.contents.sectionListRenderer; return response.contents.sectionListRenderer;
} catch (err) { } catch (err) {}
}
}, },
async saveApiStats(query, url) { async saveApiStats(query, url) {