mirror of
https://github.com/stashapp/stash.git
synced 2025-12-16 20:07:05 +03:00
Add last_played_at filter (#4829)
This commit is contained in:
@@ -279,6 +279,8 @@ input SceneFilterType {
|
|||||||
play_count: IntCriterionInput
|
play_count: IntCriterionInput
|
||||||
"Filter by play duration (in seconds)"
|
"Filter by play duration (in seconds)"
|
||||||
play_duration: IntCriterionInput
|
play_duration: IntCriterionInput
|
||||||
|
"Filter by scene last played time"
|
||||||
|
last_played_at: TimestampCriterionInput
|
||||||
"Filter by date"
|
"Filter by date"
|
||||||
date: DateCriterionInput
|
date: DateCriterionInput
|
||||||
"Filter by creation time"
|
"Filter by creation time"
|
||||||
|
|||||||
@@ -93,6 +93,8 @@ type SceneFilterType struct {
|
|||||||
PlayCount *IntCriterionInput `json:"play_count"`
|
PlayCount *IntCriterionInput `json:"play_count"`
|
||||||
// Filter by play duration (in seconds)
|
// Filter by play duration (in seconds)
|
||||||
PlayDuration *IntCriterionInput `json:"play_duration"`
|
PlayDuration *IntCriterionInput `json:"play_duration"`
|
||||||
|
// Filter by last played at
|
||||||
|
LastPlayedAt *TimestampCriterionInput `json:"last_played_at"`
|
||||||
// Filter by date
|
// Filter by date
|
||||||
Date *DateCriterionInput `json:"date"`
|
Date *DateCriterionInput `json:"date"`
|
||||||
// Filter by created at
|
// Filter by created at
|
||||||
|
|||||||
@@ -986,6 +986,16 @@ func (qb *SceneStore) makeFilter(ctx context.Context, sceneFilter *models.SceneF
|
|||||||
query.handleCriterion(ctx, floatIntCriterionHandler(sceneFilter.ResumeTime, "scenes.resume_time", nil))
|
query.handleCriterion(ctx, floatIntCriterionHandler(sceneFilter.ResumeTime, "scenes.resume_time", nil))
|
||||||
query.handleCriterion(ctx, floatIntCriterionHandler(sceneFilter.PlayDuration, "scenes.play_duration", nil))
|
query.handleCriterion(ctx, floatIntCriterionHandler(sceneFilter.PlayDuration, "scenes.play_duration", nil))
|
||||||
query.handleCriterion(ctx, scenePlayCountCriterionHandler(sceneFilter.PlayCount))
|
query.handleCriterion(ctx, scenePlayCountCriterionHandler(sceneFilter.PlayCount))
|
||||||
|
query.handleCriterion(ctx, criterionHandlerFunc(func(ctx context.Context, f *filterBuilder) {
|
||||||
|
if sceneFilter.LastPlayedAt != nil {
|
||||||
|
f.addLeftJoin(
|
||||||
|
fmt.Sprintf("(SELECT %s, MAX(%s) as last_played_at FROM %s GROUP BY %s)", sceneIDColumn, sceneViewDateColumn, scenesViewDatesTable, sceneIDColumn),
|
||||||
|
"scene_last_view",
|
||||||
|
fmt.Sprintf("scene_last_view.%s = scenes.id", sceneIDColumn),
|
||||||
|
)
|
||||||
|
timestampCriterionHandler(sceneFilter.LastPlayedAt, "IFNULL(last_played_at, datetime(0))")(ctx, f)
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
|
||||||
query.handleCriterion(ctx, sceneTagsCriterionHandler(qb, sceneFilter.Tags))
|
query.handleCriterion(ctx, sceneTagsCriterionHandler(qb, sceneFilter.Tags))
|
||||||
query.handleCriterion(ctx, sceneTagCountCriterionHandler(qb, sceneFilter.TagCount))
|
query.handleCriterion(ctx, sceneTagCountCriterionHandler(qb, sceneFilter.TagCount))
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ const criterionOptions = [
|
|||||||
createDurationCriterionOption("resume_time"),
|
createDurationCriterionOption("resume_time"),
|
||||||
createDurationCriterionOption("play_duration"),
|
createDurationCriterionOption("play_duration"),
|
||||||
createMandatoryNumberCriterionOption("play_count"),
|
createMandatoryNumberCriterionOption("play_count"),
|
||||||
|
createMandatoryTimestampCriterionOption("last_played_at"),
|
||||||
HasMarkersCriterionOption,
|
HasMarkersCriterionOption,
|
||||||
SceneIsMissingCriterionOption,
|
SceneIsMissingCriterionOption,
|
||||||
TagsCriterionOption,
|
TagsCriterionOption,
|
||||||
|
|||||||
@@ -179,6 +179,7 @@ export type CriterionType =
|
|||||||
| "resume_time"
|
| "resume_time"
|
||||||
| "play_count"
|
| "play_count"
|
||||||
| "play_duration"
|
| "play_duration"
|
||||||
|
| "last_played_at"
|
||||||
| "name"
|
| "name"
|
||||||
| "details"
|
| "details"
|
||||||
| "title"
|
| "title"
|
||||||
|
|||||||
Reference in New Issue
Block a user