From e7a07a37b5fca4c88267a100f189e888dcefeddf Mon Sep 17 00:00:00 2001 From: Niels Date: Tue, 17 Jun 2025 21:25:16 +0200 Subject: [PATCH] Initial commit --- .gitattributes | 2 + LICENSE | 340 +++++++++++++++++++++++++++++ README.md | 5 + harbour-volumio.desktop | 20 ++ harbour-volumio.pro | 43 ++++ icons/108x108/harbour-volumio.png | Bin 0 -> 19317 bytes icons/128x128/harbour-volumio.png | Bin 0 -> 20257 bytes icons/172x172/harbour-volumio.png | Bin 0 -> 25817 bytes icons/86x86/harbour-volumio.png | Bin 0 -> 17443 bytes qml/cover/CoverPage.qml | 13 ++ qml/harbour-volumio.qml | 11 + qml/pages/Splash.qml | 225 +++++++++++++++++++ qml/pages/VolumIo.qml | 65 ++++++ qml/pages/upnpscan.py | 50 +++++ rpm/harbour-volumio.changes.in | 18 ++ rpm/harbour-volumio.changes.run.in | 24 ++ rpm/harbour-volumio.spec | 42 ++++ src/harbour-volumio.cpp | 20 ++ translations/harbour-volumio-de.ts | 11 + translations/harbour-volumio.ts | 11 + 20 files changed, 900 insertions(+) create mode 100644 .gitattributes create mode 100644 LICENSE create mode 100644 README.md create mode 100644 harbour-volumio.desktop create mode 100644 harbour-volumio.pro create mode 100644 icons/108x108/harbour-volumio.png create mode 100644 icons/128x128/harbour-volumio.png create mode 100644 icons/172x172/harbour-volumio.png create mode 100644 icons/86x86/harbour-volumio.png create mode 100644 qml/cover/CoverPage.qml create mode 100644 qml/harbour-volumio.qml create mode 100644 qml/pages/Splash.qml create mode 100644 qml/pages/VolumIo.qml create mode 100644 qml/pages/upnpscan.py create mode 100644 rpm/harbour-volumio.changes.in create mode 100644 rpm/harbour-volumio.changes.run.in create mode 100644 rpm/harbour-volumio.spec create mode 100644 src/harbour-volumio.cpp create mode 100644 translations/harbour-volumio-de.ts create mode 100644 translations/harbour-volumio.ts diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..bb7b593 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Use target-compatible line endings as the safe default for cross compilation. +* text=auto eol=lf diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a8ba86e --- /dev/null +++ b/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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, see . + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Moe Ghoul, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..1132456 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# Volumio + +A simple Volumio player! + +Volumio devices needs to have UPnP enabled for the app to discover them. When discovered it simply connects to the webbased player in a WebView. diff --git a/harbour-volumio.desktop b/harbour-volumio.desktop new file mode 100644 index 0000000..8c50e51 --- /dev/null +++ b/harbour-volumio.desktop @@ -0,0 +1,20 @@ +[Desktop Entry] +Type=Application +X-Nemo-Application-Type=silica-qt5 +Icon=harbour-volumio +Exec=harbour-volumio +Name=harbour-volumio +# translation example: +# your app name in German locale (de) +# +# Remember to comment out the following line, if you do not want to use +# a different app name in German locale (de). +Name[de]=harbour-volumio + +[X-Sailjail] +# Replace with your organization as a reverse domain name +OrganizationName=org.myorg +# ApplicationName does not have to be identical to Name +ApplicationName=volumio +# Add the required permissions here +Permissions=WebView;Internet diff --git a/harbour-volumio.pro b/harbour-volumio.pro new file mode 100644 index 0000000..47ef8e0 --- /dev/null +++ b/harbour-volumio.pro @@ -0,0 +1,43 @@ +# NOTICE: +# +# Application name defined in TARGET has a corresponding QML filename. +# If name defined in TARGET is changed, the following needs to be done +# to match new name: +# - corresponding QML filename must be changed +# - desktop icon filename must be changed +# - desktop filename must be changed +# - icon definition filename in desktop file must be changed +# - translation filenames have to be changed + +# The name of your application +TARGET = harbour-volumio + +CONFIG += sailfishapp + +SOURCES += src/harbour-volumio.cpp + +DISTFILES += qml/harbour-volumio.qml \ + LICENSE \ + README.md \ + qml/cover/CoverPage.qml \ + qml/pages/Splash.qml \ + qml/pages/VolumIo.qml \ + rpm/harbour-volumio.changes.in \ + rpm/harbour-volumio.changes.run.in \ + rpm/harbour-volumio.spec \ + translations/*.ts \ + harbour-volumio.desktop + +SAILFISHAPP_ICONS = 86x86 108x108 128x128 172x172 + +# to disable building translations every time, comment out the +# following CONFIG line +CONFIG += sailfishapp_i18n + +PKGCONFIG += qt5embedwidget + +# German translation is enabled as an example. If you aren't +# planning to localize your app, remember to comment out the +# following TRANSLATIONS line. And also do not forget to +# modify the localized app name in the the .desktop file. +TRANSLATIONS += translations/harbour-volumio-de.ts diff --git a/icons/108x108/harbour-volumio.png b/icons/108x108/harbour-volumio.png new file mode 100644 index 0000000000000000000000000000000000000000..6e7c73a74990b729f753fe8230af3ad9fa65e6b8 GIT binary patch literal 19317 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 mP8e(W+!Ie%Hf}bJ@&5rNci)m6eu~2Y0000(.*?)<\/friendlyName>/g).map(function(val){ + friendlyName = val.replace(/<\/?friendlyName>/g,'') + //console.log(friendlyName) + }); + + xml.match(/(.*?)<\/modelName>/g).map(function(val){ + modelName = val.replace(/<\/?modelName>/g,'') + //console.log(modelName+" ("+ip+")") + }); + + xml.match(/(.*?)<\/url>/g).map(function(val){ + + icon = val.replace(/<\/?url>/g,'') + console.log(val+" ****** 120x120 *****") + }); + var patt = /^UpMPD/; + console.log(" ************ PATT: "+patt) + if (patt.test(modelName)) + deviceModel.append({"friendlyName": friendlyName,"modelName": modelName,"ip":ip,"port":port,"icon":icon,"source":source}); + } + }; + req.send(); + } + + ListModel {id: deviceModel} + + Label { + id: volum + text: "VOLUMIO" + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + anchors.topMargin: Theme.paddingLarge + color: Theme.primaryColor + font.pixelSize: Theme.fontSizeExtraLarge * 2 + } + Label { + text: "THE MUSIC PLAYER" + anchors.top: volum.bottom + anchors.horizontalCenter: parent.horizontalCenter + //anchors.topMargin: Theme.paddingLarge + color: Theme.primaryColor + font.pixelSize: Theme.fontSizeSmall + } + + Label { + visible: !page.discovering + text: "Choose a device" + anchors.bottom: listview.top + anchors.bottomMargin: Theme.paddingLarge + anchors.horizontalCenter: parent.horizontalCenter + color: Theme.primaryColor + //font.pixelSize: Theme.fontSizeSmall + } + + SilicaListView { + id: listview + spacing: Theme.paddingMedium + visible: true + anchors.centerIn: parent + anchors.margins: Theme.paddingSmall + height: contentHeight + width: parent.width + //anchors.fill: parent + //anchors.bottomMargin: button.height + clip: true + model: deviceModel + delegate: BackgroundItem { + Rectangle { + anchors.fill: parent + color: Theme.highlightDimmerColor + } + property variant defVal: [] + width: ListView.view.width + + height: Theme.itemSizeExtraLarge + Image { + id: img + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left + anchors.leftMargin: Theme.paddingLarge + height: Theme.itemSizeLarge + width: height + source: "http://"+ip+":"+port+icon + } + Item { + anchors.left: img.right + height: friendlyLabel.height + nameIp.height + anchors.leftMargin: Theme.paddingLarge + anchors.verticalCenter: parent.verticalCenter + Label { + id: friendlyLabel + text: friendlyName + //color: Theme.highlightColor + font.pixelSize: Theme.fontSizeLarge + } + Label { + id: nameIp + text: modelName + " ("+ip+")" + anchors.top: friendlyLabel.bottom + //color: Theme.highlightColor + font.pixelSize: Theme.fontSizeSmall + } + } + onClicked: { + console.log(" ********** http://"+ip+":"+port) + running = false + webPageAddress = "http://"+ip + } + } + } + + BusyLabel { + //width: parent.width + text: "Searching for UPnP devices" + running: page.discovering + anchors.centerIn: parent + } + + Button { + id: button + text: "Discover" + enabled: !page.discovering + anchors.bottom: parent.bottom + width: parent.width + onClicked: { + deviceModel.clear() + python.startDownload(); + } + } + + function getIp(url) { + var res = url.split(":"); + return res + } + + function checkDevices() { + for (var i = 0; i < devices.length; i++) { + + } + squeezeboxSettings.setValue("devices",devices) + } + + Python { + id: python + + Component.onCompleted: { + addImportPath(Qt.resolvedUrl('.')); + + setHandler('progress', function(ratio) { + + devices.push(ratio) + }); + setHandler('finished', function(newvalue) { + page.discovering = false; + button.text = "Discover"; + if (retries<3 && devices.length === 0) { + retries = retries + 1 + python.startDownload() + } else { + retries = 0 + for (var i = 0; i < devices.length; i++) { + getXml(devices[i]) + console.log(devices[i]); + } + } + }); + + importModule('upnpscan', function () {}); + + } + + function startDownload() { + devices = [] + page.discovering = true; + button.text = "Discovering"; + call('upnpscan.discoverer.discover', function() {}); + } + + onError: { + console.log('python error: ' + traceback); + } + + onReceived: { + console.log('got message from python: ' + data); + } + } + + Component.onCompleted: { + python.startDownload(); + } +} diff --git a/qml/pages/VolumIo.qml b/qml/pages/VolumIo.qml new file mode 100644 index 0000000..ded1d92 --- /dev/null +++ b/qml/pages/VolumIo.qml @@ -0,0 +1,65 @@ +import QtQuick 2.0 +import Sailfish.Silica 1.0 +import Sailfish.WebView 1.0 + +WebViewPage { + id: webViewPage + allowedOrientations: Orientation.Portrait | Orientation.Landscape + + property string webPageAddress: "" + property string webTitle: "" + property bool webViewLoading: false + property int webViewLoadProgress: 0 + + Splash { + id: splashItem + visible: running + } + + WebView { + id: webView + visible: !splashItem.running + + anchors.fill: parent + + active: true + url: webPageAddress + + onLoadingChanged: { + webViewPage.webViewLoading = loading + webViewPage.webViewLoadProgress = 0 + } + + onLoadProgressChanged: { + webViewPage.webViewLoadProgress = loadProgress + } + } + + Rectangle { + id: panel + color: Theme.highlightDimmerColor + anchors { + bottom: parent.bottom + left: parent.left + right: parent.right + //margins: Theme.padding + } + width: parent.width + height: opacity === 0.0 ? 0 : Theme.paddingSmall / 3 + radius: 5 + + opacity: (webViewPage.webViewLoading || loadStatusShowTimer.running) ? 0.75 : 0.0 + Behavior on opacity { FadeAnimator {} } + + Timer { + id: loadStatusShowTimer + } + + Rectangle { + anchors.left: parent.left + color: Theme.secondaryHighlightColor + width: webViewPage.webViewLoading ? parent.width * (webViewPage.webViewLoadProgress / 100) : 0 + height: parent.height + } + } +} diff --git a/qml/pages/upnpscan.py b/qml/pages/upnpscan.py new file mode 100644 index 0000000..4866d82 --- /dev/null +++ b/qml/pages/upnpscan.py @@ -0,0 +1,50 @@ +import pyotherside +import threading +import socket +import re + +# 'ST:urn:schemas-upnp-org:device:MediaRenderer:1', + + +def slow_function(): + msg = "\r\n".join([ + 'M-SEARCH * HTTP/1.1', + 'HOST:239.255.255.250:1900', + 'MAN:"ssdp:discover"', + 'ST:urn:schemas-upnp-org:device:MediaRenderer:1', + 'MX:2', + '', + '', + ]) + + bytesmsg = msg.encode() + mr = "urn:schemas-upnp-org:device:MediaRenderer:1".encode() + # mr = ".".encode() + se = "(?Phttps?://[^\s]+)".encode() + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) + s.settimeout(3) + s.sendto(bytesmsg, ('239.255.255.250', 1900)) + + try: + while True: + data = s.recvfrom(65507) + for line in data: + if mr in line: + url = re.search(se, line).group("url") + pyotherside.send('progress', url) + + except socket.timeout: + pyotherside.send('finished', "DONE") + +class Discoverer: + def __init__(self): + self.bgthread = threading.Thread() + self.bgthread.start() + + def discover(self): + if self.bgthread.is_alive(): + return + self.bgthread = threading.Thread(target=slow_function) + self.bgthread.start() + +discoverer = Discoverer() diff --git a/rpm/harbour-volumio.changes.in b/rpm/harbour-volumio.changes.in new file mode 100644 index 0000000..c299fe1 --- /dev/null +++ b/rpm/harbour-volumio.changes.in @@ -0,0 +1,18 @@ +# Rename this file as harbour-volumio.changes to include changelog +# entries in your RPM file. +# +# Add new changelog entries following the format below. +# Add newest entries to the top of the list. +# Separate entries from eachother with a blank line. +# +# Alternatively, if your changelog is automatically generated (e.g. with +# the git-change-log command provided with Sailfish OS SDK), create a +# harbour-volumio.changes.run script to let mb2 run the required commands for you. + +# * date Author's Name version-release +# - Summary of changes + +* Sun Apr 13 2014 Jack Tar 0.0.1-1 +- Scrubbed the deck +- Hoisted the sails + diff --git a/rpm/harbour-volumio.changes.run.in b/rpm/harbour-volumio.changes.run.in new file mode 100644 index 0000000..965455f --- /dev/null +++ b/rpm/harbour-volumio.changes.run.in @@ -0,0 +1,24 @@ +#!/bin/bash +# +# Rename this file as harbour-volumio.changes.run to let sfdk automatically +# generate changelog from well formatted Git commit messages and tag +# annotations. Note that 'sfdk changelog' must be invoked as 'sfdk-changelog' here. + +sfdk-changelog + +# Here are some basic examples how to change from the default behavior. Run +# 'sfdk --help-maintaining' to learn more. + +# Use a subset of tags +#sfdk-changelog --tags refs/tags/my-prefix/* + +# Group entries by minor revision, suppress headlines for patch-level revisions +#sfdk-changelog --dense '/[0-9]+.[0-9+$' + +# Trim very old changes +#sfdk-changelog --since 2014-04-01 +#echo '[ Some changelog entries trimmed for brevity ]' + +# Use the subjects (first lines) of tag annotations when no entry would be +# included for a revision otherwise +#sfdk-changelog --auto-add-annotations diff --git a/rpm/harbour-volumio.spec b/rpm/harbour-volumio.spec new file mode 100644 index 0000000..5869315 --- /dev/null +++ b/rpm/harbour-volumio.spec @@ -0,0 +1,42 @@ +Name: harbour-volumio + +Summary: VolumeIO +Version: 0.1 +Release: 1 +License: LICENSE +URL: http://example.org/ +Source0: %{name}-%{version}.tar.bz2 +Requires: sailfishsilica-qt5 >= 0.10.9 +BuildRequires: pkgconfig(sailfishapp) >= 1.0.2 +BuildRequires: pkgconfig(Qt5Core) +BuildRequires: pkgconfig(Qt5Qml) +BuildRequires: pkgconfig(Qt5Quick) +BuildRequires: desktop-file-utils +BuildRequires: pkgconfig(qt5embedwidget) + +%description +Just a small restful app for Volumio + + +%prep +%setup -q -n %{name}-%{version} + +%build + +%qmake5 + +%make_build + + +%install +%qmake5_install + + +desktop-file-install --delete-original --dir %{buildroot}%{_datadir}/applications %{buildroot}%{_datadir}/applications/*.desktop + +%files +%defattr(-,root,root,-) +%{_bindir}/%{name} +%{_datadir}/%{name} +%{_datadir}/applications/%{name}.desktop +%{_datadir}/icons/hicolor/*/apps/%{name}.png diff --git a/src/harbour-volumio.cpp b/src/harbour-volumio.cpp new file mode 100644 index 0000000..28ced13 --- /dev/null +++ b/src/harbour-volumio.cpp @@ -0,0 +1,20 @@ +#ifdef QT_QML_DEBUG +#include +#endif + +#include + +int main(int argc, char *argv[]) +{ + // SailfishApp::main() will display "qml/harbour-volumio.qml", if you need more + // control over initialization, you can use: + // + // - SailfishApp::application(int, char *[]) to get the QGuiApplication * + // - SailfishApp::createView() to get a new QQuickView * instance + // - SailfishApp::pathTo(QString) to get a QUrl to a resource file + // - SailfishApp::pathToMainQml() to get a QUrl to the main QML file + // + // To display the view, call "show()" (will show fullscreen on device). + + return SailfishApp::main(argc, argv); +} diff --git a/translations/harbour-volumio-de.ts b/translations/harbour-volumio-de.ts new file mode 100644 index 0000000..4b7499a --- /dev/null +++ b/translations/harbour-volumio-de.ts @@ -0,0 +1,11 @@ + + + + + CoverPage + + My Cover + Mein Cover + + + diff --git a/translations/harbour-volumio.ts b/translations/harbour-volumio.ts new file mode 100644 index 0000000..6c0a8ab --- /dev/null +++ b/translations/harbour-volumio.ts @@ -0,0 +1,11 @@ + + + + + CoverPage + + My Cover + + + +