mirror of
https://github.com/stashapp/stash.git
synced 2025-12-18 04:44:37 +03:00
Maintain saved filters in full export/import (#5465)
* Remove ellipsis from full export button
This commit is contained in:
31
pkg/models/jsonschema/load.go
Normal file
31
pkg/models/jsonschema/load.go
Normal file
@@ -0,0 +1,31 @@
|
||||
package jsonschema
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
jsoniter "github.com/json-iterator/go"
|
||||
)
|
||||
|
||||
func loadFile[T any](filePath string) (*T, error) {
|
||||
var ret T
|
||||
file, err := os.Open(filePath)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer file.Close()
|
||||
var json = jsoniter.ConfigCompatibleWithStandardLibrary
|
||||
jsonParser := json.NewDecoder(file)
|
||||
err = jsonParser.Decode(&ret)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &ret, nil
|
||||
}
|
||||
|
||||
func saveFile[T any](filePath string, obj *T) error {
|
||||
if obj == nil {
|
||||
return fmt.Errorf("object must not be nil")
|
||||
}
|
||||
return marshalToFile(filePath, obj)
|
||||
}
|
||||
27
pkg/models/jsonschema/saved_filter.go
Normal file
27
pkg/models/jsonschema/saved_filter.go
Normal file
@@ -0,0 +1,27 @@
|
||||
package jsonschema
|
||||
|
||||
import (
|
||||
"github.com/stashapp/stash/pkg/fsutil"
|
||||
"github.com/stashapp/stash/pkg/models"
|
||||
)
|
||||
|
||||
type SavedFilter struct {
|
||||
Mode models.FilterMode `db:"mode" json:"mode"`
|
||||
Name string `db:"name" json:"name"`
|
||||
FindFilter *models.FindFilterType `json:"find_filter"`
|
||||
ObjectFilter map[string]interface{} `json:"object_filter"`
|
||||
UIOptions map[string]interface{} `json:"ui_options"`
|
||||
}
|
||||
|
||||
func (s SavedFilter) Filename() string {
|
||||
ret := fsutil.SanitiseBasename(s.Name + "_" + s.Mode.String())
|
||||
return ret + ".json"
|
||||
}
|
||||
|
||||
func LoadSavedFilterFile(filePath string) (*SavedFilter, error) {
|
||||
return loadFile[SavedFilter](filePath)
|
||||
}
|
||||
|
||||
func SaveSavedFilterFile(filePath string, image *SavedFilter) error {
|
||||
return saveFile[SavedFilter](filePath, image)
|
||||
}
|
||||
@@ -12,14 +12,15 @@ type JSONPaths struct {
|
||||
|
||||
ScrapedFile string
|
||||
|
||||
Performers string
|
||||
Scenes string
|
||||
Images string
|
||||
Galleries string
|
||||
Studios string
|
||||
Tags string
|
||||
Groups string
|
||||
Files string
|
||||
Performers string
|
||||
Scenes string
|
||||
Images string
|
||||
Galleries string
|
||||
Studios string
|
||||
Tags string
|
||||
Groups string
|
||||
Files string
|
||||
SavedFilters string
|
||||
}
|
||||
|
||||
func newJSONPaths(baseDir string) *JSONPaths {
|
||||
@@ -34,6 +35,7 @@ func newJSONPaths(baseDir string) *JSONPaths {
|
||||
jp.Groups = filepath.Join(baseDir, "movies")
|
||||
jp.Tags = filepath.Join(baseDir, "tags")
|
||||
jp.Files = filepath.Join(baseDir, "files")
|
||||
jp.SavedFilters = filepath.Join(baseDir, "saved_filters")
|
||||
return &jp
|
||||
}
|
||||
|
||||
@@ -52,6 +54,7 @@ func EmptyJSONDirs(baseDir string) {
|
||||
_ = fsutil.EmptyDir(jsonPaths.Groups)
|
||||
_ = fsutil.EmptyDir(jsonPaths.Tags)
|
||||
_ = fsutil.EmptyDir(jsonPaths.Files)
|
||||
_ = fsutil.EmptyDir(jsonPaths.SavedFilters)
|
||||
}
|
||||
|
||||
func EnsureJSONDirs(baseDir string) {
|
||||
@@ -83,4 +86,7 @@ func EnsureJSONDirs(baseDir string) {
|
||||
if err := fsutil.EnsureDir(jsonPaths.Files); err != nil {
|
||||
logger.Warnf("couldn't create directories for Files: %v", err)
|
||||
}
|
||||
if err := fsutil.EnsureDir(jsonPaths.SavedFilters); err != nil {
|
||||
logger.Warnf("couldn't create directories for Saved Filters: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user