Commit Graph

1481 Commits

Author SHA1 Message Date
Rafał Dzięgiel
cffe64840d clapper-app: Slightly wider URI entry dialog
To view a little more of entered text
2025-12-12 21:35:02 +01:00
Rafał Dzięgiel
7a57673801 clapper: Support loading enhancers written in Lua 2025-12-11 18:08:38 +01:00
Rafał Dzięgiel
eea7a9ff80 Merge pull request #599 from Rafostar/framestepping
clapper: Implement frame advance function
2025-12-10 19:07:30 +01:00
Rafał Dzięgiel
21db8a4caf clapper-app: Add advance frame shortcut to help overlay 2025-12-09 22:18:50 +01:00
Rafał Dzięgiel
f6e99ddf4c clapper-app: Advance frame with "E" key 2025-12-09 21:54:31 +01:00
Rafał Dzięgiel
736952a378 clapper: Add advance frame function
Allows to perform frame step operation forward
2025-12-09 21:53:32 +01:00
Rafał Dzięgiel
f75b1b6bb2 clapper-app: prefs: Shorter text for no enhancers 2025-12-08 20:28:06 +01:00
Rafał Dzięgiel
cbbd93bf04 clapper-gtk: av: Fix checks when inhibiting session 2025-12-08 20:00:42 +01:00
Rafał Dzięgiel
065b8698dc clapper-gtk: video: Fix sink property type checks
Sometimes property might return a subclass type when object is subclassed.
This especially happens with custom GdkPaintable implementations.
For this reason instead of comparing object type, check if it inherits what we want.
2025-12-08 19:55:38 +01:00
Rafał Dzięgiel
c1fd82f8d9 clapper-gtk: seek-bar: Honour accurate seek method on markers
When seeking to a marker position, logic always used NORMAL seek method since
FAST would be too inaccurate. This is fine, but when user sets preferred seek
method to ACCURATE we should use it always (including seeks to marker positions).
2025-12-08 19:52:04 +01:00
Rafał Dzięgiel
38cad126ff clapper: playlistable: Annotation fixes
Both cancellable and error cannot be NULL
2025-12-08 18:50:39 +01:00
Rafał Dzięgiel
c270920886 clapper: extractable: Annotation fixes
Both "cancellable" and "error" cannot be NULL.
Also add missing "harvest" annotation.
2025-12-08 18:49:36 +01:00
Rafał Dzięgiel
e91d9a71a7 doc: extractable: Document all common harvest media types 2025-12-08 18:47:50 +01:00
Rafał Dzięgiel
c7a793fbf0 Merge pull request #598 from Rafostar/playlistable-excludes
clapper: Playlistable support for string excludes
2025-12-06 19:19:21 +01:00
Rafał Dzięgiel
5e62e89aef doc: clapper: Document excludes keys in playlistables 2025-12-06 18:32:41 +01:00
Rafał Dzięgiel
d331641e88 clapper: playlist-demux: Support searching for exclusions
Sometimes data is similar and can be determined to be a playlist
by NOT including some specific syntax (e.g. HLS). For this reason
add ability to define an exclusion requirement for playlist parsers.
2025-12-06 18:32:32 +01:00
Rafał Dzięgiel
cff2cedf62 Merge pull request #597 from Rafostar/queue-alters
clapper: Queue and timeline alter changes
2025-12-06 16:53:49 +01:00
Rafał Dzięgiel
c3533ddec2 clapper: reactable: Add timeline insert/remove functions
Similar to queue alternation functions present in reactable, also
add ones for timeline alternations as these are a must for non-newly
created items.

For consistency, remove auto thread switching logic from insert/remove
functions in ClapperTimeline object. Such behavior is unexpected and
I feel it could lead to potential issues such as deadlocks.
2025-12-06 16:35:00 +01:00
Rafał Dzięgiel
e1d635e6dd clapper: Function to insert into queue after other item position 2025-12-06 16:24:21 +01:00
Rafał Dzięgiel
8f33737903 clapper: Deprecate Server feature
It was ported to Clapper Enhancers repo as a plugin called "Control Hub"
for better clarity what it does. Applications using old one should slowy
move towards using new implementation instead.
2025-12-02 18:20:52 +01:00
Rafał Dzięgiel
1bc1fbf54e clapper-app: Add Control Hub Enhancer support
When installed configure and use it instead of ClapperServer feature.
Also hide all server feature options in preferences when not being used.
2025-12-02 18:19:12 +01:00
Rafał Dzięgiel
f58e403c55 clapper: reactable: Add missing "message_received" docs note 2025-12-02 18:15:33 +01:00
Rafał Dzięgiel
c39c72c3ed clapper: media-item: Add missing version annotation 2025-12-02 18:13:27 +01:00
Rafał Dzięgiel
c20d22bb55 examples: Add audio level meter python example
An example showcasing how to make a simple audio visualization for L/R volume levels
2025-12-02 17:44:08 +01:00
Rafał Dzięgiel
54efc98166 clapper: Fix media items leak when parsing URI list
Unlike other array containers, GListStore append function
refs object internally, so unref afterwards is needed.
2025-11-25 20:24:18 +01:00
Rafał Dzięgiel
48d7f48212 clapper: Media item construction code cleanup
Slight cleanup related to media item construction.
Also fixes an issue where item ID was not being set when
created with g_object_new (what bindings usually use).
2025-11-25 20:20:49 +01:00
Rafał Dzięgiel
f0d27b01ef clapper: Modify URI of media item from GFile in-place
When creating item from GFile, modify URI in-place if needed (avoid a copy)
2025-11-25 19:13:57 +01:00
Rafał Dzięgiel
4cae6d4aed clapper: Use atomic operations for item ID generation 2025-11-25 19:02:24 +01:00
Rafał Dzięgiel
3c00dc61d6 Merge pull request #594 from Rafostar/devel
Playlists handling changes and bugfixes
2025-11-23 19:28:14 +01:00
Rafał Dzięgiel
50d7ae4b2a clapper: Add readable "redirect-uri" property to media item
Allow applications to inspect permanent redirect URIs of media items
in a similar manner as done for "cache-location" property
2025-11-23 18:46:51 +01:00
Rafał Dzięgiel
9e1622976a clapper: Make media item "cache-location" a readable property 2025-11-23 18:46:41 +01:00
Rafał Dzięgiel
872c049af8 clapper: Skip default cache location set at item construction
It is already NULL for newly created media item and otherwise
debug printing for this property being changed to NULL for each
media item is confusing
2025-11-23 14:45:13 +01:00
Rafał Dzięgiel
27fd2e0225 clapper: Ensure redirects for an item are from single source
In cases where there are multiple objects resolving a playlist at once
(e.g. player starts playing playlist item that Media Scanner also works on),
just ignore parsing results from the other parser. We keep/use parsing
results from whichever parser parsed the playlist first.
2025-11-23 14:45:11 +01:00
Rafał Dzięgiel
05b7314b73 clapper: Reworked infinite nested playlists detection
Instead of doing this inside player, logic was reworked and moved into playlist demuxer
itself. It uses GstQueries to communicate with upstream elements. This way we can post
an error from running pipeline which helps keep this logic in single place and have it
shared with other pipelines (like the one used in Media Scanner Enhancer).

