Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package nulloy for openSUSE:Factory checked in at 2024-02-11 15:46:03 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/nulloy (Old) and /work/SRC/openSUSE:Factory/.nulloy.new.1815 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "nulloy" Sun Feb 11 15:46:03 2024 rev:12 rq:1145591 version:0.9.7 Changes: -------- --- /work/SRC/openSUSE:Factory/nulloy/nulloy.changes 2022-07-06 15:42:36.790571292 +0200 +++ /work/SRC/openSUSE:Factory/.nulloy.new.1815/nulloy.changes 2024-02-11 15:46:04.711763097 +0100 @@ -1,0 +2,16 @@ +Wed Feb 7 08:31:49 UTC 2024 - Dave Plater <davejpla...@gmail.com> + +- Update to v0.9.7 +- Fix vlc plugin build failure with patch from git: + 0001-playbackEngineVlc-build-fix.patch +- Fix taglib plugin build with 0001-taglib-2.0-compatibility.patch +- Upstream changes: + *Playback speed control + *Automatically saving settings and playlist in case of a crash + *More customizable keyboard shortcuts (Open Tag Editor, + Move to Trash, etc) + *Packaging .AppImage for Linux + *New "Scroll to item" playlist option + *Many other minor bug fixes and improvements + +------------------------------------------------------------------- Old: ---- nulloy-0.9.5.tar.gz New: ---- 0001-playbackEngineVlc-build-fix.patch 0001-taglib-2.0-compatibility.patch nulloy-0.9.7.tar.gz BETA DEBUG BEGIN: New:- Fix vlc plugin build failure with patch from git: 0001-playbackEngineVlc-build-fix.patch - Fix taglib plugin build with 0001-taglib-2.0-compatibility.patch New: 0001-playbackEngineVlc-build-fix.patch - Fix taglib plugin build with 0001-taglib-2.0-compatibility.patch - Upstream changes: BETA DEBUG END: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ nulloy.spec ++++++ --- /var/tmp/diff_new_pack.wIHxIq/_old 2024-02-11 15:46:05.487790998 +0100 +++ /var/tmp/diff_new_pack.wIHxIq/_new 2024-02-11 15:46:05.487790998 +0100 @@ -1,7 +1,7 @@ # # spec file for package nulloy # -# Copyright (c) 2022 SUSE LLC +# Copyright (c) 2024 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -16,19 +16,21 @@ # -%define rev 0.9.5 +%bcond_without vlc +%bcond_without taglib + #https://github.com/nulloy/nulloy/archive/refs/tags/0.9.5.tar.gz Name: nulloy -Version: 0.9.5 +Version: 0.9.7 Release: 0 Summary: Music player with a Waveform Progress Bar License: GPL-3.0-only Group: Productivity/Multimedia/Sound/Players URL: http://nulloy.com Source: https://github.com/nulloy/nulloy/archive/refs/tags/%{version}.tar.gz#/%{name}-%{version}.tar.gz -#Patch0: reproducible.patch -#Patch1: nulloy-QPainterPath-patch +Patch0: 0001-taglib-2.0-compatibility.patch +Patch1: 0001-playbackEngineVlc-build-fix.patch BuildRequires: clang BuildRequires: hicolor-icon-theme BuildRequires: libQt5Gui-private-headers-devel @@ -46,17 +48,22 @@ BuildRequires: pkgconfig(Qt5Widgets) BuildRequires: pkgconfig(gstreamer-1.0) BuildRequires: pkgconfig(gstreamer-pbutils-1.0) +%if %{with vlc} BuildRequires: pkgconfig(libvlc) +Recommends: %{name}-vlc +%endif +%if %{with taglib} BuildRequires: pkgconfig(taglib) -Recommends: %{name}-gstreamer Recommends: %{name}-taglib -Recommends: %{name}-vlc +%endif +Recommends: %{name}-gstreamer BuildRoot: %{_tmppath}/%{name}-%{version}-build %description Nulloy is a opensource, simple and clean music player with a Waveform Progressbar. It is written in C++ using QT. +%if %{with taglib} %package taglib Summary: Taglib plugin for %{name} Group: Productivity/Multimedia/Sound/Players @@ -65,6 +72,7 @@ %description taglib This package contains the taglib plugin for %{name} - a music player with a Waveform Progressbar. +%endif %package gstreamer Summary: Gstreamer plugin for %{name} @@ -76,6 +84,7 @@ This package contains the gstreamer playback plugin for %{name} - a lightweight music player with a Waveform Progressbar. +%if %{with vlc} %package vlc Summary: VLC plugin for %{name} Group: Productivity/Multimedia/Sound/Players @@ -84,9 +93,10 @@ %description vlc This package contains the vlc playback plugin for %{name} - a lightweight music player with a Waveform Progressbar. +%endif %prep -%setup -qn %{name}-%{rev} +%setup -qn %{name}-%{version} %autopatch -p1 %build @@ -100,9 +110,15 @@ ./configure \ --no-update-check \ --prefix %{_prefix} \ +%if %{with vlc} --vlc \ - --libdir "%{_lib}" \ - --gstreamer-tagreader +%endif +%if %{with taglib} + --gstreamer-tagreader \ +%else + --no-taglib \ +%endif + --libdir "%{_lib}" make %{?_smp_mflags} @@ -114,12 +130,18 @@ ./configure \ --no-update-check \ --prefix %{buildroot}%{_prefix} \ +%if %{with vlc} --vlc \ - --libdir "%{_lib}" \ - --gstreamer-tagreader +%endif +%if %{with taglib} + --gstreamer-tagreader \ +%else + --no-taglib \ +%endif + --libdir "%{_lib}" %makeinstall -cp -v .tmp/nulloy.svg %{buildroot}%{_datadir}/icons/hicolor/*/apps/ +#cp -v .tmp/nulloy.svg %{buildroot}%{_datadir}/icons/hicolor/*/apps/ %suse_update_desktop_file %{name} %files @@ -133,15 +155,19 @@ %dir %{_libdir}/nulloy %dir %{_libdir}/nulloy/plugins +%if %{with taglib} %files taglib %defattr(-,root,root) %{_libdir}/nulloy/plugins/libplugin_taglib.so +%endif %files gstreamer %defattr(-,root,root) %{_libdir}/nulloy/plugins/libplugin_gstreamer.so +%if %{with vlc} %files vlc %defattr(-,root,root) %{_libdir}/nulloy/plugins/libplugin_vlc.so +%endif ++++++ 0001-playbackEngineVlc-build-fix.patch ++++++ >From b78ae63e0bb388caa66e63ff6be59457a55f9130 Mon Sep 17 00:00:00 2001 From: Sergey Vlasov <ser...@vlasov.me> Date: Thu, 8 Feb 2024 15:52:45 +0000 Subject: [PATCH] playbackEngineVlc build fix --- src/interfaces/playbackEngineInterface.h | 2 +- src/plugins/pluginVlc/containerVlc.h | 2 +- src/plugins/pluginVlc/playbackEngineVlc.cpp | 95 ++++++++++++--------- src/plugins/pluginVlc/playbackEngineVlc.h | 23 ++--- 4 files changed, 68 insertions(+), 54 deletions(-) diff --git a/src/interfaces/playbackEngineInterface.h b/src/interfaces/playbackEngineInterface.h index 196d0e7..1576f68 100644 --- a/src/interfaces/playbackEngineInterface.h +++ b/src/interfaces/playbackEngineInterface.h @@ -60,7 +60,7 @@ signals: virtual void volumeChanged(qreal vol) = 0; virtual void message(N::MessageIcon icon, const QString &title, const QString &msg) = 0; virtual void mediaChanged(const QString &file, int context) = 0; - virtual void nextMediaRequested() = 0; + virtual void nextMediaRequested() {} virtual void mediaFinished(const QString &file, int context) = 0; virtual void mediaFailed(const QString &file, int context) = 0; virtual void stateChanged(N::PlaybackState state) = 0; diff --git a/src/plugins/pluginVlc/containerVlc.h b/src/plugins/pluginVlc/containerVlc.h index 6db5676..b599a89 100644 --- a/src/plugins/pluginVlc/containerVlc.h +++ b/src/plugins/pluginVlc/containerVlc.h @@ -32,7 +32,7 @@ public: ~NContainerVlc(); QList<NPlugin *> plugins() const; QString name() const { return "VLC"; } - QString version() const { return "0.8"; } + QString version() const { return "0.9"; } }; #endif diff --git a/src/plugins/pluginVlc/playbackEngineVlc.cpp b/src/plugins/pluginVlc/playbackEngineVlc.cpp index b671857..fcf2ff8 100644 --- a/src/plugins/pluginVlc/playbackEngineVlc.cpp +++ b/src/plugins/pluginVlc/playbackEngineVlc.cpp @@ -57,13 +57,15 @@ void NPlaybackEngineVlc::init() << "--no-xlib"; m_vlcInstance = libvlc_new(argVector.size(), &argVector[0]); - m_mediaPlayer = libvlc_media_player_new(m_vlcInstance); - m_eventManager = libvlc_media_player_event_manager(m_mediaPlayer); - libvlc_event_attach(m_eventManager, libvlc_MediaPlayerEndReached, _eventHandler, this); + m_vlcMediaPlayer = libvlc_media_player_new(m_vlcInstance); + m_vlcEventManager = libvlc_media_player_event_manager(m_vlcMediaPlayer); + libvlc_event_attach(m_vlcEventManager, libvlc_MediaPlayerEndReached, _eventHandler, this); - m_oldVolume = -1; - m_oldPosition = -1; - m_oldState = N::PlaybackStopped; + m_volume = -1; + m_position = -1; + m_vlcState = libvlc_NothingSpecial; + m_currentMedia = ""; + m_currentContext = 0; m_timer = new QTimer(this); connect(m_timer, SIGNAL(timeout()), this, SLOT(checkStatus())); @@ -79,11 +81,11 @@ NPlaybackEngineVlc::~NPlaybackEngineVlc() } stop(); - libvlc_media_player_release(m_mediaPlayer); + libvlc_media_player_release(m_vlcMediaPlayer); libvlc_release(m_vlcInstance); } -void NPlaybackEngineVlc::setMedia(const QString &file) +void NPlaybackEngineVlc::setMedia(const QString &file, int context) { stop(); @@ -91,32 +93,36 @@ void NPlaybackEngineVlc::setMedia(const QString &file) return; } + m_currentMedia = file; + m_currentContext = context; + if (!QFile(file).exists()) { emit message(N::Warning, file, "No such file or directory"); - emit mediaChanged(""); - emit failed(); + emit mediaFailed(m_currentMedia, m_currentContext); return; } - libvlc_media_t *media = libvlc_media_player_get_media(m_mediaPlayer); - if (media) + libvlc_media_t *media = libvlc_media_player_get_media(m_vlcMediaPlayer); + if (media) { libvlc_media_release(media); + } libvlc_media_t *mediaDescriptor = libvlc_media_new_path(m_vlcInstance, file.toUtf8()); - if (mediaDescriptor) - libvlc_media_player_set_media(m_mediaPlayer, mediaDescriptor); + if (mediaDescriptor) { + libvlc_media_player_set_media(m_vlcMediaPlayer, mediaDescriptor); + } - emit mediaChanged(file); + emit mediaChanged(m_currentMedia, m_currentContext); } void NPlaybackEngineVlc::setVolume(qreal volume) { - libvlc_audio_set_volume(m_mediaPlayer, qRound(qBound(0.0, volume, 1.0) * 100 / 2)); + libvlc_audio_set_volume(m_vlcMediaPlayer, qRound(qBound(0.0, volume, 1.0) * 100 / 2)); } qreal NPlaybackEngineVlc::volume() const { - return libvlc_audio_get_volume(m_mediaPlayer) / (qreal)100 * 2; + return libvlc_audio_get_volume(m_vlcMediaPlayer) / (qreal)100 * 2; } void NPlaybackEngineVlc::setPosition(qreal pos) @@ -125,7 +131,7 @@ void NPlaybackEngineVlc::setPosition(qreal pos) return; } - libvlc_media_player_set_position(m_mediaPlayer, qBound(0.0, pos, 1.0)); + libvlc_media_player_set_position(m_vlcMediaPlayer, qBound(0.0, pos, 1.0)); } qreal NPlaybackEngineVlc::position() const @@ -134,16 +140,18 @@ qreal NPlaybackEngineVlc::position() const return -1; } - return libvlc_media_player_get_position(m_mediaPlayer); + return libvlc_media_player_get_position(m_vlcMediaPlayer); } void NPlaybackEngineVlc::jump(qint64 msec) { - if (!hasMedia() || !libvlc_media_player_is_seekable(m_mediaPlayer)) + if (!hasMedia() || !libvlc_media_player_is_seekable(m_vlcMediaPlayer)) { return; + } - qint64 posMsec = qBound(0LL, libvlc_media_player_get_time(m_mediaPlayer) + msec, durationMsec()); - libvlc_media_player_set_time(m_mediaPlayer, posMsec); + qint64 posMsec = qBound(0LL, libvlc_media_player_get_time(m_vlcMediaPlayer) + msec, + durationMsec()); + libvlc_media_player_set_time(m_vlcMediaPlayer, posMsec); } qint64 NPlaybackEngineVlc::durationMsec() const @@ -152,7 +160,7 @@ qint64 NPlaybackEngineVlc::durationMsec() const return -1; } - return libvlc_media_player_get_length(m_mediaPlayer); + return libvlc_media_player_get_length(m_vlcMediaPlayer); } void NPlaybackEngineVlc::play() @@ -161,8 +169,8 @@ void NPlaybackEngineVlc::play() return; } - if (!libvlc_media_player_is_playing(m_mediaPlayer)) { - libvlc_media_player_play(m_mediaPlayer); + if (!libvlc_media_player_is_playing(m_vlcMediaPlayer)) { + libvlc_media_player_play(m_vlcMediaPlayer); } } @@ -172,7 +180,7 @@ void NPlaybackEngineVlc::pause() return; } - libvlc_media_player_set_pause(m_mediaPlayer, true); + libvlc_media_player_set_pause(m_vlcMediaPlayer, true); } void NPlaybackEngineVlc::stop() @@ -181,48 +189,53 @@ void NPlaybackEngineVlc::stop() return; } - libvlc_media_player_stop(m_mediaPlayer); + libvlc_media_player_stop(m_vlcMediaPlayer); } bool NPlaybackEngineVlc::hasMedia() const { - libvlc_media_t *media = libvlc_media_player_get_media(m_mediaPlayer); + libvlc_media_t *media = libvlc_media_player_get_media(m_vlcMediaPlayer); return (media != NULL); } QString NPlaybackEngineVlc::currentMedia() const { - libvlc_media_t *media = libvlc_media_player_get_media(m_mediaPlayer); - if (media != NULL) + libvlc_media_t *media = libvlc_media_player_get_media(m_vlcMediaPlayer); + if (media) { return QUrl(QUrl::fromPercentEncoding(libvlc_media_get_mrl(media))).toLocalFile(); + } return QString(); } +N::PlaybackState NPlaybackEngineVlc::state() const +{ + return fromVlcState(m_vlcState); +} + void NPlaybackEngineVlc::checkStatus() { qreal pos = position(); - if (m_oldPosition != pos) { - m_oldPosition = pos; + if (m_position != pos) { + m_position = pos; emit positionChanged(pos); } qreal vol = volume(); - if (m_oldVolume != vol) { - m_oldVolume = vol; + if (m_volume != vol) { + m_volume = vol; emit volumeChanged(vol); } - libvlc_state_t vlcState = libvlc_media_player_get_state(m_mediaPlayer); - N::PlaybackState state = fromVlcState(vlcState); - if (m_oldState != state) { - emit stateChanged(state); - m_oldState = state; + libvlc_state_t vlcState = libvlc_media_player_get_state(m_vlcMediaPlayer); + if (m_vlcState != vlcState) { + m_vlcState = vlcState; + emit stateChanged(fromVlcState(m_vlcState)); } - emit tick(libvlc_media_player_get_time(m_mediaPlayer)); + emit tick(libvlc_media_player_get_time(m_vlcMediaPlayer)); } void NPlaybackEngineVlc::_emitFinished() { - emit finished(); + emit mediaFinished(m_currentMedia, m_currentContext); } diff --git a/src/plugins/pluginVlc/playbackEngineVlc.h b/src/plugins/pluginVlc/playbackEngineVlc.h index 083d099..3932c7d 100644 --- a/src/plugins/pluginVlc/playbackEngineVlc.h +++ b/src/plugins/pluginVlc/playbackEngineVlc.h @@ -32,14 +32,15 @@ class NPlaybackEngineVlc : public NPlaybackEngineInterface, public NPlugin private: libvlc_instance_t *m_vlcInstance; - libvlc_media_player_t *m_mediaPlayer; - libvlc_event_manager_t *m_eventManager; + libvlc_media_player_t *m_vlcMediaPlayer; + libvlc_event_manager_t *m_vlcEventManager; QTimer *m_timer; - qreal m_oldVolume; - qreal m_oldPosition; - N::PlaybackState m_oldState; + qreal m_volume; + qreal m_position; + libvlc_state_t m_vlcState; QString m_currentMedia; + int m_currentContext; public: NPlaybackEngineVlc(QObject *parent = NULL) : NPlaybackEngineInterface(parent) {} @@ -50,14 +51,14 @@ public: Q_INVOKABLE bool hasMedia() const; Q_INVOKABLE QString currentMedia() const; - Q_INVOKABLE N::PlaybackState state() const { return m_oldState; } + Q_INVOKABLE N::PlaybackState state() const; Q_INVOKABLE qreal volume() const; Q_INVOKABLE qreal position() const; Q_INVOKABLE qint64 durationMsec() const; public slots: - Q_INVOKABLE void setMedia(const QString &file); + Q_INVOKABLE void setMedia(const QString &file, int context); Q_INVOKABLE void setVolume(qreal volume); Q_INVOKABLE void setPosition(qreal pos); Q_INVOKABLE void jump(qint64 msec); @@ -74,10 +75,10 @@ private slots: signals: void positionChanged(qreal pos); void volumeChanged(qreal volume); - void message(N::MessageIcon icon, const QString &title, const QString &msg); - void mediaChanged(const QString &file); - void finished(); - void failed(); + void message(N::MessageIcon icon, const QString &file, const QString &msg); + void mediaChanged(const QString &file, int context); + void mediaFinished(const QString &file, int context); + void mediaFailed(const QString &file, int context); void stateChanged(N::PlaybackState state); void tick(qint64 msec); }; -- 2.35.3 ++++++ 0001-taglib-2.0-compatibility.patch ++++++ >From c357cd5c21239504a445485ae003ceb2c5d4d03c Mon Sep 17 00:00:00 2001 From: Sergey Vlasov <ser...@vlasov.me> Date: Thu, 8 Feb 2024 18:25:04 +0200 Subject: [PATCH] taglib 2.0 compatibility fixes #223 --- src/plugins/pluginTaglib/coverReaderTaglib.cpp | 7 ++++--- src/plugins/pluginTaglib/tagReaderTaglib.cpp | 6 +++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/plugins/pluginTaglib/coverReaderTaglib.cpp b/src/plugins/pluginTaglib/coverReaderTaglib.cpp index adf9bbf..398c968 100644 --- a/src/plugins/pluginTaglib/coverReaderTaglib.cpp +++ b/src/plugins/pluginTaglib/coverReaderTaglib.cpp @@ -21,6 +21,7 @@ #include <QString> #include "tagLibFileRef.h" +#include <attachedpictureframe.h> void NCoverReaderTaglib::init() { @@ -85,7 +86,7 @@ QList<QImage> NCoverReaderTaglib::fromApe(TagLib::APE::Tag *tag) const } TagLib::String fileName = map[key].toString(); - TagLib::ByteVector item = map[key].value(); + TagLib::ByteVector item = map[key].binaryData(); images << fromTagBytes(item.mid(fileName.size() + 1)); } @@ -144,11 +145,11 @@ QList<QImage> NCoverReaderTaglib::fromMp4(TagLib::MP4::Tag *tag) const { QList<QImage> images; TagLib::String str = "covr"; - if (!tag->itemListMap().contains(str)) { + if (!tag->itemMap().contains(str)) { return images; } - TagLib::MP4::CoverArtList coverList = tag->itemListMap()[str].toCoverArtList(); + TagLib::MP4::CoverArtList coverList = tag->itemMap()[str].toCoverArtList(); for (auto coverArt : coverList) { images << fromTagBytes(coverArt.data()); } diff --git a/src/plugins/pluginTaglib/tagReaderTaglib.cpp b/src/plugins/pluginTaglib/tagReaderTaglib.cpp index 7509c60..d793587 100644 --- a/src/plugins/pluginTaglib/tagReaderTaglib.cpp +++ b/src/plugins/pluginTaglib/tagReaderTaglib.cpp @@ -126,13 +126,13 @@ QString NTagReaderTaglib::getTag(QChar ch) const if (auto *prop = dynamic_cast<TagLib::APE::Properties *>(ap)) { return QString::number(prop->bitsPerSample()); } else if (auto *prop = dynamic_cast<TagLib::FLAC::Properties *>(ap)) { - return QString::number(prop->sampleWidth()); + return QString::number(prop->bitsPerSample()); } else if (auto *prop = dynamic_cast<TagLib::MP4::Properties *>(ap)) { return QString::number(prop->bitsPerSample()); } else if (auto *prop = dynamic_cast<TagLib::RIFF::AIFF::Properties *>(ap)) { - return QString::number(prop->sampleWidth()); + return QString::number(prop->bitsPerSample()); } else if (auto *prop = dynamic_cast<TagLib::RIFF::WAV::Properties *>(ap)) { - return QString::number(prop->sampleWidth()); + return QString::number(prop->bitsPerSample()); } else if (auto *prop = dynamic_cast<TagLib::TrueAudio::Properties *>(ap)) { return QString::number(prop->bitsPerSample()); } else if (auto *prop = dynamic_cast<TagLib::WavPack::Properties *>(ap)) { -- 2.35.3 ++++++ nulloy-0.9.5.tar.gz -> nulloy-0.9.7.tar.gz ++++++ ++++ 9806 lines of diff (skipped)