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
}
// 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
var selectPerformerLastPlayedAtSQL = utils.StrFormat(
"SELECT MAX(view_date) FROM ("+
@ -762,6 +784,7 @@ var performerSortOptions = sortOptions{
"images_count",
"last_o_at",
"last_played_at",
"latest_scene",
"measurements",
"name",
"o_counter",
@ -812,6 +835,8 @@ func (qb *PerformerStore) getPerformerSort(findFilter *models.FindFilterType) (s
sortQuery += qb.sortByLastPlayedAt(direction)
case "last_o_at":
sortQuery += qb.sortByLastOAt(direction)
case "latest_scene":
sortQuery += qb.sortByLatestScene(direction)
default:
sortQuery += getSort(sort, direction, "performers")
}

View file

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

View file

@ -15,6 +15,7 @@ import (
"github.com/stashapp/stash/pkg/models"
"github.com/stashapp/stash/pkg/studio"
"github.com/stashapp/stash/pkg/utils"
)
const (
@ -601,12 +602,32 @@ func (qb *StudioStore) sortByScenesDuration(direction string) string {
) %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{
"child_count",
"created_at",
"galleries_count",
"id",
"images_count",
"latest_scene",
"name",
"scenes_count",
"scenes_duration",
@ -646,6 +667,8 @@ func (qb *StudioStore) getStudioSort(findFilter *models.FindFilterType) (string,
sortQuery += getCountSort(studioTable, galleryTable, studioIDColumn, direction)
case "child_count":
sortQuery += getCountSort(studioTable, studioTable, studioParentIDColumn, direction)
case "latest_scene":
sortQuery += qb.sortByLatestScene(direction)
default:
sortQuery += getSort(sort, direction, "studios")
}

View file

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

View file

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

View file

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