mirror of
https://github.com/stashapp/stash.git
synced 2026-05-09 05:05:29 +02:00
Add latest scene sort for performers and studios. (#6501)
This commit is contained in:
parent
b8c5e15217
commit
6f5a7d1f0a
6 changed files with 52 additions and 0 deletions
|
|
@ -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")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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…",
|
||||||
|
|
|
||||||
|
|
@ -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",
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ const sortByOptions = [
|
||||||
"random",
|
"random",
|
||||||
"rating",
|
"rating",
|
||||||
"scenes_duration",
|
"scenes_duration",
|
||||||
|
"latest_scene",
|
||||||
]
|
]
|
||||||
.map(ListFilterOptions.createSortBy)
|
.map(ListFilterOptions.createSortBy)
|
||||||
.concat([
|
.concat([
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue