From fc8a9fe9d1c415b3fdb3e462fa9917617c4ec916 Mon Sep 17 00:00:00 2001 From: Wim Brand Date: Mon, 18 Oct 2021 16:08:45 +0200 Subject: [PATCH] Disable video player based on subscription --- .../file_viewer/viewer_scripts/FileViewer.js | 13 +-- .../file_viewer/viewer_scripts/TextViewer.js | 2 +- .../file_viewer/viewer_scripts/VideoViewer.js | 87 ++++++++++++++----- res/template/file_viewer_svelte.html | 2 +- res/template/home.html | 5 +- webcontroller/file_viewer.go | 55 ++++-------- webcontroller/templates.go | 4 + 7 files changed, 99 insertions(+), 69 deletions(-) diff --git a/res/include/script/file_viewer/viewer_scripts/FileViewer.js b/res/include/script/file_viewer/viewer_scripts/FileViewer.js index d6d0697..d0fee0f 100644 --- a/res/include/script/file_viewer/viewer_scripts/FileViewer.js +++ b/res/include/script/file_viewer/viewer_scripts/FileViewer.js @@ -1,7 +1,7 @@ function FileViewer(viewer, file, next) { this.viewer = viewer - this.file = file - this.next = next + this.file = file + this.next = next this.container = document.createElement("div") this.container.classList = "image-container" @@ -23,23 +23,24 @@ function FileViewer(viewer, file, next) { this.fileDetails.style.paddingLeft = "8px" this.fileDetails.style.verticalAlign = "middle" - this.fileDetails.appendChild(document.createTextNode("Name: "+file.name)) + this.fileDetails.appendChild(document.createTextNode("Name: " + file.name)) this.fileDetails.appendChild(document.createElement("br")) - this.fileDetails.appendChild(document.createTextNode("Type: "+file.mime_type)) + this.fileDetails.appendChild(document.createTextNode("Type: " + file.mime_type)) this.fileDetails.appendChild(document.createElement("br")) this.fileDetails.appendChild(document.createTextNode( "No preview is available for this file type. Download to view it locally" )) this.fileDetails.appendChild(document.createElement("br")) - this.btnDL = document.getElementById("btn_download").cloneNode(true) + this.btnDL = document.createElement("button") this.btnDL.addEventListener("click", () => { viewer.toolbar.download() }) + this.btnDL.innerHTML = `save Download` this.btnDL.classList = "button_highlight" this.fileDetails.appendChild(this.btnDL) this.container.appendChild(this.fileDetails) } -FileViewer.prototype.render = function(parent) { +FileViewer.prototype.render = function (parent) { parent.appendChild(this.container) } diff --git a/res/include/script/file_viewer/viewer_scripts/TextViewer.js b/res/include/script/file_viewer/viewer_scripts/TextViewer.js index 2fcb99a..d7210a6 100644 --- a/res/include/script/file_viewer/viewer_scripts/TextViewer.js +++ b/res/include/script/file_viewer/viewer_scripts/TextViewer.js @@ -35,7 +35,7 @@ TextViewer.prototype.getCode = function () { // Load prettyprint script this.prettyprint = document.createElement("script") - this.prettyprint.src = "https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js?skin=desert" + this.prettyprint.src = `{{noescape "https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js?skin=desert"}}` this.container.appendChild(this.prettyprint) }).catch(err => { this.pre.innerText = "Error loading file: " + err diff --git a/res/include/script/file_viewer/viewer_scripts/VideoViewer.js b/res/include/script/file_viewer/viewer_scripts/VideoViewer.js index 10f020b..6c78ecf 100644 --- a/res/include/script/file_viewer/viewer_scripts/VideoViewer.js +++ b/res/include/script/file_viewer/viewer_scripts/VideoViewer.js @@ -2,27 +2,74 @@ function VideoViewer(viewer, file, next) { this.viewer = viewer this.file = file this.next = next - - this.vidContainer = document.createElement("div") - this.vidContainer.classList = "image-container" - - this.vidElement = document.createElement("video") - this.vidElement.controls = "controls" - this.vidElement.playsInline = "playsInline" - this.vidElement.classList = "center drop_shadow" - this.vidElement.addEventListener("ended", () => { this.next() }, false) - if (!embeddedViewer) { - this.vidElement.autoplay = "autoplay" - } - - this.videoSource = document.createElement("source") - this.videoSource.src = this.file.get_href - this.videoSource.type = this.file.mime_type - - this.vidElement.appendChild(this.videoSource) - this.vidContainer.appendChild(this.vidElement) } VideoViewer.prototype.render = function (parent) { - parent.appendChild(this.vidContainer) + if (this.file.allow_video_player) { + let vidContainer = document.createElement("div") + vidContainer.classList = "image-container" + + let vidElement = document.createElement("video") + vidElement.controls = "controls" + vidElement.playsInline = "playsInline" + vidElement.classList = "center drop_shadow" + vidElement.addEventListener("ended", () => { this.next() }, false) + if (!embeddedViewer) { + vidElement.autoplay = "autoplay" + } + + let videoSource = document.createElement("source") + videoSource.src = this.file.get_href + videoSource.type = this.file.mime_type + + vidElement.appendChild(videoSource) + vidContainer.appendChild(vidElement) + parent.appendChild(vidContainer) + + // Possible fix for ios 15 video bug? + this.videoSource.src = this.file.get_href + this.videoSource.type = this.file.mime_type + } else { + let container = document.createElement("div") + container.classList = "image-container" + container.appendChild(document.createElement("br")) + + let title = document.createElement("h1") + title.innerText = "This is a video file on pixeldrain" + container.appendChild(title) + + let icon = document.createElement("img") + icon.style.display = "inline-block" + icon.style.verticalAlign = "middle" + icon.src = this.file.icon_href + container.appendChild(icon) + + let fileDetails = document.createElement("div") + fileDetails.style.display = "inline-block" + fileDetails.style.textAlign = "left" + fileDetails.style.paddingLeft = "8px" + fileDetails.style.verticalAlign = "middle" + fileDetails.style.maxWidth = "600px" + + fileDetails.appendChild(document.createTextNode( + `The online video player on pixeldrain has been disabled due to + repeated abuse. You can still watch videos online by upgrading to + Pro. Or download the video and watch it locally on your computer.`, + )) + fileDetails.appendChild(document.createElement("br")) + + let upgradeBtn = document.createElement("a") + upgradeBtn.innerHTML = `upgrade Upgrade to Pro` + upgradeBtn.classList = "button button_highlight" + upgradeBtn.href = `{{noescape "https://www.patreon.com/join/pixeldrain/checkout?rid=5291427&cadence=12"}}` + fileDetails.appendChild(upgradeBtn) + + let downloadBtn = document.createElement("button") + downloadBtn.innerHTML = `save Download` + downloadBtn.addEventListener("click", () => { this.viewer.toolbar.download() }) + fileDetails.appendChild(downloadBtn) + + container.appendChild(fileDetails) + parent.appendChild(container) + } } diff --git a/res/template/file_viewer_svelte.html b/res/template/file_viewer_svelte.html index 55d4bdd..5f0f280 100644 --- a/res/template/file_viewer_svelte.html +++ b/res/template/file_viewer_svelte.html @@ -23,7 +23,7 @@ diff --git a/res/template/home.html b/res/template/home.html index b836c1d..d51820a 100644 --- a/res/template/home.html +++ b/res/template/home.html @@ -239,8 +239,11 @@
Online file previews
+
+ View image, audio, PDF and text files directly in your web browser +
- View image, video, audio, PDF and text files directly in your web browser + All of the previous formats plus video streaming
diff --git a/webcontroller/file_viewer.go b/webcontroller/file_viewer.go index fb0391f..91b2167 100644 --- a/webcontroller/file_viewer.go +++ b/webcontroller/file_viewer.go @@ -46,13 +46,8 @@ func (vd *viewerData) adType(files []pixelapi.ListFile) { } var avgSize int64 - var nudity = false for _, v := range files { avgSize += v.Size - - if strings.HasPrefix(v.MimeType, "video/") { - nudity = true - } } avgSize /= int64(len(files)) @@ -98,41 +93,21 @@ func (vd *viewerData) adType(files []pixelapi.ListFile) { // or 1 we need to give it n=2. We can use this function to make other // splits like 1/3 1/4, etc - if nudity { - // Brave and a-ads don't care about nudity. I'm not sure about ads.plus - switch i := rand.Intn(10); i { - case 0, 1: - vd.AdBannerType = brave - case 2, 3, 4, 5, 6: - vd.AdBannerType = adsPlus - case 7: - vd.AdBannerType = publisherrest1 - case 8: - vd.AdBannerType = publisherrest2 - case 9: - vd.AdBannerType = publisherrest3 - default: - panic(fmt.Errorf("random number generator returned unrecognised number: %d", i)) - } - } else { - // PixFuture does not allow nudity, so that's what we'll show on all - // files which are safe - switch i := rand.Intn(10); i { - case 0, 1: - vd.AdBannerType = brave - case 2, 3: - vd.AdBannerType = adsPlus - case 4, 5, 6: - vd.AdBannerType = pixFuture - case 7: - vd.AdBannerType = publisherrest1 - case 8: - vd.AdBannerType = publisherrest2 - case 9: - vd.AdBannerType = publisherrest3 - default: - panic(fmt.Errorf("random number generator returned unrecognised number: %d", i)) - } + switch i := rand.Intn(10); i { + case 0: + vd.AdBannerType = brave + case 1, 2, 3: + vd.AdBannerType = adsPlus + case 4, 5, 6: + vd.AdBannerType = pixFuture + case 7: + vd.AdBannerType = publisherrest1 + case 8: + vd.AdBannerType = publisherrest2 + case 9: + vd.AdBannerType = publisherrest3 + default: + panic(fmt.Errorf("random number generator returned unrecognised number: %d", i)) } } diff --git a/webcontroller/templates.go b/webcontroller/templates.go index 888002f..766fe1e 100644 --- a/webcontroller/templates.go +++ b/webcontroller/templates.go @@ -140,6 +140,7 @@ func (tm *TemplateManager) ParseTemplates(silent bool) { "div": tm.div, "formatData": tm.formatData, "formatSC": tm.formatSC, + "noescape": tm.noEscape, }) // Parse dynamic templates @@ -295,6 +296,9 @@ func (tm *TemplateManager) formatSC(amt float64) string { } return fmtSize(amt/1e-24, "H") } +func (tm *TemplateManager) noEscape(t string) template.HTML { + return template.HTML(t) +} func detectInt(i interface{}) int { switch v := i.(type) {