livi (0.5.0) experimental; urgency=medium

  [ Guido Günther ]
  * cutouts: Add class to handle display cutouts.
    This is a bit more generic as needsto be to make it hopefully easy to
    copy/paste around until we land support in a toolkit.
  * margin-layout: Layout manager that applies margin on full screen
  * window: Make content box a bin.
    We'll set the layout manager there
  * window: Track cutouts and shrink video.
    We only need to care about fullscreen landscape in the mobile use case.
    We use attach a layout manager to the bin to apply the margin changes.
  * window: Only avoid notches when enabled.
    This allows the user to disable this feature. On devices with a small
    notch it is usually o.k. to have the video overlap the cutout area.
  * shortcuts: Use adaptive shortcuts
  * window: Use spinner when processing URLs

  [ OlesyaGerasimenko ]
  * Add Russian translation

  [ Teemu Ikonen ]
  * window: Change type of empty state widget to AdwStatusPage, like in ui-file
  * application: Fix debug string typo in on_clipboard_read_ready
  * window: Add processing_state to LiviWindow GtkStack.
    This state has an AdwStatusPage which is displayed while doing URL
    processing.
  * application: Show processing state when doing URL processing.
    Set the processing state in the applications GtkStack when ref_url is
    set, but info->url is not, which indicates that URL processing
    has been started.
  * application: Always activate app on paste to set correct window state.
    App activation sets the window to processing state after paste.
  * window: Hint about URL pasting in empty state page title

 -- Guido Günther <agx@sigxcpu.org>  Sat, 06 Jun 2026 08:47:27 +0200

livi (0.4.0) experimental; urgency=medium

  [ Guido Günther ]
  * build: Fix typo
  * build: Add shared-modules.
    Used for the flatpak build
  * flatpak: Unbreak build.
    We update to what we use on flathub so we can keep both builds
    in sync with minimal changes.
  * ci: Add deploy stage.
    Needed to make the flatpak build happy
  * ci: Update shared scripts to 6ee1fd4
  * build: Format meson files
  * ci: Check meson
  * dir-locals: Update from meta-phosh
  * schema: Reindent.
    Just use our default indent
  * data: Ensure schema is rebuild on changes
  * gst-paintable: Avoid warning
  * window: Allow to use maximum screen area.
    Letterboxing ensures we have everything on screen but sometimes we
    just want to use the maximum available screen area.
  * controls: Use GMenuModel.
    It renders correctly, is easier to use and we use it for the other
    menus too.
    Closes: https://gitlab.gnome.org/guidog/livi/-/issues/25
  * window: Allow to loop video.
    Closes: https://gitlab.gnome.org/guidog/livi/-/issues/42
  * treewide: Update copyright
  * window: Add shadow to seek indicator.
    Improves readability on bright videos
  * window: Clear handle before setting a new timer
  * window: Listen to seek done.
    Emitted even when the stream is paused. This allows to seek when
    the stream is paused but only when stream position changes. We
    thus need to guard against seeking to the same position.
    Closes: https://gitlab.gnome.org/guidog/livi/-/issues/30
  * window: Let icons hide itself
  * window: Don't seek past end of stream
  * window: Ignore seeks below 1 second.
    Otherwise we might get stream updates that are below our seek
    position and thus have incorrect seek indication arrows.
  * ci: Switch to Debian Forky
  * window: Simplify cleanup
  * application: Better document URLs
  * url-processor: Fix indent
  * url-processor: Get more metadata.
    Introduce LiviUrlInfo for that
  * application: Pass UrlInfo down to window.
    Use an UrlInfo where we used the plain video URL so far
  * window: Prefer title from stream info over URL
  * window: Get artist from UrlInfo
  * mpris: Set artist when available
  * treewide: Add thumbnail.
    Let the url processor fill in, the window store it on the stream
    and mpris put it out on the bus
  * window: Hide overlay when restarting
  * window: Set mute icon from property only.
    Otherwise the icon might flicker or need multiple clicks
  * controls: Move settings to gear menu.
    It's more of a setting
  * window: Simplify hide/unhide tracking.
    When handling pointer motion we only trigger the hide from show_controls
    and add an inhibitor for situations where hit shouldn't hide. The
    inhibitor is a counter instead of a boolean to handle overlapping
    inhibit/uninhibit events.
  * window: Inhibit hiding controls when menu is active
  * controls: Indicate when a menu is active
  * window: Inhibit hiding controls when a controls menu is active.
    Similar to the top menu but for the menu in the controls bar.
  * window: Track dialogs too.
    Otherwise we might hide the mouse pointer while hovering
    over the about dialog.
  * url-processor: Don't print a warning when there's no thumbnail available
  * window: Use format specifies.
    Fixes 32bit build. We also drop the 2 digit format for seconds seeked.

  [ Sabri Ünal ]
  * Update Turkish translation

 -- Guido Günther <agx@sigxcpu.org>  Tue, 03 Feb 2026 17:48:17 +0100

