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-09-04 12:39:05
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/upplay (Old)
 and      /work/SRC/openSUSE:Factory/.upplay.new.1265 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "upplay"

Fri Sep  4 12:39:05 2026 rev:20 rq:1375454 version:1.9.12

Changes:
--------
--- /work/SRC/openSUSE:Factory/upplay/upplay.changes    2026-06-08 
14:28:14.564331674 +0200
+++ /work/SRC/openSUSE:Factory/.upplay.new.1265/upplay.changes  2026-09-04 
12:39:54.465526179 +0200
@@ -1,0 +2,10 @@
+Wed Sep  2 16:19:49 UTC 2026 - Michael Pujos <[email protected]>
+
+- Update to 1.9.12
+  * Allow redirects for fetching cover images from media server
+  * Actually delete cover images temporary files
+  * Misc qss fixes for light mode
+  * Display additional metadata in tooltips
+  * Browser: add popup option to send a track range to the playlist
+
+-------------------------------------------------------------------

Old:
----
  upplay-1.9.11.tar.gz
  upplay-1.9.11.tar.gz.asc

New:
----
  upplay-1.9.12.tar.gz
  upplay-1.9.12.tar.gz.asc

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ upplay.spec ++++++
--- /var/tmp/diff_new_pack.cLbldU/_old  2026-09-04 12:39:55.214552482 +0200
+++ /var/tmp/diff_new_pack.cLbldU/_new  2026-09-04 12:39:55.215552517 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           upplay
-Version:        1.9.11
+Version:        1.9.12
 Release:        0
 Summary:        UPnP and OpenHome audio Control Point
 License:        GPL-2.0-or-later

++++++ upplay-1.9.11.tar.gz -> upplay-1.9.12.tar.gz ++++++
Binary files old/upplay-1.9.11/GUI/icons/arrow_down_dark.png and 
new/upplay-1.9.12/GUI/icons/arrow_down_dark.png differ
Binary files old/upplay-1.9.11/GUI/icons/arrow_up_dark.png and 
new/upplay-1.9.12/GUI/icons/arrow_up_dark.png differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/upplay-1.9.11/GUI/standard.qss 
new/upplay-1.9.12/GUI/standard.qss
--- old/upplay-1.9.11/GUI/standard.qss  2026-05-27 14:34:09.000000000 +0200
+++ new/upplay-1.9.12/GUI/standard.qss  2026-08-08 16:56:16.000000000 +0200
@@ -1,51 +1,387 @@
-/* Color stuff for "light" scheme */
+/* Light theme matching the same structure as dark.qss */
 
 QWidget {
     border: none;
-    background-color: #EFEFEF;
+    color: #202020;
+    background-color: #F2F2F2;
+    selection-background-color: #B7D5FF;
+    selection-color: #000000;
 }
 
-QListView, QTableView {
-    background-color: white;
+QWidget:disabled {
+    color: #808080;
+}
+
+QMainWindow, QDialog {
+    border: none;
+    background-color: #F2F2F2;
+    color: #202020;
+    selection-background-color: #B7D5FF;
 }
 
+QScrollArea {
+    border: none;
+    background: transparent;
+}
+
+QListView, QTableView {
+    border: 1px solid #C4C4C4;
+    color: #202020;
+    background-color: #FFFFFF;
+    border-radius: 4px;
+    alternate-background-color: #F8F8F8;
+    selection-background-color: #B7D5FF;
+}
 
 QListView:focus, QTableView:focus {
-    border: 2px solid #424e72;
+    border: 1px solid #398EE7;
+}
+
+QSplitter::handle {
+    background-color: #D8D8D8;
+    width: 2px;
+}
+
+QScrollBar::vertical {
+    margin: 18px 0px 18px 0px;
+    padding-left: 1px;
+    padding-right: 1px;
+    padding-top: 0px;
+    padding-bottom: 0px;
+    width: 16px;
+    background-color: #FFFFFF;
+    border: 1px solid #D0D0D0;
+    border-radius: 4px;
+    border-left: 1px solid #D0D0D0;
+}
+
+/* top */
+QScrollBar::sub-line:vertical {
+    background: #E8E8E8;
+    height: 17px;
+    width: 8px;
+    subcontrol-position: top;
+    subcontrol-origin: margin;
+    padding-left: 3px;
+    padding-right: 4px;
+    padding-top: -2px;
+    image: url(:/icons/arrow_up_dark.png);
+    border: 1px solid #C0C0C0;
+    border-top-left-radius: 3px;
+    border-top-right-radius: 3px;
+}
+
+QScrollBar::sub-line:vertical:hover {
+    image: url(:/icons/arrow_up_orange.png);
+}
+
+/* bottom */
+QScrollBar::add-line:vertical {
+    background: #E8E8E8;
+    height: 17px;
+    width: 8px;
+    subcontrol-position: bottom;
+    subcontrol-origin: margin;
+    padding-left: 3px;
+    padding-right: 4px;
+    padding-bottom: -2px;
+    image: url(:/icons/arrow_down_dark.png);
+    border: 1px solid #C0C0C0;
+    border-bottom-left-radius: 3px;
+    border-bottom-right-radius: 3px;
+}
+
+QScrollBar::add-line:vertical:hover {
+    image: url(:/icons/arrow_down_orange.png);
+}
+
+QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
+    background: transparent;
+}
+
+QScrollBar::handle:vertical {
+    background: #C8C8C8;
+    min-height: 30px;
+    width: 12px;
+    margin-left: 1px;
+    margin-right: 1px;
+    border: 1px solid #9A9A9A;
+    border-radius: 4px;
+}
+
+QScrollBar::handle:vertical:hover {
+    background: #B8B8B8;
+}
+
+QScrollBar::handle:vertical:pressed {
+    background: #9A9A9A;
 }
 
