Skip to content

0.6.0

Latest
Compare
Choose a tag to compare
@Rafostar Rafostar released this 22 Apr 21:34
· 41 commits to master since this release
f0f4801

In this release Clapper code was basically rewritten from scratch. Now split into two libraries and an application built on top of them. These are:

The aim of this was to have a much cleaner and easier to maintain code that better integrates with GTK toolkit while also being able to share it with other apps if/when I decide to make another application that needs to play video as part of it. Of course anyone else is free to use them in his/her own projects too as long as he/she comply with license terms (licensed under LGPL-2.1-or-later). Just please note that until version 1.0 they should be considered as an unstable API (some things may change without prior notice).

In new implementation of Clapper API, playback operates upon a media queue which implements GListModel interface, making it very easy to integrate with GTK4. All media items are refcounted items and Clapper API automatically takes care of serializing events/signal from GStreamer into main application thread making it compatible as-is with GTK toolkit. It also integrates GstDiscoverer API, so you will see actual media titles whenever possible once enqueued. Additionally it exposes common features that can be easily added to the implementation like MPRIS without need of implementing all that on the app side.

As for ClapperGtk - it extends what main Clapper API does into the world of GTK widgets. The main concept here is to provide a premade widgets that can be simply added as overlays on top of the main ClapperGtkVideo widget. Once that is done, they automatically control playback without need to implement all their logic on the app side. For convenience, the video widget takes care of automatically revealing them when interacting with the player and hiding later.

Both libraries support GObject Introspection bindings. A simple application example that was done for testing purposes can be found here.

During this rewrite, all JavaScript code was dropped and we no longer use GJS for UI logic. For consistency of managing monorepo, everything was redone in pure C.

Most significant changes to the Clapper application itself include:

  • Brand new, simplified and consistent UI
  • Player now operates on playback queue model
  • Multiple queue progression modes to choose from (consecutive, repeat item, carousel, shuffle)
  • New media info window (shows media information and GStreamer elements used to play it)
  • More dialogs and windows use libadwaita
  • Multiple new status/info overlays showing what is going and other messages
  • Added video buffering animation
  • Clapper will now inform users about missing GStreamer plugins needed for playback
  • Video chapters now appear throughout the seek bar on hover and while dragging slider
  • Vastly expanded MPRIS implementation
  • Integrated media discovery (see titles of queued items instead of URIs)
  • Expanded WebSocket server functionality (for remote playback control)
  • Increased maximum volume amplification level to 200%
  • Added some new keyboard shortcuts
  • In addition to volume, now also speed and queue progression mode are restored on launch
  • Fixed keyboard shortcuts not being reversed (e.g. seek) in RTL languages
  • Toggle play moved to left mouse button, right one now opens context menu (which was previously hard to access)
  • Many bug fixes and QoL improvements

Info for package maintainers: Clapper no longer uses GJS, please remove it from package dependencies and descriptions. The "OpenGL rendering" part should now also be removed. In overall please try to make description more universal. From this point onward stable versions will use even numbers in minor version place and odd numbers for development releases. Sorry for all inconveniences.