livi (0.3.2) experimental; urgency=medium

  * mpris: Don't emit properties changed signal.
    Closes: https://gitlab.gnome.org/guidog/livi/-/issues/41
  * screenshots: Add screenshot of playback window
  * metainfo: Use windowed screenshot as default
  * metainfo: Update description
  * metainfo: Add brand colors
  * window: Fix ui file indent
  * window: Make close button round again
  * window: Play/pause video on mouse click
  * window: Attach press gesture to center image too.
    Otherwise clicking on the image wouldn't resume/pause

 -- Guido Günther <agx@sigxcpu.org>  Sat, 26 Jul 2025 15:08:46 +0200

livi (0.3.1) experimental; urgency=medium

  * window: Disable video track when toplevel gets suspended.
    This saves quiet a bit of CPU cycles.
  * ci: Update shared scripts to f9c001d
  * ci: Add more checks.
    Especially the release helper ensures we don't miss metainfo again.

 -- Guido Günther <agx@sigxcpu.org>  Fri, 17 Jan 2025 22:58:04 +0100

livi (0.3.0) experimental; urgency=medium

  [ Guido Günther ]
  * application: Don't forget to init resume.  This fixes auto resume
  * window: Don't update stream pos with 0.
    When e.g. resuming a video but the video fails to load we don't want to
    overwrite the current stream position with 0.
  * mpris: Export stream position and duration
  * controls: Improve formating. We want hh:mm:ss rather than just mm:ss.
  * controls: Split duration and postition. Gets us a bit closer to designs
    at https://gitlab.gnome.org/Teams/Design/app-mockups/-/blob/master/videos/
  * docs: Expand on yt-dlp use

  [ Sabri Ünal ]
  * appdata: Comply with Flathub suggestions
    - Add the vcs-browser URL to link to the source code repository
    - Add the translate URL to link to the translation repository
    - Set desktop-application as the component type
    More information: https://docs.flathub.org/docs/for-app-authors/metainfo-guidelines/
  * appdata: Mark release descriptions as untranslatable.
    GNOME automatically excludes release descriptions on Damned Lies
    (GNOME Translation Platform). It's a good practice to follow
    the GNOME way.
    This can streamline the translation process, allowing translators
    to focus their efforts on more critical and user-facing aspects
    of the application.
  * i18n: Mark a few files translatable
  * ui: Mark two strings translatable
  * i18n: Activate DE translation
  * i18n: Add Turkish translation

  [ Robert Mader ]
  * window: Enable GtkGraphicsOffload black-background optimization.
    In order to make GTK signal to compositors that they can optimize the
    background, allowing zero-copy playback with a single hardware plane.
    Also slightly simplify position properties while on it.

 -- Guido Günther <agx@sigxcpu.org>  Fri, 27 Dec 2024 22:34:30 +0100