-QLineEdit,QSpinBox,QComboBox {
-    border: 1px solid #424e72;
+QScrollBar::horizontal {
+    margin: 0px 15px 0px 15px;
+    padding-top: 1px;
+    padding-left: 0px;
+    padding-right: 0px;
+    padding-bottom: 1px;
+    height: 14px;
+    background-color: #FFFFFF;
+    border: 1px solid #D0D0D0;
     border-radius: 4px;
-    background-color: white;
+}
+
+/* top */
+QScrollBar::sub-line:horizontal {
+    background: #EFEFEF;
+    width: 17px;
+    height: 8px;
+    subcontrol-position: left;
+    subcontrol-origin: margin;
+    padding-top: 6px;
+    padding-bottom: 3px;
+    padding-left: -2px;
+    image: url(:/icons/arrow_left.png);
+}
+
+QScrollBar::sub-line:horizontal:hover {
+    image: url(:/icons/arrow_left_orange.png);
+}
+
+QScrollBar::add-line:horizontal {
+    background: #EFEFEF;
+    width: 17px;
+    height: 8px;
+    subcontrol-position: right;
+    subcontrol-origin: margin;
+    padding-top: 6px;
+    padding-bottom: 3px;
+    padding-right: -2px;
+    image: url(:/icons/arrow_right.png);
+}
+
+QScrollBar::add-line:horizontal:hover {
+    image: url(:/icons/arrow_right_orange.png);
+}
+
+QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal {
+    background: transparent;
+}
+
+QScrollBar::handle:horizontal {
+    background: #D0D0D0;
+    min-width: 30px;
+    height: 14px;
+    border: 1px solid #B0B0B0;
+    border-radius: 4px;
+}
+
+QScrollBar::handle:horizontal:hover {
+    background: #C0C0C0;
+}
+
+QScrollBar::handle:horizontal:pressed {
+    background: #B8B8B8;
+}
+
+QTableView QHeaderView::section {
+    background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #F4F4F4, 
stop:0.5 #ECECEC, stop:0.6 #ECECEC, stop:1 #F4F4F4);
+    height: 10px;
+    color: #202020;
+    padding-left: 4px;
+    padding-top: 5px;
+    padding-bottom: 5px;
+    border: 0px;
+    border-bottom: 1px solid #D0D0D0;
+    border-right: 1px solid qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 
#D8D8D8, stop:0.5 #B8B8B8, stop:0.6 #B8B8B8, stop:1 #D8D8D8);
+}
+
+QTableView QHeaderView::up-arrow {
+    width: 8px;
+    image: url(:/icons/arrow_up_dark.png);
+    margin-right: 2px;
+}
+
+QTableView QHeaderView::down-arrow {
+    width: 8px;
+    image: url(:/icons/arrow_down_dark.png);
+    margin-right: 2px;
+}
+
+QMenuBar {
+    color: #202020;
+    background-color: transparent;
+}
+
+QMenuBar::item {
+    color: #202020;
+    background-color: transparent;
+}
+
+QMenuBar::item:selected {
+    background: #D0E7FF;
+}
+
+QMenu {
+    border: 1px solid #B0B0B0;
+    border-radius: 4px;
+    background-color: #FFFFFF;
+    padding-left: 2px;
+    padding-right: 2px;
+}
+
+QMenu::item {
+    padding: 2px 25px 2px 20px;
+    background-color: transparent;
+}
+
+QMenu::item:selected {
+    background: #398EE7;
+    color: #FFFFFF;
+}
+
+QMenu::indicator {
+    margin-left: 5px;
+    width: 8px;
+    height: 8px;
+}
+
+QMenu::icon:checked {
+    border 1px solid #398EE7;
+    position: absolute;
+    left: 5px;
+}
+
+QMenu::separator {
+    height: 1px;
+    background: #D0D0D0;
+    margin: 3px 5px;
+}
+
+QMenu::indicator:non-exclusive:checked {
+    image: url(:/icons/cb_checked.png);
+}
+
+QComboBox {
+    border: 1px solid #B0B0B0;
+    border-radius: 3px;
+    padding: 1px 1px 1px 10px;
+    background-color: #FFFFFF;
+    min-width: 6em;
+}
+
+QComboBox::drop-down {
+    margin-left: 0px;
+    border-left-width: 1px;
+    border-left-color: #D0D0D0;
+    border-left-style: solid;
+    border-top-right-radius: 3px;
+    border-bottom-right-radius: 3px;
+}
+
+QComboBox::down-arrow {
+    height: 12px;
+    width: 10px;
+    padding: 2px;
+    image: url(:/icons/arrow_down_dark.png);
+}
+QComboBox:focus {
+    border-radius: 4px;
+    border: 1px solid #398EE7;
+}
+
+QSpinBox {
+    background: #D8D8D8;
+    border: 1px solid #888888;
+}
+QSpinBox::down-arrow {
+    image: url(:/icons/arrow_down_dark.png);
+}
+QSpinBox::up-arrow {
+    image: url(:/icons/arrow_up_dark.png);
+}
+
+QLineEdit {
+    border: 1px solid #B0B0B0;
+    border-radius: 4px;
+    background: #FFFFFF;
+}
+
+QLineEdit::focus {
+    border-radius: 4px;
+    border: 1px solid #398EE7;
+}
+
+QLineEdit:read-only {
+    border-radius: 4px;
+    border: 1px solid #B0B0B0;
 }
 
 QPushButton[flat=true] {
-    color: white;
-    border-radius: 7;
+    color: #202020;
+    border-radius: 7px;
     padding: 1px;
     padding-left: 1px;
     padding-right: 1px;
 }
 
+QPushButton[flat=true]:hover {
+    background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.54, 
fx:0.502, fy:0.500876, stop:0.45 rgba(243, 132, 26, 64), stop:1 rgba(255, 255, 
255, 0));
+}
+
+QPushButton[flat=true]:hover:checked {
+    background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.54, 
fx:0.502, fy:0.500876, stop:0.8 rgba(243, 132, 26, 128), stop:1 rgba(255, 255, 
255, 0));
+}
+
 QPushButton[flat=true]:checked {
-    background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, 
-                                      radius:0.6, fx:0.502, fy:0.500876, 
-                                      stop:0.8 rgba(243, 132, 26, 255), 
-                                      stop:1 rgba(255, 255, 255, 0));
+    background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.54, 
fx:0.502, fy:0.500876, stop:0.8 rgba(243, 132, 26, 128), stop:1 rgba(255, 255, 
255, 0));
+}
+
+QPushButton[flat=true]:pressed {
+    background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.54, 
fx:0.502, fy:0.500876, stop:0.8 rgba(243, 132, 26, 160), stop:1 rgba(255, 255, 
255, 0));
+}
+
+QPushButton[flat=false] {
+    border: 1px solid #B0B0B0;
+    border-radius: 6px;
+    background: #F7F7F7;
+    margin: 2px;
+    margin-left: 4px;
+    padding-top: 2px;
+    padding-right: 8px;
+    padding-bottom: 1px;
+    padding-left: 6px;
+}
+
+QPushButton[flat=false]:hover {
+    border: 1px solid #398EE7;
+    border-radius: 6px;
+    background: #E8F1FF;
+}
+
+QPushButton[flat=false]:pressed {
+    border: 1px solid #398EE7;
+    border-radius: 6px;
+    padding: 6px;
+    background: #D0E4FF;
+}
+
+QPushButton[flat=false]:disabled {
+    border: 1px solid #D0D0D0;
+    color: #8A8A8A;
+    background: #EFEFEF;
+}
+
+QToolBar QToolButton {
+    padding: 4px;
 }
 
