Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package upplay for openSUSE:Factory checked in at 2026-06-08 14:23:10 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/upplay (Old) and /work/SRC/openSUSE:Factory/.upplay.new.2375 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "upplay" Mon Jun 8 14:23:10 2026 rev:19 rq:1357892 version:1.9.11 Changes: -------- --- /work/SRC/openSUSE:Factory/upplay/upplay.changes 2026-02-24 15:40:47.299861370 +0100 +++ /work/SRC/openSUSE:Factory/.upplay.new.2375/upplay.changes 2026-06-08 14:28:14.564331674 +0200 @@ -1,0 +2,8 @@ +Sun Jun 7 21:43:23 UTC 2026 - Holden Fried <[email protected]> + +- Update to 1.9.11: + * Fix compatibility with Qt 6.11. + * Delete temporary file used for cover display. We used to leave + them in $TMPDIR. + +------------------------------------------------------------------- Old: ---- upplay-1.9.10.tar.gz upplay-1.9.10.tar.gz.asc New: ---- upplay-1.9.11.tar.gz upplay-1.9.11.tar.gz.asc ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ upplay.spec ++++++ --- /var/tmp/diff_new_pack.KLRG2X/_old 2026-06-08 14:28:15.280361386 +0200 +++ /var/tmp/diff_new_pack.KLRG2X/_new 2026-06-08 14:28:15.288361717 +0200 @@ -17,7 +17,7 @@ Name: upplay -Version: 1.9.10 +Version: 1.9.11 Release: 0 Summary: UPnP and OpenHome audio Control Point License: GPL-2.0-or-later ++++++ upplay-1.9.10.tar.gz -> upplay-1.9.11.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upplay-1.9.10/GUI/mainw/mainw.cpp new/upplay-1.9.11/GUI/mainw/mainw.cpp --- old/upplay-1.9.10/GUI/mainw/mainw.cpp 2025-04-14 15:38:09.000000000 +0200 +++ new/upplay-1.9.11/GUI/mainw/mainw.cpp 2026-05-26 14:21:03.000000000 +0200 @@ -498,6 +498,7 @@ void GUI_Player::closeEvent(QCloseEvent* e) { + delete m_covertempfile; if (hsplitter) m_settings->setSplitterState(hsplitter->saveState()); if (vsplitter) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upplay-1.9.10/GUI/mainw/mw_cover.cpp new/upplay-1.9.11/GUI/mainw/mw_cover.cpp --- old/upplay-1.9.10/GUI/mainw/mw_cover.cpp 2025-04-02 15:41:38.000000000 +0200 +++ new/upplay-1.9.11/GUI/mainw/mw_cover.cpp 2026-05-26 14:52:22.000000000 +0200 @@ -1,6 +1,6 @@ /* Copyright (C) 2012 Lucio Carreras * - * This file is part of sayonara player + * Copyright (C) 2015-2026 Jean-Francois Dockes * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -43,6 +43,11 @@ } QNetworkRequest req{QUrl(uri)}; req.setHeader(QNetworkRequest::UserAgentHeader, "Upplay Control Point"); +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) + // Qt5 set this to 0 (no following) by default. Qt6 has 1 + req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, + QNetworkRequest::NoLessSafeRedirectPolicy); +#endif m_currentCoverReply = m_netmanager->get(req); } @@ -55,10 +60,15 @@ reply->deleteLater(); return; } - if (reply->error() != QNetworkReply::NoError) { + auto error = reply->error(); + QVariant v; + v = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute); + LOGDEB0("GUI_Player::sl_cover_fetch_done: erro code: " << error << + " response status: " << v.toInt() << "\n"); + if (QNetworkReply::NoError != error) { + LOGDEB("GUI_Player::sl_cover_fetch_done: fetch failed with error "<< error << "\n"); reply->deleteLater(); sl_no_cover_available(); - LOGDEB("GUI_Player::sl_cover_fetch_done: fetch failed\n"); return; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upplay-1.9.10/GUI/mdatawidget/mdatawidget.cpp new/upplay-1.9.11/GUI/mdatawidget/mdatawidget.cpp --- old/upplay-1.9.10/GUI/mdatawidget/mdatawidget.cpp 2026-01-28 14:30:09.000000000 +0100 +++ new/upplay-1.9.11/GUI/mdatawidget/mdatawidget.cpp 2026-05-27 11:48:46.000000000 +0200 @@ -17,7 +17,6 @@ #include "mdatawidget.h" -#include <iostream> #include <set> #include <QDebug> @@ -40,6 +39,7 @@ #include <QNetworkDiskCache> #endif +#define LOGGER_LOCAL_LOGINC 4 #include <libupnpp/log.h> #include <libupnpp/control/cdircontent.hxx> @@ -193,18 +193,24 @@ bool okdidl{false}; std::set<std::string> m_values; std::string operator()(const std::string& key) { - if (!okdidl) { - // use MetaData should we? - LOGDEB1("mdatawidget: NO DIDL\n"); - return ""; - } std::string value; - if (key == "upnp:artist") { - value = m_dirent.getArtists(); - } else if (key == "dc:title") { - value = m_dirent.m_title; - } else { - value = m_dirent.getprop(key); + if (!okdidl) { + // Happens. Use MetaData + if (key == "upnp:artist") { + value = qs2utf8s(m_md.artist); + } else if (key == "dc:title") { + value = qs2utf8s(m_md.title); + } else if (key == "upnp:album") { + value = qs2utf8s(m_md.album); + } + } else { + if (key == "upnp:artist") { + value = m_dirent.getArtists(); + } else if (key == "dc:title") { + value = m_dirent.m_title; + } else { + value = m_dirent.getprop(key); + } } // Only return something if we did not already see the value. Avoids e.g. upnp:artist // dc:creator dups. @@ -236,15 +242,15 @@ std::string hfrag; FieldFetcher f(m_data); pcSubst(playerhtmlfrag, hfrag, f); - LOGDEB1("mdatawidget: HTML FRAG [" << hfrag << "]\n"); - m_view->setHtml(htmltemplate - /*1*/.arg(m_imgurl) - /*2*/.arg(w) - /*3*/.arg(u8s2qs(hfrag)) - /*4*/.arg(o_scaledcss) - /*5*/.arg(h) - , - baseUrl); + LOGDEB0("mdatawidget::display. imgurl " << + qs2utf8s(m_imgurl) << " mdata frag " << hfrag << "\n"); + QString html = htmltemplate + /*1*/.arg(m_imgurl) + /*2*/.arg(w) + /*3*/.arg(u8s2qs(hfrag)) + /*4*/.arg(o_scaledcss) + /*5*/.arg(h); + m_view->setHtml(html, baseUrl); } void MDataWidget::refresh() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upplay-1.9.10/GUI/standard.qss new/upplay-1.9.11/GUI/standard.qss --- old/upplay-1.9.10/GUI/standard.qss 2024-06-06 09:52:29.000000000 +0200 +++ new/upplay-1.9.11/GUI/standard.qss 2026-05-27 14:34:09.000000000 +0200 @@ -1,9 +1,25 @@ /* Color stuff for "light" scheme */ +QWidget { + border: none; + background-color: #EFEFEF; +} + +QListView, QTableView { + background-color: white; +} + + QListView:focus, QTableView:focus { border: 2px solid #424e72; } +QLineEdit,QSpinBox,QComboBox { + border: 1px solid #424e72; + border-radius: 4px; + background-color: white; +} + QPushButton[flat=true] { color: white; border-radius: 7; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upplay-1.9.10/GUI/widgets/cdwebpage.h new/upplay-1.9.11/GUI/widgets/cdwebpage.h --- old/upplay-1.9.10/GUI/widgets/cdwebpage.h 2025-04-02 15:41:38.000000000 +0200 +++ new/upplay-1.9.11/GUI/widgets/cdwebpage.h 2026-05-27 12:32:13.000000000 +0200 @@ -38,6 +38,8 @@ public: CDWebPage(QWebEngineProfile *profile, QWidget *parent = nullptr) : QWebEnginePage(profile, parent) {} + CDWebPage(QWidget *parent = nullptr) + : QWebEnginePage(parent) {} protected: virtual bool acceptNavigationRequest(const QUrl& url, NavigationType navType, bool); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upplay-1.9.10/appimage/makeimage.sh new/upplay-1.9.11/appimage/makeimage.sh --- old/upplay-1.9.10/appimage/makeimage.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/upplay-1.9.11/appimage/makeimage.sh 2026-04-24 09:37:34.000000000 +0200 @@ -0,0 +1,63 @@ +#!/bin/sh + +# Currently running on debian bullseye + +fatal() +{ + echo $* + exit 1 +} + +BUILDTOP=`pwd` +UPPDISTS=/home/dockes/projets/lesbonscomptes/upplay/downloads + +FROMGIT=0 +UPPLAY_VERSION=1.9.10 + +DEPLOYBINDIR=~/.local/bin + +APPDIR=$BUILDTOP/AppDir/ +BUILDDIR=$BUILDTOP/upplay-build +# NOTE: delete the builddir when changing versions. Not done automatically because complicated +#rm -rf $BUILDDIR + +if test $FROMGIT -ne 0; then + UPPLAY=/home/dockes/projets/mpdupnp/upplay +else + # TBD: Replace this with curl or wget from the web site so we don't need a local copy on the VM ? + UPPLAY=$BUILDTOP/upplay-${UPPLAY_VERSION} + test -d $UPPLAY || (cd $BUILDTOP && tar xf $UPPDISTS/upplay-${UPPLAY_VERSION}.tar.gz) || \ + fatal source extraction +fi + +rm -rf ${APPDIR}/* + +cd $UPPLAY/ + +if test $FROMGIT -ne 0; then + hash=`git log -n 1 | head -1 | awk '{print $2}' | cut -b 1-8` +fi + +mkdir -p $BUILDDIR +cd $BUILDDIR || exit 1 +qmake $UPPLAY/upplay.pro +make -j 4 + +echo;echo INSTALLING TO $APPDIR +make install INSTALL_ROOT=$APPDIR + +mkdir -p $APPDIR/usr/lib + +# This is needed because more recent versions of libssl dropped some functions. +# See discussion for example https://github.com/kiwix/kiwix-desktop/issues/871 +# We're only using ssl to fetch cover images (or possibly audio data in some cases?), +# so using an older ssl lib should not be a problem. +cp /usr/lib/x86_64-linux-gnu/libssl.so.1.1 $APPDIR/usr/lib/ + +cd $BUILDTOP +$DEPLOYBINDIR/linuxdeploy-x86_64.AppImage \ + --appdir $APPDIR \ + --plugin qt --output appimage + +dte=`date +%Y%m%d` +cp Upplay-x86_64.AppImage Upplay-${UPPLAY_VERSION}-${dte}-${hash}-x86_64.AppImage diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upplay-1.9.10/dirbrowser/cdbrowser.cpp new/upplay-1.9.11/dirbrowser/cdbrowser.cpp --- old/upplay-1.9.10/dirbrowser/cdbrowser.cpp 2026-02-24 09:50:55.000000000 +0100 +++ new/upplay-1.9.11/dirbrowser/cdbrowser.cpp 2026-05-27 13:24:25.000000000 +0200 @@ -123,6 +123,9 @@ CDWebPage *webpage{nullptr}; #ifdef USING_WEBENGINE +#if (QT_VERSION < QT_VERSION_CHECK(6, 11, 0)) + // For some reason using a non-default profile with qt 6.11 appears to cause an internal loop + // allocating memory, causing bad app behaviour, and a final OOM crash. auto profile = new QWebEngineProfile("upplay", this); profile->setHttpUserAgent("Upplay Control Point"); if (cachembs > 0) { @@ -130,6 +133,10 @@ profile->setHttpCacheMaximumSize(cachembs * 1024 * 1024); } webpage = new CDWebPage(profile, this); +#else + Q_UNUSED(cachembs); + webpage = new CDWebPage(this); +#endif m_channel.registerObject("popup_helper", &m_puhelper); webpage->setWebChannel(&m_channel); connect(&m_puhelper, SIGNAL(triggered()), this, SLOT(createPopupMenu())); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upplay-1.9.10/upadapt/metadata.conf new/upplay-1.9.11/upadapt/metadata.conf --- old/upplay-1.9.10/upadapt/metadata.conf 2025-12-18 17:53:57.000000000 +0100 +++ new/upplay-1.9.11/upadapt/metadata.conf 2026-03-06 16:38:10.000000000 +0100 @@ -17,6 +17,8 @@ upmpd:albumavailablereleasedate = Available Release Date upmpd:albumduration = Duration upmpd:albumdisctrackcounters = Discs/Tracks +upmpd:albumcompressiontype = Album Compression Type +upmpd:albumaveragebitrate = Album Average Bitrate upmpd:albumquality = Album Quality upmpd:albumqualityoftracks = Quality of Tracks upmpd:albumversion = Version diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upplay-1.9.10/upplay.pro new/upplay-1.9.11/upplay.pro --- old/upplay-1.9.10/upplay.pro 2026-02-24 10:01:40.000000000 +0100 +++ new/upplay-1.9.11/upplay.pro 2026-05-27 14:31:07.000000000 +0200 @@ -2,8 +2,8 @@ TARGET = upplay # VERSION is ^egrepped and must stay in the first column -VERSION = 1.9.10 -COPYRDATES = 2011-2025 +VERSION = 1.9.11 +COPYRDATES = 2011-2026 # Possibly override WEBPLATFORM from the command line, or environment WEBPLATFORM = $${WEBPLATFORM} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upplay-1.9.10/utils/pathut.cpp new/upplay-1.9.11/utils/pathut.cpp --- old/upplay-1.9.10/utils/pathut.cpp 2026-02-12 13:34:23.000000000 +0100 +++ new/upplay-1.9.11/utils/pathut.cpp 2026-03-23 09:11:16.000000000 +0100 @@ -284,7 +284,7 @@ } bool path_isdriveabs(const std::string& s) { - if (s.size() >= 3 && isalpha(s[0]) && s[1] == ':' && s[2] == '/') { + if (s.size() >= 3 && isalpha(s[0]) && s[1] == ':' && (s[2] == '/' || s[2] == '\\')) { return true; } return false; @@ -610,8 +610,9 @@ if (!GetDiskFreeSpaceExW(syspath, &freebytesavail, &totalbytes, NULL)) { return false; } + auto mpc = int((100 * (totalbytes.QuadPart - freebytesavail.QuadPart)) / totalbytes.QuadPart); if (pc) { - *pc = int((100 * freebytesavail.QuadPart) / totalbytes.QuadPart); + *pc = mpc; } if (avmbs) { *avmbs = int(totalbytes.QuadPart / FSOCC_MB); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upplay-1.9.10/utils/smallut.cpp new/upplay-1.9.11/utils/smallut.cpp --- old/upplay-1.9.10/utils/smallut.cpp 2025-10-30 09:05:53.000000000 +0100 +++ new/upplay-1.9.11/utils/smallut.cpp 2026-03-21 08:24:00.000000000 +0100 @@ -653,11 +653,10 @@ } -/* Truncate a string to a given maxlength, avoiding cutting off midword - * if reasonably possible. Note: we could also use textsplit, stopping when - * we have enough, this would be cleanly utf8-aware but would remove - * punctuation */ -static const std::string cstr_SEPAR = " \t\n\r-:.;,/[]{}"; +// Truncate a string to a given maxlength, avoiding cutting off midword if reasonably +// possible. Note: we could also use textsplit, stopping when we have enough, this would be cleanly +// utf8-aware but would remove punctuation. +static const std::string cstr_SEPAR = " \t\n\r-:.;,/[]{}_"; std::string truncate_to_word(const std::string& input, std::string::size_type maxlen) { std::string output; @@ -666,12 +665,10 @@ } else { output = input.substr(0, maxlen); std::string::size_type space = output.find_last_of(cstr_SEPAR); - // Original version only truncated at space if space was found after - // maxlen/2. But we HAVE to truncate at space, else we'd need to do - // utf8 stuff to avoid truncating at multibyte char. In any case, - // not finding space means that the text probably has no value. - // Except probably for Asian languages, so we may want to fix this - // one day + // The original version only truncated at space if space was found after maxlen/2. But we + // HAVE to truncate at space, else we'd need to do utf8 stuff to avoid truncating at + // multibyte char. In any case, not finding space means that the text probably has no value. + // Except probably for Asian languages, so we may want to fix this one day if (space == std::string::npos) { output.erase(); } else {