livi (0.2.0) experimental; urgency=medium

  [ Krassy Boykinov ]
  * window: Replace %ld with platform independent format macro

  [ Guido Günther ]
  * main: Check GTK init. There's still lots of people running X11. Add a better error message
    in that case.
  * recent-videos: Allow to get timestamp
  * recent-videos: Add out-of-bounds check. g_ptr_array_index() doesn't do that for us.
  * recent-videos: Fix sorting.
    As we compare guint64 we could easily overflow the return value.
  * application: Allow to list recent videos.
    Allow to list the currently known recent videos on the command line.
  * application: Allow to paste and run the URL processor.
    Closes: https://gitlab.gnome.org/guidog/livi/-/issues/26
  * application: Set resource base path.
    This makes sure it doesn't change when using the Devel profile.
    Otherwise we fail to find custom icons, etc.
  * data: Add icon for nightly builds.
  * build: Add devel profile.
    This can be used for the flatpak devel builds
  * flatpak: Use devel profile
  * build-aux: Drop unused patch.
    Fixes: 5c65079 ("flatpak: Drop gst-plugins-bad patch")
  * build: Track gtk 4-14 branch
  * flatpak: Indent with two spaces. It's what we specify in dir-locals
  * flatpak: Add Devel to manifest name. This makes the manifest match the app-id
  * flatpak: Drop x264 encoder
  * flatpak: Use gstreamer 1.24.3
  * flatpak: Use gtk4paintable sink.
    As I don't want to mess with flatpak-cargo-generator.py let's pull the
    crates from the network for now.
  * flatpak: Enable gst-plugins-bad va
  * window: Allow to force builtin sink.
    This is useful for flipping between this and the gtk4paintable sink.
  * livi: Allow to configure audio visualizer.
    Use monoscope by default as it uses less CPU than wavescope.

  [ Robert Mader ]
  * flatpak: Update gstreamer and file permissions.
    Update Gstreamer to latest stable, in order to make Wayland offloading
    work, and sync file permissions to the Flathub manifest.

  [ Sebastian Dröge ]
  * window: Use `gtk4paintablesink` instead of the in-tree sink if available.
    See https://gitlab.gnome.org/guidog/livi/-/issues/37

 -- Guido Günther <agx@sigxcpu.org>  Sat, 25 May 2024 08:31:03 +0200