-QPushButton[flat=true]:pressed{
-    background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, 
-                                      radius:0.50, fx:0.502, fy:0.500876, 
-                                      stop:0.7 rgba(243, 132, 26, 255), 
-                                      stop:1 rgba(255, 255, 255, 0));
+QToolBar QToolButton:checked {
+    background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.54, 
fx:0.502, fy:0.500876, stop:0.8 rgba(243, 132, 26, 128), stop:1 rgba(255, 255, 
255, 0));
 }
 
-/* This seems to be useful on win10 where it the default makes the search
+/* This seems to be useful on win10 where the default makes the search
  match text barely visible (just changes the background to a pale grey,
  almost invisible either against the white or grey backgrounds). */
-QWebView { 
+QWebView {
     selection-background-color: blue;
     selection-color: white;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/upplay-1.9.11/GUI/upplay.qrc 
new/upplay-1.9.12/GUI/upplay.qrc
--- old/upplay-1.9.11/GUI/upplay.qrc    2024-06-25 15:19:25.000000000 +0200
+++ new/upplay-1.9.12/GUI/upplay.qrc    2026-06-04 15:20:50.000000000 +0200
@@ -4,12 +4,14 @@
         <file>icons/addtab.png</file>
         <file>icons/append.png</file>
         <file>icons/arrow_down.png</file>
+        <file>icons/arrow_down_dark.png</file>
         <file>icons/arrow_down_orange.png</file>
         <file>icons/arrow_left.png</file>
         <file>icons/arrow_left_orange.png</file>
         <file>icons/arrow_right.png</file>
         <file>icons/arrow_right_orange.png</file>
         <file>icons/arrow_up.png</file>
+        <file>icons/arrow_up_dark.png</file>
         <file>icons/arrow_up_orange.png</file>
         <file>icons/broom.png</file>
         <file>icons/bwd.png</file>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/upplay-1.9.11/GUI/widgets/trackrange.h 
new/upplay-1.9.12/GUI/widgets/trackrange.h
--- old/upplay-1.9.11/GUI/widgets/trackrange.h  1970-01-01 01:00:00.000000000 
+0100
+++ new/upplay-1.9.12/GUI/widgets/trackrange.h  2026-08-08 10:51:13.000000000 
+0200
@@ -0,0 +1,36 @@
+/*
+ *   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
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+#ifndef TRACKRANGE_H
+#define TRACKRANGE_H
+
+#include <QDialog>
+
+#include "ui_trackrange.h"
+
+class TrackRange : public QDialog, public Ui::TrackRange {
+    Q_OBJECT
+public:
+    TrackRange(int strt, QWidget *parent = 0) 
+        : QDialog(parent) {
+        setupUi(this);
+        startSB->setValue(strt);
+        endSB->setValue(strt);
+    }
+};
+
+
+#endif // TRACKRANGE_H
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/upplay-1.9.11/GUI/widgets/trackrange.ui 
new/upplay-1.9.12/GUI/widgets/trackrange.ui
--- old/upplay-1.9.11/GUI/widgets/trackrange.ui 1970-01-01 01:00:00.000000000 
+0100
+++ new/upplay-1.9.12/GUI/widgets/trackrange.ui 2026-08-08 16:46:56.000000000 
+0200
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>TrackRange</class>
+ <widget class="QDialog" name="TrackRange">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>273</width>
+    <height>77</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Track Range</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QLabel" name="startLBL">
+       <property name="text">
+        <string>First track</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QSpinBox" name="startSB">
+       <property name="minimum">
+        <number>1</number>
+       </property>
+       <property name="maximum">
+        <number>999</number>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Orientation::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QLabel" name="endLBL">
+       <property name="text">
+        <string>Last track</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QSpinBox" name="endSB">
+       <property name="minimum">
+        <number>1</number>
+       </property>
+       <property name="maximum">
+        <number>999</number>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Orientation::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      
<set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>TrackRange</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>TrackRange</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/upplay-1.9.11/README.asc new/upplay-1.9.12/README.asc
--- old/upplay-1.9.11/README.asc        2023-03-29 18:34:33.000000000 +0200
+++ new/upplay-1.9.12/README.asc        2026-06-02 10:51:51.000000000 +0200
@@ -22,4 +22,4 @@
 
 === Building:
 
-See link:http://www.lesbonscomptes.com/upplay/building.html[the doc here]
+See link:https://www.lesbonscomptes.com/upplay/pages/building.html[the doc 
here]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/upplay-1.9.11/dirbrowser/cdb_html.cpp 
new/upplay-1.9.12/dirbrowser/cdb_html.cpp
--- old/upplay-1.9.11/dirbrowser/cdb_html.cpp   2026-05-27 12:33:58.000000000 
+0200
+++ new/upplay-1.9.12/dirbrowser/cdb_html.cpp   2026-06-02 11:03:21.000000000 
+0200
@@ -139,6 +139,7 @@
     // Automatic centering (default object-position: 50% 50%:
     auto ret = std::string("<img style='object-fit: scale-down; height: ") +
         std::to_string(height) + "; width: " + std::to_string(height) + "' 
src='" + url + "' ";
+    // Use the "title" attribute to provide a tooltip. 
     if (!tooltip.empty()) {
         ret += "title='" + tooltip +"'";
     }
@@ -172,7 +173,9 @@
     return title;
 }
 
-#ifdef USING_WEBENGINE    
+// Note: Webkit turns newlines into spaces so that the result is difficult to 
read. HTML tags are
+// not interpreted inside the value (no possible <br> or <b> to make things 
readable). We used to
+// not add the props at all with webkit. Now using long dashes to separate the 
values instead.
 static void addPropertyLinesToTooltip(const UPnPDirObject& dirent, 
std::string& tooltip)
 {
     static std::vector<std::string> keys;
@@ -203,11 +206,16 @@
         std::string dispname;
         propNames->get(key, dispname);
         if (!value.empty()) {
-            tooltip += "\n" + dispname + ": " + escapeHtml(value);
+#if defined(USING_WEBENGINE)
+            tooltip += "\n";
+#else
+            tooltip += " &mdash; ";
+#endif
+            tooltip += dispname + ": " + escapeHtml(value);
         }
     }
 }
-#endif // USING_WEBENGINE
+
 
 QString CDBrowser::CTToHtml(int idx, const UPnPDirObject& e, const 
std::string& alphaid)
 {
@@ -249,15 +257,13 @@
         date = date.substr(0, date.size()-6);
     date = escapeHtml(date);
     auto tooltip = title;
-#ifdef USING_WEBENGINE    
-    // more album properties in the tooltip. Can't do it with webkit because 
it turns newlines into
-    // spaces which makes things unreadable.
+
+    // more album properties in the tooltip.
     UPnPDirObject e1 = e;
     e1.m_title = title;
     e1.m_props.erase("upnp:artist");
     e1.m_props.insert({"upnp:artist", e.getAlbumArtistElseArtists()});
     addPropertyLinesToTooltip(e1, tooltip);
-#endif // USING_WEBENGINE
 
     int imgw = m_formatparams.albumsAsCoversWidth * 
m_formatparams.scalemultiplier;
     std::map<std::string, std::string> props {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/upplay-1.9.11/dirbrowser/cdbrowser.cpp 
new/upplay-1.9.12/dirbrowser/cdbrowser.cpp
--- old/upplay-1.9.11/dirbrowser/cdbrowser.cpp  2026-05-27 13:24:25.000000000 
+0200
+++ new/upplay-1.9.12/dirbrowser/cdbrowser.cpp  2026-08-08 16:50:51.000000000 
+0200
@@ -70,6 +70,7 @@
 #include "GUI/widgets/browserdialog.h"
 #include "GUI/widgets/filedialog.h"
 #include "GUI/widgets/cdwebpage.h"
+#include "GUI/widgets/trackrange.h"
 #include "HelperStructs/CSettingsStorage.h"
 #include "HelperStructs/Helper.h"
 #include "HelperStructs/Style.h"
@@ -603,6 +604,19 @@
     return std::string("alphaId_") + (char)::toupper(c);
 }
 
+static int getTrackno(const UPnPClient::UPnPDirObject &entry)
+{
+    std::string tno = entry.getprop("upnp:originalTrackNumber");
+    if (tno.empty()) {
+        return -1;
+    }
+    char *cp;
+    auto itno = strtol(tno.c_str(), &cp, 10);
+    if (cp == tno.c_str())
+        return -1;
+    return itno;
+}
+
 void CDBrowser::processOnLinkClicked(const QUrl &url)
 {
     m_timer.stop();
@@ -1407,6 +1421,7 @@
     PUP_ADD,
     PUP_ADD_ALL,
     PUP_ADD_FROMHERE,
+    PUP_ADD_RANGE,
     PUP_BACK,
     PUP_OPEN_IN_NEW_TAB,
     PUP_RAND_PLAY_TRACKS,
@@ -1572,6 +1587,7 @@
     if (m_popupotype == "item") {
         popupaddaction(popup, tr("Send all to playlist"), PUP_ADD_ALL);
         popupaddaction(popup, tr("Send all from here to playlist"), 
PUP_ADD_FROMHERE);
+        popupaddaction(popup, tr("Send track range to playlist"), 
PUP_ADD_RANGE);
         popupaddaction(popup, tr("Copy URL"), PUP_COPY_URL);
         popupaddaction(popup, tr("Show Metadata"), PUP_SHOW_META);
         if (entryhasartist) {
@@ -1693,6 +1709,7 @@
     }
     MetaDataList mdl;
     unsigned int starti = 0;
+    int endidx = -1;
     switch (m_popupmode) {
     case PUP_COPY_URL:
     {
@@ -1721,13 +1738,36 @@
     case PUP_SEARCH_ARTIST_ARTIST:
         popupSearch();
         return;
+    case PUP_ADD_RANGE:
+        {
+            starti = m_popupidx;
+            int itno = getTrackno(m_entries[starti]);
+            if (-1 == itno)
+                return;
+            auto w = TrackRange(itno, this);
+            if (w.exec() != QDialog::Accepted) {
+                return;
+            }
+            for (unsigned i = starti; i < m_entries.size(); i++) {
+                auto etno = getTrackno(m_entries[i]);
+                if (etno == w.endSB->value()) {
+                    endidx = i;
+                    break;
+                }
+            }
+            if (endidx == -1) {
+                return;
+            }
+        }
+        /* FALLTHROUGH */
     case PUP_ADD_FROMHERE: 
         starti = m_popupidx;
         /* FALLTHROUGH */
     case PUP_ADD_ALL:
     {
         bool allok{true};
-        for (unsigned int i = starti; i < m_entries.size(); i++) {
+        unsigned int actualend = endidx == -1 ? m_entries.size() : (unsigned 
int)endidx;
+        for (unsigned int i = starti; i < actualend; i++) {
             if (m_entries[i].m_type == UPnPDirObject::item && 
                 m_entries[i].m_iclass == 
UPnPDirObject::ITC_audioItem_musicTrack) {
                 mdl.resize(mdl.size()+1);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/upplay-1.9.11/upplay.pro new/upplay-1.9.12/upplay.pro
--- old/upplay-1.9.11/upplay.pro        2026-05-27 14:31:07.000000000 +0200
+++ new/upplay-1.9.12/upplay.pro        2026-08-08 16:58:09.000000000 +0200
@@ -2,7 +2,7 @@
 TARGET          = upplay
 
 # VERSION is ^egrepped and must stay in the first column
-VERSION = 1.9.11
+VERSION = 1.9.12
 COPYRDATES = 2011-2026
 
 # Possibly override WEBPLATFORM from the command line, or environment
@@ -73,6 +73,7 @@
         GUI/widgets/directslider.h  \
         GUI/widgets/filedialog.h \
         GUI/widgets/tooltiplike.h \
+        GUI/widgets/trackrange.h \
         HelperStructs/CSettingsStorage.h \
         HelperStructs/Helper.h \
         HelperStructs/Style.h \
@@ -174,10 +175,10 @@
 
 FORMS   = \
         GUI/bareurl/bareurl.ui \
-        GUI/mainw/mainw.ui \
-        GUI/mainw/maintabw.ui \
         GUI/mainw/mainclassicw.ui \
         GUI/mainw/mainhw.ui \
+        GUI/mainw/maintabw.ui \
+        GUI/mainw/mainw.ui \
         GUI/playctlwidget/playctlwidget.ui \
         GUI/playerwidget/playerhwidget.ui \
         GUI/playerwidget/playervwidget.ui \
@@ -190,6 +191,7 @@
         GUI/songcast/songcastdlg.ui \
         GUI/sourcechoose/sourcechoose.ui \
         GUI/widgets/browserdialog.ui \
+        GUI/widgets/trackrange.ui \
         dirbrowser/dirbrowser.ui
 
 unix:!mac {

Reply via email to