ebullient / obsidian-slides-extended

Create markdown-based reveal.js presentations in Obsidian
MIT License
75 stars 4 forks source link

✨ Prevent suspend during presentation w/ Screen Wake Lock API (crosspost) #5

Open batonac opened 6 months ago

batonac commented 6 months ago

Currently the screen can turn off and the computer suspend during a Advanced Slides presentation, which is problematic. The computer can be set to disable suspend, but that's a cumbersome solution.

It seems easy enough to utilize the Screen Wake Lock API to prevent suspend while the presentation is active:

// Create a reference for the Wake Lock.
let wakeLock = null;

// create an async function to request a wake lock
try {
  wakeLock = await navigator.wakeLock.request("screen");
  statusElem.textContent = "Wake Lock is active!";
} catch (err) {
  // The Wake Lock request has failed - usually system related, such as battery.
  statusElem.textContent = `${err.name}, ${err.message}`;
}

Secure context is required, but apparently localhost qualifies:

Locally-delivered resources such as those with http://127.0.0.1 URLs, http://localhost and http://*.localhost URLs (e.g. http://dev.whatever.localhost/), and file:// URLs are also considered to have been delivered securely.

I'm not sure of the best way to differentiate slide "preview" from "presentation mode". The easiest way would be to ensure that the Wake Lock isn't active unless the slides are viewed in an external browser. A more sophisticated approach would be request a wake lock only when the browser window enters full screen mode, and release it when exiting full screen mode.

batonac commented 6 months ago

This is a cross post from my original post here: https://github.com/MSzturc/obsidian-advanced-slides/issues/296

@ebullient thanks for keeping this software alive!

ebullient commented 6 months ago

Try a PR? Looks like you're pretty close. Feels like this should go in the reveal.html template (rather than embed?) .. I did add a function in there to detect iframe usage for other reasons..

batonac commented 5 months ago

I haven't been able to get this working in local dev yet 🤔

ebullient commented 5 months ago

No hurry. It isn't something I use, so I'd rather you get it working so it works for you, and then we'll figure out how to make sure it ages well. ;)

ebullient commented 1 month ago

Just bumping this to remind you that I'm waiting for you. ;)

batonac commented 1 month ago

Yes, sorry. I'm buried with other things at the moment, but hoping to return to this soon.