As part of the rework, nested playlist limit was added and set to 10 redirects.
Seems like a safe/optimal number and this simplifies stuff a lot. Instead of
keeping a list of strings with previous redirected URIs, we can just store the
one most recent in media item.
2025-11-23 14:45:02 +01:00
Rafał Dzięgiel
4acb3e38b3 clapper: Post playlist message before setting next URI
Fixes a problem where error message from unplayable URI content
(e.g. non-existing file) arrives on pipeline bus before resolved
playlist which contains that URI.

With this change, a playlist can be resolved into individual items
which are put into queue even if first item of it is unplayable.
2025-11-21 18:52:06 +01:00
Rafał Dzięgiel
9e955f4e5f clapper: Prevent concurrent cache cleanups
We do not want to create situations where multiple threads are running
cache cleanup at once (since they all think last one was run long ago).
This can be prevented with a combination of global mutex and a "trylock",
so we can simply avoid both mutex locking and starting another cleanup.
2025-11-21 18:52:04 +01:00
Rafał Dzięgiel
10bb4365a0 clapper: Use correct types for enums/flags in playbin bus
We send read them as simple integers, thus we should send them as such instead of using GObject Flag or Enum types.
2025-11-21 18:52:00 +01:00
Rafał Dzięgiel
a9cdbf8626 clapper: Mark item title as always parsed
This should be used internally for whether title is still used from parsing, not if parsing was successful.

Fixes an issue where in such cases correct title is not updated later on.
2025-11-21 18:51:58 +01:00
Rafał Dzięgiel
e85be687d6 clapper: Add messaging between app, reactables and player
In some cases, simple properties in reactable enhancers are not enough.
This allows enhancers to do something on a signal from user (e.g. button/shortcut press).

It can also be used to communicate with the player for things that were
already done externally (like playlist parsing in Media Scanner enhancer).
2025-11-21 18:51:54 +01:00
Rafał Dzięgiel
1ae7d8dead clapper: Deprecate Discoverer feature
It was ported to Clapper Enhancers repo as a plugin and applications
using old one should slowy move towards using new implementation instead.
2025-11-21 18:34:00 +01:00
Rafał Dzięgiel
84edc142ab clapper: Prefer media scanner enhancer over legacy discoverer feature 2025-11-21 18:33:16 +01:00
Rafał Dzięgiel
39e225d70d Merge pull request #591 from Rafostar/proxy-jobs
clapper: Add simple enhancer proxy jobs management
2025-11-10 18:37:24 +01:00
Rafał Dzięgiel
acf99586ab clapper: Add simple enhancer proxy jobs management
Allows to mark a job with a given ID as started, then when another thread/instance
wants to process the same ID we can detect it and await previous job finish.
This is especially useful for not extracting the same URI concurrently while
still allowing to process multiple different URIs at once without blocking.
2025-11-06 18:44:40 +01:00
Rafał Dzięgiel
b41949fb87 Merge pull request #585 from Rafostar/enhancers-keyfile
Store enhancers settings in separate config file
2025-08-11 18:26:28 +02:00
Rafał Dzięgiel
38752a3832 doc: clapper: Document how to share enhancers config between Flatpaks 2025-08-11 17:32:52 +02:00
Rafał Dzięgiel
659de80741 clapper: Store enhancers settings in separate config file
By enforcing keyfile GSettings backend with a custom file path,
we can store all enhancers settings within known location.
It makes it much easier to share them in between apps in Flatpak.
2025-08-11 17:32:38 +02:00
Rafał Dzięgiel
d2ceb962f1 Merge pull request #584 from Rafostar/additional-docs
doc: Additional migration docs
2025-08-08 19:12:52 +02:00
Rafał Dzięgiel
ff3df7a8bf doc: clapper: Fix typo 2025-08-08 17:52:50 +02:00
Rafał Dzięgiel
31c230dde6 doc: clapper-gtk: Add migrating to 0.10 guide 2025-08-08 10:14:47 +02:00
Rafał Dzięgiel
91b7a0f1a5 Merge pull request #583 from Rafostar/additional-docs
doc: clapper: Additional documentation about enhancers
2025-08-07 22:50:50 +02:00