diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..dea5239 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,59 @@ +name: Build + +on: + push: + branches: [master] + pull_request: + workflow_dispatch: + +jobs: + publish: + name: ${{ matrix.rid }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + # NativeAOT cannot cross-compile between operating systems, so each OS builds its own RIDs + - os: windows-latest + rid: win-x64 + smoke: false + - os: windows-latest + rid: win-arm64 + smoke: false + - os: macos-latest + rid: osx-arm64 + smoke: true + - os: macos-latest + rid: osx-x64 + smoke: false # Apple Silicon runner can't execute x64 AOT output without Rosetta + - os: ubuntu-latest + rid: linux-x64 + smoke: true + - os: ubuntu-24.04-arm + rid: linux-arm64 + smoke: true + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-dotnet@v4 + with: + dotnet-version: 10.0.x + + - name: Publish (NativeAOT) + run: dotnet publish WaveBox.Server -c Release -r ${{ matrix.rid }} + + - name: Smoke test + if: matrix.smoke + shell: bash + run: Scripts/smoke-test.sh WaveBox.Server/bin/Release/net10.0/${{ matrix.rid }}/publish/WaveBox.Server + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: WaveBox-${{ matrix.rid }} + path: | + WaveBox.Server/bin/Release/net10.0/${{ matrix.rid }}/publish/ + !WaveBox.Server/bin/Release/net10.0/${{ matrix.rid }}/publish/*.dSYM + !WaveBox.Server/bin/Release/net10.0/${{ matrix.rid }}/publish/*.pdb diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..5f46ae2 --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,10 @@ + + + net10.0 + latest + disable + disable + latest-minimum + en + + diff --git a/Scripts/ImageMagick/gnu_cpp_64bit_fpic_libs.tar.gz b/Scripts/ImageMagick/gnu_cpp_64bit_fpic_libs.tar.gz deleted file mode 100644 index 791e71e..0000000 Binary files a/Scripts/ImageMagick/gnu_cpp_64bit_fpic_libs.tar.gz and /dev/null differ diff --git a/Scripts/ImageMagick/imagemagick_build_script_linux_x64 b/Scripts/ImageMagick/imagemagick_build_script_linux_x64 deleted file mode 100755 index 5a33ee1..0000000 --- a/Scripts/ImageMagick/imagemagick_build_script_linux_x64 +++ /dev/null @@ -1,87 +0,0 @@ -#!/bin/bash - -# Defines -BUILD_DIR=~/ImageMagickBuild -VERSION=6.8.5-5 -MAGICK_DIR=$BUILD_DIR/ImageMagick-$VERSION - -# Functions - -download() -{ - wget http://www.imagemagick.org/download/ImageMagick.tar.gz - wget http://www.imagemagick.org/download/delegates/jpegsrc.v9.tar.gz - wget http://www.imagemagick.org/download/delegates/libpng-1.6.2.tar.gz - wget http://www.imagemagick.org/download/delegates/tiff-4.0.3.tar.gz - wget http://zlib.net/zlib-1.2.8.tar.gz -} - -extract() -{ - tar xzvf ImageMagick.tar.gz - tar xzvf jpegsrc.v9.tar.gz - tar xzvf libpng-1.6.2.tar.gz - tar xzvf tiff-4.0.3.tar.gz - tar xzvf zlib-1.2.8.tar.gz -} - -move() -{ - mv jpeg-9 $MAGICK_DIR/jpeg - mv libpng-1.6.2 $MAGICK_DIR/png - mv tiff-4.0.3 $MAGICK_DIR/tiff - mv zlib-1.2.8 $MAGICK_DIR/zlib -} - -compile() -{ - cd $MAGICK_DIR/zlib && env CFLAGS="-m64 -fPIC" ./configure --static && make clean && make - cd $MAGICK_DIR/jpeg && env CFLAGS="-m64 -fPIC" ./configure --disable-shared && make clean && make - cd $MAGICK_DIR/png && env CFLAGS="-m64 -fPIC" CPPFLAGS="-I../zlib -m64 -fPIC" CXXFLAGS="-fPIC" LDFLAGS="-L../zlib -m64 -fPIC" ./configure --disable-shared && make clean && make - cd $MAGICK_DIR/tiff && env CFLAGS="-m64 -fPIC" CPPFLAGS="-m64 -fPIC" CXXFLAGS="-fPIC" ./configure --disable-shared --disable-lzma && make clean && make - cd $MAGICK_DIR && ./configure --disable-installed --disable-shared --enable-delegate-build --prefix=/ImageMagick-$VERSION --disable-dependency-tracking --with-x=no --without-perl --with-freetype=no --with-jp2=no --with-tiff=yes --with-magick-plus-plus=no --with-bzlib=no --without-lzma --without-fontconfig --without-lcms --without-lcms2 --without-x11 --without-xml --without-pango --disable-opencl CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 -m64 -fPIC" CPPFLAGS="-m64 -fPIC" CXXFLAGS="-fPIC" LDFLAGS="-m64 -fPIC" && make clean && make - -} - -create_shared() -{ - mkdir $BUILD_DIR/sharedbuild - cd $BUILD_DIR/sharedbuild - cp $MAGICK_DIR/magick/.libs/libMagickCore-6.Q16.a $MAGICK_DIR/wand/.libs/libMagickWand-6.Q16.a $MAGICK_DIR/jpeg/.libs/libjpeg.a $MAGICK_DIR/png/.libs/libpng16.a $MAGICK_DIR/tiff/libtiff/.libs/libtiff.a $MAGICK_DIR/tiff/libtiff/.libs/libtiffxx.a $MAGICK_DIR/zlib/libz.a . - - # Download the 64bit gnu c++ libs compiled with -fPIC - wget https://dl.dropboxusercontent.com/u/40866/gnu_cpp_64bit_fpic_libs.tar.gz - tar xzvf gnu_cpp_64bit_fpic_libs.tar.gz - - ar -x libMagickCore-6.Q16.a - ar -x libMagickWand-6.Q16.a - ar -x libjpeg.a - ar -x libpng16.a - ar -x libtiff.a - ar -x libtiffxx.a - ar -x libz.a - ar -x libstdc++.a - ar -x libgcc.a - ar -x libgomp.a - g++ -m64 -shared *.o -o libMagickWand-6.Q16-Static.x64.so - mv libMagickWand-6.Q16-Static.x64.so $BUILD_DIR/ -} - -# Create the build directory -mkdir $BUILD_DIR -cd $BUILD_DIR - -# Download ImageMagick and depedencies -download - -# Untar everything -extract - -# Move the libs into the ImageMagick directory -move - -# Compile everything -compile - -# Create the shared library from the static libs -create_shared diff --git a/Scripts/ImageMagick/imagemagick_build_script_linux_x86 b/Scripts/ImageMagick/imagemagick_build_script_linux_x86 deleted file mode 100755 index e65cc31..0000000 --- a/Scripts/ImageMagick/imagemagick_build_script_linux_x86 +++ /dev/null @@ -1,81 +0,0 @@ -#!/bin/bash - -# Defines -BUILD_DIR=~/ImageMagickBuild -VERSION=6.8.5-5 -MAGICK_DIR=$BUILD_DIR/ImageMagick-$VERSION - -# Functions - -download() -{ - wget http://www.imagemagick.org/download/ImageMagick.tar.gz - wget http://www.imagemagick.org/download/delegates/jpegsrc.v9.tar.gz - wget http://www.imagemagick.org/download/delegates/libpng-1.6.2.tar.gz - wget http://www.imagemagick.org/download/delegates/tiff-4.0.3.tar.gz - wget http://zlib.net/zlib-1.2.8.tar.gz -} - -extract() -{ - tar xzvf ImageMagick.tar.gz - tar xzvf jpegsrc.v9.tar.gz - tar xzvf libpng-1.6.2.tar.gz - tar xzvf tiff-4.0.3.tar.gz - tar xzvf zlib-1.2.8.tar.gz -} - -move() -{ - mv jpeg-9 $MAGICK_DIR/jpeg - mv libpng-1.6.2 $MAGICK_DIR/png - mv tiff-4.0.3 $MAGICK_DIR/tiff - mv zlib-1.2.8 $MAGICK_DIR/zlib -} - -compile() -{ - cd $MAGICK_DIR/zlib && env CFLAGS="-m32" ./configure --static && make clean && make - cd $MAGICK_DIR/jpeg && env CFLAGS="-m32" ./configure --disable-shared && make clean && make - cd $MAGICK_DIR/png && env CFLAGS="-m32" CPPFLAGS="-I../zlib -m32" LDFLAGS="-L../zlib -m32" ./configure --disable-shared && make clean && make - cd $MAGICK_DIR/tiff && env CFLAGS="-m32" CPPFLAGS="-m32" ./configure --disable-shared --disable-lzma && make clean && make - cd $MAGICK_DIR && ./configure --disable-installed --disable-shared --enable-delegate-build --prefix=/ImageMagick-$VERSION --disable-dependency-tracking --with-x=no --without-perl --with-freetype=no --with-jp2=no --with-tiff=yes --with-magick-plus-plus=no --with-bzlib=no --without-lzma --without-fontconfig --without-lcms --without-lcms2 --without-x11 --without-xml --without-pango --disable-opencl CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 -m32" CPPFLAGS="-m32" LDFLAGS="-m32" && make clean && make -} - -create_shared() -{ - mkdir $BUILD_DIR/sharedbuild - cd $BUILD_DIR/sharedbuild - cp $MAGICK_DIR/magick/.libs/libMagickCore-6.Q16.a $MAGICK_DIR/wand/.libs/libMagickWand-6.Q16.a $MAGICK_DIR/jpeg/.libs/libjpeg.a $MAGICK_DIR/png/.libs/libpng16.a $MAGICK_DIR/tiff/libtiff/.libs/libtiff.a $MAGICK_DIR/tiff/libtiff/.libs/libtiffxx.a $MAGICK_DIR/zlib/libz.a . - ar -x libMagickCore-6.Q16.a - ar -x libMagickWand-6.Q16.a - ar -x libjpeg.a - ar -x libpng16.a - ar -x libtiff.a - ar -x libtiffxx.a - ar -x libz.a - g++ -m32 -shared -static-libgcc -static-libstdc++ *.o -o libMagickWand-6.Q16-Static.x86.so - mv libMagickWand-6.Q16-Static.x86.so $BUILD_DIR/ -} - -# Install the 32bit libraries -sudo apt-get install gcc-multilib g++-multilib libc6:i386 libc6-dev:i386 - -# Create the build directory -mkdir $BUILD_DIR -cd $BUILD_DIR - -# Download ImageMagick and depedencies -download - -# Untar everything -extract - -# Move the libs into the ImageMagick directory -move - -# Compile everything -compile - -# Create the shared library from the static libs -create_shared diff --git a/Scripts/ImageMagick/imagemagick_build_script_osx_universal b/Scripts/ImageMagick/imagemagick_build_script_osx_universal deleted file mode 100755 index a5782b4..0000000 --- a/Scripts/ImageMagick/imagemagick_build_script_osx_universal +++ /dev/null @@ -1,90 +0,0 @@ -#!/bin/bash - -# Defines -BUILD_DIR=~/ImageMagickBuild -VERSION=6.8.5-5 -MAGICK_DIR=$BUILD_DIR/ImageMagick-$VERSION - -# Functions - -download() -{ - wget http://www.imagemagick.org/download/ImageMagick.tar.gz - wget http://www.imagemagick.org/download/delegates/jpegsrc.v9.tar.gz - wget http://www.imagemagick.org/download/delegates/libpng-1.6.2.tar.gz - wget http://www.imagemagick.org/download/delegates/tiff-4.0.3.tar.gz - wget http://zlib.net/zlib-1.2.8.tar.gz -} - -extract() -{ - tar xzvf ImageMagick.tar.gz - tar xzvf jpegsrc.v9.tar.gz - tar xzvf libpng-1.6.2.tar.gz - tar xzvf tiff-4.0.3.tar.gz - tar xzvf zlib-1.2.8.tar.gz -} - -move() -{ - mv jpeg-9 $MAGICK_DIR/jpeg - mv libpng-1.6.2 $MAGICK_DIR/png - mv tiff-4.0.3 $MAGICK_DIR/tiff - mv zlib-1.2.8 $MAGICK_DIR/zlib -} - -compile() -{ - cd $MAGICK_DIR/zlib && env CFLAGS="-m$1" ./configure --static && make clean && make - cd $MAGICK_DIR/jpeg && env CFLAGS="-m$1" ./configure --disable-shared && make clean && make - cd $MAGICK_DIR/png && env CFLAGS="-m$1" CPPFLAGS="-I../zlib -m$1" LDFLAGS="-L../zlib -m$1" ./configure --disable-shared && make clean && make - cd $MAGICK_DIR/tiff && env CFLAGS="-m$1" CPPFLAGS="-m$1" ./configure --disable-shared --disable-lzma && make clean && make - cd $MAGICK_DIR && ./configure --disable-installed --disable-shared --enable-delegate-build --prefix=/ImageMagick-$VERSION --disable-dependency-tracking --with-x=no --without-perl --with-freetype=no --with-jp2=no --with-tiff=yes --with-magick-plus-plus=no --with-bzlib=no --without-lzma --without-fontconfig --without-lcms --without-lcms2 --without-x11 --without-xml --without-pango --disable-opencl --disable-openmp CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 -m$1" CPPFLAGS="-m$1" LDFLAGS="-m$1" && make clean && make -} - -create_dylib() -{ - mkdir $BUILD_DIR/sharedbuild - rm -rf $BUILD_DIR/sharedbuild/* - cd $BUILD_DIR/sharedbuild - cp $MAGICK_DIR/magick/.libs/libMagickCore-6.Q16.a $MAGICK_DIR/wand/.libs/libMagickWand-6.Q16.a $MAGICK_DIR/jpeg/.libs/libjpeg.a $MAGICK_DIR/png/.libs/libpng16.a $MAGICK_DIR/tiff/libtiff/.libs/libtiff.a $MAGICK_DIR/tiff/libtiff/.libs/libtiffxx.a $MAGICK_DIR/zlib/libz.a . - ar -x libMagickCore-6.Q16.a - ar -x libMagickWand-6.Q16.a - ar -x libjpeg.a - ar -x libpng16.a - ar -x libtiff.a - ar -x libtiffxx.a - ar -x libz.a - gcc -m$1 -shared -lstdc++ *.o -o libMagickWand-6.Q16-Static.$1.dylib - mv libMagickWand-6.Q16-Static.$1.dylib $BUILD_DIR/ -} - -# Create the build directory -mkdir $BUILD_DIR -cd $BUILD_DIR - -# Download ImageMagick and depedencies -download - -# Untar everything -extract - -# Move the libs into the ImageMagick directory -move - -# Compile everything for i386 -compile "32" - -# Create the i386 shared library from the static libs -create_dylib "32" - -# Compile everything for x86_64 -compile "64" - -# Create the x86_64 shared library from the static libs -create_dylib "64" - -# Combine both into a single dylib -cd $BUILD_DIR -lipo -create libMagickWand-6.Q16-Static.32.dylib libMagickWand-6.Q16-Static.64.dylib -output libMagickWand-6.Q16-Static.universal.dylib - diff --git a/Scripts/mkbundle/linux_32_mkbundle_build_script b/Scripts/mkbundle/linux_32_mkbundle_build_script deleted file mode 100755 index 32968d3..0000000 --- a/Scripts/mkbundle/linux_32_mkbundle_build_script +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh - -# Cleanup -echo "Cleaning up old files\n" -rm -f WaveBoxBinary WaveBoxLauncher WaveBox_Linux_32bit* - -# Use 32bit building -#export AS="as -arch i386" -#export CC="cc -arch i386" - -# Create the binary -echo "Building the binary\n" -mkbundle --static --deps -o WaveBoxBinary WaveBox.exe Bass.Net.dll Cirrious.MvvmCross.Plugins.Sqlite.dll Cirrious.MvvmCross.dll Microsoft.AspNet.SignalR.Core.dll Microsoft.AspNet.SignalR.Owin.dll Microsoft.Owin.Diagnostics.dll Microsoft.Owin.Host.HttpListener.dll Microsoft.Owin.Hosting.dll Mono.Nat.dll Mono.Zeroconf.dll Newtonsoft.Json.dll Ninject.dll Owin.dll System.Data.SQLite.dll WaveBox.Core.dll log4net.dll taglib-sharp.dll - -# Create the launcher -echo '#!/bin/bash -cd "${0%/*}" -BINARY=WaveBoxBinary -if ps aux | grep -v grep | grep $BINARY > /dev/null -then - killall $BINARY - echo "WaveBox Stopped" -else - MONO_ZEROCONF_PROVIDERS=. nohup ./$BINARY & - echo "WaveBox Started" -fi' > WaveBoxLauncher -chmod a+x WaveBoxLauncher - -# Create an archive -rm lib_native/*.dll -rm lib_native/*.dylib -rm lib_native/*.x64.so -tar czvf WaveBox_Linux_32bit_`date +%s`.tgz WaveBoxBinary WaveBoxLauncher Mono.Zeroconf.Providers.AvahiDBus.dll lib_native html -C /usr/lib/ libMonoPosixHelper.so -echo "DONE :)" diff --git a/Scripts/mkbundle/linux_64_mkbundle_build_script b/Scripts/mkbundle/linux_64_mkbundle_build_script deleted file mode 100755 index 02bb364..0000000 --- a/Scripts/mkbundle/linux_64_mkbundle_build_script +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh - -# Cleanup -echo "Cleaning up old files\n" -rm -f WaveBoxBinary WaveBoxLauncher WaveBox_Linux_32bit* - -# Use 32bit building -#export AS="as -arch i386" -#export CC="cc -arch i386" - -# Create the binary -echo "Building the binary\n" -mkbundle --static --deps -o WaveBoxBinary WaveBox.exe Bass.Net.dll Cirrious.MvvmCross.Plugins.Sqlite.dll Cirrious.MvvmCross.dll Microsoft.AspNet.SignalR.Core.dll Microsoft.AspNet.SignalR.Owin.dll Microsoft.Owin.Diagnostics.dll Microsoft.Owin.Host.HttpListener.dll Microsoft.Owin.Hosting.dll Mono.Nat.dll Mono.Zeroconf.dll Newtonsoft.Json.dll Ninject.dll Owin.dll System.Data.SQLite.dll WaveBox.Core.Model.dll WaveBox.Core.dll log4net.dll taglib-sharp.dll - -# Create the launcher -echo '#!/bin/bash -cd "${0%/*}" -BINARY=WaveBoxBinary -if ps aux | grep -v grep | grep $BINARY > /dev/null -then - killall $BINARY - echo "WaveBox Stopped" -else - MONO_ZEROCONF_PROVIDERS=. nohup ./$BINARY & - echo "WaveBox Started" -fi' > WaveBoxLauncher -chmod a+x WaveBoxLauncher - -# Create an archive -rm lib_native/*.dll -rm lib_native/*.dylib -rm lib_native/*.x64.so -tar czvf WaveBox_Linux_32bit_`date +%s`.tgz WaveBoxBinary WaveBoxLauncher Mono.Zeroconf.Providers.AvahiDBus.dll lib_native html -C /usr/lib/ libMonoPosixHelper.so -echo "DONE :)" diff --git a/Scripts/mkbundle/linux_mkbundle_build_script b/Scripts/mkbundle/linux_mkbundle_build_script deleted file mode 100755 index d56c6c2..0000000 --- a/Scripts/mkbundle/linux_mkbundle_build_script +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh - -# Cleanup -echo "Cleaning up old files\n" -rm -f WaveBoxBinary WaveBoxLauncher WaveBox_Linux_32bit.tgz - -# Use 32bit building -#export AS="as -arch i386" -#export CC="cc -arch i386" - -# Create the binary -echo "Building the binary\n" -mkbundle --static --deps -o WaveBoxBinary WaveBox.exe Newtonsoft.Json.dll taglib-sharp.dll Bass.Net.dll Mono.Zeroconf.dll System.Data.SQLite.dll - -# Create the launcher -echo '#!/bin/bash -cd "${0%/*}" -BINARY=WaveBoxBinary -if ps aux | grep -v grep | grep $BINARY > /dev/null -then - killall $BINARY - echo "WaveBox Stopped" -else - MONO_ZEROCONF_PROVIDERS=. nohup ./$BINARY & - echo "WaveBox Started" -fi' > WaveBoxLauncher -chmod a+x WaveBoxLauncher - -# Create an archive -tar czvf WaveBox_Linux_32bit.tgz WaveBoxBinary WaveBoxLauncher wavebox.conf ffmpeg libsqlite3.so.0 libbass.so Mono.Zeroconf.Providers.AvahiDBus.dll -C /usr/lib/ libMonoPosixHelper.so -C ../../ html -echo "DONE :)" diff --git a/Scripts/mkbundle/linux_nomkbundle_zip_script b/Scripts/mkbundle/linux_nomkbundle_zip_script deleted file mode 100755 index 0010379..0000000 --- a/Scripts/mkbundle/linux_nomkbundle_zip_script +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/sh - -# Cleanup -rm WaveBox_Linux_* WaveBoxLauncher - -# Create the launcher -echo '#!/bin/bash -cd "${0%/*}" -BINARY=WaveBox.exe -if ps aux | grep -v grep | grep $BINARY > /dev/null -then - output=`ps aux | grep -v grep | grep $BINARY` - set -- $output - pid=$2 - kill $pid - sleep 5 - kill -9 $pid >/dev/null 2>&1 - echo "WaveBox Stopped" -else - MONO_ZEROCONF_PROVIDERS=. nohup mono --debug $BINARY & - echo "WaveBox Started" -fi' > WaveBoxLauncher -chmod a+x WaveBoxLauncher - -# Create an archive for 32bit -mv lib_native lib_native.bak -mkdir lib_native -cp lib_native.bak/*.x86.so lib_native -tar czvf WaveBox_Linux_32bit_`date +%s`.tgz *.config WaveBoxLauncher WaveBox.exe Bass.Net.dll Cirrious.MvvmCross.Plugins.Sqlite.dll Cirrious.MvvmCross.dll Microsoft.AspNet.SignalR.Core.dll Microsoft.AspNet.SignalR.Owin.dll Microsoft.Owin.Diagnostics.dll Microsoft.Owin.Host.HttpListener.dll Microsoft.Owin.Hosting.dll Mono.Nat.dll Mono.Zeroconf.dll Newtonsoft.Json.dll Ninject.dll Owin.dll System.Data.SQLite.dll WaveBox.Core.dll log4net.dll taglib-sharp.dll Mono.Zeroconf.Providers.AvahiDBus.dll lib_native html -rm -r lib_native -mv lib_native.bak lib_native -echo "32bit done" - -# Create an archive for 32bit -mv lib_native lib_native.bak -mkdir lib_native -cp lib_native.bak/*.x64.so lib_native -tar czvf WaveBox_Linux_64bit_`date +%s`.tgz *.config WaveBoxLauncher WaveBox.exe Bass.Net.dll Cirrious.MvvmCross.Plugins.Sqlite.dll Cirrious.MvvmCross.dll Microsoft.AspNet.SignalR.Core.dll Microsoft.AspNet.SignalR.Owin.dll Microsoft.Owin.Diagnostics.dll Microsoft.Owin.Host.HttpListener.dll Microsoft.Owin.Hosting.dll Mono.Nat.dll Mono.Zeroconf.dll Newtonsoft.Json.dll Ninject.dll Owin.dll System.Data.SQLite.dll WaveBox.Core.dll log4net.dll taglib-sharp.dll Mono.Zeroconf.Providers.AvahiDBus.dll lib_native html -rm -r lib_native -mv lib_native.bak lib_native -echo "64bit done" - -echo "DONE :)" diff --git a/Scripts/mkbundle/osx_mkbundle_build_script b/Scripts/mkbundle/osx_mkbundle_build_script deleted file mode 100755 index 21e285c..0000000 --- a/Scripts/mkbundle/osx_mkbundle_build_script +++ /dev/null @@ -1,81 +0,0 @@ -#!/bin/sh - -# -# Download terminal-notifier from here: https://github.com/alloy/terminal-notifier/downloads -# - -# -# First, edit /Library/Frameworks/Mono.framework/Versions/Current/lib/pkgconfig/mono-2.pc to match the following -# -#Libs: -L${libdir} -lmono-2.0 -pthread -lpthread -liconv -#Cflags: -I${includedir} -D_THREAD_SAFE -framework CoreFoundation -arch i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk -mmacosx-version-min=10.5 -# -# If on OS X 10.6, use this for the sysroot instead: /Developer/SDKs/MacOSX10.6.sdk -# -# - -echo "If the build fails, check the script comments and make sure you edited the mono-2.pc file as directed\n" - -# Cleanup -echo "Cleaning up old files\n" -rm -rf WaveBox_OSX_32bit* WaveBoxBinary WaveBoxLauncher WaveBox.app - -# Enable 32bit building, or it will default to 64bit and fail to link -export AS="as -arch i386" -export CC="cc -arch i386" - -# Make sure we're using the correct pkgconfig binary -export PATH=/Library/Frameworks/Mono.framework/Commands/:$PATH - -# Create the binary -echo "Building the binary\n" -#env PKG_CONFIG_PATH=/Library/Frameworks/Mono.framework/Versions/Current/lib/pkgconfig mkbundle -o WaveBoxBinary WaveBox.exe -env PKG_CONFIG_PATH=/Library/Frameworks/Mono.framework/Versions/Current/lib/pkgconfig mkbundle --static --deps -o WaveBoxBinary WaveBox.exe Bass.Net.dll Cirrious.MvvmCross.Plugins.Sqlite.dll Cirrious.MvvmCross.dll Microsoft.AspNet.SignalR.Core.dll Microsoft.AspNet.SignalR.Owin.dll Microsoft.Owin.Diagnostics.dll Microsoft.Owin.Host.HttpListener.dll Microsoft.Owin.Hosting.dll Mono.Nat.dll Mono.Zeroconf.dll Newtonsoft.Json.dll Ninject.dll Owin.dll System.Data.SQLite.dll WaveBox.Core.Model.dll WaveBox.Core.dll log4net.dll taglib-sharp.dll - -# Create the launcher -echo '#!/bin/bash -cd "${0%/*}" -BINARY=WaveBoxBinary -if ps aux | grep -v grep | grep $BINARY > /dev/null -then - killall $BINARY - ./terminal-notifier.app/Contents/MacOS/terminal-notifier -message "WaveBox Stopped" -else - DYLD_FALLBACK_LIBRARY_PATH=. MONO_ZEROCONF_PROVIDERS=. nohup ./$BINARY & - ./terminal-notifier.app/Contents/MacOS/terminal-notifier -message "WaveBox Started" -fi' > WaveBoxLauncher -chmod a+x WaveBoxLauncher - -# Create the app bundle directories -echo "Creating the app bundle\n" -mkdir -p WaveBox.app/Contents/MacOS WaveBox.app/Contents/Resources - -# Create the app bundle plist -echo ' - - - CFBundleGetInfoString - WaveBox - CFBundleExecutable - WaveBoxLauncher - CFBundleIdentifier - com.wavebox.wavebox - CFBundleName - WaveBox - CFBundleIconFile - Icon - CFBundleShortVersionString - 1.0 - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - APPL - -' > WaveBox.app/Contents/Info.plist - -# Copy the files into the bundle -cp -r WaveBoxBinary WaveBoxLauncher terminal-notifier.app res WaveBox.exe html ffmpeg Mono.Zeroconf.Providers.Bonjour.dll *.config /Library/Frameworks/Mono.framework/Versions/Current/lib/libMonoPosixHelper.dylib WaveBox.app/Contents/MacOS/ -mkdir WaveBox.app/Contents/MacOS/lib_native -cp lib_native/*.dylib WaveBox.app/Contents/MacOS/lib_native/ -rm WaveBoxLauncher -zip -r WaveBox_OSX_32bit_`date +%s`.zip WaveBox.app diff --git a/Scripts/mkbundle/windows_mkbundle_build_script b/Scripts/mkbundle/windows_mkbundle_build_script deleted file mode 100755 index af3407d..0000000 --- a/Scripts/mkbundle/windows_mkbundle_build_script +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -echo "Build info found here: http://blog.shilbert.com/2012/06/using-mono-to-avoid-depending-on-net-framework/" -echo "Make sure to install the required cygwin packages and the Mono framework" -# Cleanup -echo "Cleaning up old files\n" -rm -rf WaveBox_Windows_32bit.zip WaveBoxService.exe WaveBoxBinary WaveBoxLauncher WaveBox.app -# First set some environment variables so everything works -export MONO=/cygdrive/c/progra~2/Mono-2.10.9 -export PATH=$PATH:$MONO/bin -export PKG_CONFIG_PATH=$MONO/lib/pkgconfig -export CC="i686-pc-mingw32-gcc -U _WIN32" -# Create the binary -echo "Building the binary\n" -mkbundle --deps -o WaveBoxService.exe WaveBox.exe Bass.Net.dll Cirrious.MvvmCross.Plugins.Sqlite.dll Cirrious.MvvmCross.dll Microsoft.AspNet.SignalR.Core.dll Microsoft.AspNet.SignalR.Owin.dll Microsoft.Owin.Diagnostics.dll Microsoft.Owin.Host.HttpListener.dll Microsoft.Owin.Hosting.dll Mono.Nat.dll Mono.Zeroconf.dll Newtonsoft.Json.dll Ninject.dll Owin.dll System.Data.SQLite.dll WaveBox.Core.Model.dll WaveBox.Core.dll log4net.dll taglib-sharp.dll -cp /cygdrive/c/progra~2/Mono-2.10.9/bin/mono-2.0.dll . diff --git a/Scripts/mkbundle/windows_nomkbundle_build_script b/Scripts/mkbundle/windows_nomkbundle_build_script deleted file mode 100755 index 78f444f..0000000 --- a/Scripts/mkbundle/windows_nomkbundle_build_script +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -rm -rf WaveBox_Windows_32bit* - -# Zip the files -mv lib_native lib_native.bak -mkdir lib_native -cp lib_native.bak/*.dll lib_native/ -zip -r WaveBox_Windows_32bit_`date +%s`.zip lib_native res WaveBox.exe html ffmpeg.exe Bass.Net.dll Cirrious.MvvmCross.Plugins.Sqlite.dll Cirrious.MvvmCross.dll Microsoft.AspNet.SignalR.Core.dll Microsoft.AspNet.SignalR.Owin.dll Microsoft.Owin.Diagnostics.dll Microsoft.Owin.Host.HttpListener.dll Microsoft.Owin.Hosting.dll Mono.Nat.dll Mono.Zeroconf.dll Newtonsoft.Json.dll Ninject.dll Owin.dll System.Data.SQLite.dll WaveBox.Core.Model.dll WaveBox.Core.dll log4net.dll taglib-sharp.dll Mono.Zeroconf.Providers.Bonjour.dll *.config -rm -r lib_native -mv lib_native.bak lib_native diff --git a/Scripts/smoke-test.sh b/Scripts/smoke-test.sh new file mode 100755 index 0000000..60d15e1 --- /dev/null +++ b/Scripts/smoke-test.sh @@ -0,0 +1,130 @@ +#!/usr/bin/env bash +# WaveBox end-to-end smoke test. +# +# Usage: +# Scripts/smoke-test.sh +# Scripts/smoke-test.sh --dotnet # run via `dotnet run` from source instead +# +# Starts the server against an isolated data directory, then verifies: +# login, status, media scan of a generated MP3 fixture, songs listing, and a range request. +set -uo pipefail + +REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)" +WORK="$(mktemp -d)" +PORT=6500 +FAILURES=0 +SERVER_PID="" + +cleanup() { + if [ -n "$SERVER_PID" ]; then + kill "$SERVER_PID" 2>/dev/null + wait "$SERVER_PID" 2>/dev/null + fi + rm -rf "$WORK" +} +trap cleanup EXIT + +check() { + local name="$1" ok="$2" detail="${3:-}" + if [ "$ok" = "0" ]; then + echo "PASS: $name" + else + echo "FAIL: $name $detail" + FAILURES=$((FAILURES + 1)) + fi +} + +# Generate media fixture +mkdir -p "$WORK/media" +python3 "$REPO_ROOT/tests/fixtures/make_fixture.py" "$WORK/media/test_song.mp3" + +# Launch server with isolated HOME so real user data is untouched +export HOME="$WORK/home" +mkdir -p "$HOME" + +if [ "${1:-}" = "--dotnet" ]; then + (cd "$REPO_ROOT/WaveBox.Server" && dotnet run -c Release) > "$WORK/server.log" 2>&1 & + SERVER_PID=$! +else + BINARY="${1:?usage: smoke-test.sh |--dotnet}" + "$BINARY" > "$WORK/server.log" 2>&1 & + SERVER_PID=$! +fi + +# Wait for the port to open (up to 60s to allow for a cold dotnet build) +for i in $(seq 1 120); do + if curl -s -o /dev/null "http://localhost:$PORT/api/status"; then + break + fi + if ! kill -0 "$SERVER_PID" 2>/dev/null; then + echo "FAIL: server process exited early"; cat "$WORK/server.log"; exit 1 + fi + sleep 0.5 +done + +# Point the config at the media fixture folder and restart to pick it up +CONF="$HOME/Library/Application Support/WaveBox/wavebox.conf" +[ -f "$CONF" ] || CONF="$HOME/.wavebox/wavebox.conf" +if [ ! -f "$CONF" ]; then + echo "FAIL: wavebox.conf was not created"; exit 1 +fi +python3 - "$CONF" "$WORK/media" <<'EOF' +import sys +conf, media = sys.argv[1], sys.argv[2] +s = open(conf).read() +open(conf, "w").write(s.replace('"/srv/your/media/here"', '"%s"' % media)) +EOF +kill "$SERVER_PID" 2>/dev/null; wait "$SERVER_PID" 2>/dev/null + +if [ "${1:-}" = "--dotnet" ]; then + (cd "$REPO_ROOT/WaveBox.Server" && dotnet run -c Release --no-build) > "$WORK/server2.log" 2>&1 & + SERVER_PID=$! +else + "$1" > "$WORK/server2.log" 2>&1 & + SERVER_PID=$! +fi +for i in $(seq 1 60); do + curl -s -o /dev/null "http://localhost:$PORT/api/status" && break + sleep 0.5 +done + +# 1. Login +SESSION=$(curl -s "http://localhost:$PORT/api/login?u=test&p=test" | python3 -c "import json,sys; print(json.load(sys.stdin).get('sessionId') or '')") +[ -n "$SESSION" ]; check "login returns session" $? + +# 2. Status +curl -s "http://localhost:$PORT/api/status?s=$SESSION" | python3 -c "import json,sys; d=json.load(sys.stdin); assert d['error'] is None and 'version' in d['status']" +check "status endpoint" $? + +# 3. Albums endpoint responds +curl -s "http://localhost:$PORT/api/albums?s=$SESSION" | python3 -c "import json,sys; d=json.load(sys.stdin); assert d['error'] is None" +check "albums endpoint" $? + +# 4. Wait for the scanner to index the fixture (up to 30s) +SONG_ID="" +for i in $(seq 1 30); do + SONG_ID=$(curl -s "http://localhost:$PORT/api/songs?s=$SESSION" | python3 -c "import json,sys; d=json.load(sys.stdin); print(d['songs'][0]['itemId'] if d['songs'] else '')") + [ -n "$SONG_ID" ] && break + sleep 1 +done +[ -n "$SONG_ID" ]; check "media scan indexed fixture song" $? + +# 5. Song metadata parsed by TagLib +curl -s "http://localhost:$PORT/api/songs?s=$SESSION" | python3 -c "import json,sys; d=json.load(sys.stdin); s=d['songs'][0]; assert s['songName']=='Test Song' and s['artistName']=='Test Artist', s" +check "tag metadata parsed" $? + +# 6. Stream with range request returns 206 +if [ -n "$SONG_ID" ]; then + STATUS=$(curl -s -o /dev/null -w "%{http_code}" -H "Range: bytes=100-199" "http://localhost:$PORT/api/stream/$SONG_ID?s=$SESSION") + [ "$STATUS" = "206" ]; check "range request returns 206" $? "(got $STATUS)" +else + check "range request returns 206" 1 "(no song id)" +fi + +echo "" +if [ "$FAILURES" -gt 0 ]; then + echo "$FAILURES smoke test(s) FAILED" + echo "--- server log tail ---"; tail -40 "$WORK/server2.log" + exit 1 +fi +echo "All smoke tests passed" diff --git a/WaveBox.Core/Properties/AssemblyInfo.cs b/WaveBox.Core/Properties/AssemblyInfo.cs deleted file mode 100644 index e34ea08..0000000 --- a/WaveBox.Core/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("WaveBox.Core.Model")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("WaveBox.Core.Model")] -[assembly: AssemblyCopyright("Copyright © 2013")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("95859d60-f38c-4b34-b343-33e04016d3a9")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/WaveBox.Core/WaveBox.Core.csproj b/WaveBox.Core/WaveBox.Core.csproj index 06f13f5..eba011c 100644 --- a/WaveBox.Core/WaveBox.Core.csproj +++ b/WaveBox.Core/WaveBox.Core.csproj @@ -1,191 +1,13 @@ - - - - - Debug - AnyCPU - {C6CEE72B-DBE2-4024-8F5C-D5C23E88194A} - Library - Properties - WaveBox.Core - WaveBox.Core - v4.5 - 512 - 10.0.0 - 2.0 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - lib\taglib-sharp.dll - - - lib\Newtonsoft.Json.dll - - - lib\log4net.dll - - - lib\Ninject.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PreserveNewest - - - + + + + WaveBox.Core + true + + + + + + + + diff --git a/WaveBox.Core/WaveBox.Core.dll.config b/WaveBox.Core/WaveBox.Core.dll.config deleted file mode 100644 index 0bbb636..0000000 --- a/WaveBox.Core/WaveBox.Core.dll.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/WaveBox.Core/WaveBox.Core.sln b/WaveBox.Core/WaveBox.Core.sln deleted file mode 100644 index 1c43de7..0000000 --- a/WaveBox.Core/WaveBox.Core.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WaveBox.Core", "WaveBox.Core.csproj", "{C6CEE72B-DBE2-4024-8F5C-D5C23E88194A}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {C6CEE72B-DBE2-4024-8F5C-D5C23E88194A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C6CEE72B-DBE2-4024-8F5C-D5C23E88194A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C6CEE72B-DBE2-4024-8F5C-D5C23E88194A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C6CEE72B-DBE2-4024-8F5C-D5C23E88194A}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(MonoDevelopProperties) = preSolution - StartupItem = WaveBox.Core.csproj - EndGlobalSection -EndGlobal diff --git a/WaveBox.Core/lib/Cirrious.MvvmCross.Plugins.Sqlite.dll b/WaveBox.Core/lib/Cirrious.MvvmCross.Plugins.Sqlite.dll deleted file mode 100644 index ec6b571..0000000 Binary files a/WaveBox.Core/lib/Cirrious.MvvmCross.Plugins.Sqlite.dll and /dev/null differ diff --git a/WaveBox.Core/lib/Cirrious.MvvmCross.dll b/WaveBox.Core/lib/Cirrious.MvvmCross.dll deleted file mode 100644 index c915458..0000000 Binary files a/WaveBox.Core/lib/Cirrious.MvvmCross.dll and /dev/null differ diff --git a/WaveBox.Core/lib/Newtonsoft.Json.dll b/WaveBox.Core/lib/Newtonsoft.Json.dll deleted file mode 100644 index 81639f9..0000000 Binary files a/WaveBox.Core/lib/Newtonsoft.Json.dll and /dev/null differ diff --git a/WaveBox.Core/lib/Ninject.dll b/WaveBox.Core/lib/Ninject.dll deleted file mode 100755 index 7b50811..0000000 Binary files a/WaveBox.Core/lib/Ninject.dll and /dev/null differ diff --git a/WaveBox.Core/lib/System.Windows.dll b/WaveBox.Core/lib/System.Windows.dll deleted file mode 100644 index 2f13eea..0000000 Binary files a/WaveBox.Core/lib/System.Windows.dll and /dev/null differ diff --git a/WaveBox.Core/lib/log4net.dll b/WaveBox.Core/lib/log4net.dll deleted file mode 100755 index a366176..0000000 Binary files a/WaveBox.Core/lib/log4net.dll and /dev/null differ diff --git a/WaveBox.Core/lib/taglib-sharp.dll b/WaveBox.Core/lib/taglib-sharp.dll deleted file mode 100755 index 4d61148..0000000 Binary files a/WaveBox.Core/lib/taglib-sharp.dll and /dev/null differ diff --git a/WaveBox.Core/src/ApiResponse/AlbumArtistsResponse.cs b/WaveBox.Core/src/ApiResponse/AlbumArtistsResponse.cs index 9730325..da0f362 100644 --- a/WaveBox.Core/src/ApiResponse/AlbumArtistsResponse.cs +++ b/WaveBox.Core/src/ApiResponse/AlbumArtistsResponse.cs @@ -1,29 +1,29 @@ using System; -using Newtonsoft.Json; +using System.Text.Json.Serialization; using System.Collections.Generic; using WaveBox.Core.Model; namespace WaveBox.Core.ApiResponse { public class AlbumArtistsResponse : IApiResponse { - [JsonProperty("error")] + [JsonPropertyName("error")] public string Error { get; set; } - [JsonProperty("albumArtists")] + [JsonPropertyName("albumArtists")] public IList AlbumArtists { get; set; } - [JsonProperty("albums")] + [JsonPropertyName("albums")] public IList Albums { get; set; } - [JsonProperty("songs")] + [JsonPropertyName("songs")] public IList Songs { get; set; } - [JsonProperty("counts")] + [JsonPropertyName("counts")] public Dictionary Counts { get; set; } - [JsonProperty("lastfmInfo")] + [JsonPropertyName("lastfmInfo")] public string LastfmInfo { get; set; } - [JsonProperty("sectionPositions")] + [JsonPropertyName("sectionPositions")] public PairList SectionPositions { get; set; } public AlbumArtistsResponse(string error, IList albumArtists, IList albums, IList songs, Dictionary counts, string lastfmInfo, PairList sectionPositions) { diff --git a/WaveBox.Core/src/ApiResponse/AlbumsResponse.cs b/WaveBox.Core/src/ApiResponse/AlbumsResponse.cs index f10af0e..144ecd0 100644 --- a/WaveBox.Core/src/ApiResponse/AlbumsResponse.cs +++ b/WaveBox.Core/src/ApiResponse/AlbumsResponse.cs @@ -1,20 +1,20 @@ using System; -using Newtonsoft.Json; +using System.Text.Json.Serialization; using System.Collections.Generic; using WaveBox.Core.Model; namespace WaveBox.Core.ApiResponse { public class AlbumsResponse : IApiResponse { - [JsonProperty("error")] + [JsonPropertyName("error")] public string Error { get; set; } - [JsonProperty("albums")] + [JsonPropertyName("albums")] public IList Albums { get; set; } - [JsonProperty("songs")] + [JsonPropertyName("songs")] public IList Songs { get; set; } - [JsonProperty("sectionPositions")] + [JsonPropertyName("sectionPositions")] public PairList SectionPositions { get; set; } public AlbumsResponse(string error, IList albums, IList songs, PairList sectionPositions) { diff --git a/WaveBox.Core/src/ApiResponse/ArtistsResponse.cs b/WaveBox.Core/src/ApiResponse/ArtistsResponse.cs index 35b5919..19134aa 100644 --- a/WaveBox.Core/src/ApiResponse/ArtistsResponse.cs +++ b/WaveBox.Core/src/ApiResponse/ArtistsResponse.cs @@ -1,29 +1,29 @@ using System; -using Newtonsoft.Json; +using System.Text.Json.Serialization; using System.Collections.Generic; using WaveBox.Core.Model; namespace WaveBox.Core.ApiResponse { public class ArtistsResponse : IApiResponse { - [JsonProperty("error")] + [JsonPropertyName("error")] public string Error { get; set; } - [JsonProperty("artists")] + [JsonPropertyName("artists")] public IList Artists { get; set; } - [JsonProperty("albums")] + [JsonPropertyName("albums")] public IList Albums { get; set; } - [JsonProperty("songs")] + [JsonPropertyName("songs")] public IList Songs { get; set; } - [JsonProperty("counts")] + [JsonPropertyName("counts")] public Dictionary Counts { get; set; } - [JsonProperty("lastfmInfo")] + [JsonPropertyName("lastfmInfo")] public string LastfmInfo { get; set; } - [JsonProperty("sectionPositions")] + [JsonPropertyName("sectionPositions")] public PairList SectionPositions { get; set; } public ArtistsResponse(string error, IList artists, IList albums, IList songs, Dictionary counts, string lastfmInfo, PairList sectionPositions) { diff --git a/WaveBox.Core/src/ApiResponse/DatabaseResponse.cs b/WaveBox.Core/src/ApiResponse/DatabaseResponse.cs index 8199f09..2e2f2be 100644 --- a/WaveBox.Core/src/ApiResponse/DatabaseResponse.cs +++ b/WaveBox.Core/src/ApiResponse/DatabaseResponse.cs @@ -1,14 +1,14 @@ using System; -using Newtonsoft.Json; +using System.Text.Json.Serialization; using System.Collections.Generic; using WaveBox.Core.Model; namespace WaveBox.Core.ApiResponse { public class DatabaseResponse : IApiResponse { - [JsonProperty("error")] + [JsonPropertyName("error")] public string Error { get; set; } - [JsonProperty("queries")] + [JsonPropertyName("queries")] public IList Queries { get; set; } public DatabaseResponse(string error, IList queries) { diff --git a/WaveBox.Core/src/ApiResponse/ErrorResponse.cs b/WaveBox.Core/src/ApiResponse/ErrorResponse.cs index 6e3dc91..23b3631 100644 --- a/WaveBox.Core/src/ApiResponse/ErrorResponse.cs +++ b/WaveBox.Core/src/ApiResponse/ErrorResponse.cs @@ -1,9 +1,9 @@ using System; -using Newtonsoft.Json; +using System.Text.Json.Serialization; namespace WaveBox.Core.ApiResponse { public class ErrorResponse : IApiResponse { - [JsonProperty("error")] + [JsonPropertyName("error")] public string Error { get; set; } public ErrorResponse(string error) { diff --git a/WaveBox.Core/src/ApiResponse/ExternalArtResponse.cs b/WaveBox.Core/src/ApiResponse/ExternalArtResponse.cs index 9a97d69..e5995ec 100644 --- a/WaveBox.Core/src/ApiResponse/ExternalArtResponse.cs +++ b/WaveBox.Core/src/ApiResponse/ExternalArtResponse.cs @@ -1,12 +1,12 @@ using System; -using Newtonsoft.Json; +using System.Text.Json.Serialization; namespace WaveBox.Core.ApiResponse { public class ExternalArtResponse : IApiResponse { - [JsonProperty("error")] + [JsonPropertyName("error")] public string Error { get; set; } - [JsonProperty("url")] + [JsonPropertyName("url")] public string Url { get; set; } public ExternalArtResponse(string error, string url) { diff --git a/WaveBox.Core/src/ApiResponse/FavoritesResponse.cs b/WaveBox.Core/src/ApiResponse/FavoritesResponse.cs index 5c3c3c4..735891a 100644 --- a/WaveBox.Core/src/ApiResponse/FavoritesResponse.cs +++ b/WaveBox.Core/src/ApiResponse/FavoritesResponse.cs @@ -1,17 +1,17 @@ using System; -using Newtonsoft.Json; +using System.Text.Json.Serialization; using System.Collections.Generic; using WaveBox.Core.Model; namespace WaveBox.Core.ApiResponse { public class FavoritesResponse : IApiResponse { - [JsonProperty("error")] + [JsonPropertyName("error")] public string Error { get; set; } - [JsonProperty("items")] + [JsonPropertyName("items")] public IList Items { get; set; } - [JsonProperty("favorites")] + [JsonPropertyName("favorites")] public IList Favorites { get; set; } public FavoritesResponse(string error, IList items, IList favorites) { diff --git a/WaveBox.Core/src/ApiResponse/FoldersResponse.cs b/WaveBox.Core/src/ApiResponse/FoldersResponse.cs index a63ef42..47363f0 100644 --- a/WaveBox.Core/src/ApiResponse/FoldersResponse.cs +++ b/WaveBox.Core/src/ApiResponse/FoldersResponse.cs @@ -1,26 +1,26 @@ using System; -using Newtonsoft.Json; +using System.Text.Json.Serialization; using WaveBox.Core.Model; using System.Collections.Generic; namespace WaveBox.Core.ApiResponse { public class FoldersResponse : IApiResponse { - [JsonProperty("error")] + [JsonPropertyName("error")] public string Error { get; set; } - [JsonProperty("folders")] + [JsonPropertyName("folders")] public IList Folders { get; set; } - [JsonProperty("containingFolder")] + [JsonPropertyName("containingFolder")] public Folder ContainingFolder { get; set; } - [JsonProperty("songs")] + [JsonPropertyName("songs")] public IList Songs { get; set; } - [JsonProperty("videos")] + [JsonPropertyName("videos")] public IList