livi (0.1.0) experimental; urgency=medium

  [ Guido Günther ]
  * screenshots: Update to something recent.
    The design changed.
  * data: Fix appstream metainfo
  * tests: Disable the network access when running the.
    This allows to run them in isolated build environments. We switch
    form deprecated appstream-util to appstream-cli for that too.
  * ci: Run tests in build step.
    This is mostly validation so don't bother with an extra job
  * flatpak: Update gstreamer.
    Taken from https://github.com/flathub/org.sigxcpu.Livi/pull/6/files
  * ci: Move flatpak job to packaging stage.
    This will make it easy to identify once we have more jobs
  * ci: Add scripts for common jobs
  * po: Allow check-po to pass.
    This makes sure we don't regress and translators
    can run their tools
  * ci: Enable automatic po and commit message checking
  * window: Swap muted/unmuted audio icons.
    More in line with other players
    Closes: https://gitlab.gnome.org/guidog/livi/-/issues/13
  * window: Split mime types
  * shortcuts: Split into general and video section
  * app: Allow to paste uris.
    Pasting an uri into the main window via ctrl-v plays that video.
  * sink: Fix gst debug category
  * build: Add run script.
    We have GSettings now and want to be able to run from the source tree.
  * data: Always compile schemas.
    This allows us to run from the source tree
  * window: Add type checks to public functions
  * window: Use video folder if we don't have an url
  * recent-videos: Track played videos and positions.
    This saves the played videos in GSettings so playback can be resumed.
  * window: Add recent video handler
  * window: Remember position on state state changes
  * window: Remember stream position on close request too
  * window: Seek to old stream pos
  * window: Add ref_uri.
    This is the name we want to refer to the stream. For local files it
    makes no difference. For https:// streams that pass through a URL
    processor the ref_uri is the initial short name and the uri is the
    actual playable backend uri (which e.g. for video sites changes with
    every play).
  * window: Use ref_uri for title.
    For filenames it doesn't matter and for https:// URLs the ref_uri
    is usually the shorter one.
  * application: Track the reference URL too
  * window: Show overlay when resuming a stream or reaching EOS.
    This allows to select whether to resume or start at the beginning.
    At end of stream we only show the Restart option.
  * main: Cleanup on SIGINT and SIGTERM.
    Makes sure we shutdown gracefully cleaning up cache files, sync
    stream state, etc.
  * window: Arm Hide controls timer when entering playing state.
    When the user presses e.g. "space" we want to autohide. We don't want to
    so on touch only devices though.
  * window: Switch to content view when toggling play.
    Otherwise we might e.g.stay on the error page.
  * window: Hide controls in non playback states.
    Error and empty state don't need them and confuse the user.
  * application: Move option handling into class.
    No need to have this split between two files
    Fixes: 7fdcdb8 ("Add LiviApplication")
  * app: Allow to skip automatic resume
  * window: Label SDH subtitles.
    We'll likely need more tag parsing here but the only example I have
    here uses this to annotate the subtitle stream.
  * controls: Make sure there's initially no lang menu.
    If a stream has neither audio streams nor subtitles we don't want to
    present an empty menu.
  * window: Don't forget to init autofree'd pointer.
    Fixes: 5c0962d ("window: Label SDH subtitles")
  * window: Show controls when window becomes active.
    This makes it more obvious the window got focused hence easing
    navigating without pointer / touch.
  * ci: Use meson setup
  * build: Bump required GTK dependency to 4.13.7.
    This allows us to buils using graphics offload
    Add a fallback until this GTK version makes it into distros.
  * recent-videos: Drop unused enum
  * recent-videos: Allow to get URL of recently played videos
  * application: Allow to resume the n-th last video
  * window: Remember if URI is preprocessed.
    When the ref-uri isn't the player uri it got preprocessed.
    We could determine that when needed but it's easier to just cache it
    when set.
  * recent-videos: Track if a video is preprocessed.
    Use that information when picking a specific video to resume.
  * application: Preprocess when picking a specific video to resume.
    If we pick an old video to resume we must preprocess it's URL again if
    needed. If the user forces preprocessing we honor that.
    If an explicit URL is passed we don't get preprocess information
    automatically so the user can control that.
  * recent-videos: Use sort_values.
    Otherwise we access the to be sorted values incorrectly.

  [ Robert Mader ]
  * window: List mkv files in file chooser.
    Additionally to mp4 and webm.
    The app is already registered for these file types in e.g. file
    browsers, but opening files from within the app isn't possible
    without this change.
  * window: Add more elements to hw-decoding check.
    Add stateful v4l2, va-api and vulkan elemnts, as well as av1 elements where
    appropriate, to make the icon and message useful on more platforms.
  * sink: Add support for DMABuf import and graphics offload.
    By implementing support for `GdkDmabufTextureBuilder` and
    `GstVideoInfoDmaDrm`. This allows zero-copy video playback on Wayland
    when paired with hardware video decoding.
    Mostly a straigh forward copy from `GtkGstSink`.
    Note that Gstreamer 1.23.1/1.24 is required.
    We bump the required GTK version due to the change in the UI file, which
    is hard to make conditional.

 -- Guido Günther <agx@sigxcpu.org>  Thu, 14 Mar 2024 21:09:52 +0100

