Projects
home:fstrba
welle-io
Sign Up
Log In
Username
Password
We truncated the diff of some files because they were too big. If you want to see the full diff for every file,
click here
.
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Difference Between Revision 2 and
Multimedia
/
welle-io
View file
welle-io.changes
Changed
@@ -1,23 +1,4 @@ ------------------------------------------------------------------- -Sat Sep 14 11:52:48 UTC 2024 - Fridrich Strba <fridrich.strba@bluewin.ch> - -- Added patch: - * base_dir.patch - + implement an option to specify the location of index.html and - index.js files. - -------------------------------------------------------------------- -Fri Sep 13 17:31:51 UTC 2024 - Fridrich Strba <fridrich.strba@bluewin.ch> - -- Build with stdc++17 capable compiler for <filesystem> include - -------------------------------------------------------------------- -Thu Sep 12 17:39:03 UTC 2024 - Fridrich Strba <fridrich.strba@bluewin.ch> - -- Update to latest git snapshot - * Added FLAC support - -------------------------------------------------------------------- Thu Sep 12 17:19:22 UTC 2024 - Fridrich Strba <fridrich.strba@bluewin.ch> - Enable alsa support for a functioning welle-cli
View file
welle-io.spec
Changed
@@ -16,24 +16,19 @@ # -%if 0%{?gcc_version} < 8 -%define with_gcc 8 -%endif Name: welle-io -Version: 2.5~20240904.268a4d2 +Version: 2.5~20231018.8426077 Release: 0 Summary: Receiver for DAB and DAB+ broadcast radio License: GPL-2.0-or-later Group: Productivity/Multimedia/Other URL: https://www.welle.io/ Source0: %{name}-%{version}.tar.xz -Patch0: base_dir.patch BuildRequires: airspy-devel BuildRequires: alsa-devel BuildRequires: cmake BuildRequires: fftw-devel -BuildRequires: flac-devel -BuildRequires: gcc%{?with_gcc}-c++ +BuildRequires: gcc-c++ BuildRequires: hicolor-icon-theme BuildRequires: libfaad-devel BuildRequires: libmp3lame-devel @@ -67,21 +62,12 @@ %prep %setup -q -%patch -P 0 -p1 %build -%if 0%{?with_gcc} -export CXX=g++-%{with_gcc} -export CC=gcc-%{with_gcc} -%endif -%cmake -DSOAPYSDR=1 -DRTLSDR=1 -DAIRSPY=1 -DFLAC=1 -DGIT_DESCRIBE=%{version} +%cmake -DSOAPYSDR=1 -DRTLSDR=1 -DAIRSPY=1 %cmake_build %check -%if 0%{?with_gcc} -export CXX=g++-%{with_gcc} -export CC=gcc-%{with_gcc} -%endif %ctest %install
View file
base_dir.patch
Deleted
@@ -1,142 +0,0 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 7dbdc9ca..d0ab53c0 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -1,4 +1,4 @@ --cmake_minimum_required(VERSION 3.2) -+cmake_minimum_required(VERSION 3.10) - - project(Welle.Io LANGUAGES C CXX) - -@@ -13,7 +13,7 @@ if(NOT WELLE-IO_VERSION) - endif() - - set(CMAKE_CXX_STANDARD_REQUIRED ON) --set(CMAKE_CXX_STANDARD 14) -+set(CMAKE_CXX_STANDARD 17) - - option(BUILD_WELLE_IO "Build Welle.io" ON ) - option(BUILD_WELLE_CLI "Build welle-cli" ON ) -@@ -200,8 +200,8 @@ endif() - - if (SOAPYSDR) - find_package(SoapySDR NO_MODULE REQUIRED) -- # Note: SoapySDRConfig.cmake sets C++11 standard so it needs to be reset to C++14 -- set(CMAKE_CXX_STANDARD 14) -+ # Note: SoapySDRConfig.cmake sets C++11 standard so it needs to be reset to C++17 -+ set(CMAKE_CXX_STANDARD 17) - endif() - - include_directories( -diff --git a/src/welle-cli/webradiointerface.cpp b/src/welle-cli/webradiointerface.cpp -index 74c51425..d57ceecc 100644 ---- a/src/welle-cli/webradiointerface.cpp -+++ b/src/welle-cli/webradiointerface.cpp -@@ -24,6 +24,7 @@ - */ - - #include "welle-cli/webradiointerface.h" -+#include <filesystem> - #include <algorithm> - #include <cmath> - #include <complex> -@@ -131,13 +132,15 @@ static bool send_http_response(Socket& s, const string& statuscode, - - WebRadioInterface::WebRadioInterface(CVirtualInput& in, - int port, -+ const string &base_dir, - DecodeSettings ds, - RadioReceiverOptions rro) : - dabparams(1), - input(in), - spectrum_fft_handler(dabparams.T_u), - rro(rro), -- decode_settings(ds) -+ decode_settings(ds), -+ base_dir(base_dir) - { - { - // Ensure that rx always exists when rx_mut is free! -@@ -563,7 +566,17 @@ bool WebRadioInterface::send_file(Socket& s, - const std::string& filename, - const std::string& content_type) - { -- FILE *fd = fopen(filename.c_str(), "r"); -+ std::filesystem::path path_name; -+ if (!base_dir.empty()) -+ { -+ path_name = base_dir; -+ path_name /= filename; -+ } -+ else -+ { -+ path_name = filename; -+ } -+ FILE *fd = fopen(path_name.c_str(), "r"); - if (fd) { - if (not send_http_response(s, http_ok, "", content_type)) { - cerr << "Failed to send file headers" << endl; -diff --git a/src/welle-cli/webradiointerface.h b/src/welle-cli/webradiointerface.h -index f029e48b..81cae0ea 100644 ---- a/src/welle-cli/webradiointerface.h -+++ b/src/welle-cli/webradiointerface.h -@@ -75,6 +75,7 @@ class WebRadioInterface : public RadioControllerInterface { - WebRadioInterface( - CVirtualInput& in, - int port, -+ const std::string& base_dir, - DecodeSettings cs, - RadioReceiverOptions rro); - ~WebRadioInterface(); -@@ -215,4 +216,6 @@ class WebRadioInterface : public RadioControllerInterface { - std::chrono::time_point<std::chrono::steady_clock> time_change; - }; - std::list<ActiveCarouselService> carousel_services_active; -+ -+ std::string base_dir; - }; -diff --git a/src/welle-cli/welle-cli.cpp b/src/welle-cli/welle-cli.cpp -index cf84060e..c02f5106 100644 ---- a/src/welle-cli/welle-cli.cpp -+++ b/src/welle-cli/welle-cli.cpp -@@ -275,6 +275,7 @@ class RadioInterface : public RadioControllerInterface { - struct options_t { - string soapySDRDriverArgs = ""; - string antenna = ""; -+ string base_dir = ""; - int gain = -1; - string channel = "10B"; - string iqsource = ""; -@@ -314,6 +315,7 @@ static void usage() - endl << - "Web server mode:" << endl << - " -w port Enable web server on port <port>." << endl << -+ " -b path Base directory of index.html and index.js files." << endl << - " -C number Number of programmes to decode in a carousel" << endl << - " (to be used with -w, cannot be used with -D)." << endl << - " This is useful if your machine cannot decode all programmes" << endl << -@@ -409,11 +411,14 @@ options_t parse_cmdline(int argc, char **argv) - options.rro.decodeTII = true; - - int opt; -- while ((opt = getopt(argc, argv, "A:c:C:dDf:F:g:hp:O:Ps:Tt:uvw:")) != -1) { -+ while ((opt = getopt(argc, argv, "A:b:c:C:dDf:F:g:hp:O:Ps:Tt:uvw:")) != -1) { - switch (opt) { - case 'A': - options.antenna = optarg; - break; -+ case 'b': -+ options.base_dir = optarg; -+ break; - case 'c': - options.channel = optarg; - break; -@@ -605,7 +610,7 @@ int main(int argc, char **argv) - return 1; - } - -- WebRadioInterface wri(*in, options.web_port, ds, options.rro); -+ WebRadioInterface wri(*in, options.web_port, options.base_dir, ds, options.rro); - wri.serve(); - } - else {
View file
_service
Changed
@@ -2,7 +2,7 @@ <service name="tar_scm" mode="disabled"> <param name="scm">git</param> <param name="url">https://github.com/AlbrechtL/welle.io.git</param> - <param name="revision">268a4d2b0f1c077d60cc033a378d30afce0be02d</param> + <param name="revision">84260770154b8b71c28a88875ac2ca139c60a796</param> <param name="versionformat">2.5~%cd.%h</param> <param name="filename">welle-io</param> </service>
View file
welle-io-2.5~20231018.8426077.tar.xz/.appveyor.yml
Added
@@ -0,0 +1,76 @@ +version: 1.0.{build} + +image: Visual Studio 2022 + +init: + - set PATHORIG=%PATH% + - set MINGWPATH=C:\Qt\Tools\mingw1120_64\bin + - set PATH=C:\Qt\6.2\mingw_64\bin;%MINGWPATH%;%PATH% + - gcc -v + +before_build: + # Create datetime + - for /f "tokens=2 delims==" %%G in ('wmic os get localdatetime /value') do set datetime=%%G + - set year=%datetime:~0,4% + - set month=%datetime:~4,2% + - set day=%datetime:~6,2% + - set current_date=%year%%month%%day% + # Create git hash + - for /f %%i in ('git -C C:\projects\welle-io\ rev-parse --short HEAD') do set git_hash=%%i + # Create version + - set file_version=%current_date%_%git_hash% + # Create a build directory + - cd ..\ + - md build + # Get all headers and DLLs for the build + - git clone https://github.com/AlbrechtL/welle.io-win-libs.git + +build_script: + - cd build + - qmake ..\welle-io + - mingw32-make -j4 + +after_build: + # Prepare welle binary files + - md bin + #- copy src\welle-cli\release\welle-cli.exe bin + - copy src\welle-gui\release\welle-io.exe bin + #- copy ..\welle-io\src\welle-cli\index.html bin + #- copy ..\welle-io\src\welle-cli\index.js bin + + # Create installer + - cd ..\welle-io\windows\ + - ps: .\create_installer.ps1 -welleExePath ..\..\build\bin -QTPath C:\Qt\6.2\mingw_64\bin -ToolsPath %MINGWPATH% -InnoSetupPath "C:\Program Files (x86)\Inno Setup 6" + + # Add to artifact list + - set PATH=%PATHORIG% + - appveyor PushArtifact %welle_io_filename%.exe + +#test_script: +# - set PATH=%PATHORIG% +# - cd installer\packages\io.welle.welle\data +# - welle-io.exe --version + +deploy: + # Upload it to BinTray + #- provider: BinTray + # username: albrechtl + # api_key: + # secure: i7ksq/PodhXDzjw7trN/y00EA6U4tZ9m4EGOFDv736Nrvb6lpvG8jtXwTV4cPOtV + # subject: albrechtl + # repo: welle.io + # package: welle.io_nightly + # version: '%file_version%' + # publish: true + # override: true + # explode: true + provider: FTP + protocol: ftps + host: welle-io-nightlies.albrechtloh.de + username: welle-ci + password: + secure: Hu/HfMhc0Uhq0WOFM49YTUqoBvbXx49fMg93bOPKVhI= + +after_deploy: + # Backup: Upload it to transfer.sh + # - curl -fsS --upload-file C:\projects\welle.io-win-libs\install\%filename% https://transfer.sh/%filename%
View file
welle-io-2.5~20240904.268a4d2.tar.xz/.github/workflows/android.yml -> welle-io-2.5~20231018.8426077.tar.xz/.github/workflows/android.yml
Changed
@@ -1,24 +1,9 @@ name: Android build # -# This script can use the Qt for Android packages for Debian & derivatives from -# any of these sources: -# - https://salsa.debian.org/bastif/qt-android -# - https://launchpad.net/~bastif/+archive/ubuntu/qt-android -# -# This is set by the value of the ORIGIN environment variable. -# -# If you modify the version of QT_ANDROID_PACKAGE, you must also update the -# values of these env var accordingly (preferably the version with which -# qt-android was built). That information is available on +# This script uses the Qt for Android packages for Debian & derivatives from # https://salsa.debian.org/bastif/qt-android # -# ANDROID_BUILD_TOOLS_VER -# ANDROID_PLATFORM_VER -# ANDROID_NDK_ZIP -# ANDROID_NDK_VERSION -# ANDROID_NDK_SHA1 -# # If you want to build welle.io for Android yourself and produce a Multi-ABI # APK or AAB you might encouter these issues: # @@ -40,29 +25,13 @@ name: Android build job runs-on: ubuntu-22.04 env: + QT_ANDROID_JOB_REPO: bullseye-backports + QT_ANDROID_JOB_ID: 4247878 # Qt6.5.1 + custom install dir - # ORIGIN: the source for the qt-android package. Can be one of - # ppa:bastif/qt-android - # salsa.debian.org - ORIGIN: ppa:bastif/qt-android - - # Parameters for both salsa or launchpad (ie. ppa) origins - # When changing the version here, also update the Android SDK/NDK versions below. - # ANDROID_BUILD_TOOLS_VER - # ANDROID_PLATFORM_VER - # ANDROID_NDK_ZIP - # ANDROID_NDK_VERSION - # ANDROID_NDK_SHA1 - # That information is available on https://salsa.debian.org/bastif/qt-android - QT_ANDROID_PACKAGE: qt-android-6.5 - - # Parameters for ORIGIN:salsa.debian.org - QT_ANDROID_SALSA_JOB_REPO: bullseye-backports - QT_ANDROID_SALSA_JOB_ID: 4921017 # Qt6.5.3 - - #QT_ANDROID_SALSA_JOB_REPO: testing - #QT_ANDROID_SALSA_JOB_ID: 3206460 # Qt6.3 android-buil with OS's Host Qt (=doesn't provide qt-android-X.Y-host) + #QT_ANDROID_JOB_REPO: testing + #QT_ANDROID_JOB_ID: 3206460 # Qt6.3 android-buil with OS's Host Qt (=doesn't provide qt-android-X.Y-host) + QT_ANDROID_PACKAGE: qt-android-6.5 QT_ANDROID_HOST_HAS_CUSTOM_INSTALL_DIR: true # relevant only when not using OS's host Qt USE_OS_QT_AS_HOST: false USE_OS_QT_AS_HOST_FROM_TESTING: true @@ -71,14 +40,14 @@ ANDROID_SDK_CMDLINE_TOOLS_SHA1: 5e7bf2dd563d34917d32f3c5920a85562a795c93 ANDROID_BUILD_TOOLS_VER: 33.0.0 #Used as compileSdk. It should be supported by the version of gradle shipped in QtAndroid - ANDROID_PLATFORM_VER: android-33 - ANDROID_NDK_ZIP: android-ndk-r25b-linux.zip - ANDROID_NDK_VERSION: 25.1.8937393 - ANDROID_NDK_SHA1: e27dcb9c8bcaa77b78ff68c3f23abcf6867959eb + ANDROID_PLATFORM_VER: android-31 + ANDROID_NDK_ZIP: android-ndk-r23c-linux.zip + ANDROID_NDK_VERSION: 23.2.8568313 + ANDROID_NDK_SHA1: e5053c126a47e84726d9f7173a04686a71f9a67a steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v3 - run: git fetch --prune --unshallow --tags @@ -94,26 +63,19 @@ # Build for Android using qt-android-6.4. Multi-ABI is back again since QT 6.3. # Supports for Multi-ABI is only with cmake (no more multi abi with qmake) - - name: Add qt-android repo from 'salsa.debian.org' (for ${{ env.QT_ANDROID_PACKAGE }} packages) - if: ${{ env.ORIGIN == 'salsa.debian.org' }} + - name: Add qt-android repo (for ${{ env.QT_ANDROID_PACKAGE }} packages) run: | sudo apt-get -y install wget - wget https://salsa.debian.org/bastif/qt-android/-/jobs/${QT_ANDROID_SALSA_JOB_ID}/artifacts/raw/aptly/public-key.asc + wget https://salsa.debian.org/bastif/qt-android/-/jobs/${QT_ANDROID_JOB_ID}/artifacts/raw/aptly/public-key.asc sudo cp public-key.asc /etc/apt/trusted.gpg.d/ - sudo add-apt-repository "deb https://salsa.debian.org/bastif/qt-android/-/jobs/${QT_ANDROID_SALSA_JOB_ID}/artifacts/raw/aptly ${QT_ANDROID_SALSA_JOB_REPO} main" -y - - - name: Add qt-android repo from 'ppa:bastif/qt-android' (for ${{ env.QT_ANDROID_PACKAGE }} packages) - if: ${{ env.ORIGIN == 'ppa:bastif/qt-android' }} - run: | - sudo add-apt-repository "$ORIGIN" - sudo apt-get update - + sudo add-apt-repository "deb https://salsa.debian.org/bastif/qt-android/-/jobs/${QT_ANDROID_JOB_ID}/artifacts/raw/aptly ${QT_ANDROID_JOB_REPO} main" -y + # qt-android-6.2 depends on libjpeg62-turbo which is not shipped by Ubuntu. # So add debian bullseye repo and required keys - name: "Add Debian bullseye repo and required keys" # In later versions of qt-android, jpeg is disabled in host-build, so there is no more dependency to libjpeg. # So this step can be disabled - if: ${{ env.ORIGIN == 'salsa.debian.org' && false }} + if: false run: | sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0E98404D386FA1D9 @@ -240,7 +202,7 @@ if -d $ANDROID_SDK_ROOT/cmdline-tools/latest ; then CMDLINE_TOOLS_ROOT=$ANDROID_SDK_ROOT/cmdline-tools/latest else - if ! command -v fuse-zip; then sudo apt-get -y install fuse-zip; fi + if command -v fuse-zip; then sudo apt-get -y install fuse-zip; fi # Android SDK Command Line Tools wget https://dl.google.com/android/repository/$ANDROID_SDK_CMDLINE_TOOLS_ZIP @@ -269,7 +231,7 @@ if -e $ANDROID_SDK_ROOT/ndk/$ANDROID_NDK_VERSION ; then ln -s $ANDROID_SDK_ROOT/ndk/$ANDROID_NDK_VERSION ${HOME}/android-sdk/ndk else - if ! command -v fuse-zip; then sudo apt-get -y install fuse-zip; fi + if command -v fuse-zip; then sudo apt-get -y install fuse-zip; fi wget https://dl.google.com/android/repository/$ANDROID_NDK_ZIP echo "$ANDROID_NDK_SHA1 $ANDROID_NDK_ZIP" | sha1sum -c @@ -310,7 +272,6 @@ cd build ${QT_INSTALL_BINDIR}/qt-cmake \ -DQT_ANDROID_BUILD_ALL_ABIS=TRUE \ - -DQT_ANDROID_DEPLOY_RELEASE=TRUE \ -DQT_PATH_ANDROID_ABI_armeabi-v7a="${{ env.QT_PATH_ANDROID_ABI_armeabi-v7a }}" \ -DQT_PATH_ANDROID_ABI_arm64-v8a="${{ env.QT_PATH_ANDROID_ABI_arm64-v8a }}" \ -DQT_PATH_ANDROID_ABI_x86="${{ env.QT_PATH_ANDROID_ABI_x86 }}" \ @@ -331,22 +292,16 @@ run: | set -x cmake --build "build" --parallel - ls -al build/android-build/build/outputs/apk/*/*.apk - - # prepare the publish - mkdir publish - cp build/android-build/build/outputs/apk/*/*.apk publish/${DATE}_${LAST_COMMIT_HASH}_Android_welle-io.apk - find publish/ + ls -al build/android-build/build/outputs/apk/debug/android-build-debug.apk - - name: Upload to nightly server - if: always() && steps.build_apk.outcome == 'success' - uses: dennisameling/ftp-upload-action@v1 - with: - server: a2f24.netcup.net # welle-io-nightlies.albrechtloh.de is redirected to here - secure: true - username: ${{ secrets.SFTP_USER }} - password: ${{ secrets.SFTP_PASSWORD }} - local_dir: publish/ + - name: Upload to nightlies server + env: + SFTP_USER: ${{ secrets.SFTP_USER }} + SFTP_PASSWORD: ${{ secrets.SFTP_PASSWORD }} + if: always() && steps.build_apk.outcome == 'success' && env.SFTP_USER != '' && env.SFTP_PASSWORD != '' + run: | + sudo apt-get -y install sshpass + sshpass -p "${SFTP_PASSWORD}" scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null build/android-build/build/outputs/apk/debug/android-build-debug.apk "${SFTP_USER}"@welle-io-nightlies.albrechtloh.de:/welle-io-nightlies.albrechtloh.de/${DATE}_${LAST_COMMIT_HASH}_Android_welle-io.apk - name: Build with qmake id: build_apk_qmake @@ -366,15 +321,15 @@ - name: Archive artifacts (welle.io apk) if: always() && steps.build_apk.outcome == 'success' - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v3 with: name: welle.io apk (for all android abi) - path: build/android-build/build/outputs/apk/*/*.apk + path: build/android-build/build/outputs/apk/debug/*.apk if-no-files-found: error - name: Archive artifacts (welle.io apk built by qmake) if: always() && steps.build_apk_qmake.outcome == 'success' - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v3 with: name: welle.io apk built by qmake (arm64-v8a only) path: qmake-build/src/welle-gui/android-build/build/outputs/apk/debug/android-build-debug.apk @@ -382,16 +337,8 @@ - name: Archive artifacts (welle.io build dir) if: always() && steps.build_apk.outcome == 'failure' - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v3 with: name: welle.io build dir path: build/* if-no-files-found: error
View file
welle-io-2.5~20240904.268a4d2.tar.xz/.github/workflows/linux.yml -> welle-io-2.5~20231018.8426077.tar.xz/.github/workflows/linux.yml
Changed
@@ -10,89 +10,72 @@ - 'v*' jobs: - qtbuild: - name: Build with Qt + cmake: + name: Build with CMake runs-on: ubuntu-22.04 steps: - - name: Install Qt - uses: jurplel/install-qt-action@v4 - with: - version: '6.7.2' - modules: 'qtcharts qtmultimedia qt5compat qtshadertools' - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v3 - run: git fetch --prune --unshallow --tags - name: Set environment variables run: | + echo "ANDROID_NDK_MOUNT_DIR=${HOME}/android-ndk" >> $GITHUB_ENV + echo "LAST_COMMIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV + echo "LAST_COMMIT_DATE=$(git log -1 --date=format:%Y%m%d --format=%cd)" >> $GITHUB_ENV + echo "DEBEMAIL=none@domain.tld" >> $GITHUB_ENV + echo "DEBFULLNAME='Github Actions Android Builder for welle.io'" >> $GITHUB_ENV echo "DATE=`date +%Y%m%d`" >> $GITHUB_ENV - echo "GIT_HASH=`git rev-parse --short HEAD`" >> $GITHUB_ENV - #echo "QTDIR=$QT_ROOT_DIR" >> $GITHUB_ENV cat $GITHUB_ENV - name: Display environment variables run: env | sort + # qt6-charts-dev is not available in ubuntu 22.04, neither Debian bullseye. + # So we use the packages from a newer repository + - name: "Add repo having qt6-charts-dev" + run: | + if ! dpkg-query -W qt6-charts-dev; then + sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu/ lunar main universe" -y + # Update packages list + sudo apt-get update -qq + fi + - name: Install build dependencies run: | set -x - sudo apt-get -y install build-essential libfaad-dev libmpg123-dev libfftw3-dev librtlsdr-dev libusb-1.0-0-dev mesa-common-dev libglu1-mesa-dev libpulse-dev libsoapysdr-dev libairspy-dev libmp3lame-dev libflac++-dev - - - name: Build - id: build + sudo apt-get -y install build-essential cmake libairspy-dev libasound2-dev libfaad-dev libfftw3-dev libmp3lame-dev libmpg123-dev libpulse-dev libqt6opengl6-dev librtlsdr-dev libsoapysdr-dev qt6-base-dev qt6-charts-dev qt6-declarative-dev qt6-multimedia-dev + # Workarounds for packaging bugs + if dpkg --compare-versions $(dpkg-query -W qt6-charts-dev | cut -d " " -f 2) lt 6.4.2-3; then + sudo apt-get -y install qml6-module-qtcharts + fi + if dpkg --compare-versions $(dpkg-query -W qt6-multimedia-dev | cut -d " " -f 2) lt 6.4.2-5; then + sudo apt-get -y install qml6-module-qtquick3d-spatialaudio + fi + + - name: Configure welle.io project run: | - mkdir build - cd build - qmake PREFIX=/usr .. - make -j4 - cd .. + set -x echo $PWD + mkdir -p build/install_root + cd build + cmake -DRTLSDR=1 -DSOAPYSDR=1 -DAIRSPY=1 -DCMAKE_INSTALL_PREFIX="$(realpath ./install_root)" .. - - name: Prepare welle-io AppImage - id: prepare_app_image - run: | - find build/ - mkdir -p ./appdir/usr/share/applications - cp welle-io.desktop ./appdir/usr/share/applications - mkdir -p ./appdir/usr/bin - cp build/src/welle-gui/welle-io ./appdir/usr/bin - mkdir -p ./appdir/usr/lib - mkdir -p ./appdir/usr/share/icons/hicolor/256x256/apps/ - cp src/welle-gui/icons/icon.png ./appdir/usr/share/icons/hicolor/256x256/apps/welle-io.png - find appdir/ - - - name: Create AppImage - id: create_appimage + - name: Build + id: build run: | - # Get appimagetool - # wget -c https://github.com/$(wget -q https://github.com/probonopd/go-appimage/releases/expanded_assets/continuous -O - | grep "appimagetool-.*-x86_64.AppImage" | head -n 1 | cut -d '"' -f 2) - wget https://welle-io-nightlies.albrechtloh.de/appimagetool-843-x86_64.AppImage # just for testing - chmod +x appimagetool-*.AppImage - - # Create AppImage - ./appimagetool-*.AppImage -s deploy ./appdir/usr/share/applications/*.desktop # Bundle EVERYTHING - VERSION=1.0 ./appimagetool-*.AppImage ./appdir # turn AppDir into AppImage + set -x + cd build + make + make install + ls -lR install_root - # Preapre publish - mkdir publish - mv welle.io-1.0-x86_64.AppImage publish/"$DATE"_"$GIT_HASH"_Linux_welle-io-x86_64.AppImage - - - name: Archive artifacts (welle.io AppImage) - if: always() && steps.create_appimage.outcome == 'success' - uses: actions/upload-artifact@v4 + - name: Archive artifacts (welle.io build dir) + if: always() && steps.build.outcome == 'failure' + uses: actions/upload-artifact@v3 with: - name: welle.io AppImage - path: publish/*welle-io-x86_64.AppImage + name: welle.io build dir + path: build/* if-no-files-found: error - - - name: Upload to nightly server - if: always() && steps.create_appimage.outcome == 'success' - uses: dennisameling/ftp-upload-action@v1 - with: - server: a2f24.netcup.net # welle-io-nightlies.albrechtloh.de is redirected to here - secure: true - username: ${{ secrets.SFTP_USER }} - password: ${{ secrets.SFTP_PASSWORD }} - local_dir: publish/
View file
welle-io-2.5~20240904.268a4d2.tar.xz/.gitignore -> welle-io-2.5~20231018.8426077.tar.xz/.gitignore
Changed
@@ -1,7 +1,6 @@ *~ /.idea/ /cmake-build-debug/ -build/ Makefile welle-io *.o
View file
welle-io-2.5~20231018.8426077.tar.xz/.travis.yml
Added
@@ -0,0 +1,172 @@ +dist: jammy +language: cpp +compiler: gcc + +git: + depth: false + +branches: + except: + - gh-pages + +script: + - DATE=`date +%Y%m%d` + - GIT_HASH=`git rev-parse --short HEAD` + + # Compile airspy + - wget https://github.com/airspy/host/archive/master.zip + - unzip master.zip + - cd airspyone_host-master/ + - mkdir build + - cd build + - cmake ../ -DINSTALL_UDEV_RULES=ON + - make -j 4 + - sudo make install + - cd ../.. + + # Compile librtlsdr + - git clone https://github.com/steve-m/librtlsdr.git + - cd librtlsdr + - mkdir build + - cd build + - cmake ../ -DDETACH_KERNEL_DRIVER=ON + - make -j 4 + - sudo make install + - cd ../.. + + # Compile welle.io + - mkdir build + - cd build + - $QMAKEBIN PREFIX=/usr .. + - make -j4 + - cd .. + - echo $PWD + + # Compile welle-cli + - mkdir build-cli + - cd build-cli + - cmake ../ -DBUILD_WELLE_IO=OFF -DAIRSPY=TRUE -DRTLSDR=TRUE -DSOAPYSDR=TRUE + - make -j4 + - cd .. + +jobs: + include: + - os: linux + + install: + - sudo apt-get -y install sshpass libfuse2 patchelf + - sudo apt-get -y install libusb-1.0-0-dev pkg-config libmp3lame-dev libmpg123-dev libpulse0 libfaad-dev libfftw3-dev libusb-1.0-0-dev mesa-common-dev libglu1-mesa-dev libpulse-dev libsoapysdr-dev libgstreamer-plugins-base1.0-0 libgstreamer-gl1.0-0 libxkbcommon-x11-0 libxcb-icccm4 libfontconfig1-dev libfreetype6-dev libx11-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util-dev libxcb-xinerama0-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev + + # Install qt-downloader + - sudo apt-get -y install python3-pip + - sudo pip3 install pipenv + - pipenv install lxml semantic_version requests py7zr + - git clone https://github.com/engnr/qt-downloader.git + - pipenv run ./qt-downloader/qt-downloader linux desktop 6.2.4 gcc_64 --addon qtmultimedia qtcharts qt5compat --opensource + - echo $PWD + - export QMAKEBIN=$PWD/6.2.4/gcc_64/bin/qmake + + # For Flatpak + #- sudo add-apt-repository ppa:alexlarsson/flatpak -y + #- sudo apt-get update -qq + #- sudo apt-get -y install flatpak-builder elfutils + #- sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo + #- sudo flatpak install -y flathub org.kde.Sdk//5.15 org.kde.Platform//5.15 + + after_success: + - sudo ldconfig + + # Get linuxdeploy + - sudo wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage -P /usr/local/bin + - sudo chmod +x /usr/local/bin/linuxdeploy-x86_64.AppImage + - sudo wget https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage -P /usr/local/bin + - sudo chmod +x /usr/local/bin/linuxdeploy-plugin-qt-x86_64.AppImage + - sudo wget https://raw.githubusercontent.com/linuxdeploy/linuxdeploy-plugin-gstreamer/master/linuxdeploy-plugin-gstreamer.sh -P /usr/local/bin + - sudo chmod +x /usr/local/bin/linuxdeploy-plugin-gstreamer.sh + + # Prepare welle.io AppImage + - find build/ + - mkdir -p ./appdir/usr/share/applications + - cp welle-io.desktop ./appdir/usr/share/applications + - mkdir -p ./appdir/usr/bin + - cp build/src/welle-gui/welle-io ./appdir/usr/bin + - mkdir -p ./appdir/usr/lib + - mkdir -p ./appdir/usr/share/icons/hicolor/512x512/apps/ + - cp src/welle-gui/icons/icon.png appdir/usr/share/icons/hicolor/512x512/apps/welle-io.png + + # Create some libraries inside QT6 to workround an expection. Maybe a bug inside linuxdeploy-x86_64.AppImage? + # See here https://github.com/linuxdeploy/linuxdeploy-plugin-qt/issues/122 + - mkdir /home/travis/build/AlbrechtL/welle.io/6.2.4/gcc_64/plugins/mediaservice + - mkdir /home/travis/build/AlbrechtL/welle.io/6.2.4/gcc_64/plugins/audio + + # Create welle.io AppImage + - echo $PWD + - QML_SOURCES_PATHS=. QMAKE=$QMAKEBIN linuxdeploy-x86_64.AppImage --appdir ./appdir --plugin qt --plugin gstreamer --output appimage + - mv welle.io-"$GIT_HASH"-x86_64.AppImage "$DATE"_"$GIT_HASH"_Linux_welle-io-x86_64.AppImage + + # Prepare welle-cli AppImage + - find build-cli/ + - mkdir -p ./appdir-cli/usr/share/applications + - cp welle-cli.desktop ./appdir-cli/usr/share/applications + - mkdir -p ./appdir-cli/usr/bin + - cp build-cli/welle-cli ./appdir-cli/usr/bin + - mkdir -p ./appdir-cli/usr/lib + - mkdir -p ./appdir-cli/usr/share/icons/hicolor/512x512/apps/ + - cp src/welle-gui/icons/icon.png appdir-cli/usr/share/icons/hicolor/512x512/apps/welle-io.png + + # Create welle-cli AppImage + - linuxdeploy-x86_64.AppImage --appdir ./appdir-cli --output appimage + - mv welle.io-cli-"$GIT_HASH"-x86_64.AppImage "$DATE"_"$GIT_HASH"_Linux_welle-io-cli-x86_64.AppImage + + # Create welle-gui Flatpak + #- sudo flatpak-builder --repo=wellerepo --force-clean fp_build io.welle.welle_io.json + #- sudo flatpak --user remote-add --no-gpg-verify welle-repo wellerepo + #- sudo flatpak --user install welle-repo io.welle.welle_io --assumeyes + #- flatpak build-bundle wellerepo welle-io.flatpak io.welle.welle_io + #- mv welle-io.flatpak "$DATE"_"$GIT_HASH"_Linux_welle-io-x86_64.flatpak + + # Upload + - sshpass -p ${SFTP_PASSWORD} scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "$DATE"_"$GIT_HASH"_Linux_welle-io-x86_64.AppImage ${SFTP_USER}@welle-io-nightlies.albrechtloh.de:/welle-io-nightlies.albrechtloh.de/ + - sshpass -p ${SFTP_PASSWORD} scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "$DATE"_"$GIT_HASH"_Linux_welle-io-cli-x86_64.AppImage ${SFTP_USER}@welle-io-nightlies.albrechtloh.de:/welle-io-nightlies.albrechtloh.de/ + #- sshpass -p ${SFTP_PASSWORD} scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "$DATE"_"$GIT_HASH"_Linux_welle-io-x86_64.flatpak ${SFTP_USER}@welle-io-nightlies.albrechtloh.de:/welle-io-nightlies.albrechtloh.de/ + + # temporary exclude + exclude: + - os: osx + osx_image: xcode13.2 + + before_install: + - brew tap pothosware/homebrew-pothos + - brew update + - brew pin ansible + + install: + - brew install fftw faad2 lame mpg123 soapysdr esolitos/ipa/sshpass qt@5 + - brew install --HEAD soapyuhd + - echo 'export PATH="/usr/local/opt/qt@5/bin:$PATH"' >> ~/.zshrc + - source ~/.zshrc + - export LIBRARY_PATH=/usr/local/lib + + after_success: + # Get macdeployqtfix + - curl -O https://raw.githubusercontent.com/arl/macdeployqtfix/master/macdeployqtfix.py + + # Prepare welle.io app + - find build + - mkdir appdir + - cp -R build/src/welle-gui/welle-io.app appdir/welle.io.app + - macdeployqt appdir/welle.io.app -qmldir=$TRAVIS_BUILD_DIR/src/welle-gui/QML + - cp /usr/local/lib/librtlsdr.0.dylib appdir/welle.io.app/Contents/Frameworks/librtlsdr.0.dylib + - install_name_tool -change @rpath/librtlsdr.0.dylib @executable_path/../Frameworks/librtlsdr.0.dylib appdir/welle.io.app/Contents/MacOS/welle-io + - python macdeployqtfix.py appdir/welle.io.app/Contents/MacOS/welle.io /usr/local/opt/qt + + # Add shortcut to Applications + - ln -s /Applications appdir/Applications + + # Build DMG + - hdiutil create welle-io.dmg -ov -volname "Install welle.io" -fs HFS+ -srcfolder appdir + - hdiutil convert welle-io.dmg -format UDZO -o "$DATE"_"$GIT_HASH"_MacOS_welle-io.dmg + - rm welle-io.dmg + + # Upload + - sshpass -p ${SFTP_PASSWORD} scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "$DATE"_"$GIT_HASH"_MacOS_welle-io.dmg ${SFTP_USER}@welle-io-nightlies.albrechtloh.de:/welle-io-nightlies.albrechtloh.de/
View file
welle-io-2.5~20240904.268a4d2.tar.xz/CMakeLists.txt -> welle-io-2.5~20231018.8426077.tar.xz/CMakeLists.txt
Changed
@@ -23,7 +23,6 @@ option(AIRSPY "Compile with Airspy support" OFF ) option(RTLSDR "Compile with RTL-SDR support" OFF ) option(SOAPYSDR "Compile with SoapySDR support" OFF ) -option(FLAC "Compile with flac support for streaming" OFF ) add_definitions(-Wall) add_definitions(-g) @@ -76,10 +75,6 @@ if(BUILD_WELLE_CLI AND NOT ANDROID) find_package(Lame REQUIRED) - if (FLAC) - find_package(FLACPP REQUIRED) # test if FLAC is installed on the system - add_definitions(-DHAVE_FLAC) - endif() endif() find_package(Threads REQUIRED) @@ -217,7 +212,6 @@ ${FAAD_INCLUDE_DIRS} ${LIBRTLSDR_INCLUDE_DIRS} ${SoapySDR_INCLUDE_DIRS} - ${FLACPP_INCLUDE_DIRS} ) set(backend_sources @@ -474,7 +468,6 @@ ${LAME_LIBRARIES} ${SoapySDR_LIBRARIES} ${MPG123_LIBRARIES} - ${FLACPP_LIBRARIES} Threads::Threads )
View file
welle-io-2.5~20240904.268a4d2.tar.xz/HomebrewFormula/welle.io.rb -> welle-io-2.5~20231018.8426077.tar.xz/HomebrewFormula/welle.io.rb
Changed
@@ -1,8 +1,8 @@ class WelleIo < Formula desc "DAB/DAB+ Software Radio" homepage "https://www.welle.io" - url "https://github.com/AlbrechtL/welle.io/archive/v2.4.tar.gz" - sha256 "7c2a2ff7b6e0780aee8a30a2beedfa831ce67683e1d076a73cebc897637d0202" + url "https://github.com/AlbrechtL/welle.io/archive/v2.2.tar.gz" + sha256 "4b72c2984a884cc2f02d1e501ead2a8b0323900f37cebf4aed016e84474e0259" license "GPL-2.0-or-later" head "https://github.com/AlbrechtL/welle.io.git" @@ -17,6 +17,8 @@ depends_on "librtlsdr" depends_on "libusb" depends_on "mpg123" + depends_on "pothosware/homebrew-pothos/soapysdr" + depends_on "pothosware/homebrew-pothos/soapyuhd" depends_on "qt@5" def install
View file
welle-io-2.5~20240904.268a4d2.tar.xz/README.md -> welle-io-2.5~20231018.8426077.tar.xz/README.md
Changed
@@ -1,8 +1,7 @@ welle.io(https://www.welle.io) ===================== -- Linux (AppImage): !Linux build(https://github.com/AlbrechtL/welle.io/actions/workflows/linux.yml/badge.svg)(https://github.com/AlbrechtL/welle.io/actions/workflows/linux.yml) -- Windows (Installer): !Windows build(https://github.com/AlbrechtL/welle.io/actions/workflows/windows.yml/badge.svg)(https://github.com/AlbrechtL/welle.io/actions/workflows/windows.yml) -- Android (APK): !Android build(https://github.com/AlbrechtL/welle.io/actions/workflows/android.yml/badge.svg)(https://github.com/AlbrechtL/welle.io/actions/workflows/android.yml) +- Linux, macOS (Travis): !Travis Build Status(https://app.travis-ci.com/AlbrechtL/welle.io.svg?branch=next)(https://app.travis-ci.com/AlbrechtL/welle.io) +- Windows (AppVeyor): !AppVeyor Build status(https://ci.appveyor.com/api/projects/status/yipsu95pb4ecdofe?svg=true)(https://ci.appveyor.com/project/AlbrechtL/welle-io) This repository contains the implementation of an SDR DAB/DAB+ receiver. Please see the project website https://www.welle.io for a user oriented documentation. @@ -120,7 +119,7 @@ --- The following libraries and their development files are needed: -* Qt 6.5 (Qt 6.4 and below is not supported) +* Qt 6.2 (Qt 6.1 and below is not supported) * FFTW3f * libfaad * librtlsdr @@ -140,13 +139,13 @@ 2. Install the following non-Qt packages ``` -sudo apt install libfaad-dev libmpg123-dev libfftw3-dev librtlsdr-dev libusb-1.0-0-dev mesa-common-dev libglu1-mesa-dev libpulse-dev libsoapysdr-dev libairspy-dev libmp3lame-dev libflac++-dev +sudo apt install libfaad-dev libmpg123-dev libfftw3-dev librtlsdr-dev libusb-1.0-0-dev mesa-common-dev libglu1-mesa-dev libpulse-dev libsoapysdr-dev libairspy-dev libmp3lame-dev ``` 3. Install the following Qt packages ``` -sudo apt install libqt6charts6-dev qt6-base-dev qt6-tools-dev-tools qt6-multimedia-dev qt6-wayland-dev libqt6core5compat6-dev libqt63dquick6 libqt6qml6 qt6-declarative-dev qml6-module-qtquick-controls qml6-module-qtquick qml6-module-qt5compat-graphicaleffects qml6-module-qtcharts qml6-module-qtmultimedia qml6-module-qtquick-window qml6-module-qtquick-layouts qml6-module-qtqml-workerscript qml6-module-qtwayland-compositor qml6-module-qtquick-templates qtcreator +sudo apt install libqt6charts6-dev qt6-base-dev qt6-tools-dev-tools qt6-multimedia-dev qt6-wayland-dev libqt6core5compat6-dev libqt63dquick6 libqt6qml6 qt6-declarative-dev qml6-module-qt-labs-settings qml6-module-qtquick-controls qml6-module-qtquick qml6-module-qt5compat-graphicaleffects qml6-module-qtcharts qml6-module-qtmultimedia qml6-module-qtquick-window qml6-module-qtquick-layouts qml6-module-qtqml-workerscript qml6-module-qtwayland-compositor qml6-module-qtquick-templates qml6-module-qt-labs-platform qtcreator ``` 4. Clone welle.io @@ -355,12 +354,6 @@ Example: `welle-cli -c 12A -C 1 -w 7979` enables the webserver on channel 12A, please then go to http://localhost:7979/ where you can observe all necessary details for every service ID in the ensemble, see the slideshows, stream the audio (by clicking on the Play-Button), check spectrum, constellation, TII information and CIR peak diagramme. -Streaming output options ---- - -By default, `welle-cli` will output in mp3 if in webserver mode. -With the `-O` option, you can choose between mp3 and flac (lossless) if FLAC support is enabled at build time. - Backend options ---
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/backend.pri -> welle-io-2.5~20231018.8426077.tar.xz/src/backend.pri
Changed
@@ -25,14 +25,15 @@ } win32: { - contains(QT_ARCH, i386) { # DEPRECATED - error("Win32 is not supported anymore") + contains(QT_ARCH, i386) { + LIBS += -L../../../welle.io-win-libs/x86 + LIBS += -llibfaad } else { - LIBS += -L..\..\..\..\..\welle.io-win-libs\x64 + LIBS += -L../../../welle.io-win-libs/x64 CONFIG += libfaad_builtin } - INCLUDEPATH += ..\..\..\welle.io-win-libs\include + INCLUDEPATH += ../../../welle.io-win-libs/include LIBS += -lfftw3f-3 LIBS += -lole32 LIBS += -lwinpthread
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/input/rtl_sdr.cpp -> welle-io-2.5~20231018.8426077.tar.xz/src/input/rtl_sdr.cpp
Changed
@@ -45,13 +45,7 @@ #define READLEN_DEFAULT 8192 // Fallback if function is not defined in shared lib -int __attribute__((weak)) rtlsdr_set_bias_tee(rtlsdr_dev_t *dev, int on) -{ - (void) dev; - (void) on; - std::clog << "RTL_SDR: " << "Error: rtlsdr_set_bias_tee() not defined!" << std::endl; - return false; -} +int __attribute__((weak)) rtlsdr_set_bias_tee(rtlsdr_dev_t *dev, int on); CRTL_SDR::CRTL_SDR(RadioControllerInterface& radioController) : radioController(radioController), @@ -236,10 +230,15 @@ { switch(param) { case DeviceParam::BiasTee: + if(rtlsdr_set_bias_tee) { std::clog << "RTL_SDR: "<< "Set bias tee to " << value << std::endl; rtlsdr_set_bias_tee(device, value); } + else + { + std::clog << "RTL_SDR: " << "Error: rtlsdr_set_bias_tee() not defined!" << std::endl; + } return true; default: std::runtime_error("Unsupported device parameter");
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/input/rtl_tcp.cpp -> welle-io-2.5~20231018.8426077.tar.xz/src/input/rtl_tcp.cpp
Changed
@@ -282,12 +282,6 @@ dongleInfo.tuner_type << " " << TunerType << std::endl; std::clog << "RTL_TCP_CLIENT: Tuner gain count: " << dongleInfo.tuner_gain_count << std::endl; - - // Always use manual gain, the AGC is implemented in software - setGainMode(1); - setGain(currentGainCount); - sendRate(INPUT_RATE); - sendVFO(frequency); } else { std::clog << "RTL_TCP_CLIENT: Didn't find the \"RTL0\" magic key." << @@ -450,6 +444,12 @@ std::clog << "RTL_TCP_CLIENT: Successful connected to server " << std::endl; + // Always use manual gain, the AGC is implemented in software + setGainMode(1); + setGain(currentGainCount); + sendRate(INPUT_RATE); + sendVFO(frequency); + if (!agcRunning) { agcRunning = true; agcThread = std::thread(&CRTL_TCP_Client::agcTimer, this);
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/welle-cli/index.js -> welle-io-2.5~20231018.8426077.tar.xz/src/welle-cli/index.js
Changed
@@ -210,7 +210,7 @@ } function setPlayerSource(sid) { - document.getElementById("player").src = "/stream/" + sid; + document.getElementById("player").src = "/mp3/" + sid; playerLoad(); }
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/welle-cli/webprogrammehandler.cpp -> welle-io-2.5~20231018.8426077.tar.xz/src/welle-cli/webprogrammehandler.cpp
Changed
@@ -25,9 +25,6 @@ #include "webprogrammehandler.h" #include <iostream> #include <algorithm> -#include <functional> - -#include <lame/lame.h> using namespace std; @@ -35,125 +32,6 @@ #define MSG_NOSIGNAL 0 #endif -class IEncoder -{ - public: - virtual bool process_interleaved(std::vector<int16_t>& audioData) = 0; - virtual ~IEncoder() = default; -}; - -#ifdef HAVE_FLAC -#include <FLAC++/encoder.h> -class FlacEncoder : protected FLAC::Encoder::Stream, public IEncoder -{ - private: - std::function<void(const std::vector<uint8_t>& headerData, const std::vector<uint8_t>& data)> handlerFunc; - std::vector<uint8_t> flacHeader; - bool streamHeaderInitialised = false; - // The audio decoders always upconvert to stereo - const int channels = 2; - - public : - FlacEncoder(int sample_rate, std::function<void(const std::vector<uint8_t>& headerData, const std::vector<uint8_t>& data)> handler) : handlerFunc(handler) - { - set_streamable_subset(true); - set_channels(2); - set_sample_rate(sample_rate); - set_compression_level(5); - // Header created during this call - init(); - // Header data finished - streamHeaderInitialised = true; - - } - - bool process_interleaved(std::vector<int16_t>& audioData) override - { - std::vector<int32_t> pcm_32(audioData.size()); - - // Convert 16bit samples to 32bit samples - for(long unsigned int i = 0; i < audioData.size(); i++) - { - pcm_32i = (int)audioDatai; - } - - return FLAC::Encoder::Stream::process_interleaved(pcm_32.data(), pcm_32.size()/channels); - } - - FLAC__StreamEncoderWriteStatus write_callback(const FLAC__byte buffer, size_t bytes, uint32_t samples, uint32_t current_frame) override - { - if (!streamHeaderInitialised) - { - flacHeader.insert(flacHeader.end(), buffer, buffer + bytes); - } - else - { - std::vector<uint8_t> vectdata(buffer, buffer + bytes); - handlerFunc(flacHeader, vectdata); - } - - return FLAC__STREAM_ENCODER_WRITE_STATUS_OK; - } - - ~FlacEncoder() - { - finish(); - } -}; - -#endif - -class LameEncoder : public IEncoder { - std::function<void(const std::vector<uint8_t>& headerData, const std::vector<uint8_t>& data)> handlerFunc; - lame_t lame; - // The audio decoders always upconvert to stereo - const int channels = 2; - - public: - - LameEncoder(int sample_rate, std::function<void(const std::vector<uint8_t>& headerData, const std::vector<uint8_t>& data)> handler) : handlerFunc(handler) - { - lame = lame_init(); - lame_set_in_samplerate(lame, sample_rate); - lame_set_num_channels(lame, channels); - lame_set_VBR(lame, vbr_default); - lame_set_VBR_q(lame, 2); - lame_init_params(lame); - } - - LameEncoder(const LameEncoder& other) = delete; - LameEncoder& operator=(const LameEncoder& other) = delete; - LameEncoder(LameEncoder&& other) = default; - LameEncoder& operator=(LameEncoder&& other) = default; - - bool process_interleaved(std::vector<int16_t>& audioData) override - { - vector<uint8_t> mp3buf(16384); - - int written = lame_encode_buffer_interleaved(lame, - audioData.data(), audioData.size()/channels, - mp3buf.data(), mp3buf.size()); - - if (written < 0) { - cerr << "Failed to encode mp3: " << written << endl; - } - else if (written > (ssize_t)mp3buf.size()) { - cerr << "mp3 encoder wrote more than buffer size!" << endl; - } - else if (written > 0) { - mp3buf.resize(written); - handlerFunc(std::vector<uint8_t>(), mp3buf); - } - - return true; - } - - ~LameEncoder() { - lame_close(lame); - } -}; - - ProgrammeSender::ProgrammeSender(Socket&& s) : s(move(s)) { @@ -171,23 +49,15 @@ return *this; } -bool ProgrammeSender::send_stream(const std::vector<uint8_t>& headerdata, const std::vector<uint8_t>& mp3Data) +bool ProgrammeSender::send_mp3(const std::vector<uint8_t>& mp3Data) { if (not s.valid()) { return false; } const int flags = MSG_NOSIGNAL; - ssize_t ret = 0; - - if (!headerSent) - { - ret = s.send(headerdata.data(), headerdata.size(), flags); - headerSent = true; - } - - ret = s.send(mp3Data.data(), mp3Data.size(), flags); + ssize_t ret = s.send(mp3Data.data(), mp3Data.size(), flags); if (ret == -1) { s.close(); std::unique_lock<std::mutex> lock(mutex); @@ -214,8 +84,8 @@ running = false; } -WebProgrammeHandler::WebProgrammeHandler(uint32_t serviceId, OutputCodec codecID) : - serviceId(serviceId), codec(codecID) +WebProgrammeHandler::WebProgrammeHandler(uint32_t serviceId) : + serviceId(serviceId) { const auto now = chrono::system_clock::now(); time_label = now; @@ -226,7 +96,6 @@ WebProgrammeHandler::WebProgrammeHandler(WebProgrammeHandler&& other) : serviceId(other.serviceId), - codec(other.codec), senders(move(other.senders)) { other.senders.clear(); @@ -239,11 +108,6 @@ time_mot_change = now; } -WebProgrammeHandler::~WebProgrammeHandler() -{ - -} - void WebProgrammeHandler::registerSender(ProgrammeSender *sender) { std::unique_lock<std::mutex> lock(senders_mutex); @@ -336,6 +200,9 @@ return; } + // The audio decoders always upconvert to stereo + const int channels = 2; +
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/welle-cli/webprogrammehandler.h -> welle-io-2.5~20231018.8426077.tar.xz/src/welle-cli/webprogrammehandler.h
Changed
@@ -26,6 +26,7 @@ #include "various/Socket.h" #include "backend/radio-receiver.h" +#include <lame/lame.h> #include <cstdint> #include <memory> #include <mutex> @@ -40,23 +41,36 @@ std::atomic<bool> running = ATOMIC_VAR_INIT(true); mutable std::condition_variable cv; mutable std::mutex mutex; - bool headerSent = false; public: ProgrammeSender(Socket&& s); ProgrammeSender(ProgrammeSender&& other); ProgrammeSender& operator=(ProgrammeSender&& other); - bool send_stream(const std::vector<uint8_t>& headerdata, const std::vector<uint8_t>& mp3data); + bool send_mp3(const std::vector<uint8_t>& mp3data); void wait_for_termination() const; void cancel(); }; -enum class OutputCodec {MP3, FLAC}; +struct Lame { + lame_t lame; + + Lame() { + lame = lame_init(); + } + + Lame(const Lame& other) = delete; + Lame& operator=(const Lame& other) = delete; + Lame(Lame&& other) = default; + Lame& operator=(Lame&& other) = default; + + ~Lame() { + lame_close(lame); + } +}; enum class MOTType { JPEG, PNG, Unknown }; -class IEncoder; class WebProgrammeHandler : public ProgrammeHandlerInterface { public: @@ -81,8 +95,9 @@ }; private: uint32_t serviceId; - const OutputCodec codec; - std::unique_ptr<IEncoder> encoder; + + bool lame_initialised = false; + Lame lame; mutable std::mutex senders_mutex; std::list<ProgrammeSender*> senders; @@ -110,15 +125,13 @@ int rate = 0; std::string mode; - WebProgrammeHandler(uint32_t serviceId, OutputCodec codec); + WebProgrammeHandler(uint32_t serviceId); WebProgrammeHandler(WebProgrammeHandler&& other); - ~WebProgrammeHandler(); void registerSender(ProgrammeSender *sender); void removeSender(ProgrammeSender *sender); bool needsToBeDecoded() const; void cancelAll(); - void send_to_all_clients(const std::vector<uint8_t>& headerData, const std::vector<uint8_t>& data); struct dls_t { std::string label;
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/welle-cli/webradiointerface.cpp -> welle-io-2.5~20231018.8426077.tar.xz/src/welle-cli/webradiointerface.cpp
Changed
@@ -89,7 +89,6 @@ static const char* http_500 = "HTTP/1.0 500 Internal Server Error\r\n"; static const char* http_503 = "HTTP/1.0 503 Service Unavailable\r\n"; static const char* http_contenttype_mp3 = "Content-Type: audio/mpeg\r\n"; -static const char* http_contenttype_flac = "Content-Type: audio/flac\r\n"; static const char* http_contenttype_m3u = "Content-Type: application/mpegurl\r\n"; static const char* http_contenttype_text = "Content-Type: text/plain\r\n"; static const char* http_contenttype_data = @@ -501,30 +500,11 @@ const regex regex_slide(R"(^/slide/(^ +))"); std::smatch match_slide; - const regex regex_stream(R"(^/stream/(^ +))"); - std::smatch match_stream; - if (regex_search(req.url, match_stream, regex_stream)) { - success = send_stream(s, match_stream1); + const regex regex_mp3(R"(^/mp3/(^ +))"); + std::smatch match_mp3; + if (regex_search(req.url, match_mp3, regex_mp3)) { + success = send_mp3(s, match_mp31); } - - if (decode_settings.outputCodec == OutputCodec::MP3) - { - const regex regex_mp3(R"(^/mp3/(^ +))"); - std::smatch match_mp3; - if (regex_search(req.url, match_mp3, regex_mp3)) { - success = send_stream(s, match_mp31); - } - } - - if (decode_settings.outputCodec == OutputCodec::FLAC) - { - const regex regex_flac(R"(^/flac/(^ +))"); - std::smatch match_flac; - if (regex_search(req.url, match_flac, regex_flac)) { - success = send_stream(s, match_flac1); - } - } - else if (regex_search(req.url, match_slide, regex_slide)) { success = send_slide(s, match_slide1); } @@ -865,7 +845,7 @@ return true; } -bool WebRadioInterface::send_stream(Socket& s, const std::string& stream) +bool WebRadioInterface::send_mp3(Socket& s, const std::string& stream) { unique_lock<mutex> lock(rx_mut); ASSERT_RX; @@ -879,21 +859,7 @@ lock.unlock(); - std::string http_contenttype; - - switch (decode_settings.outputCodec) - { - case OutputCodec::FLAC: - http_contenttype = http_contenttype_flac; - break; - case OutputCodec::MP3: - http_contenttype = http_contenttype_mp3; - break; - default: - break; - } - - if (not send_http_response(s, http_ok, "", http_contenttype)) { + if (not send_http_response(s, http_ok, "", http_contenttype_mp3)) { cerr << "Failed to send mp3 headers" << endl; return false; } @@ -1288,7 +1254,7 @@ } if (phs.count(s.serviceId) == 0) { - WebProgrammeHandler ph(s.serviceId, decode_settings.outputCodec); + WebProgrammeHandler ph(s.serviceId); phs.emplace(std::make_pair(s.serviceId, move(ph))); } }
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/welle-cli/webradiointerface.h -> welle-io-2.5~20231018.8426077.tar.xz/src/welle-cli/webradiointerface.h
Changed
@@ -69,7 +69,6 @@ struct DecodeSettings { DecodeStrategy strategy = DecodeStrategy::OnDemand; int num_decoders_in_carousel = 0; - OutputCodec outputCodec; }; WebRadioInterface( @@ -115,10 +114,10 @@ // Generate and send a m3u playlist with all services bool send_mux_playlist(Socket& s); - // Send a stream containing the selected programme. + // Send an mp3 stream containing the selected programme. // stream is a service id, either in hex with 0x prefix or // in decimal - bool send_stream(Socket& s, const std::string& stream); + bool send_mp3(Socket& s, const std::string& stream); // Send the slide for the selected programme. // stream is a service id, either in hex with 0x prefix or
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/welle-cli/welle-cli.cpp -> welle-io-2.5~20231018.8426077.tar.xz/src/welle-cli/welle-cli.cpp
Changed
@@ -287,7 +287,6 @@ bool carousel_pad = false; int web_port = -1; // positive value means enable list<int> tests; - string outputcodec = ""; RadioReceiverOptions rro; }; @@ -340,7 +339,6 @@ " -s args SoapySDR Driver arguments." << endl << " -A antenna Set input antenna to ANT (for SoapySDR input only)." << endl << " -T Disable TII decoding to reduce CPU usage." << endl << - " -O Output Codec for web streaming : mp3 (default), flac (lossless)" << endl << endl << "Other options:" << endl << " -t test_id Run test <test_id>." << endl << @@ -409,7 +407,7 @@ options.rro.decodeTII = true; int opt; - while ((opt = getopt(argc, argv, "A:c:C:dDf:F:g:hp:O:Ps:Tt:uvw:")) != -1) { + while ((opt = getopt(argc, argv, "A:c:C:dDf:F:g:hp:Ps:Tt:uvw:")) != -1) { switch (opt) { case 'A': options.antenna = optarg; @@ -438,9 +436,6 @@ case 'p': options.programme = optarg; break; - case 'O': - options.outputcodec = optarg; - break; case 'P': options.carousel_pad = true; break; @@ -527,7 +522,6 @@ in->setAgc(true); } else { - in->setAgc(false); in->setGain(options.gain); } @@ -585,26 +579,6 @@ } ds.num_decoders_in_carousel = options.num_decoders_in_carousel; } - if (options.outputcodec == "" || options.outputcodec == "mp3") - { - ds.outputCodec = OutputCodec::MP3; - - } - else if (options.outputcodec == "flac") - { - #ifdef HAVE_FLAC - ds.outputCodec = OutputCodec::FLAC; - #else - cerr << "Flac support not compiled. Please enable flac support." << std::endl; - return 1; - #endif - } - else - { - cerr << options.outputcodec << " not valid as an outputcodec." << endl; - return 1; - } - WebRadioInterface wri(*in, options.web_port, ds, options.rro); wri.serve(); }
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/welle-gui/QML/ExpertView.qml -> welle-io-2.5~20231018.8426077.tar.xz/src/welle-gui/QML/ExpertView.qml
Changed
@@ -23,9 +23,9 @@ * */ -import QtQuick -import QtQuick.Controls -import QtQuick.Layouts +import QtQuick 2.2 +import QtQuick.Controls 2.4 +import QtQuick.Layouts 1.1 // Import custom styles import "texts"
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/welle-gui/QML/GeneralView.qml -> welle-io-2.5~20231018.8426077.tar.xz/src/welle-gui/QML/GeneralView.qml
Changed
@@ -25,7 +25,7 @@ import QtQuick import QtQuick.Layouts -import QtCore +import Qt.labs.settings import "components"
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/welle-gui/QML/MainView.qml -> welle-io-2.5~20231018.8426077.tar.xz/src/welle-gui/QML/MainView.qml
Changed
@@ -29,7 +29,7 @@ import QtQuick.Controls.Universal import QtQuick.Window import Qt5Compat.GraphicalEffects -import QtCore +import Qt.labs.settings import "texts" import "settingpages"
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/welle-gui/QML/MotView.qml -> welle-io-2.5~20231018.8426077.tar.xz/src/welle-gui/QML/MotView.qml
Changed
@@ -26,8 +26,7 @@ import QtQuick import QtQuick.Layouts import QtQuick.Controls -import QtQuick.Dialogs -import QtCore +import Qt.labs.platform import "texts" import "components" @@ -169,7 +168,7 @@ Connections{ target: guiHelper - function onMotChanged(pictureName, categoryTitle, categoryId, slideId) { + function onMotChanged(pictureName) { latestPictureName = pictureName // Display slide show only of latest tab is select
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/welle-gui/QML/components/WSpectrum.qml -> welle-io-2.5~20231018.8426077.tar.xz/src/welle-gui/QML/components/WSpectrum.qml
Changed
@@ -27,7 +27,7 @@ import QtCharts import QtQuick.Layouts import QtQuick.Controls -import QtCore +import Qt.labs.settings import io.welle // Import custom styles
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/welle-gui/QML/expertviews/ImpulseResponseGraph.qml -> welle-io-2.5~20231018.8426077.tar.xz/src/welle-gui/QML/expertviews/ImpulseResponseGraph.qml
Changed
@@ -26,7 +26,7 @@ import QtQuick import QtCharts import QtQuick.Layouts -import QtCore +import Qt.labs.settings // Import custom styles
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/welle-gui/QML/expertviews/NullSymbolGraph.qml -> welle-io-2.5~20231018.8426077.tar.xz/src/welle-gui/QML/expertviews/NullSymbolGraph.qml
Changed
@@ -25,7 +25,7 @@ import QtQuick import QtQuick.Layouts -import QtCore +import Qt.labs.settings // Import custom styles import "../texts"
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/welle-gui/QML/expertviews/SpectrumGraph.qml -> welle-io-2.5~20231018.8426077.tar.xz/src/welle-gui/QML/expertviews/SpectrumGraph.qml
Changed
@@ -26,7 +26,7 @@ import QtQuick import QtQuick.Layouts import QtQuick.Controls -import QtCore +import Qt.labs.settings // Import custom styles import "../texts"
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/welle-gui/QML/settingpages/AirspySettings.qml -> welle-io-2.5~20231018.8426077.tar.xz/src/welle-gui/QML/settingpages/AirspySettings.qml
Changed
@@ -22,11 +22,11 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ - -import QtQuick -import QtQuick.Controls -import QtQuick.Layouts -import QtCore + +import QtQuick 2.6 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.1 +import Qt.labs.settings 1.0 // Import custom styles import "../texts"
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/welle-gui/QML/settingpages/ChannelSettings.qml -> welle-io-2.5~20231018.8426077.tar.xz/src/welle-gui/QML/settingpages/ChannelSettings.qml
Changed
@@ -26,7 +26,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts -import QtCore +import Qt.labs.settings import "../texts" import "../components"
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/welle-gui/QML/settingpages/ExpertSettings.qml -> welle-io-2.5~20231018.8426077.tar.xz/src/welle-gui/QML/settingpages/ExpertSettings.qml
Changed
@@ -26,7 +26,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts -import QtCore +import Qt.labs.settings import "../texts" import "../components"
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/welle-gui/QML/settingpages/GlobalSettings.qml -> welle-io-2.5~20231018.8426077.tar.xz/src/welle-gui/QML/settingpages/GlobalSettings.qml
Changed
@@ -26,7 +26,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts -import QtCore +import Qt.labs.settings // Import custom styles import "../texts"
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/welle-gui/QML/settingpages/RTLSDRSettings.qml -> welle-io-2.5~20231018.8426077.tar.xz/src/welle-gui/QML/settingpages/RTLSDRSettings.qml
Changed
@@ -26,7 +26,7 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts -import QtCore +import Qt.labs.settings // Import custom styles import "../texts"
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/welle-gui/QML/settingpages/RTLTCPSettings.qml -> welle-io-2.5~20231018.8426077.tar.xz/src/welle-gui/QML/settingpages/RTLTCPSettings.qml
Changed
@@ -26,7 +26,7 @@ import QtQuick import QtQuick.Layouts import QtQuick.Controls -import QtCore +import Qt.labs.settings // Import custom styles import "../texts"
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/welle-gui/QML/settingpages/RawFileSettings.qml -> welle-io-2.5~20231018.8426077.tar.xz/src/welle-gui/QML/settingpages/RawFileSettings.qml
Changed
@@ -27,7 +27,7 @@ import QtQuick.Layouts import QtQuick.Controls import QtQuick.Dialogs -import QtCore +import Qt.labs.settings // Import custom styles import "../texts"
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/welle-gui/QML/settingpages/SoapySDRSettings.qml -> welle-io-2.5~20231018.8426077.tar.xz/src/welle-gui/QML/settingpages/SoapySDRSettings.qml
Changed
@@ -26,7 +26,7 @@ import QtQuick import QtQuick.Layouts import QtQuick.Controls -import QtCore +import Qt.labs.settings // Import custom styles import "../texts"
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/welle-gui/main.cpp -> welle-io-2.5~20231018.8426077.tar.xz/src/welle-gui/main.cpp
Changed
@@ -63,7 +63,6 @@ // Create new QT application QApplication app(argc, argv); - qDebug() << "main: Platform name" << app.platformName(); //Initialise translation QTranslator *translator = new QTranslator; @@ -86,7 +85,7 @@ // Handle the command line QCommandLineParser optionParser; - optionParser.setApplicationDescription("welle.io is an open source DAB and DAB+ software defined radio (SDR) with support for rtl-sdr (RTL2832U), airspy and SoapySDR."); + optionParser.setApplicationDescription("welle.io is an open source DAB and DAB+ software defined radio (SDR) with support for rtl-sdr (RTL2832U) and airspy. It supports high DPI and touch displays and it runs even on cheap computers like Raspberry Pi 2/3 and 100€ China Windows 10 tablets."); optionParser.addHelpOption(); optionParser.addVersionOption();
View file
welle-io-2.5~20240904.268a4d2.tar.xz/src/welle-gui/welle-gui.pro -> welle-io-2.5~20231018.8426077.tar.xz/src/welle-gui/welle-gui.pro
Changed
@@ -10,7 +10,7 @@ } DEFINES += CURRENT_VERSION=$$shell_quote(\"$$CUR_VERSION\") -QT += core gui quickcontrols2 qml quick charts multimedia dbus +QT += quickcontrols2 qml quick charts multimedia dbus RC_ICONS = icons/icon.ico RESOURCES += resources.qrc
View file
welle-io-2.5~20231018.8426077.tar.xz/windows
Added
+(directory)
View file
welle-io-2.5~20231018.8426077.tar.xz/windows/create_installer.ps1
Added
@@ -0,0 +1,71 @@ +# Copyright (C) 2017 - 2022 +# Albrecht Lohofener (albrechtloh@gmx.de) +# +# This file is part of the welle.io. +# Many of the ideas as implemented in welle.io are derived from +# other work, made available through the GNU general Public License. +# All copyrights of the original authors are recognized. +# +# welle.io 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. +# +# welle.io 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 welle.io; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +# Parameter +param( +string$welleExePath = "..\..\build-welle.io-Desktop_Qt_6_2_3_MinGW_64_bit-Release\src\welle-gui\release", +string$QTPath = "C:\Qt\6.2.3\mingw_64\bin", +string$ToolsPath = "C:\Qt\Tools\mingw900_64\bin", +string$InnoSetupPath = "C:\Program Files (x86)\Inno Setup 6" +) + +# Get current GIT hash and date +& "git" "-C" "..\" "rev-parse" "--short" "HEAD" | Tee-Object -Variable gitHash | Out-Null +Write-Host "Current GIT hash $gitHash" -ForegroundColor Green + +$Date = Get-Date -Format FileDate +Write-Host "Current date $Date" -ForegroundColor Green + +# Set PATH +$env:path += "$QTPath;$ToolsPath;$InnoSetupPath;" + +# Delete old folder and create a new one +if(Test-Path bin) +{ + Write-Host "*** Delete old bin folder ***" -ForegroundColor Red + Remove-Item -Recurse -Force bin +} + +Write-Host "*** Create new bin folder ***" -ForegroundColor Red +New-Item -ItemType directory -Path bin + +Write-Host "*** Copy non QT DLLs from welle.io-win-libs repository ***" -ForegroundColor Red +Copy-Item ..\..\welle.io-win-libs\x64\*.dll bin -recurse + +Write-Host "*** Copy welle-io binary files ***" -ForegroundColor Red +Copy-Item $welleExePath\welle-io.exe bin + +# Deploy QT and related plugins +Write-Host "*** Deploy QT and related plugins ***" -ForegroundColor Red +& windeployqt bin\welle-io.exe --qmldir ..\src\welle-gui\QML\ --no-translations + +# For some reason windeployqt deploys the wrong DLL on AppVeyor +Copy-Item $QTPath\libgcc_s_seh-1.dll bin +Copy-Item $QTPath\libwinpthread-1.dll bin +Copy-Item $QTPath\libstdc++-6.dll bin + +# Run inno setup.exe +$Filename = $Date + "_" + $gitHash + "_Windows_welle-io-setup_x64" +& "ISCC" "/F$Filename" "installer.iss" + +# Store file name to a environment variable +$env:welle_io_filename = $Filename
View file
welle-io-2.5~20231018.8426077.tar.xz/windows/installer.iss
Added
@@ -0,0 +1,34 @@ +; -- 64Bit.iss -- +; Demonstrates installation of a program built for the x64 (a.k.a. AMD64) +; architecture. +; To successfully run this installation and the program it installs, +; you must have a "x64" edition of Windows. + +; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! + +Setup +AppName=welle.io +AppVersion=2.5-dev +WizardStyle=modern +DefaultDirName={autopf}\welle.io +DefaultGroupName=welle.io +UninstallDisplayIcon={app}\welle-io.exe +Compression=lzma2 +SolidCompression=yes +OutputDir=. +; "ArchitecturesAllowed=x64" specifies that Setup cannot run on +; anything but x64. +ArchitecturesAllowed=x64 +; "ArchitecturesInstallIn64BitMode=x64" requests that the install be +; done in "64-bit mode" on x64, meaning it should use the native +; 64-bit Program Files directory and the 64-bit view of the registry. +ArchitecturesInstallIn64BitMode=x64 +OutputBaseFilename=welle-io_install_x64 +LicenseFile=..\COPYING +SetupIconFile=..\src\welle-gui\icons\icon.ico + +Files +Source: "bin/*"; DestDir: "{app}"; Flags: recursesubdirs + +Icons +Name: "{group}\welle.io"; Filename: "{app}\welle-io.exe"
View file
welle-io-2.5~20240904.268a4d2.tar.xz/.github/pull_request_template.md
Deleted
@@ -1,20 +0,0 @@ -<!-- -Thank you for your interest in contributing to welle.io, it's highly appreciated! - -Please send PRs only against the branch "next". - -Describe your PR further using the template provided below. -The more details the better, but please delete unsed sections! ---> - -#### What does this PR do and why is it necessary? - -#### How was it tested? How can it be tested by the reviewer? - -#### Any background context you want to provide? - -#### What are the relevant tickets if any? - -#### Screenshots (if appropriate) - -#### Further notes
View file
welle-io-2.5~20240904.268a4d2.tar.xz/.github/workflows/raspberrypi.yml
Deleted
@@ -1,49 +0,0 @@ -name: Raspberry Pi build - -on: - push: - branches: - - master - - next - - 'next*' - tags: - - 'v*' - -jobs: - buildx: - name: Build with Buildx - runs-on: ubuntu-22.04 - - steps: - - name: Checkout - uses: actions/checkout@v2 - - - run: git fetch --prune --unshallow --tags - - - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - with: - platforms: arm - - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - with: - platforms: linux/arm/v6 - - - - name: Build - id: build - run: | - mkdir build/ - docker build -f Dockerfile.raspberrypi --platform linux/arm/v6 --target export -t build --output . . - ls -lah - - - name: Archive artifacts (welle.io build dir) - if: always() && steps.build.outcome == 'failure' - uses: actions/upload-artifact@v2 - with: - name: welle.io build dir - path: build/* - if-no-files-found: error
View file
welle-io-2.5~20240904.268a4d2.tar.xz/.github/workflows/windows.yml
Deleted
@@ -1,100 +0,0 @@ -name: Windows build - -on: - push: - branches: - - master - - next - - 'next*' - tags: - - 'v*' - -jobs: - qtbuild: - name: Build with Qt - runs-on: windows-latest - - steps: - - name: Install Qt - uses: jurplel/install-qt-action@v4 - with: - version: '6.7.2' - modules: 'qtcharts qtmultimedia qt5compat qtshadertools' - arch: 'win64_mingw' - tools: 'tools_mingw90' - - name: Checkout - uses: actions/checkout@v4 - - - run: git fetch --prune --unshallow --tags - - - name: Preapre build - run: | - echo "Create a build directory" - md build - cd build - md release - - echo "Get all headers and DLLs for the build" - cd ../.. - git clone https://github.com/AlbrechtL/welle.io-win-libs.git - - - name: Display environment variables - run: | - Get-ChildItem Env: - - - name: Build - id: build - run: | - cd build/release - qmake ../.. - mingw32-make -j4 - - - name: Create installer - id: create_installer - run: | - echo "*** Create new folders ***" - New-Item -ItemType directory -Path installer - New-Item -ItemType directory -Path publish - - echo "*** Copy non QT DLLs from welle.io-win-libs repository ***" - Copy-Item ..\welle.io-win-libs\x64\*.dll installer -recurse # Libs - Copy-Item ..\welle.io-win-libs\x64\*.exe installer -recurse # Microsoft Visual C++ Redistributable - Copy-Item ..\welle.io-win-libs\zadig*.exe installer - - echo "*** Copy welle-io binary files ***" - Copy-Item build\release\src\welle-gui\release\welle-io.exe installer - - # Deploy QT and related plugins - echo "*** Deploy QT and related plugins ***" - & windeployqt installer\welle-io.exe --qmldir src\welle-gui\QML\ --no-translations - - # For some reason windeployqt deploys the wrong DLLs - Copy-Item $Env:QT_ROOT_DIR\bin\libgcc_s_seh-1.dll installer - Copy-Item $Env:QT_ROOT_DIR\bin\libwinpthread-1.dll installer - Copy-Item $Env:QT_ROOT_DIR\bin\libstdc++-6.dll installer - - echo ""*** Create filename "***" - $current_date=$(Get-Date -Format 'yyyyMMdd') - $git_hash=$(git -C . rev-parse --short HEAD) - $Filename = $current_date + "_" + $git_hash + "_Windows_welle-io-setup_x64" - - echo ""*** Run InnoSetup "***" - & ISCC /Opublish\ /F$Filename /DGitHash=$git_hash windows_installer.iss - - - name: Archive artifacts (welle.io Windows installer) - if: always() && steps.create_installer.outcome == 'success' - uses: actions/upload-artifact@v4 - with: - name: welle.io Windows installer - path: publish\*.exe - if-no-files-found: error - - - name: Upload to nightly server - if: always() && steps.create_installer.outcome == 'success' - uses: dennisameling/ftp-upload-action@v1 - with: - server: a2f24.netcup.net # welle-io-nightlies.albrechtloh.de is redirected to here - secure: true - username: ${{ secrets.SFTP_USER }} - password: ${{ secrets.SFTP_PASSWORD }} - local_dir: publish/ \ No newline at end of file
View file
welle-io-2.5~20240904.268a4d2.tar.xz/Dockerfile.raspberrypi
Deleted
@@ -1,18 +0,0 @@ -# welle-cli Dockerfile for Raspberry Pi - -FROM tianon/raspbian:buster-slim AS build -RUN apt-get update && apt-get install -y build-essential cmake git qt5-default qtquickcontrols2-5-dev qtdeclarative5-dev \ - qtmultimedia5-dev libqt5charts5-dev libmp3lame-dev libfftw3-dev \ - libmpg123-dev libsoapysdr-dev librtlsdr-dev libairspy-dev \ - libasound2-dev libfaad-dev -RUN apt-get install -y qml-module-qtquick-controls qml-module-qtquick-controls2 qml-module-qtquick-dialogs -WORKDIR /src -RUN git clone https://github.com/AlbrechtL/welle.io.git -RUN cd welle.io && \ - mkdir build/ && \ - cd build && \ - cmake .. -DRTLSDR=1 -DAIRSPY=1 -DSOAPYSDR=1 && \ - make -j4 - -FROM scratch AS export -COPY --from=build /src/welle.io/build ./build
View file
welle-io-2.5~20240904.268a4d2.tar.xz/cmake/Modules/FindFLACPP.cmake
Deleted
@@ -1,17 +0,0 @@ -# - Find libFLAC++ -# -# This module defines -# FLACPP_FOUND - True if libFLAC++ has been found. -# FLACPP_LIBRARIES - List of libraries when using libFLAC++. -# FLACPP_INCLUDE_DIRS - libFLAC++ include directories. - -# Look for the header file. -find_path(FLACPP_INCLUDE_DIRS - NAMES FLAC++/all.h FLAC++/decoder.h FLAC++/encoder.h FLAC++/export.h FLAC++/metadata.h) - -# Find the library. -find_library(FLACPP_LIBRARIES - NAMES FLAC++) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(FLACPP DEFAULT_MSG FLACPP_LIBRARIES FLACPP_INCLUDE_DIRS)
View file
welle-io-2.5~20240904.268a4d2.tar.xz/windows_installer.iss
Deleted
@@ -1,41 +0,0 @@ -; -- 64Bit.iss -- -; Demonstrates installation of a program built for the x64 (a.k.a. AMD64) -; architecture. -; To successfully run this installation and the program it installs, -; you must have a "x64" edition of Windows. - -; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! - -; #define GitHash "unkonwn_git_hash" ; uncomment for debugging - -Setup -AppName=welle.io -AppVersion=2.5-unstable-{#GitHash} -WizardStyle=modern -DefaultDirName={autopf}\welle.io -DefaultGroupName=welle.io -UninstallDisplayIcon={app}\welle-io.exe -Compression=lzma2 -SolidCompression=yes -OutputDir=. -; "ArchitecturesAllowed=x64compatible" specifies that Setup cannot run -; on anything but x64 and Windows 11 on Arm. -ArchitecturesAllowed=x64compatible -; "ArchitecturesInstallIn64BitMode=x64compatible" requests that the -; install be done in "64-bit mode" on x64 or Windows 11 on Arm, -; meaning it should use the native 64-bit Program Files directory and -; the 64-bit view of the registry. -ArchitecturesInstallIn64BitMode=x64compatible -OutputBaseFilename=welle-io_install_x64 -LicenseFile=COPYING -SetupIconFile=src\welle-gui\icons\icon.ico - -Files -Source: "installer/*"; DestDir: "{app}"; Flags: recursesubdirs ignoreversion - -Icons -Name: "{group}\welle.io"; Filename: "{app}\welle-io.exe" - -Run -Filename: {app}\vcredist_x64_2010.exe; Parameters: "/quiet /norestart"; StatusMsg: "Installing VC++ 2010 Redistributables..." -Filename: "{app}\welle-io.exe"; Description: "Start welle.io after finishing installation."; Flags: nowait postinstall skipifsilent
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.