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 += " — "; +#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 {
