Commit graph

1174 commits

Author SHA1 Message Date
WithoutPants
de5a9129b3
Use SafeMove when moving backup database (#6147) 2025-10-17 08:17:15 +11:00
WithoutPants
ce4b86daf5
Fix tag order on details pages (#6143)
* Fix related tag order
* Fix unit tests
2025-10-16 13:15:09 +11:00
WithoutPants
7b182ac04b
Vacuum into database directory then move file if backup dir different (#6137)
If the backup directory is not the same directory as the database, then vacuum into the same directory then move it to its destination. This is to prevent issues vacuuming over a network share.
2025-10-15 16:30:06 +11:00
WithoutPants
d3f6301101
Use natural sort for related tags (#6128) 2025-10-13 13:13:45 +11:00
WithoutPants
72c9c436be
Fix groups not transferring when merging tags (#6127)
* Add test for group when merging tags
* Fix groups not reallocated when merging tags
2025-10-13 13:13:23 +11:00
Otter Bot Society
12c4e1f61c
Treat images with no exif metadata as well-oriented (#6006) 2025-09-09 16:48:16 +10:00
gregpetersonanon
fd36c0fac7
Allow scan to continue when encountering an error (#6073) 2025-09-09 15:10:13 +10:00
WithoutPants
108c0c7de5 Use /plugins instead of /plugin in testReact 2025-07-03 10:40:51 +10:00
WithoutPants
7215b6e918
Ensure tmp dir is created before creating temp file (#5977) 2025-06-30 07:52:32 +10:00
WithoutPants
7eff7f02d0
Add findFolder and findFolders queries to graphql schema (#5965)
* Add findFolder and findFolders queries to graphql schema
* Add zip file criterion to file and folder queries
2025-06-26 15:48:29 +10:00
WithoutPants
704041d5e0
Add findFiles and findFile graphql queries (#5941)
* Add findFile and findFiles
* Add parent folder and zip file fields to file graphql types
* Add parent_folder, zip_file fields to Folder graphql type
* Add format to ImageFile type
* Add format filter fields to image/video file filters
2025-06-24 13:05:17 +10:00
damontecres
8d78fd682d
Include searching by tag sort name (#5963) 2025-06-24 13:02:19 +10:00
feederbox826
019fe81de9
Update Freeones scraper from CommunityScrapers (#5956)
1b103ad2d5

Co-authored-by: feederbox826 <feederbox826@users.noreply.github.com>
2025-06-23 14:13:01 +10:00
WithoutPants
849a368d3d
Fix ordering of tags (#5945) 2025-06-20 16:03:56 +10:00
philMorel
60f1ee2360
feat: Add Performers tab to Group detail page (#5895)
* Feat(#1401): Show all performers from group's scenes on group detail
* Add Groups criterion to performers
---------
Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
2025-06-11 17:07:09 +10:00
smith113-p
a91b9c4d92
Slightly simplify code after PR #5894 (#5917)
The code looks like it does because it initially used string pointers; however, the version that landed used a regular string array, so we can just the = operator.
2025-06-11 11:49:47 +10:00
smith113-p
96d2b36a08
Submit all scene URLs to Stashbox (#5894) 2025-06-03 10:05:43 +10:00
WithoutPants
00f5d0d984
Upgrade gqlgenc (#5901)
* Update gqlgenc
* Fix type error
* Fix package names in config
* Remove override and regenerate
* Update compiler and bump version
2025-06-03 08:55:51 +10:00
DogmaDragon
8ecbf4f7e4
Update tripwire link to direct to the forum (#5885) 2025-06-02 17:07:55 +10:00
WithoutPants
62d7076ff3
Add missing group scraper fields (#5820) 2025-04-16 08:55:27 +10:00
mz28k
2375bc6cac
Fix to find a match for a parent studio (#5810) 2025-04-07 14:58:59 +10:00
WithoutPants
6ed66f3275
Ignore missing scenes when submitting fingerprints (#5799) 2025-04-02 15:48:07 +11:00
luigi611
edbd9b69eb
Partial fix for #2761 - Add reverse proxy prefix to HLS links (#5791)
* Partial fix for #2761 - Add reverse proxy prefix to HLS links
---------
Co-authored-by: Guido <guido@test.com>
Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
2025-04-02 14:26:39 +11:00
its-josh4
db06eae7cb
Sort tags by name while scraping or merging scenes (#5752)
* Sort tags by name while scraping scenes
* TagStore.All should sort by sort_name first
* Sort tag by sort name/name in TagIDSelect
---------
Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
2025-04-02 14:26:14 +11:00
WithoutPants
1d3bc40a6b
Import/export bug fixes (#5780)
* Include parent tags in export if including dependencies
* Handle uniqueness when sanitising filenames
2025-04-01 15:04:26 +11:00
bob123491234
4bfc93b7ae
Add marker end seconds import/export (#5777)
* skip importing markers if scene is skipped
2025-03-28 16:50:26 +11:00
bob123491234
c0d5d1e5a7
Add tag count to studio sort whitelist (#5776) 2025-03-28 12:45:40 +11:00
WithoutPants
c8d74f0bcf
Add rate limit to stashbox connection (#5764)
* Add max requests per minute stashbox option
* Implement rate limiting
* Add requests per minute to stashbox config
* Add UI setting
2025-03-27 11:54:00 +11:00
WithoutPants
2ec264ed62 Fix merge error 2025-03-25 11:19:14 +11:00
WithoutPants
db7d45792e
Refactor stashbox package (#5699)
* Move stashbox package under pkg
* Remove StashBox from method names
* Add fingerprint conversion methods to Fingerprint

Refactor Fingerprints methods

* Make FindSceneByFingerprints accept fingerprints not scene ids
* Refactor SubmitSceneDraft to not require readers
* Have SubmitFingerprints accept scenes

Remove SceneReader dependency

* Move ScrapedScene to models package
* Move ScrapedImage into models package
* Move ScrapedGallery into models package
* Move Scene relationship matching out of stashbox package

This is now expected to be done in the client code

* Remove TagFinder dependency from stashbox.Client
* Make stashbox scene find full hierarchy of studios
* Move studio resolution into separate method
* Move studio matching out of stashbox package

This is now client code responsibility

* Move performer matching out of FindPerformerByID and FindPerformerByName
* Refactor performer querying logic and remove unused stashbox models

Renames FindStashBoxPerformersByPerformerNames to QueryPerformers and accepts names instead of performer ids

* Refactor SubmitPerformerDraft to not load relationships

This will be the responsibility of the calling code

* Remove repository references
2025-03-25 10:30:51 +11:00
WithoutPants
daed09e487
Fix various migration issues (#5723)
* Indicate while backing up database
* Close migrate connection to db before optimising
* Don't vacuum post-migration

In most cases is probably not needed and can be an optonal user-initiated step

* Ensure connection close on NewMigrator error
* Perform post-migration using migrator connection

Flush WAL file at end of migration
2025-03-19 08:04:21 +11:00
javstash
6d451d52ea
Add sort by scene code option (#5708) 2025-03-17 11:23:51 +11:00
WithoutPants
bc923929bb
Stash scraper scene query (#5722)
* Enable scene querying in stash scraper
* Update docs
2025-03-17 10:20:08 +11:00
WithoutPants
9b7e20351a
Plugin api improvements (#5703)
* Add ReactSelect to PluginApi.libraries
* Make Performer tabs patchable
* Make PerformerCard patchable
* Use registration pattern for HoverPopover, TagLink and LoadingIndicator

Initialising the components map to include these was causing an initialisation error.

* Add showZero property to PopoverCountButton
* Make TagCard patchable
* Make ScenePage and ScenePlayer patchable
* Pass properties to container components
* Add example for scene tabs
* Make FrontPage patchable
* Add FrontPage example
2025-03-05 14:04:12 +11:00
DogmaDragon
a391fa4345
Fix code comment in config.go --skip-ci (#5691) 2025-03-01 16:40:25 +11:00
fume8866
4d447c3340
update merged performer upon batch update (#5664)
* update merged performer upon batch update
* Handle aliases and name for merged performer
* Refactor merge performer code

Log when merging performers
---------
Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
2025-02-27 14:23:48 +11:00
WithoutPants
ccf79d077f
Use tag exclusions when identifying scenes (#5686)
* Move tag exclusion code back into scraper package

Reverts #2391

* Rearrange stash box client code
* Filter excluded tags in stashbox queries

Re-application of fix for #2379
2025-02-27 09:07:02 +11:00
WithoutPants
b8af147a8d
Initialise UpdatedAt for stash ids (#5680)
* Initialise imported zero time to epoch time

Fixes null time error after importing stash id without updatedAt set

* Update unit tests
2025-02-26 08:03:35 +11:00
WithoutPants
1e05766571
Fix scraping multiple URLs (#5677)
* Hack fix for scraping URLs field
* Rewrite apply function using known value types
2025-02-26 08:03:08 +11:00
WeedLordVegeta420
e97f647a43
Add Image Scraping (#5562)
Co-authored-by: keenbed <155155956+keenbed@users.noreply.github.com>
Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
2025-02-24 16:38:14 +11:00
InfiniteStash
638398808b
Add death date fetching from stash-box (#5653) 2025-02-11 15:09:50 +11:00
stg-annon
d2daf6c69f
Add Sort Name to Tags (#5531)
* override "name" sort with COALESCE
* tag sort_name frontend

adds `data-sort-name` attribute to tag links prioritizes sort_name value but will default to tag name if not present in the same way that COALESCE will prioritize the same values in the same way
* add sort_name filter, update locale per request

* Include sort name in anonymiser
* Add import/export support
---------
Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
2025-02-11 08:17:21 +11:00
81hvac1k02
dd40c07a6d
removed un-necesarry dependancy (#5641) 2025-02-06 13:35:08 +11:00
stg-annon
8bacaa17f4
Use Marker endSeconds value when generating previews (#5542)
* generate marker previews using endSeconds value
* Limit marker preview duration to 20 seconds max
---------
Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
2025-01-30 13:40:08 +11:00
WithoutPants
cacfe5a268
Add PerformerSelect as loadable component (#5528)
* Add PerformerSelect to loadable components
* Add PerformerSelect to example plugin
2024-12-04 14:15:32 +11:00
WithoutPants
8c8be22fe4
Performer custom fields (#5487)
* Backend changes
* Show custom field values
* Add custom fields table input
* Add custom field filtering
* Add unit tests
* Include custom fields in import/export
* Anonymise performer custom fields
* Move json.Number handler functions to api
* Handle json.Number conversion in api
2024-12-03 13:49:55 +11:00
dogwithakeyboard
6ad0951878
Scene Marker duration filter and sort (#5472)
Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
2024-11-29 16:28:10 +11:00
DogmaDragon
ef2231f97b
Update tripwire link (#5493) 2024-11-22 08:28:09 +11:00
WithoutPants
6c5bf5f052
Convert json numbers to numbers (#5496) 2024-11-22 08:27:23 +11:00
WithoutPants
5f690d96bd
Fix stash scraper errors and add apikey field (#5474)
* Use hasura/go-graphql-client instead of shurcooL version
* Fix graphql query errors
* Support setting api key for stash server
2024-11-13 10:14:55 +11:00
WithoutPants
64fed3553a
Lint fixes (#5476)
* Fix lint errors
* Bump lint action version
2024-11-13 09:47:29 +11:00
WithoutPants
a18c538c1f
Maintain saved filters in full export/import (#5465)
* Remove ellipsis from full export button
2024-11-12 16:59:28 +11:00
WithoutPants
602f95dd29
Fix video files with identical phashes being merged during scan (#5461)
* Change Fingerprints.Remove to return new instead of mutate current
* Match only by oshash and md5 when merging scenes during scan
2024-11-07 14:29:26 +11:00
MinasukiHikimuna
0d40056f8c
Markers can have end time (#5311)
* Markers can have end time

Other metadata sources such as ThePornDB and timestamp.trade support end times for markers but Stash did not yet support saving those. This is a first step which only allows end time to be set either via API or via UI. Other aspects of Stash such as video player timeline are not yet updated to take end time into account.

- User can set end time when creating or editing markers in the UI or in the API.
- End time cannot be before start time. This is validated in the backend and for better UX also in the frontend.
- End time is shown in scene details view or markers wall view if present.
- GraphQL API does not require end_seconds.
---------
Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
2024-11-02 11:55:48 +11:00
Ian McKenzie
180a0fa8dd
Add updated_at field to stash_id's (#5259)
* Add updated_at field to stash_id's
* Only set updated at on stash ids when actually updating in identify

---------
Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
2024-10-31 15:56:16 +11:00
InfiniteStash
b1d5dc2a0e
Fix scraping stash-box performers with null birthdates (#5428) 2024-10-31 11:55:58 +11:00
WithoutPants
89f539ee24
Upgrade gqlgenc and regenerate stash-box client (#5391)
* Upgrade gqlgenc and regenerate stash-box client
* Fix go version
* Don't generate resolvers
* Bump go version in compiler image. Bump freebsd version
2024-10-29 17:35:17 +11:00
its-josh4
c6bcdd89be
Use slices package from the stdlib when possible (#5360)
* Use slices from the stdlib when possible

* Add some unit tests

* More small tweaks + add benchmark func
2024-10-29 11:26:23 +11:00
Arshad
32c48443b5
adding exists check before dropping constraints (#5363)
Co-authored-by: Arshad Khan <arshad@Arshads-MacBook-Air-2.local>
2024-10-15 13:10:47 +11:00
WithoutPants
4697271294
Scene player fixes and improvements (#5340)
* Don't log context canceled error during live transcode
* Pause live transcode if still scrubbing
* Debounce loading live transcode source to avoid multiple ffmpeg instances
* Don't start from start or resume time if seeking before playing
* Play video when seeked before playing
2024-10-07 09:00:49 +11:00
WithoutPants
9b567fa6f4
Exclude null values from image studio id index (#5335) 2024-10-03 11:53:29 +10:00
huochexizhan
9765b6d50e
fix: fix slice init length (#5327) 2024-10-02 16:23:10 +10:00
WithoutPants
c6c3754f02
Fix panic when deleting image with no files (#5328) 2024-10-02 12:19:13 +10:00
WithoutPants
be6431ac13
Fix parent/child tag sort order (#5320) 2024-09-30 17:13:45 +10:00
WithoutPants
7e8c764dc7
Fix migrations not using tx (#5282) 2024-09-22 14:03:54 +10:00
dogwithakeyboard
fd9e4b3ec2
add table alias to group scene sort (#5279) 2024-09-22 13:20:33 +10:00
WithoutPants
476688c84d
Database connection pool refactor (#5274)
* Move optimise out of RunAllMigrations
* Separate read and write database connections
* Enforce readonly connection constraint
* Fix migrations not using tx
* #5155 - allow setting cache size from environment
* Document new environment variable
2024-09-20 12:56:26 +10:00
WithoutPants
17be7e97d3
Emit error in SafeMove if remove from source fails (#5251) 2024-09-11 14:29:16 +10:00
WithoutPants
a17199ba21
Handle symlink zip files (#5249) 2024-09-11 13:58:02 +10:00
WithoutPants
d1c207e40b
Rename movies to groups in menu items in 65 post-migration (#5247)
* Only backup config file if needed in 58 migration
* Change movies to groups in menu items in 65 post-migration
2024-09-11 13:39:46 +10:00
WithoutPants
5407596e0d
Anonymise missing fields (#5244)
* Anonymise missing fields:
- galleries.photographer
- performers.disambiguation
- gallery_urls

* Anonymise captions and saved filters
2024-09-11 11:50:27 +10:00
WithoutPants
ca970b9706
Use gallery updated at for cover mod time (#5225) 2024-09-05 16:45:15 +10:00
WithoutPants
8c2a25b833
Fix gallery scrubber image order (#5222) 2024-09-05 12:59:20 +10:00
WithoutPants
ad17e7defe
Fix handling of files to delete during delete Gallery operation (#5213)
* Only remove file in zip from image if deleting from zip file
* Only remove file in folder from image if deleting from folder
2024-09-05 11:27:31 +10:00
WithoutPants
7c09f24f34
Don't try to migrate non-existent vtt files (#5216) 2024-09-05 11:25:56 +10:00
WithoutPants
c21ded028a
Scan video orientation (#5189)
* Adjust video dimensions for side data rotation
* Warn user when ffprobe version < 5. Only get rotation data on version >= 5
2024-09-03 16:33:15 +10:00
WithoutPants
899ee713ab
Adjust image dimensions for exif orientation (#5188) 2024-09-03 16:32:29 +10:00
WithoutPants
a3c34a51aa
Gallery cover url (#5182)
* Add default gallery image
* Add gallery cover URL path
* Use new cover URL in UI
* Hide gallery preview scrubber when gallery has no images
* Don't try to show lightbox for gallery without images
* Ignore unrelated lint issue
2024-09-03 16:31:55 +10:00
WithoutPants
bcf0fda7ac
Containing Group/Sub-Group relationships (#5105)
* Add UI support for setting containing groups
* Show containing groups in group details panel
* Move tag hierarchical filter code into separate type
* Add depth to scene_count and add sub_group_count
* Add sub-groups tab to groups page
* Add containing groups to edit groups dialog
* Show containing group description in sub-group view
* Show group scene number in group scenes view
* Add ability to drag move grid cards
* Add sub group order option
* Add reorder sub-groups interface
* Separate page size selector component
* Add interfaces to add and remove sub-groups to a group
* Separate MultiSet components
* Allow setting description while setting containing groups
2024-08-30 11:43:44 +10:00
Ian McKenzie
96fdd94a01
Create a section in the history panel to reset scene activity (#5168)
Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
2024-08-29 13:34:22 +10:00
sezzim
68738bd227
Support for assigning any image from a gallery as the cover (#5053)
Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
2024-08-29 11:24:52 +10:00
Andi
ae1841efb0
chore: use errors.New to replace fmt.Errorf with no parameters will much better (#4778) 2024-08-28 14:45:57 +10:00
WithoutPants
c74456c07e
Bump linux ffmpeg URL for latest version (#5172) 2024-08-28 09:07:49 +10:00
WithoutPants
b7799df2a6
Add package docs and project vision/goals (#5169)
* Add goals/design vision to contributing doc
* Add barebones package documentation
2024-08-28 09:01:39 +10:00
WithoutPants
10341fba58
Update builtin freeones scraper (#5171) 2024-08-28 09:00:14 +10:00
WithoutPants
996dfb1c2f
Gallery scrubber (#5133) 2024-08-28 08:59:41 +10:00
NodudeWasTaken
ce47efc415
Add video codec profiles (#5154) 2024-08-27 18:03:48 +10:00
dogwithakeyboard
3089e1ad69
Markers scene filter (#5097)
* Add scene filter to markers
* Fix labels for scenes
---------
Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
2024-08-27 17:23:34 +10:00
Ian McKenzie
62ff6f3c7f
Use existing consts for table names in anonymise.go where available (#5167) 2024-08-27 13:01:12 +10:00
Ian McKenzie
e49beb139c
Truncate scenes_o_dates and scenes_view_dates as part of anonymize (#5166) 2024-08-27 09:03:22 +10:00
Gykes
7788a6fd07
PatchComponentRedo (#5136)
* PatchComponent update specifically for SettingsInterfacePanel
* Fix unrelated lint issues
---------
Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
2024-08-20 14:25:06 +10:00
WithoutPants
49060e6686
UI nested instead (#5125)
* Support multiple calls to PluginApi.patch.instead for a component.

Allow calling the original/chained function from the hook function.

* Add example of new usage of instead
* Update documentation
2024-08-20 12:36:45 +10:00
WithoutPants
a94bf29b34
Add missing performer sort options to whitelist (#5129)
Adds career length, measurements and weight.
2024-08-13 16:13:15 +10:00
WithoutPants
fb77e18182
Fix view history imported from o-history json (#5127)
* Fix view history imported from o-history json
* Add scene import unit tests
2024-08-13 09:07:36 +10:00
WithoutPants
d96850c008
Rename movie tables to groups in database schema (#5082)
* Rename movie tables to groups
* Correct index name
* Rename synopsis to description in schema
2024-07-30 14:14:16 +10:00
thundxrr
48c6373afa
Added detection for n-prefixed ffmpeg version string (#5102) 2024-07-29 21:54:04 +10:00
Lenny3D
f79677ba96
Copy apikey query parameter to DASH & HLS manifest (#5061)
* Copy apikey query parameter to DASH & HLS manifest

When an API key is provided to the DASH and HLS manifest endpoints, this
it will now be copied to the URLs inside the manifest. This allows for
clients that are only able to pass an URL to an (external) video player
to function in case authentication is set up on stash.
2024-07-16 13:17:18 +10:00
WithoutPants
720b233be6
Rename movie group backend (#5044)
* Rename movie go files
* Rename movie package to group
2024-07-04 11:36:05 +10:00
WithoutPants
15a7b8a859
Movie group renames (#5039)
* Rename Movie and MoviePartial to Group/GroupPartial
* Rename Movie interfaces
* Update movie url builders to use group
* Rename movieRoutes to groupRoutes
* Update dataloader
* Update names in sqlite package
* Rename in resolvers
* Add GroupByURL to scraper config
* Scraper backward compatibility hacks
2024-07-04 09:10:26 +10:00
WithoutPants
2739696813
Add group graphql interfaces (#5017)
* Deprecate movie and add group interfaces
* UI changes
2024-07-03 13:59:40 +10:00