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)

Reply via email to