livi (0.0.6) experimental; urgency=medium

  * ci: Make vars match the image.
    We use trixie since some time
  * window: Hide center overlay on play.
    This makes sure we hide it when the new overlay was started
    by a new video (e.g. via a remote instance)
  * css: Only make main window transparent
  * main: Simplify keyboard shortcuts.
    Avoid the need for a variable for each shortcut group
  * window: Remove info bar.
    Use the headerbar instead. This moves us closer to the designs.
  * window: Only show icon when accel is off.
    This follows the "don't irritate the user when all is fine" pattern
  * window: Use adw-toolbar for bottom bar.
    This allows us to avoid a `GtkRevealer` and makes sure top and bottom
    bar have consistent animations.
  * window: Drop margin around controls.
    This makes them align to the window edges getting us closer to the
    designs.
  * Add a shortcuts window.
    Not very useful on mobile but on desktop.
  * Add an about dialog.
    Regular apps ought to have one.
  * window: Add menu button.
    This for now allows to show the keyboard shortcuts and about window.
  * window: Use a vertical menu for playback speed.
    Moves us closer to designs
  * window: Reindent.
    No functional change. Do this in a separate commit to ease rebasing.
  * window: Improve control icons.
    Instead of specifying padding in css just make sure the button is
    squared via width-requests and let them expand. This ensures the
    whole area stays touchable.
    While at that use the gear icon for settings and deemphasize mute and
    settings a bit by using a smaller icon.
  * window: Add a single method to play an URL
  * window: Add initial file open dialog.
    We want to improve the mime types/file patterns and sync it up
    automatically with what we have in the desktop file but let's give users
    a UI way to open files. This helps cases where livi isn't the default
    video player and launched via e.g. nautilus.
  * window: Strip blanks to save space in resources
  * build: gitignore packaging files
  * main: Use AdwApplication.
    No need to init adwaita separately then.
  * Add LiviApplication.
    This allows us to carry application state
  * application: Move startup handler.
    We can handle them via a vfunc in LiviApplication.
  * application: Move activate handler.
    We can handle them via a vfunc in LiviApplication.
  * application: Move command-line handler.
    We can handle them via a vfunc in LiviApplication. This allows us to
    drop the context and properly dispose the url-processor object.
  * application: Avoid g_object_{get,set}
    We have a proper object to keep the state now
  * window: Move empty state closer to designs.
    Add a Open… button and use the camera icon
  * window: Move error state closer to designs.
    Add a "Try Again" button and use the warning icon
  * window: Reindent.
    No functional change. Do this in a separate commit to ease rebasing.
  * window: Use a parameter on the action for seeking.
    We use millisecons resolution as we're limited to int32 ('i') as int64
    ('x') doesnt work.
  * window: Split out controls.
    If we want to make the controls look differently depending
    on width it's nicer to not clutter the window class even
    further.
    We move the controls over 1:1 (not even reindenting ui) and wire these
    up with a minimal amount of setters.
  * controls: Reindent.
    No functional change. Do this in a separate commit to ease rebasing.
  * controls: Add Stack.
    What we have at the moment matches the wide layot
  * Add skip forward/backward icons.
    Taken from phosh 0.34.0
  * controls: Add initial narrow layout
  * controls: Add narrow property.
    If set we use the narrow layout. We need to switch over
    the popover as it can only have one parent
  * window: Toggle narrow and wide layout
  * controls: Clamp and float the wide layout
  * controls: Add skip forward/backwards buttons to wide controls
  * window: Make sure we don't skip < 0
  * window: Avoid icon if we seek to the same position
  * resources: Sort icons alphabetically
  * icons: Add region-symbolic.
    Taken from GNOME Settings 45
  * window: Move stream related bits to struct.
    This allows us to reset in one place
  * Handle multiple audio stream languages.
    We ignore different bitrates, etc for now.
  * window: Add subtitle streams
  * controls: Add style classes to playback speed  menu.
    This makes the title style consistent with the new lang menu
  * controls: Reindent.
    No functional change. Do this in a separate commit to ease rebasing.
  * window: Avoid multiple seeks.
    If a seek is ongoing and we didn't set a new position yet, reject it.
    This avoids the overlay fading out too quickly.
  * Add utils.
    There' some macros we want to share between modules
  * build: Specify gstreamer version in one place.
    Bump to a halfway recent version while at that.
  * window: Use win.ff action for forward/backward skipping.
    We only kept win.rev for the keyboard shortcuts but can also
    handle this by giving the action detail.
  * window: Make player state a property
  * window: Track stream title.
    Without a title try to make some sense of the URI.
  * Export mpris interface.
    This exports the interfaces and wires up raise. No actual functionality.
    Phosh doesn't pick it up yet as we don't set a proper player status yet.
  * ci: Remove unused remote
  * window: Enable visualization for audio only streams.
    We just use waveform for now and fall back to the next best one if that's missing.
  * window: Handle subtitle selection
  * window: Autohide the panel.
    Show on pointer motion, keep open when pointer is over ui elements
    Follow-up commits refine this.
  * window: Hide cursor on inactivity
  * window: Only change icon on fullscreen.
    Let autohide handle the controls / bars
  * window: Unfullscreen when file choser opens.
    Otherwise the portal's dialog can't set this window as proper
    parent.
  * window: Only hide controls during play
  * window: Only hide controls when there's pointer.
    Things are hard to use on touch otherwise. We still auto-hide
    controls on state mode changes to play.
  * application: Use GTK's window.close action.
    No need to have our own.
  * main: Add short-option for --yt-dlp.
    I'm using it often and keep mistyping it
  * window: Use stateful actions for subtitles and audio tracks.
    This makes them automatically render correctly as radio buttons in the
    popover.
  * controls: Hide the wide layout in narrow mode.
    Otherwise widgets in the wide layout can prevent the window from
    shrinking further.
  * controls: Use a bit less horizontal space.
    Othrwise we overflow when the lang menu is open
  * controls: Use win.ff everywhere.
    Fixes: 19aeb15 ("controls: Use a bit less horizontal space")

 -- Guido Günther <agx@sigxcpu.org>  Fri, 19 Jan 2024 17:09:54 +0100

