$ show Rafostar/clapper
Clapper is a modern media player application designed for the GNOME desktop, built with GTK 4 and powered by GStreamer. It features a queue-based playback system supporting sequential, repeat, carousel, and shuffle modes, along with standard media controls like play/pause, seeking, volume adjustment, and fullscreen toggling. The application emphasizes usability with an adaptive interface, subtitle/audio track selection, playback speed control, and media information display showing technical details such as codecs and bitrates. The architecture consists of three main layers: a core library (`clapper`) handling playback logic, queue management, and extensibility via plugins; a GTK library (`clapper-gtk`) providing reusable widgets like video display, buffering indicators, and custom layouts; and the main application (`clapper-app`) assembling the user interface and integrating with the core. Extensibility is achieved through a libpeas-based plugin system for metadata extraction, playlist parsing, and reactive components, while optional features like MPRIS and a built-in web server for remote control are marked as deprecated in favor of the external enhancer ecosystem. Clapper demonstrates strong engineering practices with proper GObject encapsulation, thread-safe design using a custom `ClapperThreadedObject` base class, and adherence to GTK 4 patterns such as template-based widgets and action-driven UI. The project maintains active development with recent commits, comprehensive internationalization support, and integration with modern GNOME technologies like libadwaita, though it relies on evolving dependencies (GStreamer, GTK) and contains some deprecated components requiring ongoing maintenance.
The LLM identified 3 files worth highlighting for reuse:
A custom GTK4 layout manager that enforces minimum and maximum size constraints on child widgets, enabling responsive UIs that adapt to available space while maintaining usability. Demonstrates expertise in GTK's layout system and provides a reusable component for adaptive interfaces without tight coupling to application logic.
Part of a reusable buffering indicator pair (with ClapperGtkBufferingPaintable) that provides a smooth, customizable loading animation for media playback. Showcases advanced GTK paintable and animation API usage to create a self-contained UI element that automatically manages visibility and animation lifecycle, suitable for extraction into any GTK application.
A GObject base class that simplifies background thread execution while ensuring safe communication with the main thread via marshalling. Encapsulates thread lifecycle management, job queuing, and main-thread callback invocation, offering a reusable foundation for any GTK application requiring background processing with minimal boilerplate.