From 5725c18e2cc891c0354a1e25752012d1d2fca004 Mon Sep 17 00:00:00 2001 From: Violet Rose Date: Thu, 10 Sep 2020 20:48:06 -0700 Subject: [PATCH] Added "current time" share buttons. --- .../ft-share-button/ft-share-button.js | 38 +++++++++++++++++++ .../ft-share-button/ft-share-button.vue | 28 ++++++++++++++ .../watch-video-info/watch-video-info.js | 4 ++ .../watch-video-info/watch-video-info.vue | 1 + src/renderer/views/Watch/Watch.js | 10 ++++- src/renderer/views/Watch/Watch.vue | 1 + static/locales/en-US.yaml | 2 + 7 files changed, 83 insertions(+), 1 deletion(-) diff --git a/src/renderer/components/ft-share-button/ft-share-button.js b/src/renderer/components/ft-share-button/ft-share-button.js index 35e5f57c..494ceaa5 100644 --- a/src/renderer/components/ft-share-button/ft-share-button.js +++ b/src/renderer/components/ft-share-button/ft-share-button.js @@ -14,6 +14,10 @@ export default Vue.extend({ id: { type: String, required: true + }, + timestamp: { + default: 0, + type: Number } }, computed: { @@ -29,6 +33,10 @@ export default Vue.extend({ return `${this.invidiousInstance}/watch?v=${this.id}` }, + invidiousURLWithTime() { + return `${this.invidiousInstance}/watch?v=${this.id}&t=${this.timestamp}` + }, + invidiousEmbedURL() { return `${this.invidiousInstance}/embed/${this.id}` }, @@ -37,6 +45,10 @@ export default Vue.extend({ return `https://www.youtube.com/watch?v=${this.id}` }, + youtubeURLWithTime() { + return `https://www.youtube.com/watch?v=${this.id}&t=${this.timestamp}` + }, + youtubeEmbedURL() { return `https://www.youtube-nocookie.com/embed/${this.id}` } @@ -59,6 +71,11 @@ export default Vue.extend({ this.$refs.iconButton.toggleDropdown() }, + openInvidiousAtTime() { + this.open(this.invidiousURLWithTime) + this.$refs.iconButton.toggleDropdown() + }, + copyInvidious() { this.showToast({ message: this.$t('Share.Invidious URL copied to clipboard') @@ -67,11 +84,24 @@ export default Vue.extend({ this.$refs.iconButton.toggleDropdown() }, + copyInvidiousAtTime() { + this.showToast({ + message: this.$t('Share.Invidious URL copied to clipboard') + }) + this.copy(this.invidiousURLWithTime) + this.$refs.iconButton.toggleDropdown() + }, + openYoutube() { this.open(this.youtubeURL) this.$refs.iconButton.toggleDropdown() }, + openYoutubeAtTime() { + this.open(this.youtubeURLWithTime) + this.$refs.iconButton.toggleDropdown() + }, + copyYoutube() { this.showToast({ message: this.$t('Share.YouTube URL copied to clipboard') @@ -80,6 +110,14 @@ export default Vue.extend({ this.$refs.iconButton.toggleDropdown() }, + copyYoutubeAtTime() { + this.showToast({ + message: this.$t('Share.YouTube URL copied to clipboard') + }) + this.copy(this.youtubeURLWithTime) + this.$refs.iconButton.toggleDropdown() + }, + openYoutubeEmbed() { this.open(this.youtubeEmbedURL) this.$refs.iconButton.toggleDropdown() diff --git a/src/renderer/components/ft-share-button/ft-share-button.vue b/src/renderer/components/ft-share-button/ft-share-button.vue index 8022ae78..a6b8c668 100644 --- a/src/renderer/components/ft-share-button/ft-share-button.vue +++ b/src/renderer/components/ft-share-button/ft-share-button.vue @@ -26,6 +26,13 @@ {{ $t("Share.Copy Link") }} + + + {{ $t("Share.Copy Link At Current Time") }} + {{ $t("Share.Open Link") }} + + + {{ $t("Share.Open Link At Current Time") }} + {{ $t("Share.Copy Link") }} + + + {{ $t("Share.Copy Link At Current Time") }} + {{ $t("Share.Open Link") }} + + + {{ $t("Share.Open Link At Current Time") }} + diff --git a/src/renderer/views/Watch/Watch.js b/src/renderer/views/Watch/Watch.js index a99d4ce0..86a61ded 100644 --- a/src/renderer/views/Watch/Watch.js +++ b/src/renderer/views/Watch/Watch.js @@ -611,7 +611,7 @@ export default Vue.extend({ const player = this.$refs.videoPlayer.player if (player !== null && this.saveWatchedProgress) { - const currentTime = this.$refs.videoPlayer.player.currentTime() + const currentTime = this.getWatchedProgress() const payload = { videoId: this.videoId, watchProgress: currentTime @@ -765,6 +765,14 @@ export default Vue.extend({ }) }, + getWatchedProgress: function () { + return this.$refs.videoPlayer && this.$refs.videoPlayer.player ? this.$refs.videoPlayer.player.currentTime() : 0 + }, + + getTimestamp: function () { + return Math.floor(this.getWatchedProgress()) + }, + ...mapActions([ 'showToast', 'buildVTTFileLocally', diff --git a/src/renderer/views/Watch/Watch.vue b/src/renderer/views/Watch/Watch.vue index 73f1b6f1..563b7809 100644 --- a/src/renderer/views/Watch/Watch.vue +++ b/src/renderer/views/Watch/Watch.vue @@ -42,6 +42,7 @@ :like-count="videoLikeCount" :dislike-count="videoDislikeCount" :view-count="videoViewCount" + :timestamp="getTimestamp()" class="watchVideo" :class="{ theatreWatchVideo: useTheatreMode }" @theatreMode="toggleTheatreMode" diff --git a/static/locales/en-US.yaml b/static/locales/en-US.yaml index 7a12dc25..3b1b92e7 100644 --- a/static/locales/en-US.yaml +++ b/static/locales/en-US.yaml @@ -425,7 +425,9 @@ Change Format: Share: Share Video: Share Video Copy Link: Copy Link + Copy Link At Current Time: Copy Link At Current Time Open Link: Open Link + Open Link At Current Time: Open Link At Current Time Copy Embed: Copy Embed Open Embed: Open Embed # On Click