livi (0.0.5) experimental; urgency=medium

  [ Guido Günther ]
  * Update copyright.
    The files this is based on are LGPL 2.1 in GTK so keep it like that.
  * ci: Use Debian trixie
  * build: Require gtk 4.12
  * sink: Avoid deprecated gdk_gl_texture_new.
    See GTK commit fa44d258d090cc44bb3fc6f21b4d9f32212ae2b8
  * paintable: Avoid -Wfloat-equal compiler warning.
    Use G_APPROX_VALUE
  * paintable: Move interface definition to the top.
    As we do it in phosh, etc
  * paintable: Use automatic cleanup for context
  * sink: Use automatic cleanup for the buffer pool
  * sink: Use automatic cleanup for texture
  * sink: Use automatic cleanup for tmp caps
  * window: Add visual feedback when skipping ff/rev/play/pause.
    Show a centered icon indicating what's going on.
  * window: Drop unused variables
  * window: Indiate end of stream
  * window: Track warnings.
    Let's make sure we at least print them to the console
  * window: Show overlay icon on slider value changes
  * main: Don't hardcode window height in two locations.
    We have it in the ui file too
  * window: Use a larger default height.
    Otherwise we cut off parts of the page
  * window: Drop some unused variables
  * url-processor: New class to fetch URLs via yt-dlp
  * main: Add --yt-dlp command line option.
    Closes: https://gitlab.gnome.org/guidog/livi/-/issues/6
  * window: Bubble up url-processor error messages
  * window: Use livi_window_set_error internally too
  * main: Allow F11 as fullscreen shortcut
  * metainfo: Remove .desktop from app-id.
    As per https://freedesktop.org/software/appstream it's not part
    of the app-id.
  * window: Use same margin for info overlay than for controls
  * window: Use AdwApplicationWindow
  * build: Bump Adwaita dependency to 1.4.
    We want to use AdwHeaderBar
  * window: Make top bar transparent. Gets us closer to the designs

  [ Krassy Boykinov ]
  * Rename µPlayer into Light Video
    Closes: #4
  * Fix format string for 32 bit architectures

 -- Guido Günther <agx@sigxcpu.org>  Wed, 20 Dec 2023 20:39:20 +0100

livi (0.0.4) experimental; urgency=medium

  * metainfo: Update URLs and formfactor
  * sink: Use automatic cleanup
  * main: Don't forget to destroy main window.
    Otherwise we won't clean up the GST elements either
    Closes: https://gitlab.gnome.org/guidog/livi/-/issues/2
  * Allow to set playback speed

 -- Guido Günther <agx@sigxcpu.org>  Fri, 28 Apr 2023 18:34:25 +0200

livi (0.0.3) experimental; urgency=medium

  * Initial release

 -- Guido Günther <agx@sigxcpu.org>  Fri, 31 Mar 2023 12:09:19 +0200
