Add Handy / Funscript support (#1377)

* Add funscript route to scenes

Adds a /scene/:id/funscript route which serves a funscript file, if present.

Current convention is that these are files stored with the same path, but with the extension ".funscript".

* Look for funscript during scan

This is stored in the Scene record and used to drive UI changes for funscript support.

Currently, that's limited to a funscript link in the Scene's file info.

* Add filtering and sorting for interactive
* Add Handy connection key to interface config
* Add Handy client and placeholder component.

Uses defucilis/thehandy, but not thehandy-react as I had difficulty integrating the context with the existing components.

Instead, the expensive calculation for the server time offset is put in localStorage for reuse.

A debounce was added when scrubbing the video, as otherwise it spammed the Handy API with updates to the current offset.
This commit is contained in:
UnluckyChemical765
2021-05-23 20:34:28 -07:00
committed by GitHub
parent 33999d3e93
commit 547f6d79ad
32 changed files with 301 additions and 24 deletions

View File

@@ -1,17 +1,16 @@
package config
import (
"errors"
"fmt"
"io/ioutil"
"path/filepath"
"regexp"
"runtime"
"strings"
"golang.org/x/crypto/bcrypt"
"errors"
"io/ioutil"
"path/filepath"
"regexp"
"github.com/spf13/viper"
"github.com/stashapp/stash/pkg/models"
@@ -123,6 +122,7 @@ const ShowStudioAsText = "show_studio_as_text"
const CSSEnabled = "cssEnabled"
const WallPlayback = "wall_playback"
const SlideshowDelay = "slideshow_delay"
const HandyKey = "handy_key"
// DLNA options
const DLNAServerName = "dlna.server_name"
@@ -633,6 +633,10 @@ func (i *Instance) GetCSSEnabled() bool {
return viper.GetBool(CSSEnabled)
}
func (i *Instance) GetHandyKey() string {
return viper.GetString(HandyKey)
}
// GetDLNAServerName returns the visible name of the DLNA server. If empty,
// "stash" will be used.
func (i *Instance) GetDLNAServerName() string {