Add latest scene sort for performers and studios. (#6501)

This commit is contained in:
WeedLordVegeta420 2026-01-27 01:24:14 -05:00 committed by GitHub
parent b8c5e15217
commit 6f5a7d1f0a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 52 additions and 0 deletions

View file

@ -706,6 +706,28 @@ func (qb *PerformerStore) sortByLastOAt(direction string) string {
return " ORDER BY (" + selectPerformerLastOAtSQL + ") " + direction return " ORDER BY (" + selectPerformerLastOAtSQL + ") " + direction
} }
// used for sorting on performer latest scene
var selectPerformerLatestSceneSQL = utils.StrFormat(
"SELECT MAX(date) FROM ("+
"SELECT {date} FROM {performers_scenes} s "+
"LEFT JOIN {scenes} ON {scenes}.id = s.{scene_id} "+
"WHERE s.{performer_id} = {performers}.id"+
")",
map[string]interface{}{
"performer_id": performerIDColumn,
"performers": performerTable,
"performers_scenes": performersScenesTable,
"scenes": sceneTable,
"scene_id": sceneIDColumn,
"date": sceneDateColumn,
},
)
func (qb *PerformerStore) sortByLatestScene(direction string) string {
// need to get the latest date from scenes
return " ORDER BY (" + selectPerformerLatestSceneSQL + ") " + direction
}
// used for sorting on performer last view_date // used for sorting on performer last view_date
var selectPerformerLastPlayedAtSQL = utils.StrFormat( var selectPerformerLastPlayedAtSQL = utils.StrFormat(
"SELECT MAX(view_date) FROM ("+ "SELECT MAX(view_date) FROM ("+
@ -762,6 +784,7 @@ var performerSortOptions = sortOptions{
"images_count", "images_count",
"last_o_at", "last_o_at",
"last_played_at", "last_played_at",
"latest_scene",
"measurements", "measurements",
"name", "name",
"o_counter", "o_counter",
@ -812,6 +835,8 @@ func (qb *PerformerStore) getPerformerSort(findFilter *models.FindFilterType) (s
sortQuery += qb.sortByLastPlayedAt(direction) sortQuery += qb.sortByLastPlayedAt(direction)
case "last_o_at": case "last_o_at":
sortQuery += qb.sortByLastOAt(direction) sortQuery += qb.sortByLastOAt(direction)
case "latest_scene":
sortQuery += qb.sortByLatestScene(direction)
default: default:
sortQuery += getSort(sort, direction, "performers") sortQuery += getSort(sort, direction, "performers")
} }

View file

@ -26,6 +26,7 @@ const (
sceneTable = "scenes" sceneTable = "scenes"
scenesFilesTable = "scenes_files" scenesFilesTable = "scenes_files"
sceneIDColumn = "scene_id" sceneIDColumn = "scene_id"
sceneDateColumn = "date"
performersScenesTable = "performers_scenes" performersScenesTable = "performers_scenes"
scenesTagsTable = "scenes_tags" scenesTagsTable = "scenes_tags"
scenesGalleriesTable = "scenes_galleries" scenesGalleriesTable = "scenes_galleries"

View file

@ -15,6 +15,7 @@ import (
"github.com/stashapp/stash/pkg/models" "github.com/stashapp/stash/pkg/models"
"github.com/stashapp/stash/pkg/studio" "github.com/stashapp/stash/pkg/studio"
"github.com/stashapp/stash/pkg/utils"
) )
const ( const (
@ -601,12 +602,32 @@ func (qb *StudioStore) sortByScenesDuration(direction string) string {
) %s`, sceneTable, scenesFilesTable, scenesFilesTable, sceneIDColumn, sceneTable, scenesFilesTable, sceneTable, studioIDColumn, studioTable, getSortDirection(direction)) ) %s`, sceneTable, scenesFilesTable, scenesFilesTable, sceneIDColumn, sceneTable, scenesFilesTable, sceneTable, studioIDColumn, studioTable, getSortDirection(direction))
} }
// used for sorting on performer latest scene
var selectStudioLatestSceneSQL = utils.StrFormat(
"SELECT MAX(date) FROM ("+
"SELECT {date} FROM {scenes} s "+
"WHERE s.{studio_id} = {studios}.id"+
")",
map[string]interface{}{
"scenes": sceneTable,
"studios": studioTable,
"studio_id": studioIDColumn,
"date": sceneDateColumn,
},
)
func (qb *StudioStore) sortByLatestScene(direction string) string {
// need to get the latest date from scenes
return " ORDER BY (" + selectStudioLatestSceneSQL + ") " + direction
}
var studioSortOptions = sortOptions{ var studioSortOptions = sortOptions{
"child_count", "child_count",
"created_at", "created_at",
"galleries_count", "galleries_count",
"id", "id",
"images_count", "images_count",
"latest_scene",
"name", "name",
"scenes_count", "scenes_count",
"scenes_duration", "scenes_duration",
@ -646,6 +667,8 @@ func (qb *StudioStore) getStudioSort(findFilter *models.FindFilterType) (string,
sortQuery += getCountSort(studioTable, galleryTable, studioIDColumn, direction) sortQuery += getCountSort(studioTable, galleryTable, studioIDColumn, direction)
case "child_count": case "child_count":
sortQuery += getCountSort(studioTable, studioTable, studioParentIDColumn, direction) sortQuery += getCountSort(studioTable, studioTable, studioParentIDColumn, direction)
case "latest_scene":
sortQuery += qb.sortByLatestScene(direction)
default: default:
sortQuery += getSort(sort, direction, "studios") sortQuery += getSort(sort, direction, "studios")
} }

View file

@ -1203,6 +1203,7 @@
"last_o_at": "Last O At", "last_o_at": "Last O At",
"last_o_at_sfw": "Last Like At", "last_o_at_sfw": "Last Like At",
"last_played_at": "Last Played At", "last_played_at": "Last Played At",
"latest_scene": "Latest Scene",
"library": "Library", "library": "Library",
"loading": { "loading": {
"generic": "Loading…", "generic": "Loading…",

View file

@ -31,6 +31,7 @@ const sortByOptions = [
"penis_length", "penis_length",
"play_count", "play_count",
"last_played_at", "last_played_at",
"latest_scene",
"career_length", "career_length",
"weight", "weight",
"measurements", "measurements",

View file

@ -21,6 +21,7 @@ const sortByOptions = [
"random", "random",
"rating", "rating",
"scenes_duration", "scenes_duration",
"latest_scene",
] ]
.map(ListFilterOptions.createSortBy) .map(ListFilterOptions.createSortBy)
.concat([ .concat([