Merge pull request #559 from clangen/clangen/remove-boost

Remove boost as a dependency.
This commit is contained in:
casey langen 2022-12-04 22:54:42 -08:00 committed by GitHub
commit 8edd653fd3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
88 changed files with 1043 additions and 1093 deletions

View File

@ -1,158 +0,0 @@
version: 2.0
jobs:
build_ubuntu_focal:
docker:
- image: ubuntu:focal
steps:
- run: apt-get update
- run: DEBIAN_FRONTEND="noninteractive" TZ="America/Los_Angeles" apt-get install -y git ssh sshpass build-essential clang cmake libboost-thread1.71-dev libboost-system1.71-dev libboost-filesystem1.71-dev libboost-date-time1.71-dev libboost-atomic1.71-dev libboost-chrono1.71-dev libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncursesw5-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libssl-dev libtag1-dev libsystemd-dev
- checkout
- run: cmake -DENABLE_PCH=true -DGENERATE_DEB=true -DDEB_ARCHITECTURE=amd64 -DDEB_PLATFORM=ubuntu -DDEB_DISTRO=focal -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release .
- run: make -j2
- run: make package
- run: ./script/copy-artifacts-to-host.sh /root/project/*.deb
- run: mkdir -p /root/debs && mv /root/project/*.deb /root/debs/
- store_artifacts:
path: /root/debs/
build_ubuntu_hirsute:
docker:
- image: ubuntu:hirsute
steps:
- run: apt-get update
- run: DEBIAN_FRONTEND="noninteractive" TZ="America/Los_Angeles" apt-get install -y git ssh sshpass build-essential clang cmake libboost-thread1.71-dev libboost-system1.71-dev libboost-filesystem1.71-dev libboost-date-time1.71-dev libboost-atomic1.71-dev libboost-chrono1.71-dev libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncursesw5-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libssl-dev libtag1-dev libsystemd-dev libpipewire-0.3-dev libspa-0.2-dev
- checkout
- run: cmake -DENABLE_PCH=true -DENABLE_PIPEWIRE=true -DGENERATE_DEB=true -DDEB_ARCHITECTURE=amd64 -DDEB_PLATFORM=ubuntu -DDEB_DISTRO=hirsute -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release .
- run: make -j2
- run: make package
- run: ./script/copy-artifacts-to-host.sh /root/project/*.deb
- run: mkdir -p /root/debs && mv /root/project/*.deb /root/debs/
- store_artifacts:
path: /root/debs/
build_ubuntu_impish:
docker:
- image: ubuntu:impish
steps:
- run: apt-get update
- run: DEBIAN_FRONTEND="noninteractive" TZ="America/Los_Angeles" apt-get install -y git ssh sshpass build-essential clang cmake libboost-thread1.74-dev libboost-system1.74-dev libboost-filesystem1.74-dev libboost-date-time1.74-dev libboost-atomic1.74-dev libboost-chrono1.74-dev libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncursesw5-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libssl-dev libtag1-dev libsystemd-dev libpipewire-0.3-dev libspa-0.2-dev
- checkout
- run: cmake -DENABLE_PCH=true -DENABLE_PIPEWIRE=true -DGENERATE_DEB=true -DDEB_ARCHITECTURE=amd64 -DDEB_PLATFORM=ubuntu -DDEB_DISTRO=impish -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release .
- run: make -j2
- run: make package
- run: ./script/copy-artifacts-to-host.sh /root/project/*.deb
- run: mkdir -p /root/debs && mv /root/project/*.deb /root/debs/
- store_artifacts:
path: /root/debs/
build_fedora_32:
docker:
- image: fedora:32
steps:
- run: dnf install -y https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm git openssh-clients sshpass rpm-build rpmdevtools 'dnf-command(builddep)'
- checkout
- run: dnf builddep -y musikcube.spec
- run: mkdir -p /root/rpmbuild/SOURCES && spectool -g -R musikcube.spec
- run: ./script/run-rpm-build.sh
- run: ./script/copy-artifacts-to-host.sh /root/rpmbuild/RPMS/x86_64/*.rpm
- run: mkdir -p /root/rpms && mv /root/rpmbuild/RPMS/x86_64/*.rpm /root/rpms/
- store_artifacts:
path: /root/rpms/
build_fedora_33:
docker:
- image: fedora:33
steps:
- run: dnf install -y https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm git openssh-clients sshpass rpm-build rpmdevtools 'dnf-command(builddep)'
- checkout
- run: dnf builddep -y musikcube.spec
- run: mkdir -p /root/rpmbuild/SOURCES && spectool -g -R musikcube.spec
- run: ./script/run-rpm-build.sh
- run: ./script/copy-artifacts-to-host.sh /root/rpmbuild/RPMS/x86_64/*.rpm
- run: mkdir -p /root/rpms && mv /root/rpmbuild/RPMS/x86_64/*.rpm /root/rpms/
- store_artifacts:
path: /root/rpms/
build_fedora_34:
docker:
- image: fedora:34
steps:
- run: dnf install -y https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm git openssh-clients sshpass rpm-build rpmdevtools 'dnf-command(builddep)'
- checkout
- run: dnf builddep -y musikcube.spec
- run: mkdir -p /root/rpmbuild/SOURCES && spectool -g -R musikcube.spec
- run: ./script/run-rpm-build.sh
- run: ./script/copy-artifacts-to-host.sh /root/rpmbuild/RPMS/x86_64/*.rpm
- run: mkdir -p /root/rpms && mv /root/rpmbuild/RPMS/x86_64/*.rpm /root/rpms/
- store_artifacts:
path: /root/rpms/
build_fedora_35:
docker:
- image: fedora:35
steps:
- run: dnf install -y https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm git openssh-clients sshpass rpm-build rpmdevtools 'dnf-command(builddep)'
- checkout
- run: dnf builddep -y musikcube.spec
- run: mkdir -p /root/rpmbuild/SOURCES && spectool -g -R musikcube.spec
- run: ./script/run-rpm-build.sh
- run: ./script/copy-artifacts-to-host.sh /root/rpmbuild/RPMS/x86_64/*.rpm
- run: mkdir -p /root/rpms && mv /root/rpmbuild/RPMS/x86_64/*.rpm /root/rpms/
- store_artifacts:
path: /root/rpms/
build_mint_una: # based on ubuntu focal
docker:
- image: linuxmintd/mint20.3-amd64
steps:
- run: apt-get update
- run: DEBIAN_FRONTEND="noninteractive" TZ="America/Los_Angeles" apt-get install -y git ssh sshpass build-essential clang cmake libboost-thread1.71-dev libboost-system1.71-dev libboost-filesystem1.71-dev libboost-date-time1.71-dev libboost-atomic1.71-dev libboost-chrono1.71-dev libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncursesw5-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libssl-dev libtag1-dev libsystemd-dev
- checkout
- run: cmake -DENABLE_PCH=true -DGENERATE_DEB=true -DDEB_ARCHITECTURE=amd64 -DDEB_PLATFORM=mint -DDEB_DISTRO=una -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release .
- run: make -j2
- run: make package
- run: ./script/copy-artifacts-to-host.sh /root/project/*.deb
- run: mkdir -p /root/debs && mv /root/project/*.deb /root/debs/
- store_artifacts:
path: /root/debs/
build_debian_buster:
docker:
- image: debian:buster
steps:
- run: apt-get update
- run: DEBIAN_FRONTEND="noninteractive" TZ="America/Los_Angeles" apt-get install -y git ssh sshpass build-essential clang cmake libboost-thread1.67-dev libboost-system1.67-dev libboost-filesystem1.67-dev libboost-date-time1.67-dev libboost-atomic1.67-dev libboost-chrono1.67-dev libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncursesw5-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libssl-dev libtag1-dev libsystemd-dev
- checkout
- run: cmake -DGENERATE_DEB=true -DDEB_ARCHITECTURE=amd64 -DDEB_PLATFORM=debian -DDEB_DISTRO=buster -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release .
- run: make -j2
- run: make package
- run: ./script/copy-artifacts-to-host.sh /root/project/*.deb
- run: mkdir -p /root/debs && mv /root/project/*.deb /root/debs/
- store_artifacts:
path: /root/debs/
build_debian_bullseye:
docker:
- image: debian:bullseye
steps:
- run: apt-get update
- run: DEBIAN_FRONTEND="noninteractive" TZ="America/Los_Angeles" apt-get install -y git ssh sshpass build-essential clang cmake libboost-thread1.74-dev libboost-system1.74-dev libboost-filesystem1.74-dev libboost-date-time1.74-dev libboost-atomic1.74-dev libboost-chrono1.74-dev libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncursesw5-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libssl-dev libtag1-dev libsystemd-dev
- checkout
- run: cmake -DGENERATE_DEB=true -DDEB_ARCHITECTURE=amd64 -DDEB_PLATFORM=debian -DDEB_DISTRO=bullseye -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release .
- run: make -j2
- run: make package
- run: ./script/copy-artifacts-to-host.sh /root/project/*.deb
- run: mkdir -p /root/debs && mv /root/project/*.deb /root/debs/
- store_artifacts:
path: /root/debs/
workflow_filters: &workflow_filters
filters:
branches:
only:
- build
workflows:
version: 2
build_and_package:
jobs:
- build_ubuntu_focal: *workflow_filters
- build_ubuntu_hirsute: *workflow_filters
- build_ubuntu_impish: *workflow_filters
- build_fedora_32: *workflow_filters
- build_fedora_33: *workflow_filters
- build_fedora_34: *workflow_filters
- build_fedora_35: *workflow_filters
- build_mint_una: *workflow_filters
- build_debian_buster: *workflow_filters
- build_debian_bullseye: *workflow_filters

View File

@ -1,10 +1,8 @@
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -Wno-unused-result -Wno-deprecated-declarations")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG -g -frtti -fexceptions")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=c++17 -DDEBUG -g -frtti -fexceptions")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DDEBUG")
# enable for additional memory checking with fsanitize
# set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g3 -fsanitize=address,undefined")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -frtti -fexceptions -Wno-psabi")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++17 -O2 -frtti -fexceptions -Wno-psabi")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O2 -Wno-psabi")
add_definitions(-DHAVE_BOOST -D_FILE_OFFSET_BITS=64 -DSIGSLOT_USE_POSIX_THREADS)

View File

@ -1,12 +1,6 @@
if (${BUILD_STANDALONE} MATCHES "true")
message(STATUS "${BoldGreen}[standalone-build] ENABLED!${ColorReset}")
set(BOOST_ROOT "/build/musikcube/vendor/bin")
set(BOOST_INCLUDEDIR "${CMAKE_CURRENT_SOURCE_DIR}/vendor/bin/include")
set(BOOST_LIBRARYDIR "${CMAKE_CURRENT_SOURCE_DIR}/vendor/bin/lib")
set(Boost_NO_SYSTEM_PATHS ON)
set(Boost_NO_BOOST_CMAKE ON)
list(
APPEND
VENDOR_INCLUDE_DIRECTORIES

View File

@ -2,7 +2,6 @@ if (${GENERATE_DEB} MATCHES "true" AND CMAKE_SYSTEM_NAME MATCHES "Linux")
if (${BUILD_STANDALONE} MATCHES "true")
set(CPACK_PACKAGE_FILE_NAME "musikcube_standalone_${musikcube_VERSION}_${DEB_ARCHITECTURE}")
else()
set(DEB_BOOST_VERSION "1.55.0")
set(DEB_MICROHTTPD_VERSION "10")
set(DEB_LIBCURL_VERSION "3")
set(DEB_AVUTIL_VERSION "55")
@ -10,18 +9,15 @@ if (${GENERATE_DEB} MATCHES "true" AND CMAKE_SYSTEM_NAME MATCHES "Linux")
set(DEB_SWRESAMPLE_VERSION "2")
set(DEB_NCURSES_VERSION "5")
if (DEB_DISTRO MATCHES "buster")
set(DEB_BOOST_VERSION "1.67.0")
set(DEB_MICROHTTPD_VERSION "12")
set(DEB_LIBCURL_VERSION "4")
set(DEB_AVUTIL_VERSION "56")
set(DEB_AVFORMAT_VERSION "58")
set(DEB_SWRESAMPLE_VERSION "3")
elseif (DEB_DISTRO MATCHES "bionic")
set(DEB_BOOST_VERSION "1.65.1")
set(DEB_MICROHTTPD_VERSION "12")
set(DEB_LIBCURL_VERSION "4")
elseif (DEB_DISTRO MATCHES "focal" OR DEB_DISTRO MATCHES "una")
set(DEB_BOOST_VERSION "1.71.0")
set(DEB_MICROHTTPD_VERSION "12")
set(DEB_LIBCURL_VERSION "4")
set(DEB_AVUTIL_VERSION "56")
@ -29,7 +25,6 @@ if (${GENERATE_DEB} MATCHES "true" AND CMAKE_SYSTEM_NAME MATCHES "Linux")
set(DEB_SWRESAMPLE_VERSION "3")
set(DEB_NCURSES_VERSION "6")
elseif (DEB_DISTRO MATCHES "hirsute")
set(DEB_BOOST_VERSION "1.71.0")
set(DEB_MICROHTTPD_VERSION "12")
set(DEB_LIBCURL_VERSION "4")
set(DEB_AVUTIL_VERSION "56")
@ -37,7 +32,6 @@ if (${GENERATE_DEB} MATCHES "true" AND CMAKE_SYSTEM_NAME MATCHES "Linux")
set(DEB_SWRESAMPLE_VERSION "3")
set(DEB_NCURSES_VERSION "6")
elseif (DEB_DISTRO MATCHES "impish" OR DEB_DISTRO MATCHES "bullseye")
set(DEB_BOOST_VERSION "1.74.0")
set(DEB_MICROHTTPD_VERSION "12")
set(DEB_LIBCURL_VERSION "4")
set(DEB_AVUTIL_VERSION "56")
@ -46,7 +40,7 @@ if (${GENERATE_DEB} MATCHES "true" AND CMAKE_SYSTEM_NAME MATCHES "Linux")
set(DEB_NCURSES_VERSION "6")
endif()
set(DEPENDENCIES "libboost-thread${DEB_BOOST_VERSION}, libboost-system${DEB_BOOST_VERSION}, libboost-chrono${DEB_BOOST_VERSION}, libboost-filesystem${DEB_BOOST_VERSION}, libboost-date-time${DEB_BOOST_VERSION}, libmicrohttpd${DEB_MICROHTTPD_VERSION}, libcurl${DEB_LIBCURL_VERSION}, libogg0, libvorbis0a, libvorbisfile3, libncursesw${DEB_NCURSES_VERSION}, libasound2, libpulse0, pulseaudio, libmp3lame0, libev4, libopenmpt0, libssl1.1")
set(DEPENDENCIES "libmicrohttpd${DEB_MICROHTTPD_VERSION}, libcurl${DEB_LIBCURL_VERSION}, libogg0, libvorbis0a, libvorbisfile3, libncursesw${DEB_NCURSES_VERSION}, libasound2, libpulse0, pulseaudio, libmp3lame0, libev4, libopenmpt0, libssl1.1")
set(DEPENDENCIES "${DEPENDENCIES}, libavcodec-extra, libavutil${DEB_AVUTIL_VERSION}, libavformat${DEB_AVFORMAT_VERSION}, libswresample${DEB_SWRESAMPLE_VERSION}")
if (${ENABLE_BUNDLED_TAGLIB} MATCHES "false")
@ -56,7 +50,7 @@ if (${GENERATE_DEB} MATCHES "true" AND CMAKE_SYSTEM_NAME MATCHES "Linux")
set(CPACK_PACKAGE_FILE_NAME "musikcube_${musikcube_VERSION}_${DEB_PLATFORM}_${DEB_DISTRO}_${DEB_ARCHITECTURE}")
set(CPACK_DEBIAN_PACKAGE_DEPENDS ${DEPENDENCIES})
set(CPACK_RPM_PACKAGE_REQUIRES "boost, libogg, libvorbis, ffmpeg-libs, ncurses, zlib, alsa-lib, pulseaudio-libs, openssl, libcurl, libmicrohttpd, lame, libev, taglib, libopenmpt")
set(CPACK_RPM_PACKAGE_REQUIRES "libogg, libvorbis, ffmpeg-libs, ncurses, zlib, alsa-lib, pulseaudio-libs, openssl, libcurl, libmicrohttpd, lame, libev, taglib, libopenmpt")
endif()
set(CPACK_GENERATOR "DEB" "RPM")

3
.gitmodules vendored
View File

@ -1,3 +1,6 @@
[submodule "src/3rdparty/bin"]
path = src/3rdparty/bin
url = https://github.com/clangen/musikcube-bin
[submodule "src/3rdparty/asio"]
path = src/3rdparty/asio
url = https://github.com/chriskohlhoff/asio/

View File

@ -1,12 +1,15 @@
0.98.2
0.99.0
* fix issue with directory scanning that may lead to incomplete indexing
* completely removed boost as a dependency across all projects; this is a
huge milestone in the project, and will make it much easier to distribute
stable builds moving forward.
* fixed issue with directory scanning that may lead to incomplete indexing
* reverted ViewPager2 changes in `musikdroid`, as there is a bug that is
preventing fragments from getting re-initialized properly during the resume
cycle.
* updated Simplified Chinese translation (@UM-Li)
* added Czech translation (@khagaroth)
* upgrade to c++-17 runtime
* upgraded to c++-17 runtime
--------------------------------------------------------------------------------

View File

@ -7,8 +7,8 @@ cmake_minimum_required(VERSION 3.0)
project(musikcube)
set (musikcube_VERSION_MAJOR 0)
set (musikcube_VERSION_MINOR 98)
set (musikcube_VERSION_PATCH 2)
set (musikcube_VERSION_MINOR 99)
set (musikcube_VERSION_PATCH 0)
set (musikcube_VERSION "${musikcube_VERSION_MAJOR}.${musikcube_VERSION_MINOR}.${musikcube_VERSION_PATCH}")
set (LIBRARY_OUTPUT_PATH ${musikcube_SOURCE_DIR}/bin/plugins)
set (EXECUTABLE_OUTPUT_PATH ${musikcube_SOURCE_DIR}/bin)
@ -52,14 +52,19 @@ include_directories(
"${musikcube_SOURCE_DIR}/src/musikcore"
"${musikcube_SOURCE_DIR}/src/musikcube"
"${musikcube_SOURCE_DIR}/src/musikcube/cursespp"
"${musikcube_SOURCE_DIR}/src/3rdparty/include")
"${musikcube_SOURCE_DIR}/src/3rdparty/include"
"${musikcube_SOURCE_DIR}/src/3rdparty/asio/asio/include")
link_directories("${musikcube_SOURCE_DIR}/bin/plugins")
find_package(Boost 1.55.0 REQUIRED system filesystem thread)
include_directories(${Boost_INCLUDE_DIRS})
message(STATUS "[boost] libs: " ${Boost_LIBRARIES})
message(STATUS "[boost] includes: " ${Boost_INCLUDE_DIRS})
# these are used to (1) disable the standalone ASIO from trying to use
# boost, and (2) instruct websocketpp to use standalone (not boost) ASIO
add_definitions(
-DBOOST_DATE_TIME_NO_LIB
-DBOOST_REGEX_NO_LIB
-D_WEBSOCKETPP_CPP11_TYPE_TRAITS_
-D_WEBSOCKETPP_CPP11_RANDOM_DEVICE_
-DASIO_STANDALONE)
if (${BUILD_STANDALONE} MATCHES "true")
find_vendor_library(LIBCURL curl)
@ -73,8 +78,9 @@ else()
endif()
find_library(LIBZ NAMES z)
find_library(PTHREAD NAMES pthread)
set(musikcube_LINK_LIBS ${DEFAULT_OS_SYSTEM_LIBS} ${Boost_LIBRARIES} ${LIBCURL} ${LIBSSL} ${LIBCRYPTO} ${LIBZ})
set(musikcube_LINK_LIBS ${DEFAULT_OS_SYSTEM_LIBS} ${LIBCURL} ${LIBSSL} ${LIBCRYPTO} ${LIBZ} ${PTHREAD})
if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB)
if(NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB)
@ -83,6 +89,11 @@ if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB)
endif()
endif()
if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.0)
message(STATUS "[build] detected old gcc, manually adding -lstdc++fs")
set (musikcube_LINK_LIBS ${musikcube_LINK_LIBS} stdc++fs)
endif()
message(STATUS "[build] musikcube_LINK_LIBS: " ${musikcube_LINK_LIBS})
add_subdirectory(src/musikcore)

View File

@ -82,15 +82,15 @@ the musikcube sdk is a set of small, pure-virtual c++ classes and a handful of e
musikcube would not be possible without the following excellent free, open source, and (in the case of some macos and win32 APIs) non-free projects and libraries:
| core | decoders | outputs | metadata | networking | miscellaneous | ui |
|-----------------------------------------------------------|-----------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------|--------------------------------------------------------------------------------|--------------------------------------------------------------------|---------------------------------------------------------------------------|
| [boost](http://www.boost.org/) | [flac](https://xiph.org/flac/) | [alsa](https://www.alsa-project.org) | [taglib](http://taglib.org/) | [websocketpp](https://github.com/zaphoyd/websocketpp) | [rxjava](https://github.com/ReactiveX/RxJava) | [ncurses](https://www.gnu.org/software/ncurses/) |
| [sqlite](https://www.sqlite.org/) | [ogg/vorbis](http://www.vorbis.com/) | [pulseaudio](https://www.freedesktop.org/wiki/Software/PulseAudio/) | [glide](https://github.com/bumptech/glide) | [libmicrohttpd](https://www.gnu.org/software/libmicrohttpd/) | [rxandroid](https://github.com/ReactiveX/RxAndroid) | [pdcurses (win32a variant)](https://www.projectpluto.com/win32a.htm) |
| [utfcpp](https://github.com/nemtrif/utfcpp) | [mad](http://www.underbit.com/products/mad/) + [nomad](https://github.com/cmus/cmus/tree/master/ip) | [core audio](https://developer.apple.com/library/content/documentation/MusicAudio/Conceptual/CoreAudioOverview/Introduction/Introduction.html) | | [libcurl](https://curl.haxx.se/libcurl/) | [stetho](http://facebook.github.io/stetho/) | [recycler-fast-scroll](https://github.com/plusCubed/recycler-fast-scroll) |
| [nlohmann json](https://github.com/nlohmann/json) | [faad2](http://www.audiocoding.com/faad2.html) | [wasapi](https://msdn.microsoft.com/en-us/library/windows/desktop/dd371455(v=vs.85).aspx) | | [libressl](https://www.libressl.org/) | [fabric](http://fabric.io) | |
| [kissfft](http://kissfft.sourceforge.net/) | [exoplayer](https://github.com/google/ExoPlayer) | [directsound](https://msdn.microsoft.com/en-us/library/windows/desktop/ee416960(v=vs.85).aspx) | | [nv-websocket-client](https://github.com/TakahikoKawasaki/nv-websocket-client) | [AndroidVideoCache](https://github.com/danikula/AndroidVideoCache) | |
| [sigslot](http://sigslot.sourceforge.net/) | | [waveout](https://msdn.microsoft.com/en-us/library/windows/desktop/dd743876(v=vs.85).aspx) | | [okhttp](http://square.github.io/okhttp/) | | |
| [wcwidth.c](http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c) | | | | | | |
| core | decoders | outputs | metadata | networking | miscellaneous | ui |
|-----------------------------------------------------------|-----------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------|--------------------------------------------------------------------------------|--------------------------------------------------------------------|---------------------------------------------------------------------------|
| [sqlite](https://www.sqlite.org/) | [ffmpeg](https://ffmpeg.org/) | [alsa](https://www.alsa-project.org) | [taglib](http://taglib.org/) | [websocketpp](https://github.com/zaphoyd/websocketpp) | [rxjava](https://github.com/ReactiveX/RxJava) | [ncurses](https://www.gnu.org/software/ncurses/) |
| [utfcpp](https://github.com/nemtrif/utfcpp) | [libopenmpt](https://lib.openmpt.org/libopenmpt/) | [pulseaudio](https://www.freedesktop.org/wiki/Software/PulseAudio/) | [glide](https://github.com/bumptech/glide) | [libmicrohttpd](https://www.gnu.org/software/libmicrohttpd/) | [rxandroid](https://github.com/ReactiveX/RxAndroid) | [pdcurses (win32a variant)](https://www.projectpluto.com/win32a.htm) |
| [nlohmann json](https://github.com/nlohmann/json) | [libgme](https://bitbucket.org/mpyne/game-music-emu/wiki/Home) | [core audio](https://developer.apple.com/library/content/documentation/MusicAudio/Conceptual/CoreAudioOverview/Introduction/Introduction.html) | | [libcurl](https://curl.haxx.se/libcurl/) | [stetho](http://facebook.github.io/stetho/) | [recycler-fast-scroll](https://github.com/plusCubed/recycler-fast-scroll) |
| [kissfft](http://kissfft.sourceforge.net/) | [exoplayer](https://github.com/google/ExoPlayer) | [wasapi](https://msdn.microsoft.com/en-us/library/windows/desktop/dd371455(v=vs.85).aspx) | | [openssl](https://www.openssl.org/ ) | [fabric](http://fabric.io) | |
| [sigslot](http://sigslot.sourceforge.net/) | | [directsound](https://msdn.microsoft.com/en-us/library/windows/desktop/ee416960(v=vs.85).aspx) | | [nv-websocket-client](https://github.com/TakahikoKawasaki/nv-websocket-client) | [AndroidVideoCache](https://github.com/danikula/AndroidVideoCache) | |
| [wcwidth.c](http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c) | | [waveout](https://msdn.microsoft.com/en-us/library/windows/desktop/dd743876(v=vs.85).aspx) | | [okhttp](http://square.github.io/okhttp/) | | |
| | | [pipewire](https://pipewire.org/) | | | | |
# license

View File

@ -1,6 +1,6 @@
%define name musikcube
%define build_timestamp %{lua: print(os.date("%Y%m%d"))}
%define version 0.98.2
%define version 0.99.0
Name: %{name}
Version: %{version}
Release: %{dist}
@ -8,8 +8,8 @@ Summary: A cross-platform, terminal-based audio engine, library, player and serv
Source0: https://github.com/clangen/musikcube/archive/%{version}.tar.gz#/%{name}-%{version}.tar.gz
License: BSD-3-Clause
Packager: David Muckle <dvdmuckle@dvdmuckle.xyz>
BuildRequires: gcc-c++ cmake boost-devel libogg-devel libvorbis-devel ffmpeg-devel ncurses-devel zlib-devel alsa-lib-devel pulseaudio-libs-devel openssl-devel libcurl-devel libmicrohttpd-devel lame-devel libev-devel taglib-devel systemd-devel make libopenmpt-devel
Requires: boost libogg libvorbis ffmpeg-libs ncurses zlib alsa-lib pulseaudio-libs openssl libcurl libmicrohttpd lame libev taglib libopenmpt
BuildRequires: gcc-c++ cmake libogg-devel libvorbis-devel ffmpeg-devel ncurses-devel zlib-devel alsa-lib-devel pulseaudio-libs-devel openssl-devel libcurl-devel libmicrohttpd-devel lame-devel libev-devel taglib-devel systemd-devel make libopenmpt-devel
Requires: libogg libvorbis ffmpeg-libs ncurses zlib alsa-lib pulseaudio-libs openssl libcurl libmicrohttpd lame libev taglib libopenmpt
%description

View File

@ -11,7 +11,7 @@
# the script will create a "vendor" subdirectory in the current path, and stage
# all final files in "vendor/lib".
#
# dependencies: boost, openssl, curl, libmicrohttpd, ffmpeg, lame, libopenmpt
# dependencies: openssl, curl, libmicrohttpd, ffmpeg, lame, libopenmpt
# set -x
@ -27,8 +27,6 @@ RPATH="@rpath"
OS=$(uname)
ARCH=$(uname -m)
SCRIPTDIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
BOOST_VERSION_URL_PATH="1.80.0"
BOOST_VERSION="1_80_0"
OPENSSL_VERSION="1.1.1q"
CURL_VERSION="7.85.0"
LIBMICROHTTPD_VERSION="0.9.75"
@ -59,11 +57,10 @@ if [[ $CROSSCOMPILE == "rpi" ]]; then
OPENSSL_CROSSCOMPILE_PREFIX="--cross-compile-prefix=arm-linux-gnueabihf-"
GENERIC_CONFIGURE_FLAGS="--build=x86_64-pc-linux-gnu --host=arm-linux-gnueabihf --with-sysroot=${ARM_ROOT}"
FFMPEG_CONFIGURE_FLAGS="--arch=${ARCH} --target-os=linux --cross-prefix=arm-linux-gnueabihf-"
BOOST_TOOLSET="toolset=gcc-arm"
PKG_CONFIG_PATH="${LIBDIR}/pkgconfig/:${ARM_ROOT}/usr/lib/arm-linux-gnueabihf/pkgconfig/"
printf "\n\ndetected CROSSCOMPILE=${CROSSCOMPILE}\n"
printf " CFLAGS=${CFLAGS}\n CXXFLAGS=${CXXFLAGS}\n LDFLAGS=${LDFLAGS}\n GENERIC_CONFIGURE_FLAGS=${GENERIC_CONFIGURE_FLAGS}\n"
printf " BOOST_TOOLSET=${BOOST_TOOLSET}\n OPENSSL_TYPE=${OPENSSL_TYPE}\n OPENSSL_CROSSCOMPILE_PREFIX=${OPENSSL_CROSSCOMPILE_PREFIX}\n"
printf " OPENSSL_TYPE=${OPENSSL_TYPE}\n OPENSSL_CROSSCOMPILE_PREFIX=${OPENSSL_CROSSCOMPILE_PREFIX}\n"
printf " FFMPEG_CONFIGURE_FLAGS=${FFMPEG_CONFIGURE_FLAGS}\n PKG_CONFIG_PATH=${PKG_CONFIG_PATH}\n\n"
sleep 3
fi
@ -92,7 +89,6 @@ function copy_or_download {
function fetch_packages() {
# no trailing slash on url dirs!
copy_or_download https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION_URL_PATH}/source boost_${BOOST_VERSION}.tar.bz2
copy_or_download https://www.openssl.org/source openssl-${OPENSSL_VERSION}.tar.gz
copy_or_download https://curl.se/download curl-${CURL_VERSION}.tar.gz
copy_or_download https://ftp.gnu.org/gnu/libmicrohttpd libmicrohttpd-${LIBMICROHTTPD_VERSION}.tar.gz
@ -101,33 +97,6 @@ function fetch_packages() {
copy_or_download https://lib.openmpt.org/files/libopenmpt/src libopenmpt-${LIBOPENMPT_VERSION}+release.autotools.tar.gz
}
#
# boost
#
function build_boost() {
BOOST_CXX_FLAGS="-fPIC -std=c++17"
if [[ $OS == "Darwin" ]]; then
BOOST_CXX_FLAGS="-fPIC -std=c++17 -stdlib=libc++"
fi
tar xvfj boost_${BOOST_VERSION}.tar.bz2
cd boost_${BOOST_VERSION}
if [[ $CROSSCOMPILE == "rpi" ]]; then
printf "creating ~/user-config.jam with arm compiler\n"
echo "using gcc : arm : arm-linux-gnueabihf-g++ ;" > ~/user-config.jam
else
printf "removing ~/user-config.jam\n"
rm ~/user-config.jam 2> /dev/null
fi
./bootstrap.sh --with-libraries=atomic,chrono,date_time,filesystem,system,thread || exit $?
./b2 headers || exit $?
./b2 -d ${JOBS} -sNO_LZMA=1 -sNO_ZSTD=1 ${BOOST_TOOLSET} cxxstd=17 threading=multi link=shared cxxflags="${BOOST_CXX_FLAGS}" --prefix=${OUTDIR} install || exit $?
cd ..
}
#
# openssl
#
@ -495,7 +464,6 @@ cd vendor
stage_prebuilt_libraries
fetch_packages
build_boost
build_openssl
build_curl
build_libmicrohttpd

View File

@ -7,28 +7,28 @@ if [ $OS == "Linux" ]; then
echo "detected ${DISTRO}"
case $DISTRO in
"impish")
sudo apt-get install build-essential clang cmake libboost-thread1.74-dev libboost-system1.74-dev libboost-filesystem1.74-dev libboost-date-time1.74-dev libboost-atomic1.74-dev libboost-chrono1.74-dev libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncurses-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libtag1-dev libsystemd-dev libavcodec-extra libopenmpt-dev libssl-dev libspa-0.2-dev libpipewire-0.3-dev pipewire pipewire-bin pipewire-audio-client-libraries
sudo apt-get install build-essential clang cmake libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncurses-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libtag1-dev libsystemd-dev libavcodec-extra libopenmpt-dev libssl-dev libspa-0.2-dev libpipewire-0.3-dev pipewire pipewire-bin pipewire-audio-client-libraries
;;
"hirsute")
sudo apt-get install build-essential clang cmake libboost-thread1.74-dev libboost-system1.71-dev libboost-filesystem1.71-dev libboost-date-time1.71-dev libboost-atomic1.71-dev libboost-chrono1.71-dev libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncurses-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libtag1-dev libsystemd-dev libavcodec-extra libopenmpt-dev libssl-dev libspa-0.2-dev libpipewire-0.3-dev pipewire pipewire-bin pipewire-audio-client-libraries
sudo apt-get install build-essential clang cmake libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncurses-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libtag1-dev libsystemd-dev libavcodec-extra libopenmpt-dev libssl-dev libspa-0.2-dev libpipewire-0.3-dev pipewire pipewire-bin pipewire-audio-client-libraries
;;
"focal" | "groovy" | "ulyssa")
sudo apt-get install build-essential clang cmake libboost-thread1.71-dev libboost-system1.71-dev libboost-filesystem1.71-dev libboost-date-time1.71-dev libboost-atomic1.71-dev libboost-chrono1.71-dev libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncurses-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libtag1-dev libsystemd-dev libavcodec-extra libopenmpt-dev libssl-dev
sudo apt-get install build-essential clang cmake libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncurses-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libtag1-dev libsystemd-dev libavcodec-extra libopenmpt-dev libssl-dev
;;
"buster")
sudo apt-get install build-essential clang cmake libboost-thread1.67-dev libboost-system1.67-dev libboost-filesystem1.67-dev libboost-date-time1.67-dev libboost-atomic1.67-dev libboost-chrono1.67-dev libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncursesw5-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libtag1-dev libsystemd-dev libavcodec-extra libopenmpt-dev libssl-dev
sudo apt-get install build-essential clang cmake libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncursesw5-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libtag1-dev libsystemd-dev libavcodec-extra libopenmpt-dev libssl-dev
;;
"bullseye")
sudo apt-get install build-essential clang cmake libboost-thread1.74-dev libboost-system1.74-dev libboost-filesystem1.74-dev libboost-date-time1.74-dev libboost-atomic1.74-dev libboost-chrono1.74-dev libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncursesw5-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libtag1-dev libsystemd-dev libavcodec-extra58 libopenmpt-dev libssl-dev
sudo apt-get install build-essential clang cmake libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncursesw5-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libtag1-dev libsystemd-dev libavcodec-extra58 libopenmpt-dev libssl-dev
;;
"cosmic" | "disco" | "eoan")
sudo apt-get install build-essential clang cmake libboost-thread1.67-dev libboost-system1.67-dev libboost-filesystem1.67-dev libboost-date-time1.67-dev libboost-atomic1.67-dev libboost-chrono1.67-dev libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncursesw5-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libtag1-dev libsystemd-dev libavcodec-extra libopenmpt-dev libssl-dev
sudo apt-get install build-essential clang cmake libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncursesw5-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libtag1-dev libsystemd-dev libavcodec-extra libopenmpt-dev libssl-dev
;;
"bionic")
sudo apt-get install build-essential clang cmake libboost-thread1.65-dev libboost-system1.65-dev libboost-filesystem1.65-dev libboost-date-time1.65-dev libboost-atomic1.65-dev libboost-chrono1.65-dev libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncursesw5-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libtag1-dev libsystemd-dev libavcodec-extra libopenmpt-dev libssl-dev
sudo apt-get install build-essential clang cmake libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncursesw5-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libtag1-dev libsystemd-dev libavcodec-extra libopenmpt-dev libssl-dev
;;
"artful")
sudo apt-get install build-essential clang cmake libboost-thread1.63-dev libboost-system1.63-dev libboost-filesystem1.63-dev libboost-date-time1.63-dev libboost-atomic1.63-dev libboost-chrono1.63-dev libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncursesw5-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libtag1-dev libsystemd-dev libavcodec-extra libopenmpt-dev libssl-dev
sudo apt-get install build-essential clang cmake libogg-dev libvorbis-dev libavutil-dev libavformat-dev libswresample-dev libncursesw5-dev libasound2-dev libpulse-dev pulseaudio libmicrohttpd-dev libmp3lame-dev libcurl4-openssl-dev libev-dev libtag1-dev libsystemd-dev libavcodec-extra libopenmpt-dev libssl-dev
;;
esac
fi
@ -37,7 +37,7 @@ if [ $OS == "Linux" ]; then
VERSION=$(cat /etc/fedora-release | awk '{ print $3 }')
echo "detected ${DISTRO} (version=${VERSION})"
sudo dnf install -y https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm rpm-build rpmdevtools 'dnf-command(builddep)'
sudo dnf install gcc-c++ make cmake boost-devel libogg-devel libvorbis-devel ffmpeg-devel ncurses-devel zlib-devel alsa-lib-devel pulseaudio-libs-devel libcurl-devel libmicrohttpd-devel lame-devel libev-devel openssl-devel taglib-devel systemd-devel libopenmpt-devel
sudo dnf install gcc-c++ make cmake libogg-devel libvorbis-devel ffmpeg-devel ncurses-devel zlib-devel alsa-lib-devel pulseaudio-libs-devel libcurl-devel libmicrohttpd-devel lame-devel libev-devel openssl-devel taglib-devel systemd-devel libopenmpt-devel
case $VERSION in
"34" | "35")
sudo dnf install pipewire-devel pipewire-utils pipewire-libs
@ -45,20 +45,20 @@ if [ $OS == "Linux" ]; then
esac
fi
if [ -f "/etc/arch-release" ] || [ -f "/etc/manjaro-release" ]; then
sudo pacman -S libogg libvorbis libmicrohttpd ffmpeg lame cmake ncurses boost pulseaudio libpulse alsa-lib curl libev taglib libopenmpt
sudo pacman -S libogg libvorbis libmicrohttpd ffmpeg lame cmake ncurses pulseaudio libpulse alsa-lib curl libev taglib libopenmpt
fi
if [ -f "/etc/SUSE-brand" ]; then
echo "detected SUSE"
sudo zypper install libcurl-devel libmicrohttpd-devel libboost_thread1_71_0-devel libboost_system1_71_0-devel libboost_filesystem1_71_0-devel libboost_date_time1_71_0-devel libboost_atomic1_71_0-devel libboost_chrono1_71_0-devel cmake ncurses-devel libogg-devel libvorbis-devel ffmpeg-3-libavcodec-devel ffmpeg-3-libswresample-devel ffmpeg-3-libavformat-devel ffmpeg-3-libavutil-devel libmp3lame-devel pulseaudio libpulse-devel alsa-devel zlib-devel libressl-devel libev-devel libtag-devel systemd-devel libopenmpt-devel
sudo zypper install libcurl-devel libmicrohttpd-devel cmake ncurses-devel libogg-devel libvorbis-devel ffmpeg-3-libavcodec-devel ffmpeg-3-libswresample-devel ffmpeg-3-libavformat-devel ffmpeg-3-libavutil-devel libmp3lame-devel pulseaudio libpulse-devel alsa-devel zlib-devel libressl-devel libev-devel libtag-devel systemd-devel libopenmpt-devel
fi
fi
if [ $OS == "Darwin" ]; then
echo "detected macos"
brew install cmake boost libogg libvorbis ffmpeg libmicrohttpd lame libev taglib libopenmpt
brew install cmake libogg libvorbis ffmpeg libmicrohttpd lame libev taglib libopenmpt
fi
if [ $OS == "FreeBSD" ]; then
echo "detected freebsd"
pkg install boost-all ncurses curl libvorbis libogg libmicrohttpd ffmpeg alsa-lib cmake sndio libev taglib bash libopenmpt
pkg install ncurses curl libvorbis libogg libmicrohttpd ffmpeg alsa-lib cmake sndio libev taglib bash libopenmpt
portsnap fetch
portsnap extract
cd /usr/ports/audio/lame
@ -66,5 +66,5 @@ if [ $OS == "FreeBSD" ]; then
fi
if [ $OS == "OpenBSD" ]; then
echo "detected openbsd"
pkg_add git cmake ffmpeg boost sndio libev libmicrohttpd taglib libopenmpt
pkg_add git cmake ffmpeg sndio libev libmicrohttpd taglib libopenmpt
fi

View File

@ -22,12 +22,6 @@ if [[ "$PLATFORM" == 'Darwin' ]]; then
cp vendor/bin/lib/libogg.0.dylib ./bin/lib
cp vendor/bin/lib/libvorbis.0.dylib ./bin/lib
cp vendor/bin/lib/libvorbisenc.2.dylib ./bin/lib
cp vendor/bin/lib/libboost_atomic.dylib ./bin/lib
cp vendor/bin/lib/libboost_chrono.dylib ./bin/lib
cp vendor/bin/lib/libboost_date_time.dylib ./bin/lib
cp vendor/bin/lib/libboost_filesystem.dylib ./bin/lib
cp vendor/bin/lib/libboost_system.dylib ./bin/lib
cp vendor/bin/lib/libboost_thread.dylib ./bin/lib
cp vendor/bin/lib/libcrypto.1.1.dylib ./bin/lib
cp vendor/bin/lib/libssl.1.1.dylib ./bin/lib
cp vendor/bin/lib/libcurl.4.dylib ./bin/lib
@ -45,12 +39,6 @@ elif [[ "$PLATFORM" == 'Linux' ]]; then
cp vendor/bin/lib/libavformat-musikcube.so.59 ./bin/lib
cp vendor/bin/lib/libavutil-musikcube.so.57 ./bin/lib
cp vendor/bin/lib/libswresample-musikcube.so.4 ./bin/lib
cp vendor/bin/lib/libboost_atomic.so.1.80.0 ./bin/lib
cp vendor/bin/lib/libboost_chrono.so.1.80.0 ./bin/lib
cp vendor/bin/lib/libboost_date_time.so.1.80.0 ./bin/lib
cp vendor/bin/lib/libboost_filesystem.so.1.80.0 ./bin/lib
cp vendor/bin/lib/libboost_system.so.1.80.0 ./bin/lib
cp vendor/bin/lib/libboost_thread.so.1.80.0 ./bin/lib
cp vendor/bin/lib/libcrypto.so.1.1 ./bin/lib
cp vendor/bin/lib/libssl.so.1.1 ./bin/lib
cp vendor/bin/lib/libcurl.so.4 ./bin/lib

View File

@ -149,10 +149,6 @@
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<Filter
Name="boost"
>
</Filter>
<Filter
Name="sqlite"
>

1
src/3rdparty/asio vendored Submodule

@ -0,0 +1 @@
Subproject commit 147f7225a96d45a2807a64e443177f621844e51c

View File

@ -272,8 +272,8 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;_DEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../3rdparty/asio/asio/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;_DEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@ -288,7 +288,7 @@
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib32-msvc-14.2;../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
@ -313,8 +313,8 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-DLL|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;_DEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../3rdparty/asio/asio/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;_DEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@ -330,7 +330,7 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib32-msvc-14.2;../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/debug;$(OutputPath);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/debug;$(OutputPath);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
@ -355,8 +355,8 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Con|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;_DEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../3rdparty/asio/asio/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;_DEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@ -372,7 +372,7 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib32-msvc-14.2;../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
@ -397,8 +397,8 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;_DEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../3rdparty/asio/asio/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;_DEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
@ -412,7 +412,7 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib64-msvc-14.2;../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
@ -436,8 +436,8 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-DLL|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;_DEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../3rdparty/asio/asio/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;_DEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
@ -452,7 +452,7 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib64-msvc-14.2;../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/debug;$(OutputPath);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/debug;$(OutputPath);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
@ -476,8 +476,8 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Con|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;_DEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../3rdparty/asio/asio/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;_DEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
@ -492,7 +492,7 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib64-msvc-14.2;../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
@ -515,8 +515,8 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;NDEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../3rdparty/asio/asio/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;NDEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
@ -534,7 +534,7 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib32-msvc-14.2;../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
@ -562,8 +562,8 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-DLL|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;NDEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../3rdparty/asio/asio/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;NDEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
@ -582,7 +582,7 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib32-msvc-14.2;../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/release;$(OutputPath);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/release;$(OutputPath);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
@ -610,8 +610,8 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Con|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;NDEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../3rdparty/asio/asio/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;NDEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
@ -630,7 +630,7 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib32-msvc-14.2;../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
@ -658,8 +658,8 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;NDEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../3rdparty/asio/asio/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;NDEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
@ -677,7 +677,7 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib64-msvc-14.2;../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
@ -704,8 +704,8 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-DLL|x64'">
<ClCompile>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;NDEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../3rdparty/asio/asio/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;NDEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
@ -724,7 +724,7 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib64-msvc-14.2;../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/release;$(OutputPath);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/release;$(OutputPath);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
@ -751,8 +751,8 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Con|x64'">
<ClCompile>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;NDEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../3rdparty/asio/asio/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;NDEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
@ -771,7 +771,7 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib64-msvc-14.2;../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Console</SubSystem>

View File

@ -46,12 +46,6 @@
#include <musikcore/library/LocalMetadataProxy.h>
#include <musikcore/support/PreferenceKeys.h>
#pragma warning(push, 0)
#include <boost/locale.hpp>
#include <boost/filesystem/detail/utf8_codecvt_facet.hpp>
#include <boost/filesystem.hpp>
#pragma warning(pop)
#include <thread>
using namespace musik;
@ -143,9 +137,6 @@ mcsdk_export void mcsdk_env_init() {
std::unique_lock<std::recursive_mutex> lock(global_mutex);
if (!environment_initialized) {
std::locale locale = std::locale();
std::locale utf8Locale(locale, new boost::filesystem::detail::utf8_codecvt_facet);
boost::filesystem::path::imbue(utf8Locale);
debug::Start();
message_queue = new mcsdk_context_message_queue();
message_queue_thread = std::thread([]{ /* needs to be last */

View File

@ -39,10 +39,6 @@
#include <memory>
#pragma warning(push, 0)
#include <boost/filesystem.hpp>
#pragma warning(pop)
#include <musikcore/support/NarrowCast.h>
#include <musikcore/support/DeleteDefaults.h>

View File

@ -34,13 +34,11 @@
#include "pch.hpp"
#pragma warning(push, 0)
#include <boost/filesystem.hpp>
#pragma warning(pop)
#include <musikcore/support/PreferenceKeys.h>
#include <musikcore/support/Common.h>
#include <filesystem>
#include "Locale.h"
#define KEY_STRINGS "strings"
@ -50,7 +48,6 @@
using namespace musik::core::i18n;
using namespace musik::core;
using namespace musik::core::prefs;
using namespace boost::filesystem;
static nlohmann::json empty;
@ -83,18 +80,19 @@ Locale::~Locale() {
}
void Locale::Initialize(const std::string& localePath) {
namespace fs = std::filesystem;
this->locales.clear();
this->localePath = localePath;
path locales(localePath);
fs::path locales(fs::u8path(localePath));
if (exists(locales)) {
directory_iterator end;
for (directory_iterator file(locales); file != end; file++) {
const path& p = file->path();
if (p.has_extension() && p.extension().string() == ".json") {
std::string fn = p.filename().string();
if (fs::exists(locales)) {
fs::directory_iterator end;
for (fs::directory_iterator it(locales); it != end; it++) {
const fs::path& p = it->path();
if (p.has_extension() && p.extension().u8string() == ".json") {
std::string fn = p.filename().u8string();
fn = fn.substr(0, fn.rfind("."));
this->locales.push_back(fn);
}

View File

@ -41,6 +41,7 @@
#include <musikcore/config.h>
#include <cstdio>
#include <iostream>
#include <filesystem>
static const std::string TAG = "LocalFileStream";
@ -70,21 +71,21 @@ bool LocalFileStream::Open(const char *filename, OpenFlags flags) {
this->uri = filename;
debug::info(TAG, "opening file: " + std::string(filename));
boost::filesystem::path file(filename);
const bool exists = boost::filesystem::exists(file);
std::filesystem::path file(std::filesystem::u8path(filename));
const bool exists = std::filesystem::exists(file);
if (flags & OpenFlags::Read && !exists) {
debug::error(TAG, "open with OpenFlags::Read failed because file doesn't exist. " + this->uri);
return false;
}
if (exists && !boost::filesystem::is_regular(file)) {
if (exists && !std::filesystem::is_regular_file(file)) {
debug::error(TAG, "not a regular file" + this->uri);
return false;
}
boost::system::error_code ec;
this->filesize = narrow_cast<long>(boost::filesystem::file_size(file, ec));
std::error_code ec;
this->filesize = narrow_cast<long>(std::filesystem::file_size(file, ec));
if (ec && flags & OpenFlags::Write) {
this->filesize = 0;
@ -106,7 +107,7 @@ bool LocalFileStream::Open(const char *filename, OpenFlags flags) {
}
}
this->extension = file.extension().string();
this->extension = file.extension().u8string();
#ifdef WIN32
std::wstring u16fn = u8to16(this->uri);
std::wstring u16flags = u8to16(openFlags);

View File

@ -53,13 +53,12 @@
#include <musikcore/sdk/IAnalyzer.h>
#include <musikcore/sdk/IIndexerSource.h>
#include <musikcore/audio/Stream.h>
#include <musikcore/support/ThreadGroup.h>
#include <filesystem>
#include <algorithm>
#include <atomic>
#pragma warning(push, 0)
#include <boost/bind.hpp>
#pragma warning(pop)
#include <functional>
#define STRESS_TEST_DB 0
@ -73,6 +72,10 @@ constexpr int DEFAULT_MAX_THREADS = 2;
constexpr int DEFAULT_MAX_THREADS = 4;
#endif
namespace std {
namespace fs = std::filesystem;
}
using namespace musik::core;
using namespace musik::core::sdk;
using namespace musik::core::audio;
@ -80,7 +83,7 @@ using namespace musik::core::library;
using namespace musik::core::db;
using namespace musik::core::library::query;
using Thread = std::unique_ptr<boost::thread>;
using Thread = std::unique_ptr<std::thread>;
using TagReaderDestroyer = PluginFactory::ReleaseDeleter<ITagReader>;
using DecoderDeleter = PluginFactory::ReleaseDeleter<IDecoderFactory>;
@ -105,7 +108,7 @@ static void closeLogFile() noexcept {
}
static std::string normalizePath(const std::string& path) {
return boost::filesystem::path(path).make_preferred().string();
return std::fs::path(std::fs::u8path(path)).make_preferred().u8string();
}
Indexer::Indexer(const std::string& libraryPath, const std::string& dbFilename)
@ -146,7 +149,7 @@ Indexer::~Indexer() {
void Indexer::Shutdown() {
if (this->thread) {
{
boost::mutex::scoped_lock lock(this->stateMutex);
std::unique_lock<decltype(this->stateMutex)> lock(this->stateMutex);
this->syncQueue.clear();
this->state = StateStopping;
@ -167,7 +170,7 @@ void Indexer::Schedule(SyncType type) {
}
void Indexer::Schedule(SyncType type, IIndexerSource* source) {
boost::mutex::scoped_lock lock(this->stateMutex);
std::unique_lock<decltype(this->stateMutex)> lock(this->stateMutex);
if (!this->thread) {
this->state = StateIdle;
@ -195,7 +198,7 @@ void Indexer::AddPath(const std::string& path) {
context.path = NormalizeDir(path);
{
boost::mutex::scoped_lock lock(this->stateMutex);
std::unique_lock<decltype(this->stateMutex)> lock(this->stateMutex);
if (std::find(this->paths.begin(), this->paths.end(), path) == this->paths.end()) {
this->paths.push_back(path);
@ -211,7 +214,7 @@ void Indexer::RemovePath(const std::string& path) {
context.path = NormalizeDir(path);
{
boost::mutex::scoped_lock lock(this->stateMutex);
std::unique_lock<decltype(this->stateMutex)> lock(this->stateMutex);
auto it = std::find(this->paths.begin(), this->paths.end(), path);
if (it != this->paths.end()) {
@ -222,7 +225,7 @@ void Indexer::RemovePath(const std::string& path) {
}
}
void Indexer::Synchronize(const SyncContext& context, boost::asio::io_service* io) {
void Indexer::Synchronize(const SyncContext& context, asio::io_service* io) {
LocalLibrary::CreateIndexes(this->dbConnection);
IndexerTrack::OnIndexerStarted(this->dbConnection);
@ -264,9 +267,9 @@ void Indexer::Synchronize(const SyncContext& context, boost::asio::io_service* i
try {
const int64_t id = stmt.ColumnInt64(0);
std::string path = stmt.ColumnText(1);
boost::filesystem::path dir(path);
std::fs::path dir(std::fs::u8path(path));
if (boost::filesystem::exists(dir)) {
if (std::fs::exists(dir)) {
paths.push_back(path);
pathIds.push_back(id);
}
@ -351,8 +354,8 @@ void Indexer::FinalizeSync(const SyncContext& context) {
}
void Indexer::ReadMetadataFromFile(
boost::asio::io_service* io,
const boost::filesystem::path& file,
asio::io_service* io,
const std::fs::path& file,
const std::string& pathId)
{
/* we do this here because work may have already been queued before the abort
@ -365,7 +368,7 @@ void Indexer::ReadMetadataFromFile(
return;
}
#define APPEND_LOG(x) if (logFile) { fprintf(logFile, " - [%s] %s\n", x, file.string().c_str()); }
#define APPEND_LOG(x) if (logFile) { fprintf(logFile, " - [%s] %s\n", x, file.u8string().c_str()); }
musik::core::IndexerTrack track(0);
@ -385,7 +388,7 @@ void Indexer::ReadMetadataFromFile(
try {
if ((*it)->CanRead(track.GetString("extension").c_str())) {
APPEND_LOG("can read")
if ((*it)->Read(file.string().c_str(), &store)) {
if ((*it)->Read(file.u8string().c_str(), &store)) {
APPEND_LOG("did read")
saveToDb = true;
break;
@ -454,22 +457,21 @@ inline void Indexer::IncrementTracksScanned(int delta) {
}
void Indexer::SyncDirectory(
boost::asio::io_service* io,
asio::io_service* io,
const std::string &syncRoot,
const std::string &currentPath,
int64_t pathId)
{
std::string normalizedSyncRoot = NormalizeDir(syncRoot);
std::string normalizedCurrentPath = NormalizeDir(currentPath);
std::string leaf = boost::filesystem::path(currentPath).leaf().string(); /* trailing subdir in currentPath */
/* start recursive filesystem scan */
try {
/* for each file in the current path... */
boost::filesystem::path path(currentPath);
boost::filesystem::directory_iterator end;
boost::filesystem::directory_iterator file(path);
std::fs::path path(std::fs::u8path(currentPath));
std::fs::directory_iterator end;
std::fs::directory_iterator file(path);
std::string pathIdStr = std::to_string(pathId);
std::vector<Thread> threads;
@ -480,16 +482,15 @@ void Indexer::SyncDirectory(
}
if (is_directory(file->status())) {
/* recursion here */
/* musik::debug::info(TAG, "scanning subdirectory " + file->path().string()); */
this->SyncDirectory(io, syncRoot, file->path().string(), pathId);
this->SyncDirectory(io, syncRoot, file->path().u8string(), pathId);
}
else {
try {
std::string extension = file->path().extension().string();
std::string extension = file->path().extension().u8string();
for (auto it : this->tagReaders) {
if (it->CanRead(extension.c_str())) {
if (io) {
io->post(boost::bind(
io->post(std::bind(
&Indexer::ReadMetadataFromFile,
this,
io,
@ -504,13 +505,13 @@ void Indexer::SyncDirectory(
}
}
catch (...) {
/* boost::filesystem may throw trying to stat the file */
/* std::filesystem may throw trying to stat the file */
}
}
}
}
catch(...) {
/* boost::filesystem may throw trying to open the directory */
/* std::filesystem may throw trying to open the directory */
}
}
@ -592,16 +593,16 @@ ScanResult Indexer::SyncSource(
}
void Indexer::ThreadLoop() {
boost::filesystem::path thumbPath(this->libraryPath + "thumbs/");
std::fs::path thumbPath(std::fs::u8path(this->libraryPath + "thumbs/"));
if (!boost::filesystem::exists(thumbPath)) {
boost::filesystem::create_directories(thumbPath);
if (!std::fs::exists(thumbPath)) {
std::fs::create_directories(thumbPath);
}
while (true) {
/* wait for some work. */
{
boost::mutex::scoped_lock lock(this->stateMutex);
std::unique_lock<decltype(this->stateMutex)> lock(this->stateMutex);
while (!this->Bail() && this->syncQueue.size() == 0) {
this->state = StateIdle;
this->waitCondition.wait(lock);
@ -625,13 +626,15 @@ void Indexer::ThreadLoop() {
prefs::keys::IndexerThreadCount, DEFAULT_MAX_THREADS);
if (threadCount > 1) {
boost::asio::io_service io;
boost::thread_group threadPool;
boost::asio::io_service::work work(io);
asio::io_service io;
asio::io_service::work work(io);
ThreadGroup threadGroup;
/* initialize the thread pool -- we'll use this to index tracks in parallel. */
for (int i = 0; i < threadCount; i++) {
threadPool.create_thread(boost::bind(&boost::asio::io_service::run, &io));
threadGroup.create_thread([&io]() {
io.run();
});
}
this->Synchronize(context, &io);
@ -644,7 +647,8 @@ void Indexer::ThreadLoop() {
io.stop();
}
});
threadPool.join_all();
threadGroup.join_all();
}
else {
this->Synchronize(context, nullptr);
@ -686,8 +690,8 @@ void Indexer::SyncDelete() {
std::string fn = allTracks.ColumnText(1);
try {
boost::filesystem::path file(fn);
if (!boost::filesystem::exists(file)) {
std::fs::path file(std::fs::u8path(fn));
if (!std::fs::exists(file)) {
remove = true;
}
}
@ -797,7 +801,7 @@ void Indexer::SyncPlaylistTracksOrder() {
}
void Indexer::GetPaths(std::vector<std::string>& paths) {
boost::mutex::scoped_lock lock(this->stateMutex);
std::unique_lock<decltype(this->stateMutex)> lock(this->stateMutex);
std::copy(this->paths.begin(), this->paths.end(), std::back_inserter(paths));
}
@ -846,7 +850,7 @@ static int optimize(
++count;
}
boost::thread::yield();
std::this_thread::yield();
return count;
}
@ -860,8 +864,7 @@ void Indexer::SyncOptimize() {
}
void Indexer::ProcessAddRemoveQueue() {
boost::mutex::scoped_lock lock(this->stateMutex);
std::unique_lock<decltype(this->stateMutex)> lock(this->stateMutex);
while (!this->addRemoveQueue.empty()) {
AddRemoveContext context = this->addRemoveQueue.front();

View File

@ -41,18 +41,16 @@
#include <musikcore/sdk/IIndexerNotifier.h>
#include <musikcore/library/IIndexer.h>
#include <musikcore/support/Preferences.h>
#include <musikcore/support/ThreadGroup.h>
#pragma warning(push, 0)
#include <sigslot/sigslot.h>
#include <boost/thread/thread.hpp>
#include <boost/thread/condition.hpp>
#include <boost/filesystem.hpp>
#include <boost/asio/io_service.hpp>
#include <asio/io_service.hpp>
#pragma warning(pop)
#include <filesystem>
#include <thread>
#include <condition_variable>
#include <deque>
#include <vector>
#include <atomic>
@ -124,7 +122,7 @@ namespace musik { namespace core {
void ThreadLoop();
void Synchronize(const SyncContext& context, boost::asio::io_service* io);
void Synchronize(const SyncContext& context, asio::io_service* io);
void FinalizeSync(const SyncContext& context);
@ -147,14 +145,14 @@ namespace musik { namespace core {
void IncrementTracksScanned(int delta = 1);
void SyncDirectory(
boost::asio::io_service* io,
asio::io_service* io,
const std::string& syncRoot,
const std::string& currentPath,
int64_t pathId);
void ReadMetadataFromFile(
boost::asio::io_service* io,
const boost::filesystem::path& path,
asio::io_service* io,
const std::filesystem::path& path,
const std::string& pathId);
bool Bail() noexcept;
@ -163,8 +161,8 @@ namespace musik { namespace core {
std::string libraryPath;
std::string dbFilename;
std::atomic<State> state;
boost::mutex stateMutex;
boost::condition waitCondition;
std::mutex stateMutex;
std::condition_variable_any waitCondition;
std::unique_ptr<std::thread> thread;
std::atomic<int> incrementalUrisScanned, totalUrisScanned;
std::deque<AddRemoveContext> addRemoveQueue;

View File

@ -42,11 +42,15 @@
#include <musikcore/library/Indexer.h>
#include <musikcore/runtime/Message.h>
#include <musikcore/debug.h>
#include <limits>
#include <filesystem>
static const std::string TAG = "LocalLibrary";
static bool scheduleSyncDueToDbUpgrade = false;
namespace fs = std::filesystem;
using namespace musik::core;
using namespace musik::core::library;
using namespace musik::core::runtime;
@ -167,12 +171,12 @@ std::string LocalLibrary::GetLibraryDirectory() {
directory.append(this->identifier + "/" );
}
boost::filesystem::path dir(directory);
if(!boost::filesystem::exists(dir)){
boost::filesystem::create_directories(dir);
fs::path dir(fs::u8path(directory));
if(!fs::exists(dir)){
fs::create_directories(dir);
}
directory = dir.string();
directory = dir.u8string();
return directory;
}

View File

@ -36,6 +36,7 @@
#include "CategoryListQuery.h"
#include <musikcore/library/LocalLibraryConstants.h>
#include <musikcore/library/query/util/Serialization.h>
#include <musikcore/sdk/String.h>
#include <musikcore/db/Statement.h>
#include <musikcore/i18n/Locale.h>
#include <musikcore/utfutil.h>
@ -43,6 +44,7 @@
using musik::core::db::Statement;
using musik::core::db::Row;
using namespace musik::core::sdk;
using namespace musik::core::db;
using namespace musik::core::library::constants;
using namespace musik::core::library::query;
@ -208,7 +210,7 @@ void CategoryListQuery::ProcessResult(musik::core::db::Statement &stmt) {
SdkValueList unknowns;
while (stmt.Step() == Row) {
int64_t id = stmt.ColumnInt64(0);
std::string displayValue = musik::core::Trim(stmt.ColumnText(1));
std::string displayValue = str::Trim(stmt.ColumnText(1));
/* we track empty / blank values separately, then sort them to the bottom
of the returned list so they don't pollute the first results */

View File

@ -40,12 +40,7 @@
#include <musikcore/library/track/LibraryTrack.h>
#include <musikcore/library/LocalLibraryConstants.h>
#include <musikcore/library/query/util/Serialization.h>
#pragma warning(push, 0)
#include <nlohmann/json.hpp>
#include <boost/algorithm/string/case_conv.hpp>
#include <boost/algorithm/string.hpp>
#pragma warning(pop)
#include <musikcore/sdk/String.h>
using musik::core::db::Statement;
using musik::core::db::Row;
@ -57,7 +52,6 @@ using namespace musik::core::db;
using namespace musik::core::library::query;
using namespace musik::core::library::query::serialization;
using namespace musik::core::library::constants;
using namespace boost::algorithm;
const std::string CategoryTrackListQuery::kQueryName = "CategoryTrackListQuery";
@ -154,7 +148,7 @@ void CategoryTrackListQuery::RegularQuery(musik::core::db::Connection &db) {
std::string limitAndOffset = this->GetLimitAndOffset();
if (this->filter.size()) {
trackFilterValue = "%" + trim_copy(to_lower_copy(filter)) + "%";
trackFilterValue = "%" + sdk::str::Trim(sdk::str::ToLowerCopy(filter)) + "%";
trackFilterClause = category::CATEGORY_TRACKLIST_FILTER;
args.push_back(category::StringArgument(trackFilterValue));
args.push_back(category::StringArgument(trackFilterValue));

View File

@ -39,13 +39,12 @@
#include <musikcore/library/track/LibraryTrack.h>
#include <musikcore/library/query/util/Serialization.h>
#include <musikcore/library/LocalLibraryConstants.h>
#include <musikcore/sdk/String.h>
#include <musikcore/db/Statement.h>
#include <musikcore/sdk/String.h>
#pragma warning(push, 0)
#include <nlohmann/json.hpp>
#include <boost/algorithm/string/case_conv.hpp>
#include <boost/algorithm/string.hpp>
#pragma warning(pop)
using musik::core::db::Statement;
@ -54,11 +53,12 @@ using musik::core::TrackPtr;
using musik::core::LibraryTrack;
using musik::core::ILibraryPtr;
using namespace musik::core;
using namespace musik::core::sdk;
using namespace musik::core::db;
using namespace musik::core::library::constants;
using namespace musik::core::library::query;
using namespace musik::core::library::query::serialization;
using namespace boost::algorithm;
const std::string SearchTrackListQuery::kQueryName = "SearchTrackListQuery";
@ -129,7 +129,7 @@ bool SearchTrackListQuery::OnRun(Connection& db) {
" AND tracks.album_id=al.id AND tracks.visual_genre_id=gn.id AND tracks.visual_artist_id=ar.id "
"ORDER BY " + this->orderBy + " ";
ReplaceAll(query, "{{match_type}}", useRegex ? "REGEXP" : "LIKE");
str::ReplaceAll(query, "{{match_type}}", useRegex ? "REGEXP" : "LIKE");
}
else {
query =
@ -148,7 +148,7 @@ bool SearchTrackListQuery::OnRun(Connection& db) {
if (hasFilter) {
std::string patternToMatch = useRegex
? filter : "%" + trim_copy(to_lower_copy(filter)) + "%";
? filter : "%" + sdk::str::Trim(sdk::str::ToLowerCopy(filter)) + "%";
trackQuery.BindText(0, patternToMatch);
trackQuery.BindText(1, patternToMatch);

View File

@ -38,6 +38,8 @@
#include <musikcore/library/query/util/Serialization.h>
#include <musikcore/library/track/LibraryTrack.h>
#include <musikcore/library/query/util/TrackQueryFragments.h>
#include <musikcore/sdk/String.h>
#include <musikcore/sdk/ReplayGain.h>
#pragma warning(push, 0)
@ -45,6 +47,7 @@
#pragma warning(pop)
using namespace musik::core;
using namespace musik::core::sdk;
using namespace musik::core::db;
using namespace musik::core::library;
using namespace musik::core::library::query;
@ -70,7 +73,7 @@ bool TrackMetadataBatchQuery::OnRun(Connection& db) {
}
std::string query = tracks::kAllMetadataQueryByIdBatch;
ReplaceAll(query, "{{ids}}", idList);
str::ReplaceAll(query, "{{ids}}", idList.c_str());
Statement trackQuery(query.c_str(), db);

View File

@ -45,10 +45,13 @@
#include <musikcore/io/DataStreamFactory.h>
#include <unordered_map>
#include <chrono>
using namespace musik::core;
using namespace musik::core::sdk;
using namespace std::chrono;
#define GENRE_TRACK_COLUMN_NAME "genre"
#define GENRES_TABLE_NAME "genres"
#define GENRE_TRACK_JUNCTION_TABLE_NAME "track_genres"
@ -255,20 +258,21 @@ int64_t IndexerTrack::GetId() {
}
bool IndexerTrack::NeedsToBeIndexed(
const boost::filesystem::path &file,
const std::filesystem::path &file,
db::Connection &dbConnection)
{
try {
this->SetValue("path", file.string().c_str());
this->SetValue("filename", file.string().c_str());
this->SetValue("path", file.u8string().c_str());
this->SetValue("filename", file.u8string().c_str());
size_t lastDot = file.leaf().string().find_last_of(".");
size_t lastDot = file.filename().u8string().find_last_of(".");
if (lastDot != std::string::npos) {
this->SetValue("extension", file.leaf().string().substr(lastDot + 1).c_str());
this->SetValue("extension", file.filename().u8string().substr(lastDot + 1).c_str());
}
const size_t fileSize = (size_t) boost::filesystem::file_size(file);
const size_t fileTime = (size_t) boost::filesystem::last_write_time(file);
const size_t fileSize = (size_t) std::filesystem::file_size(file);
const size_t fileTime = (size_t)duration_cast<milliseconds>(
std::filesystem::last_write_time(file).time_since_epoch()).count();
this->SetValue("filesize", std::to_string(fileSize).c_str());
this->SetValue("filetime", std::to_string(fileTime).c_str());
@ -757,7 +761,7 @@ int64_t IndexerTrack::SaveArtist(db::Connection& dbConnection) {
void IndexerTrack::SaveDirectory(db::Connection& db, const std::string& filename) {
try {
std::string dir = NormalizeDir(
boost::filesystem::path(filename).parent_path().string());
std::filesystem::path(std::filesystem::u8path(filename)).parent_path().u8string());
int64_t dirId = -1;
if (metadataIdCache.find("directoryId-" + dir) != metadataIdCache.end()) {

View File

@ -38,6 +38,8 @@
#include <musikcore/library/track/Track.h>
#include <musikcore/library/LocalLibrary.h>
#include <filesystem>
namespace musik { namespace core {
class IndexerTrack: public Track {
@ -72,7 +74,7 @@ namespace musik { namespace core {
void SetMetadataState(musik::core::sdk::MetadataState state) override;
bool NeedsToBeIndexed(
const boost::filesystem::path &file,
const std::filesystem::path &file,
db::Connection &dbConnection);
bool Save(

View File

@ -247,8 +247,8 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>./;../;../3rdparty/include/;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;MCSDK_DEFINE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;../3rdparty/include/;../3rdparty/win32_include;../3rdparty/asio/asio/include/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;_DEBUG;_CRT_SECURE_NO_DEPRECATE;MCSDK_DEFINE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@ -268,8 +268,8 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-DLL|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>./;../;../3rdparty/include/;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;MCSDK_DEFINE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;../3rdparty/include/;../3rdparty/win32_include;../3rdparty/asio/asio/include/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;_DEBUG;_CRT_SECURE_NO_DEPRECATE;MCSDK_DEFINE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@ -287,14 +287,14 @@
</ClCompile>
<Link>
<AdditionalDependencies>libcurl.lib;libssl-1_1.lib;libcrypto-1_1.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib32-msvc-14.2;../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Con|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>./;../;../3rdparty/include/;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;MCSDK_DEFINE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;../3rdparty/include/;../3rdparty/win32_include;../3rdparty/asio/asio/include/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;_DEBUG;_CRT_SECURE_NO_DEPRECATE;MCSDK_DEFINE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@ -314,8 +314,8 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>./;../;../3rdparty/include/;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;MCSDK_DEFINE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;../3rdparty/include/;../3rdparty/win32_include;../3rdparty/asio/asio/include/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;_DEBUG;_CRT_SECURE_NO_DEPRECATE;MCSDK_DEFINE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
@ -334,8 +334,8 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-DLL|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>./;../;../3rdparty/include/;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;MCSDK_DEFINE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;../3rdparty/include/;../3rdparty/win32_include;../3rdparty/asio/asio/include/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;_DEBUG;_CRT_SECURE_NO_DEPRECATE;MCSDK_DEFINE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
@ -352,14 +352,14 @@
</ClCompile>
<Link>
<AdditionalDependencies>libcurl.lib;libssl-1_1-x64.lib;libcrypto-1_1-x64.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib64-msvc-14.2;../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Con|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>./;../;../3rdparty/include/;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;MCSDK_DEFINE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;../3rdparty/include/;../3rdparty/win32_include;../3rdparty/asio/asio/include/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;_DEBUG;_CRT_SECURE_NO_DEPRECATE;MCSDK_DEFINE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
@ -381,8 +381,8 @@
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>./;../;../3rdparty/include/;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_DEPRECATE;MCSDK_DEFINE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;../3rdparty/include/;../3rdparty/win32_include;../3rdparty/asio/asio/include/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;_CRT_SECURE_NO_DEPRECATE;MCSDK_DEFINE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.hpp</PrecompiledHeaderFile>
@ -403,8 +403,8 @@
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>./;../;../3rdparty/include/;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_DEPRECATE;MCSDK_DEFINE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;../3rdparty/include/;../3rdparty/win32_include;../3rdparty/asio/asio/include/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;_CRT_SECURE_NO_DEPRECATE;MCSDK_DEFINE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.hpp</PrecompiledHeaderFile>
@ -420,7 +420,7 @@
</ClCompile>
<Link>
<AdditionalDependencies>libcurl.lib;libssl-1_1.lib;libcrypto-1_1.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib32-msvc-14.2;../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Con|Win32'">
@ -429,8 +429,8 @@
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>./;../;../3rdparty/include/;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_DEPRECATE;MCSDK_DEFINE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;../3rdparty/include/;../3rdparty/win32_include;../3rdparty/asio/asio/include/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;_CRT_SECURE_NO_DEPRECATE;MCSDK_DEFINE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.hpp</PrecompiledHeaderFile>
@ -451,8 +451,8 @@
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>./;../;../3rdparty/include/;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_DEPRECATE;MCSDK_DEFINE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;../3rdparty/include/;../3rdparty/win32_include;../3rdparty/asio/asio/include/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;_CRT_SECURE_NO_DEPRECATE;MCSDK_DEFINE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.hpp</PrecompiledHeaderFile>
@ -473,8 +473,8 @@
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>./;../;../3rdparty/include/;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_DEPRECATE;MCSDK_DEFINE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;../3rdparty/include/;../3rdparty/win32_include;../3rdparty/asio/asio/include/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;_CRT_SECURE_NO_DEPRECATE;MCSDK_DEFINE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.hpp</PrecompiledHeaderFile>
@ -490,7 +490,7 @@
</ClCompile>
<Link>
<AdditionalDependencies>libcurl.lib;libssl-1_1-x64.lib;libcrypto-1_1-x64.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib64-msvc-14.2;../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Con|x64'">
@ -499,8 +499,8 @@
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>./;../;../3rdparty/include/;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_DEPRECATE;MCSDK_DEFINE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;../3rdparty/include/;../3rdparty/win32_include;../3rdparty/asio/asio/include/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;_CRT_SECURE_NO_DEPRECATE;MCSDK_DEFINE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.hpp</PrecompiledHeaderFile>
@ -729,6 +729,7 @@
<ClInclude Include="support\Playback.h" />
<ClInclude Include="support\PreferenceKeys.h" />
<ClInclude Include="support\Preferences.h" />
<ClInclude Include="support\ThreadGroup.h" />
<ClInclude Include="utfutil.h" />
<ClInclude Include="version.h" />
</ItemGroup>

View File

@ -666,5 +666,8 @@
<ClInclude Include="support\PiggyDebugBackend.h">
<Filter>src\support</Filter>
</ClInclude>
<ClInclude Include="support\ThreadGroup.h">
<Filter>src\support</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@ -104,7 +104,7 @@ namespace musik { namespace core { namespace net {
ClientPtr rawClient;
Connection connection;
std::string sessionId;
boost::asio::io_service io;
asio::io_service io;
std::unique_ptr<std::thread> thread;
mutable std::recursive_mutex mutex;
bool useTls{ false };

View File

@ -41,14 +41,14 @@ using namespace musik::core::net;
static inline RawWebSocketClient::SslContext createSslContext() {
RawWebSocketClient::SslContext ctx =
std::make_shared<boost::asio::ssl::context>(boost::asio::ssl::context::sslv23);
std::make_shared<asio::ssl::context>(asio::ssl::context::sslv23);
try {
ctx->set_options(boost::asio::ssl::context::default_workarounds |
boost::asio::ssl::context::no_sslv2 |
boost::asio::ssl::context::no_sslv3 |
boost::asio::ssl::context::single_dh_use |
boost::asio::ssl::context::verify_none);
ctx->set_options(asio::ssl::context::default_workarounds |
asio::ssl::context::no_sslv2 |
asio::ssl::context::no_sslv3 |
asio::ssl::context::single_dh_use |
asio::ssl::context::verify_none);
}
catch (std::exception& e) {
std::cerr << "Error in context pointer: " << e.what() << std::endl;
@ -56,7 +56,7 @@ static inline RawWebSocketClient::SslContext createSslContext() {
return ctx;
}
RawWebSocketClient::RawWebSocketClient(boost::asio::io_service& io) {
RawWebSocketClient::RawWebSocketClient(asio::io_service& io) {
websocketpp::lib::error_code ec;
plainTextClient = std::make_unique<PlainTextClient>();

View File

@ -36,6 +36,10 @@
#include <musikcore/config.h>
#ifdef timeout
#undef timeout
#endif
#pragma warning(push, 0)
#include <websocketpp/config/asio_no_tls_client.hpp>
#include <websocketpp/config/asio_client.hpp>
@ -55,7 +59,7 @@ namespace musik { namespace core { namespace net {
using PlainTextClientPtr = std::unique_ptr<PlainTextClient>;
using TlsClient = websocketpp::client<websocketpp::config::asio_tls_client>;
using TlsClientPtr = std::unique_ptr<TlsClient>;
using SslContext = std::shared_ptr<boost::asio::ssl::context>;
using SslContext = std::shared_ptr<asio::ssl::context>;
using Message = websocketpp::config::asio_client::message_type::ptr;
using Connection = websocketpp::connection_hdl;
@ -70,7 +74,7 @@ namespace musik { namespace core { namespace net {
TLS = 1
};
RawWebSocketClient(boost::asio::io_service& io);
RawWebSocketClient(asio::io_service& io);
RawWebSocketClient(const RawWebSocketClient&) = delete;
~RawWebSocketClient();

View File

@ -35,7 +35,7 @@
#include "pch.hpp"
#include <musikcore/net/WebSocketClient.h>
#include <musikcore/support/Common.h>
#include <musikcore/sdk/String.h>
#include <musikcore/support/PreferenceKeys.h>
#include <musikcore/support/Preferences.h>
#include <musikcore/runtime/Message.h>
@ -46,6 +46,7 @@
#pragma warning(pop)
using namespace musik::core;
using namespace musik::core::sdk;
using namespace musik::core::net;
using namespace musik::core::runtime;
@ -112,7 +113,7 @@ static inline bool extractRawQueryResult(
}
static inline bool isVersionCompatible(const std::string& str) {
auto parts = Split(str, ".");
auto parts = str::Split(str, ".");
return
parts.size() == 3 &&
parts[0] == std::to_string(VERSION_MAJOR) &&

View File

@ -123,7 +123,7 @@ namespace musik { namespace core { namespace net {
ClientPtr rawClient;
Connection connection;
boost::asio::io_service io;
asio::io_service io;
std::unique_ptr<std::thread> thread;
mutable std::recursive_mutex mutex;
bool useTls{ false };

View File

@ -39,6 +39,7 @@
#include <algorithm>
#include <unordered_map>
#include <thread>
#include <filesystem>
#include <cmath>
#include <string>
@ -47,9 +48,6 @@
#include <websocketpp/config/asio_no_tls_client.hpp>
#include <websocketpp/config/asio_client.hpp>
#include <websocketpp/client.hpp>
#include <boost/filesystem.hpp>
#include <boost/algorithm/string/case_conv.hpp>
#include <boost/algorithm/string.hpp>
#include <nlohmann/json.hpp>
#include <sigslot/sigslot.h>
#pragma warning(pop)

View File

@ -43,10 +43,13 @@
#include <musikcore/debug.h>
#include <musikcore/utfutil.h>
#include <iostream>
#include <filesystem>
static const std::string TAG = "PluginFactory";
static std::mutex instanceMutex;
namespace fs = std::filesystem;
using namespace musik::core;
#ifdef WIN32
@ -92,17 +95,17 @@ void PluginFactory::LoadPlugins() {
#endif
std::string pluginDir(GetPluginDirectory());
boost::filesystem::path dir(pluginDir);
fs::path dir(fs::u8path(pluginDir));
try {
boost::filesystem::directory_iterator end;
for (boost::filesystem::directory_iterator file(dir); file != end; file++) {
if (boost::filesystem::is_regular(file->status())){
std::string filename(file->path().string());
fs::directory_iterator end;
for (fs::directory_iterator file(dir); file != end; file++) {
if (fs::is_regular_file(file->status())){
std::string filename(file->path().u8string());
std::shared_ptr<Descriptor> descriptor(new Descriptor());
descriptor->filename = filename;
descriptor->key = boost::filesystem::path(filename).filename().string();
descriptor->key = fs::path(fs::u8path(filename)).filename().u8string();
#ifdef WIN32
/* if the file ends with ".dll", we'll try to load it*/

View File

@ -37,6 +37,8 @@
#include <string>
#include <string.h>
#include <memory>
#include <vector>
#include <algorithm>
#ifdef WIN32
#include <Windows.h>
@ -45,7 +47,7 @@
namespace musik { namespace core { namespace sdk { namespace str {
#ifdef WIN32
template <typename String=std::string>
template <typename String = std::string>
static inline String u16to8(const wchar_t* utf16) {
if (!utf16) return "";
int size = WideCharToMultiByte(CP_UTF8, 0, utf16, -1, 0, 0, 0, 0);
@ -57,7 +59,7 @@ namespace musik { namespace core { namespace sdk { namespace str {
return utf8str;
}
template <typename Wstring=std::wstring>
template <typename Wstring = std::wstring>
static inline Wstring u8to16(const char* utf8) {
int size = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, 0, 0);
if (size <= 0) return L"";
@ -70,7 +72,7 @@ namespace musik { namespace core { namespace sdk { namespace str {
#endif
template<typename... Args>
static std::string format(const std::string& format, Args ... args) {
static std::string Format(const std::string& format, Args ... args) {
/* https://stackoverflow.com/a/26221725 */
size_t size = std::snprintf(nullptr, 0, format.c_str(), args ...) + 1; /* extra space for '\0' */
std::unique_ptr<char[]> buf(new char[size]);
@ -78,4 +80,92 @@ namespace musik { namespace core { namespace sdk { namespace str {
return std::string(buf.get(), buf.get() + size - 1); /* omit the '\0' */
}
static inline bool IsSpace(const char c) {
return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == '\v' || c == '\f';
}
template<typename String = std::string>
static String Trim(const String& str) {
if (str.size()) {
int length = (size_t)str.size();
int start = 0, end = length;
int i = 0;
while (i < length) {
if (!IsSpace(str[i])) {
break;
}
++start;
++i;
}
i = end - 1;
while (i >= 0) {
if (!IsSpace(str[i])) {
break;
}
--i;
}
if (end >= start) {
std::string result = str.substr((size_t)start, (size_t)end - start);
return result;
}
}
return str;
}
template<typename String = std::string>
static String Trim(const char* str) {
return Trim(String(str));
}
template<typename String = std::string, typename Result = std::vector<String>>
static Result Split(const String& in, const String& delim) {
Result result;
size_t last = 0, next = 0;
while ((next = in.find(delim, last)) != std::string::npos) {
result.push_back(std::move(Trim(in.substr(last, next - last))));
last = next + 1;
}
result.push_back(std::move(Trim(in.substr(last))));
return result;
}
template<typename String = std::string, typename Result = std::vector<String>>
static Result Split(const String& in, const char* delim) {
return Split(in, String(delim));
}
template<typename String = std::string>
static void ReplaceAll(String& input, const String& find, const String& replace) {
size_t pos = input.find(find);
while (pos != std::string::npos) {
input.replace(pos, find.size(), replace);
pos = input.find(find, pos + replace.size());
}
}
template<typename String = std::string>
static void ReplaceAll(String& input, const char* find, const char* replace) {
ReplaceAll(input, String(find), String(replace));
}
template<typename String = std::string>
static String ReplaceAllCopy(const String& input, const String& find, const String& replace) {
String copy = input;
ReplaceAll(copy, find, replace);
return copy;
}
template<typename String = std::string>
static String ReplaceAllCopy(const String& input, const char* find, const char* replace) {
return ReplaceAllCopy(input, String(find), String(replace));
}
template<typename String = std::string>
static String ToLowerCopy(const String& input) {
String copy = input;
std::transform(copy.begin(), copy.end(), copy.begin(),
[](unsigned char c) { return std::tolower(c); });
return copy;
}
} } } }

View File

@ -44,6 +44,7 @@
#include <string>
#include <cctype>
#include <algorithm>
#include <filesystem>
#pragma warning(push, 0)
#include <utf8/utf8.h>
@ -74,9 +75,11 @@
#include <sys/sysctl.h>
#endif
namespace fs = std::filesystem;
static inline void silentDelete(const std::string fn) {
boost::system::error_code ec;
boost::filesystem::remove(boost::filesystem::path(fn), ec);
std::error_code ec;
fs::remove(fs::path(fs::u8path(fn)), ec);
}
namespace musik { namespace core {
@ -127,8 +130,8 @@ namespace musik { namespace core {
argv = new char*[len];
if (sysctl(mib, 4, argv, &len, nullptr, 0) < 0) abort();
boost::filesystem::path command = boost::filesystem::system_complete(argv[0]);
realpath(command.c_str(), pathbuf);
fs::path command = fs::absolute(fs::path(fs::u8path(argv[0])));
realpath(command.u8string().c_str(), pathbuf);
delete[] argv;
#else
std::string pathToProc = u8fmt("/proc/%d/exe", (int) getpid());
@ -146,6 +149,22 @@ namespace musik { namespace core {
std::string GetHomeDirectory() {
std::string directory;
#ifdef WIN32
DWORD bufferSize = GetEnvironmentVariable(L"USERPROFILE", 0, 0);
wchar_t* buffer = new wchar_t[bufferSize + 2];
GetEnvironmentVariable(L"USERPROFILE", buffer, bufferSize);
directory.assign(u16to8(buffer));
delete[] buffer;
#else
directory = std::string(std::getenv("HOME"));
#endif
return directory;
}
std::string GetDataDirectory(bool create) {
std::string directory;
#ifdef WIN32
DWORD bufferSize = GetEnvironmentVariable(L"APPDATA", 0, 0);
wchar_t* buffer = new wchar_t[bufferSize + 2];
@ -162,21 +181,16 @@ namespace musik { namespace core {
}
#endif
return directory;
}
std::string GetDataDirectory(bool create) {
std::string directory = GetHomeDirectory() + std::string("/musikcube/");
directory += std::string("/musikcube/");
if (create) {
try {
boost::filesystem::path path(directory);
if (!boost::filesystem::exists(path)) {
boost::filesystem::create_directories(path);
fs::path path(fs::u8path(directory));
if (!fs::exists(path)) {
fs::create_directories(path);
}
}
catch (...) {
/* ugh, fixme */
}
}
@ -279,9 +293,9 @@ namespace musik { namespace core {
}
std::string NormalizeDir(std::string path) {
path = boost::filesystem::path(path).make_preferred().string();
path = fs::path(fs::u8path(path)).make_preferred().u8string();
std::string sep(1, boost::filesystem::path::preferred_separator);
std::string sep(1, fs::path::preferred_separator);
if (path.size() && path.substr(path.size() - 1, 1) != sep) {
path += sep;
}
@ -289,55 +303,6 @@ namespace musik { namespace core {
return path;
}
void ReplaceAll(std::string& input, const std::string& find, const std::string& replace) {
size_t pos = input.find(find);
while (pos != std::string::npos) {
input.replace(pos, find.size(), replace);
pos = input.find(find, pos + replace.size());
}
}
static inline bool IsSpace(const char c) {
return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == '\v' || c == '\f';
}
std::string Trim(const std::string& str) {
if (str.size()) {
int start = 0;
for (size_t i = 0; i < str.length(); i++) {
if (!IsSpace(str[i])) {
break;
}
++start;
}
int end = (int)str.length();
for (size_t i = str.length() - 1; i >= 0; i--) {
if (!IsSpace(str[i])) {
break;
}
--end;
}
if (end > start) {
std::string result = str.substr((size_t)start, (size_t)end - start);
return result;
}
}
return str;
}
std::vector<std::string> Split(
const std::string& in, const std::string& delim)
{
std::vector<std::string> result;
size_t last = 0, next = 0;
while ((next = in.find(delim, last)) != std::string::npos) {
result.push_back(std::move(Trim(in.substr(last, next - last))));
last = next + 1;
}
result.push_back(std::move(Trim(in.substr(last))));
return result;
}
void OpenFile(const std::string& path) {
#ifdef WIN32
ShellExecuteA(nullptr, nullptr, path.c_str(), nullptr, nullptr, SW_SHOWNORMAL);

View File

@ -50,9 +50,6 @@ namespace musik { namespace core {
bool CopyFile(const std::string& from, const std::string& to);
int64_t Checksum(char *data,unsigned int bytes);
size_t CopyString(const std::string& src, char* dst, size_t size);
void ReplaceAll(std::string& input, const std::string& find, const std::string& replace);
std::vector<std::string> Split(const std::string& in, const std::string& delim);
std::string Trim(const std::string& str);
bool FileToByteArray(const std::string& path, char** target, int& size, bool nullTerminate = false);
} }

View File

@ -0,0 +1,151 @@
//////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2004-2021 musikcube team
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// * Neither the name of the author nor the names of other contributors may
// be used to endorse or promote products derived from this software
// without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////////
/* copied from boost's ThreadGroup.hpp */
#pragma once
#include <list>
#include <thread>
#include <shared_mutex>
#include <mutex>
#include <memory>
namespace musik { namespace core {
class ThreadGroup
{
private:
ThreadGroup(ThreadGroup const&);
ThreadGroup& operator=(ThreadGroup const&);
public:
ThreadGroup() {}
~ThreadGroup()
{
for (std::list<std::thread*>::iterator it = threads.begin(), end = threads.end();
it != end;
++it)
{
delete* it;
}
}
bool is_this_thread_in()
{
std::thread::id id = std::this_thread::get_id();
std::shared_lock<std::shared_mutex> guard(m);
for (std::list<std::thread*>::iterator it = threads.begin(), end = threads.end();
it != end;
++it)
{
if ((*it)->get_id() == id)
return true;
}
return false;
}
bool is_thread_in(std::thread* thrd)
{
if (thrd)
{
std::thread::id id = thrd->get_id();
std::shared_lock<std::shared_mutex> guard(m);
for (std::list<std::thread*>::iterator it = threads.begin(), end = threads.end();
it != end;
++it)
{
if ((*it)->get_id() == id)
return true;
}
return false;
}
else
{
return false;
}
}
template<typename F>
std::thread* create_thread(F threadfunc)
{
std::lock_guard<std::shared_mutex> guard(m);
std::unique_ptr<std::thread> new_thread(new std::thread(threadfunc));
threads.push_back(new_thread.get());
return new_thread.release();
}
void add_thread(std::thread* thrd)
{
if (thrd)
{
std::lock_guard<std::shared_mutex> guard(m);
threads.push_back(thrd);
}
}
void remove_thread(std::thread* thrd)
{
std::lock_guard<std::shared_mutex> guard(m);
std::list<std::thread*>::iterator const it = std::find(threads.begin(), threads.end(), thrd);
if (it != threads.end())
{
threads.erase(it);
}
}
void join_all()
{
std::shared_lock<std::shared_mutex> guard(m);
for (std::list<std::thread*>::iterator it = threads.begin(), end = threads.end();
it != end;
++it)
{
if ((*it)->joinable())
(*it)->join();
}
}
size_t size() const
{
std::shared_lock<std::shared_mutex> guard(m);
return threads.size();
}
private:
std::list<std::thread*> threads;
mutable std::shared_mutex m;
};
} }

View File

@ -37,10 +37,10 @@
#include <string>
#define VERSION_MAJOR 0
#define VERSION_MINOR 98
#define VERSION_PATCH 2
#define VERSION_COMMIT_HASH "#4facbdde"
#define VERSION "0.98.2"
#define VERSION_MINOR 99
#define VERSION_PATCH 0
#define VERSION_COMMIT_HASH "#dc9feae4"
#define VERSION "0.99.0"
namespace musik {
namespace cube {

View File

@ -61,11 +61,6 @@
#include <musikcore/net/PiggyWebSocketClient.h>
#include <musikcore/support/PiggyDebugBackend.h>
#include <boost/locale.hpp>
#include <boost/filesystem/path.hpp>
#include <boost/filesystem/fstream.hpp>
#include <boost/filesystem/detail/utf8_codecvt_facet.hpp>
#ifdef WIN32
#include <cursespp/Win32Util.h>
#include "resource.h"
@ -97,11 +92,6 @@ int main(int argc, char* argv[]) {
srand((unsigned int) time(0));
/* the following allows boost::filesystem to use utf8 on Windows */
std::locale locale = std::locale();
std::locale utf8Locale(locale, new boost::filesystem::detail::utf8_codecvt_facet);
boost::filesystem::path::imbue(utf8Locale);
/* ensure we have the correct locale loaded */
core::i18n::Locale::Instance().Initialize(core::GetApplicationDirectory() + "/locales/");
@ -114,7 +104,11 @@ int main(int argc, char* argv[]) {
#endif
std::string errorFn = core::GetDataDirectory() + "stderr.txt";
#ifdef WIN32
_wfreopen(u8to16(errorFn).c_str(), L"w", stderr);
#else
freopen(errorFn.c_str(), "w", stderr);
#endif
auto prefs = Preferences::ForComponent(core::prefs::components::Settings);

View File

@ -44,8 +44,12 @@
#include <app/util/Messages.h>
#include <app/overlay/PlayQueueOverlays.h>
#include <filesystem>
#include "DirectoryLayout.h"
namespace fs = std::filesystem;
using namespace musik;
using namespace musik::core::library::constants;
using namespace musik::core;
@ -157,8 +161,6 @@ void DirectoryLayout::RequeryTrackList(ListWindow *view) {
}
if (fullPath.size()) {
fullPath = NormalizeDir(fullPath);
auto query = std::shared_ptr<TrackListQueryBase>(
new DirectoryTrackListQuery(this->library, fullPath));

View File

@ -34,7 +34,7 @@
#include <stdafx.h>
#include "HotkeysLayout.h"
#include <musikcore/support/Common.h>
#include <musikcore/sdk/String.h>
#include <cursespp/App.h>
#include <cursespp/Colors.h>
#include <cursespp/DialogOverlay.h>
@ -48,6 +48,7 @@
using namespace cursespp;
using namespace musik::cube;
using namespace musik::core;
using namespace musik::core::sdk;
using Entry = IScrollAdapter::EntryPtr;
using Callback = std::function<void()>;
@ -92,8 +93,8 @@ static void checkConflictAndSave(Hotkeys::Id id, const std::string& key, Callbac
auto dialog = std::make_shared<DialogOverlay>();
std::string message = _TSTR("hotkeys_conflict_message");
ReplaceAll(message, "{{hotkey}}", key);
ReplaceAll(message, "{{existing}}", existing);
str::ReplaceAll(message, "{{hotkey}}", key.c_str());
str::ReplaceAll(message, "{{existing}}", existing.c_str());
(*dialog)
.SetTitle(_TSTR("hotkeys_conflict_title"))
@ -125,7 +126,7 @@ static void backupAndShowDialog() {
auto dialog = std::make_shared<DialogOverlay>();
std::string message = _TSTR("hotkeys_backup_success_message");
ReplaceAll(message, "{{path}}", out);
str::ReplaceAll(message, "{{path}}", out.c_str());
(*dialog)
.SetTitle(_TSTR("hotkeys_backup_success_title"))
@ -138,7 +139,7 @@ static void backupAndShowDialog() {
auto dialog = std::make_shared<DialogOverlay>();
std::string message = _TSTR("hotkeys_backup_failure_message");
ReplaceAll(message, "{{path}}", dir);
str::ReplaceAll(message, "{{path}}", dir.c_str());
(*dialog)
.SetTitle(_TSTR("hotkeys_backup_failure_title"))
@ -153,8 +154,8 @@ static void showDeleteOverlay(Hotkeys::Id id, Callback cb) {
auto dialog = std::make_shared<DialogOverlay>();
std::string message = _TSTR("hotkeys_delete_binding_message");
ReplaceAll(message, "{{key}}", Hotkeys::Name(id));
ReplaceAll(message, "{{default}}", Hotkeys::Default(id));
str::ReplaceAll(message, "{{key}}", Hotkeys::Name(id).c_str());
str::ReplaceAll(message, "{{default}}", Hotkeys::Default(id).c_str());
(*dialog)
.SetTitle(_TSTR("hotkeys_delete_binding_title"))

View File

@ -37,7 +37,7 @@
#include <app/util/Messages.h>
#include <musikcore/i18n/Locale.h>
#include <musikcore/support/Auddio.h>
#include <musikcore/support/Common.h>
#include <musikcore/sdk/String.h>
#include <musikcore/library/query/LyricsQuery.h>
#include <cursespp/App.h>
#include <cursespp/Screen.h>
@ -183,9 +183,9 @@ void LyricsLayout::LoadLyricsForCurrentTrack() {
void LyricsLayout::UpdateAdapter() {
std::string fixed = this->currentLyrics;
ReplaceAll(fixed, "\r\n", "\n");
ReplaceAll(fixed, "\r", "\n");
auto items = Split(fixed, "\n");
str::ReplaceAll(fixed, "\r\n", "\n");
str::ReplaceAll(fixed, "\r", "\n");
auto items = str::Split(fixed, "\n");
this->adapter->Clear();
for (auto& text : items) {
this->adapter->AddEntry(std::make_shared<SingleLineEntry>(text));

View File

@ -41,16 +41,25 @@
#include "DirectoryAdapter.h"
#include <filesystem>
namespace fs = std::filesystem;
using namespace musik::cube;
using namespace cursespp;
using namespace boost::filesystem;
#ifdef WIN32
static const fs::path kDefaultRoot("");
#else
static const fs::path kDefaultRoot("/");
#endif
#ifdef WIN32
static void buildDriveList(std::vector<std::string>& target) {
target.clear();
static char buffer[4096];
DWORD result = ::GetLogicalDriveStringsA(4096, buffer);
if (result) {
const DWORD result = ::GetLogicalDriveStringsA(4096, buffer);
if (result && buffer) {
char* current = buffer;
while (*current) {
target.push_back(std::string(current));
@ -59,26 +68,20 @@ static void buildDriveList(std::vector<std::string>& target) {
}
}
static bool shouldBuildDriveList(const boost::filesystem::path& dir) {
std::string pathstr = dir.string();
return
(pathstr.size() == 2 && pathstr[1] == ':') ||
(pathstr.size() == 3 && pathstr[2] == ':') ||
(pathstr.size() == 0);
static bool shouldBuildDriveList(const fs::path& dir) {
return dir.u8string().size() == 0;
}
#endif
static bool hasSubdirectories(
boost::filesystem::path p, bool showDotfiles)
{
static bool hasSubdirectories(fs::path p, bool showDotfiles) {
try {
directory_iterator end;
directory_iterator file(p);
fs::directory_iterator end;
fs::directory_iterator file(p);
while (file != end) {
try {
if (is_directory(file->status())) {
if (showDotfiles || file->path().leaf().string()[0] != '.') {
if (fs::is_directory(file->status())) {
if (showDotfiles || file->path().filename().u8string().at(0) != '.') {
return true;
}
}
@ -97,22 +100,22 @@ static bool hasSubdirectories(
}
static void buildDirectoryList(
const path& p,
const fs::path& p,
std::vector<std::string>& target,
bool showDotfiles)
{
target.clear();
try {
directory_iterator end;
directory_iterator file(p);
fs::directory_iterator end;
fs::directory_iterator file(p);
while (file != end) {
try {
if (is_directory(file->status())) {
std::string leaf = file->path().leaf().string();
if (showDotfiles || leaf[0] != '.') {
target.push_back(leaf);
std::string leaf = file->path().filename().u8string();
if (showDotfiles || leaf.at(0) != '.') {
target.push_back(file->path().u8string());
}
}
}
@ -137,14 +140,19 @@ static void buildDirectoryList(
}
}
static std::string normalizePath(boost::filesystem::path path) {
return musik::core::NormalizeDir(path.string());
static std::string pathToString(fs::path path) {
return musik::core::NormalizeDir(path.u8string());
}
static fs::path stringToPath(const std::string& path) {
return fs::u8path(musik::core::NormalizeDir(path));
}
DirectoryAdapter::DirectoryAdapter() {
this->showDotfiles = false;
this->showRootDirectory = false;
this->dir = musik::core::GetHomeDirectory();
this->dir = fs::path(fs::u8path(musik::core::GetHomeDirectory()));
this->rootDir = kDefaultRoot;
buildDirectoryList(dir, subdirs, showDotfiles);
}
@ -163,10 +171,9 @@ void DirectoryAdapter::SetShowRootDirectory(bool show) {
}
size_t DirectoryAdapter::Select(cursespp::ListWindow* window) {
bool hasParent = this->ShowParentPath();
const bool hasParent = this->ShowParentPath();
size_t selectedIndex = NO_INDEX;
size_t initialIndex = window->GetSelectedIndex();
bool selectParent = false;
if (this->IsCurrentDirectory(initialIndex)) {
return initialIndex;
}
@ -175,17 +182,31 @@ size_t DirectoryAdapter::Select(cursespp::ListWindow* window) {
selectedIndex = this->selectedIndexStack.top();
this->selectedIndexStack.pop();
}
#ifdef WIN32
/* has_relative_path() is weird, as it does what i'd expect
has_parent_path() to do... documentation doesn't really help
much, but basically we're checking if we're at the root here;
if we are, we reset the directory to empty so we can build a
drive list. */
if (!this->dir.has_relative_path()) {
this->dir = "";
}
else {
this->dir = this->dir.parent_path();
}
#else
this->dir = this->dir.parent_path();
#endif
}
else {
selectedIndexStack.push(initialIndex);
initialIndex -= this->GetHeaderCount();
this->dir /= this->subdirs[initialIndex];
this->dir = fs::u8path(this->subdirs.at(initialIndex));
}
#ifdef WIN32
if (shouldBuildDriveList(this->dir)) {
dir = path();
dir = fs::path();
buildDriveList(subdirs);
return selectedIndex;
}
@ -199,25 +220,25 @@ size_t DirectoryAdapter::Select(cursespp::ListWindow* window) {
void DirectoryAdapter::SetRootDirectory(const std::string& directory) {
if (directory.size()) {
dir = rootDir = musik::core::NormalizeDir(directory);
dir = rootDir = stringToPath(directory);
}
else {
dir = musik::core::GetHomeDirectory();
rootDir = path();
rootDir = kDefaultRoot;
}
buildDirectoryList(dir, subdirs, showDotfiles);
}
std::string DirectoryAdapter::GetFullPathAt(size_t index) {
bool hasParent = this->ShowParentPath();
const bool hasParent = this->ShowParentPath();
if (hasParent && index == 0) {
return "";
}
if (this->IsCurrentDirectory(index)) {
return this->dir.string();
return this->dir.u8string();
}
index -= this->GetHeaderCount();
return normalizePath((dir / this->subdirs[index]).string());
return pathToString(fs::u8path(this->subdirs.at(index)));
}
std::string DirectoryAdapter::GetLeafAt(size_t index) {
@ -227,12 +248,12 @@ std::string DirectoryAdapter::GetLeafAt(size_t index) {
if (this->IsCurrentDirectory(index)) {
return ".";
}
return this->subdirs[index];
return fs::u8path(this->subdirs.at(index)).u8string();
}
size_t DirectoryAdapter::IndexOf(const std::string& leaf) {
for (size_t i = 0; i < this->subdirs.size(); i++) {
if (this->subdirs[i] == leaf) {
if (this->subdirs.at(i) == leaf) {
return i + this->GetHeaderCount();
}
}
@ -258,16 +279,16 @@ void DirectoryAdapter::SetDotfilesVisible(bool visible) {
std::string DirectoryAdapter::GetParentPath() {
if (dir.has_parent_path() &&
normalizePath(this->dir) != normalizePath(this->rootDir))
pathToString(this->dir) != pathToString(this->rootDir))
{
return normalizePath(dir.parent_path().string());
return pathToString(dir.parent_path().u8string());
}
return "";
}
std::string DirectoryAdapter::GetCurrentPath() {
return normalizePath(dir.string());
return pathToString(dir.u8string());
}
void DirectoryAdapter::Refresh() {
@ -275,7 +296,7 @@ void DirectoryAdapter::Refresh() {
}
bool DirectoryAdapter::IsAtRoot() {
return normalizePath(this->dir) == normalizePath(this->rootDir);
return pathToString(this->dir) == pathToString(this->rootDir);
}
bool DirectoryAdapter::ShowParentPath() {
@ -294,7 +315,7 @@ size_t DirectoryAdapter::GetHeaderCount() {
}
bool DirectoryAdapter::HasSubDirectories(size_t index) {
bool hasParent = this->ShowParentPath();
const bool hasParent = this->ShowParentPath();
if (index == 0 && hasParent) {
return true;
}
@ -302,7 +323,7 @@ bool DirectoryAdapter::HasSubDirectories(size_t index) {
return !this->subdirs.empty();
}
index -= this->GetHeaderCount();
return hasSubdirectories(this->dir / this->subdirs[index], this->showDotfiles);
return hasSubdirectories(fs::u8path(this->subdirs.at(index)), this->showDotfiles);
}
bool DirectoryAdapter::HasSubDirectories() {
@ -325,11 +346,18 @@ IScrollAdapter::EntryPtr DirectoryAdapter::GetEntry(cursespp::ScrollableWindow*
}
else if (this->ShowCurrentDirectory()) {
if (IsCurrentDirectory(index)) {
const auto dir = u8fmt("[%s]", + this->rootDir.branch_path().leaf().string().c_str());
const auto dir = u8fmt("[%s]", + this->rootDir.parent_path().filename().u8string().c_str());
return IScrollAdapter::EntryPtr(new SingleLineEntry(dir));
}
}
index -= this->GetHeaderCount();
auto text = text::Ellipsize(this->subdirs[index], this->GetWidth());
auto path = fs::u8path(this->subdirs[index]);
auto pathString = path.filename().u8string();
/* windows root drives are 'x:\', so they don't have a filename leaf. if
we resolve an empty string, just use the whole path */
if (!pathString.size()) {
pathString = path.u8string();
}
auto text = text::Ellipsize(pathString, this->GetWidth());
return IScrollAdapter::EntryPtr(new SingleLineEntry(text));
}

View File

@ -36,7 +36,8 @@
#include <cursespp/ScrollAdapterBase.h>
#include <cursespp/ListWindow.h>
#include <boost/filesystem.hpp>
#include <filesystem>
#include <vector>
#include <stack>
@ -74,7 +75,7 @@ namespace musik {
bool IsCurrentDirectory(size_t index);
size_t GetHeaderCount();
boost::filesystem::path dir, rootDir;
std::filesystem::path dir, rootDir;
std::vector<std::string> subdirs;
std::stack<size_t> selectedIndexStack;
bool showDotfiles, allowEscapeRoot, showRootDirectory;

View File

@ -52,7 +52,6 @@ using namespace musik;
using namespace musik::core;
using namespace musik::cube;
using namespace cursespp;
using namespace boost::filesystem;
using Callback = std::function<void()>;

View File

@ -36,13 +36,14 @@
#include "LastFmOverlay.h"
#include <app/util/Messages.h>
#include <musikcore/support/LastFm.h>
#include <musikcore/support/Common.h>
#include <musikcore/sdk/String.h>
#include <cursespp/App.h>
#include <map>
#include <vector>
using namespace musik::cube;
using namespace musik::core;
using namespace musik::core::sdk;
using namespace musik;
using namespace cursespp;
@ -122,14 +123,14 @@ void LastFmOverlay::UpdateMessage() {
switch (this->state) {
case State::Registered: {
auto session = lastfm::LoadSession();
core::ReplaceAll(message, "{{username}}", session.username);
str::ReplaceAll(message, "{{username}}", session.username.c_str());
break;
}
case State::WaitingForUser:
case State::RegisterError: {
std::string url = lastfm::CreateAccountLinkUrl(this->linkToken);
core::ReplaceAll(message, "{{link}}", url);
str::ReplaceAll(message, "{{link}}", url.c_str());
break;
}

View File

@ -36,11 +36,11 @@
#include "PluginOverlay.h"
#include <musikcore/support/Common.h>
#include <musikcore/support/Preferences.h>
#include <musikcore/support/PreferenceKeys.h>
#include <musikcore/plugin/PluginFactory.h>
#include <musikcore/sdk/ISchema.h>
#include <musikcore/sdk/String.h>
#include <cursespp/App.h>
#include <cursespp/DialogOverlay.h>
@ -49,6 +49,11 @@
#include <cursespp/SingleLineEntry.h>
#include <cursespp/SchemaOverlay.h>
#include <filesystem>
namespace std {
namespace fs = std::filesystem;
}
using namespace musik;
using namespace musik::core;
using namespace musik::core::sdk;
@ -71,7 +76,7 @@ using SchemaPtr = std::shared_ptr<ISchema>;
static void showConfigureOverlay(IPlugin* plugin, SchemaPtr schema) {
std::string title = _TSTR("settings_configure_plugin_title");
ReplaceAll(title, "{{name}}", plugin->Name());
str::ReplaceAll(title, "{{name}}", plugin->Name());
auto prefs = Preferences::ForPlugin(plugin->Name());
SchemaOverlay::Show(title, prefs, schema, [](bool) {});
}
@ -80,7 +85,7 @@ static void showNoSchemaDialog(const std::string& name) {
std::shared_ptr<DialogOverlay> dialog(new DialogOverlay());
std::string message = _TSTR("settings_no_plugin_config_message");
ReplaceAll(message, "{{name}}", name);
str::ReplaceAll(message, "{{name}}", name.c_str());
(*dialog)
.SetTitle(_TSTR("settings_no_plugin_config_title"))
@ -171,7 +176,7 @@ class PluginListAdapter : public ScrollAdapterBase {
[&plugins, prefs](IPlugin* raw, Plugin plugin, const std::string& fn) {
PluginInfoPtr info(new PluginInfo());
info->plugin = raw;
info->fn = boost::filesystem::path(fn).filename().string();
info->fn = std::fs::path(std::fs::u8path(fn)).filename().u8string();
info->enabled = prefs->GetBool(info->fn, true);
plugins.push_back(info);
});

View File

@ -39,7 +39,7 @@
#include <musikcore/i18n/Locale.h>
#include <musikcore/support/Preferences.h>
#include <musikcore/support/PreferenceKeys.h>
#include <musikcore/support/Common.h>
#include <musikcore/sdk/String.h>
#include <musikcore/library/ILibrary.h>
#include <musikcube/app/util/PreferenceKeys.h>
@ -54,6 +54,7 @@
using namespace musik;
using namespace musik::core;
using namespace musik::core::sdk;
using namespace musik::cube;
using namespace musik::cube::SettingsOverlays;
using namespace cursespp;
@ -201,7 +202,7 @@ void musik::cube::SettingsOverlays::CheckShowTlsWarningDialog() {
auto dialog = std::make_shared<DialogOverlay>();
std::string message = _TSTR("settings_library_type_remote_tls_warning_overlay_message");
musik::core::ReplaceAll(message, "{{link}}", kTlsInfoUrl);
str::ReplaceAll(message, "{{link}}", kTlsInfoUrl.c_str());
(*dialog)
.SetTitle(_TSTR("settings_library_type_remote_tls_warning_overlay_title"))

View File

@ -35,17 +35,18 @@
#include <stdafx.h>
#include <nlohmann/json.hpp>
#include <cursespp/Colors.h>
#include <boost/filesystem.hpp>
#include <musikcore/support/Common.h>
#include <set>
#include <filesystem>
/* this whole source unit is freaking bananas, but the curses interface
for setting colors is awful. i'm sorry for anyone who has to do work in here. */
namespace fs = std::filesystem;
using namespace musik::core;
using namespace cursespp;
using namespace nlohmann;
using namespace boost::filesystem;
/* if the terminal supports custom colors, these are the palette
indices we'll use to store them */
@ -573,14 +574,14 @@ static Colors::Mode colorMode = Colors::Basic;
static Colors::BgType bgType = Colors::Theme;
static void indexThemes(const std::string& directory) {
path colorPath(directory);
if (exists(colorPath)) {
directory_iterator end;
for (directory_iterator file(colorPath); file != end; file++) {
const path& p = file->path();
fs::path colorPath(fs::u8path(directory));
if (fs::exists(colorPath)) {
fs::directory_iterator end;
for (fs::directory_iterator file(colorPath); file != end; file++) {
const fs::path& p = file->path();
if (p.has_extension() && p.extension().string() == ".json") {
std::string fn = p.filename().string();
if (p.has_extension() && p.extension().u8string() == ".json") {
std::string fn = p.filename().u8string();
Theme theme;
if (theme.LoadFromFile(directory + "/" + fn)) {
::themes.push_back(theme);

Binary file not shown.

View File

@ -280,8 +280,8 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;_DEBUG;_SCL_SECURE_NO_WARNINGS;PDCURSES_WINGUI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../3rdparty/asio/asio/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;_DEBUG;_SCL_SECURE_NO_WARNINGS;PDCURSES_WINGUI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@ -297,7 +297,7 @@
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib32-msvc-14.2;../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
@ -327,8 +327,8 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-DLL|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;_DEBUG;_SCL_SECURE_NO_WARNINGS;PDCURSES_WINGUI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../3rdparty/asio/asio/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;_DEBUG;_SCL_SECURE_NO_WARNINGS;PDCURSES_WINGUI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@ -344,7 +344,7 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib32-msvc-14.2;../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
@ -374,8 +374,8 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Con|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;_DEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;PDCURSES_WINCON;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../3rdparty/asio/asio/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;_DEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;PDCURSES_WINCON;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@ -391,7 +391,7 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib32-msvc-14.2;../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
@ -421,8 +421,8 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;_DEBUG;_SCL_SECURE_NO_WARNINGS;PDCURSES_WINGUI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../3rdparty/asio/asio/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;_DEBUG;_SCL_SECURE_NO_WARNINGS;PDCURSES_WINGUI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
@ -437,7 +437,7 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib64-msvc-14.2;../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
@ -466,8 +466,8 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-DLL|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;_DEBUG;_SCL_SECURE_NO_WARNINGS;PDCURSES_WINGUI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../3rdparty/asio/asio/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;_DEBUG;_SCL_SECURE_NO_WARNINGS;PDCURSES_WINGUI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
@ -482,7 +482,7 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib64-msvc-14.2;../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
@ -511,8 +511,8 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Con|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;_DEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;PDCURSES_WINCON;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../3rdparty/asio/asio/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;_DEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;PDCURSES_WINCON;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
@ -527,7 +527,7 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib64-msvc-14.2;../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
@ -555,8 +555,8 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;NDEBUG;_SCL_SECURE_NO_WARNINGS;PDCURSES_WINGUI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../3rdparty/asio/asio/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;NDEBUG;_SCL_SECURE_NO_WARNINGS;PDCURSES_WINGUI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
@ -575,7 +575,7 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib32-msvc-14.2;../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
@ -608,8 +608,8 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-DLL|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;NDEBUG;_SCL_SECURE_NO_WARNINGS;PDCURSES_WINGUI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../3rdparty/asio/asio/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;NDEBUG;_SCL_SECURE_NO_WARNINGS;PDCURSES_WINGUI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
@ -628,7 +628,7 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib32-msvc-14.2;../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
@ -661,8 +661,8 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Con|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;NDEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;PDCURSES_WINCON;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../3rdparty/asio/asio/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;NDEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;PDCURSES_WINCON;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
@ -681,7 +681,7 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib32-msvc-14.2;../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win32/lib;../3rdparty/bin/win32/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
@ -714,8 +714,8 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;NDEBUG;_SCL_SECURE_NO_WARNINGS;PDCURSES_WINGUI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../3rdparty/asio/asio/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;NDEBUG;_SCL_SECURE_NO_WARNINGS;PDCURSES_WINGUI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
@ -734,7 +734,7 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib64-msvc-14.2;../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
@ -766,8 +766,8 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-DLL|x64'">
<ClCompile>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;NDEBUG;_SCL_SECURE_NO_WARNINGS;PDCURSES_WINGUI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../3rdparty/asio/asio/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;NDEBUG;_SCL_SECURE_NO_WARNINGS;PDCURSES_WINGUI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
@ -786,7 +786,7 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib64-msvc-14.2;../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
@ -818,8 +818,8 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Con|x64'">
<ClCompile>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;NDEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;PDCURSES_WINCON;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>./;../;./cursespp;../3rdparty/include;../3rdparty/win32_include;../3rdparty/asio/asio/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;CURL_STATICLIB;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;_WEBSOCKETPP_CPP11_RANDOM_DEVICE_;ASIO_STANDALONE;NDEBUG;_CONSOLE;_SCL_SECURE_NO_WARNINGS;PDCURSES_WINCON;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
@ -838,7 +838,7 @@ xcopy "$(SolutionDir)src\3rdparty\bin\win\font\*.ttf" "$(TargetDir)fonts\" /Y /e
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../boost_1_74_0/lib64-msvc-14.2;../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../3rdparty/bin/win64/lib;../3rdparty/bin/win64/lib/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Console</SubSystem>

View File

@ -52,7 +52,7 @@
/* curses defines a timeout() method that causes issues with
asio's streambuf. include it up front so work around this */
#pragma warning(push, 0)
#include <boost/asio/basic_socket_streambuf.hpp>
#include <asio/basic_socket_streambuf.hpp>
#pragma warning(pop)
#include <set>
@ -62,14 +62,12 @@ asio's streambuf. include it up front so work around this */
#include <algorithm>
#include <unordered_map>
#include <thread>
#include <filesystem>
#include <cmath>
#include <string>
#pragma warning(push, 0)
#include <boost/filesystem.hpp>
#include <boost/algorithm/string/case_conv.hpp>
#include <boost/algorithm/string.hpp>
#include <nlohmann/json.hpp>
#include <sigslot/sigslot.h>
#pragma warning(pop)

View File

@ -21,9 +21,6 @@
#include <musikcore/support/PreferenceKeys.h>
#include <musikcore/support/Common.h>
#include <boost/locale.hpp>
#include <boost/filesystem/detail/utf8_codecvt_facet.hpp>
#include "../musikcore/version.h"
using namespace musik;
@ -264,12 +261,6 @@ static void initForeground() {
});
}
static void initUtf8() {
std::locale locale = std::locale();
std::locale utf8Locale(locale, new boost::filesystem::detail::utf8_codecvt_facet);
boost::filesystem::path::imbue(utf8Locale);
}
static void rescanHandler(int signal) {
debug::info("daemon", "received SIGUSR1, rescanning the library...");
auto library = LibraryFactory::Instance().DefaultLocalLibrary();
@ -277,7 +268,6 @@ static void rescanHandler(int signal) {
}
int main(int argc, char** argv) {
initUtf8();
std::cout << "\n using lockfile at: " << getLockfileFn();
handleCommandLine(argc, argv);
exitIfRunning();

View File

@ -46,7 +46,7 @@ static musik::core::sdk::IPreferences* prefs;
#define LOCK(x) \
/*std::cerr << "locking " << x << "\n";*/ \
boost::recursive_mutex::scoped_lock lock(this->stateMutex); \
std::unique_lock<std::recursive_mutex> lock(this->stateMutex); \
/*std::cerr << "locked " << x << "\n";*/ \
#define WAIT() this->threadEvent.wait(lock);
@ -143,7 +143,7 @@ AlsaOut::AlsaOut()
, latency(0)
, initialized(false) {
std::cerr << "AlsaOut::AlsaOut() called" << std::endl;
this->writeThread.reset(new boost::thread(boost::bind(&AlsaOut::WriteLoop, this)));
this->writeThread.reset(new std::thread(std::bind(&AlsaOut::WriteLoop, this)));
}
AlsaOut::~AlsaOut() {

View File

@ -35,15 +35,15 @@
#include "pch.h"
#include <boost/thread/condition.hpp>
#include <boost/thread/thread.hpp>
#include <musikcore/sdk/IOutput.h>
#include <musikcore/sdk/IDevice.h>
#include <boost/thread/recursive_mutex.hpp>
#include <boost/thread/condition.hpp>
#include <list>
#include <vector>
#include <mutex>
#include <condition_variable>
#include <thread>
#include <functional>
class AlsaOut : public musik::core::sdk::IOutput {
public:
@ -97,10 +97,10 @@ class AlsaOut : public musik::core::sdk::IOutput {
double latency;
volatile bool quit, paused, initialized;
std::unique_ptr<boost::thread> writeThread;
boost::recursive_mutex stateMutex;
boost::condition threadEvent;
std::unique_ptr<std::thread> writeThread;
std::recursive_mutex stateMutex;
std::condition_variable_any threadEvent;
std::mutex mutex;
std::list<std::shared_ptr<BufferContext> > buffers;
boost::mutex mutex;
};

View File

@ -37,6 +37,7 @@
#include "CddaIndexerSource.h"
#include <musikcore/sdk/IIndexerNotifier.h>
#include <musikcore/sdk/String.h>
#include <curl/curl.h>
@ -45,10 +46,6 @@
#include <set>
#include <map>
#pragma warning(push, 0)
#include <boost/algorithm/string.hpp>
#pragma warning(pop)
using namespace musik::core::sdk;
struct CddbMetadata {
@ -179,18 +176,15 @@ static void cddbLookup(const std::string& discId, std::string listQueryParams) {
std::string discQueryParams;
if (result == CURLE_OK) { /* well... we got something back */
listResponse = boost::replace_all_copy(listResponse, "\r\n", "\n");
listResponse = str::ReplaceAllCopy(listResponse, "\r\n", "\n");
std::vector<std::string> lines;
boost::algorithm::split(lines, listResponse, boost::is_any_of("\n"));
std::vector<std::string> lines = str::Split(listResponse, "\n");
/* just choose the first disc for now. we don't have a way to present a
UI to the user, so this is really all we can do. */
if (lines.size() >= 1) {
if (lines.at(0).find("200") == 0) {
std::vector<std::string> parts;
boost::algorithm::split(parts, lines.at(0), boost::is_any_of(" "));
std::vector<std::string> parts = str::Split(lines.at(0), " ");
if (parts.size() >= 3) {
discQueryParams = "cmd=cddb+read+" + parts[1] + "+" + parts[2] + FREEDB_HELLO;
}
@ -198,9 +192,7 @@ static void cddbLookup(const std::string& discId, std::string listQueryParams) {
/* the first line of the response has a status code. anything
in the 200 range is fine. */
else if (lines.at(0).find("21") == 0) {
std::vector<std::string> parts;
boost::algorithm::split(parts, lines.at(1), boost::is_any_of(" "));
std::vector<std::string> parts = str::Split(lines.at(1), " ");
if (parts.size() >= 2) {
discQueryParams = "cmd=cddb+read+" + parts[0] + "+" + parts[1] + FREEDB_HELLO;
}
@ -219,11 +211,8 @@ static void cddbLookup(const std::string& discId, std::string listQueryParams) {
curl_easy_cleanup(details);
if (result == CURLE_OK) {
discResponse = boost::replace_all_copy(discResponse, "\r\n", "\n");
std::vector<std::string> lines;
boost::algorithm::split(lines, discResponse, boost::is_any_of("\n"));
discResponse = str::ReplaceAllCopy(discResponse, "\r\n", "\n");
std::vector<std::string> lines = str::Split(discResponse, " ");
std::shared_ptr<CddbMetadata> metadata(new CddbMetadata());
for (auto line : lines) {
@ -231,8 +220,8 @@ static void cddbLookup(const std::string& discId, std::string listQueryParams) {
if (len) {
auto eq = line.find_first_of('=');
if (eq != std::string::npos) {
std::string key = boost::trim_copy(line.substr(0, eq));
std::string value = boost::trim_copy(line.substr(eq + 1));
std::string key = str::Trim(line.substr(0, eq));
std::string value = str::Trim(line.substr(eq + 1));
if (key == "DTITLE") {
auto slash = value.find_first_of('/');
@ -242,8 +231,8 @@ static void cddbLookup(const std::string& discId, std::string listQueryParams) {
artist = album = value;
}
else {
artist = boost::trim_copy(value.substr(0, slash));
album = boost::trim_copy(value.substr(slash + 1));
artist = str::Trim(value.substr(0, slash));
album = str::Trim(value.substr(slash + 1));
}
metadata->artist = artist;

View File

@ -271,7 +271,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@ -296,7 +296,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-DLL|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@ -321,7 +321,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Con|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@ -346,7 +346,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@ -370,7 +370,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-DLL|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@ -394,7 +394,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Con|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@ -417,7 +417,7 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
@ -443,7 +443,7 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-DLL|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
@ -469,7 +469,7 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Con|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
@ -495,7 +495,7 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
@ -521,7 +521,7 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-DLL|x64'">
<ClCompile>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
@ -547,7 +547,7 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Con|x64'">
<ClCompile>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>

View File

@ -233,7 +233,7 @@
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>3rdparty/include;3rdparty/win32_include;../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>3rdparty/include;3rdparty/win32_include;../../3rdparty/win32_include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<DisableSpecificWarnings>4996</DisableSpecificWarnings>
@ -241,7 +241,7 @@
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib32-msvc-14.2;../../3rdparty/bin/win32/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../3rdparty/bin/win32/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>avcodec-musikcube.lib;avformat-musikcube.lib;avutil-musikcube.lib;swresample-musikcube.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PostBuildEvent>
@ -254,7 +254,7 @@
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>3rdparty/include;3rdparty/win32_include;../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>3rdparty/include;3rdparty/win32_include;../../3rdparty/win32_include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<DisableSpecificWarnings>4996</DisableSpecificWarnings>
@ -262,7 +262,7 @@
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib32-msvc-14.2;../../3rdparty/bin/win32/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../3rdparty/bin/win32/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>avcodec-musikcube.lib;avformat-musikcube.lib;avutil-musikcube.lib;swresample-musikcube.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PostBuildEvent>
@ -275,7 +275,7 @@
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>3rdparty/include;3rdparty/win32_include;../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>3rdparty/include;3rdparty/win32_include;../../3rdparty/win32_include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<DisableSpecificWarnings>4996</DisableSpecificWarnings>
@ -283,7 +283,7 @@
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib32-msvc-14.2;../../3rdparty/bin/win32/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../3rdparty/bin/win32/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>avcodec-musikcube.lib;avformat-musikcube.lib;avutil-musikcube.lib;swresample-musikcube.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PostBuildEvent>
@ -296,7 +296,7 @@
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>false</SDLCheck>
<AdditionalIncludeDirectories>3rdparty/include;3rdparty/win32_include;../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>3rdparty/include;3rdparty/win32_include;../../3rdparty/win32_include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
@ -316,7 +316,7 @@
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>false</SDLCheck>
<AdditionalIncludeDirectories>3rdparty/include;3rdparty/win32_include;../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>3rdparty/include;3rdparty/win32_include;../../3rdparty/win32_include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
@ -336,7 +336,7 @@
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>false</SDLCheck>
<AdditionalIncludeDirectories>3rdparty/include;3rdparty/win32_include;../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>3rdparty/include;3rdparty/win32_include;../../3rdparty/win32_include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
@ -358,7 +358,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>3rdparty/include;3rdparty/win32_include;../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>3rdparty/include;3rdparty/win32_include;../../3rdparty/win32_include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<DebugInformationFormat>None</DebugInformationFormat>
@ -372,7 +372,7 @@
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib32-msvc-14.2;../../3rdparty/bin/win32/lib</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../3rdparty/bin/win32/lib</AdditionalLibraryDirectories>
<AdditionalDependencies>avcodec-musikcube.lib;avformat-musikcube.lib;avutil-musikcube.lib;swresample-musikcube.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
@ -390,7 +390,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>3rdparty/include;3rdparty/win32_include;../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>3rdparty/include;3rdparty/win32_include;../../3rdparty/win32_include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<DebugInformationFormat>None</DebugInformationFormat>
@ -404,7 +404,7 @@
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib32-msvc-14.2;../../3rdparty/bin/win32/lib</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../3rdparty/bin/win32/lib</AdditionalLibraryDirectories>
<AdditionalDependencies>avcodec-musikcube.lib;avformat-musikcube.lib;avutil-musikcube.lib;swresample-musikcube.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
@ -422,7 +422,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>3rdparty/include;3rdparty/win32_include;../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>3rdparty/include;3rdparty/win32_include;../../3rdparty/win32_include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<DebugInformationFormat>None</DebugInformationFormat>
@ -436,7 +436,7 @@
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib32-msvc-14.2;../../3rdparty/bin/win32/lib</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../3rdparty/bin/win32/lib</AdditionalLibraryDirectories>
<AdditionalDependencies>avcodec-musikcube.lib;avformat-musikcube.lib;avutil-musikcube.lib;swresample-musikcube.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
@ -454,7 +454,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>false</SDLCheck>
<AdditionalIncludeDirectories>3rdparty/include;3rdparty/win32_include;../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>3rdparty/include;3rdparty/win32_include;../../3rdparty/win32_include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
@ -478,7 +478,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>false</SDLCheck>
<AdditionalIncludeDirectories>3rdparty/include;3rdparty/win32_include;../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>3rdparty/include;3rdparty/win32_include;../../3rdparty/win32_include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
@ -502,7 +502,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>false</SDLCheck>
<AdditionalIncludeDirectories>3rdparty/include;3rdparty/win32_include;../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>3rdparty/include;3rdparty/win32_include;../../3rdparty/win32_include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<MultiProcessorCompilation>true</MultiProcessorCompilation>

View File

@ -85,7 +85,7 @@ ScanResult GmeIndexerSource::Scan(
this->UpdateMetadata(path, this, indexer);
}
catch (...) {
std::string error = str::format("error reading metadata for %s", path.c_str());
std::string error = str::Format("error reading metadata for %s", path.c_str());
debug->Error(PLUGIN_NAME, error.c_str());
}
}
@ -159,7 +159,7 @@ void GmeIndexerSource::UpdateMetadata(
gme_t* data = nullptr;
gme_err_t err = gme_open_file(fn.c_str(), &data, gme_info_only);
if (err) {
debug->Error(PLUGIN_NAME, str::format("error opening %s", fn.c_str()).c_str());
debug->Error(PLUGIN_NAME, str::Format("error opening %s", fn.c_str()).c_str());
invalidFiles.insert(fn);
}
else {
@ -174,7 +174,7 @@ void GmeIndexerSource::UpdateMetadata(
if (m3u.size()) {
err = gme_load_m3u(data, m3u.c_str());
if (err) {
debug->Error(PLUGIN_NAME, str::format("m3u found, but load failed '%s'", err).c_str());
debug->Error(PLUGIN_NAME, str::Format("m3u found, but load failed '%s'", err).c_str());
}
}
}
@ -201,7 +201,7 @@ void GmeIndexerSource::UpdateMetadata(
gme_info_t* info = nullptr;
err = gme_track_info(data, &info, i);
if (err) {
debug->Error(PLUGIN_NAME, str::format("error getting track %d: %s", i, err).c_str());
debug->Error(PLUGIN_NAME, str::Format("error getting track %d: %s", i, err).c_str());
track->SetValue("duration", defaultDuration.c_str());
track->SetValue("title", defaultTitle.c_str());
}

View File

@ -6,5 +6,5 @@ set (httpdatastream_SOURCES
add_library(httpdatastream SHARED ${httpdatastream_SOURCES})
target_include_directories(httpdatastream BEFORE PUBLIC ${Boost_INCLUDE_DIRS})
target_link_libraries(httpdatastream ${Boost_LIBRARIES} ${LIBCURL})
target_include_directories(httpdatastream BEFORE PUBLIC)
target_link_libraries(httpdatastream ${LIBCURL})

View File

@ -40,6 +40,7 @@
#include <musikcore/sdk/IEnvironment.h>
#include <musikcore/sdk/IPreferences.h>
#include <musikcore/sdk/ISchema.h>
#include <musikcore/sdk/String.h>
#include <iostream>
#include <algorithm>
@ -51,10 +52,6 @@
#include <atomic>
#pragma warning(push, 0)
#include <boost/filesystem.hpp>
#include <boost/algorithm/string.hpp>
/* meh... */
#include <../../3rdparty/include/nlohmann/json.hpp>
#include <../../3rdparty/include/websocketpp/base64/base64.hpp>
#pragma warning(pop)
@ -71,7 +68,6 @@
using namespace std::chrono;
using namespace musik::core::sdk;
namespace al = boost::algorithm;
static std::mutex globalMutex;
static IEnvironment* environment;
@ -120,12 +116,12 @@ extern "C" DLLEXPORT musik::core::sdk::ISchema * GetSchema() {
}
static bool parseHeader(std::string raw, std::string& key, std::string& value) {
al::replace_all(raw, "\r\n", "");
str::ReplaceAll(raw, "\r\n", "");
size_t splitAt = raw.find_first_of(":");
if (splitAt != std::string::npos) {
key = boost::trim_copy(raw.substr(0, splitAt));
value = boost::trim_copy(raw.substr(splitAt + 1));
key = str::Trim(raw.substr(0, splitAt));
value = str::Trim(raw.substr(splitAt + 1));
return true;
}

View File

@ -36,18 +36,17 @@
#include "LruDiskCache.h"
#include <algorithm>
#include <musikcore/sdk/String.h>
#pragma warning(push, 0)
#include <boost/filesystem.hpp>
#include <boost/algorithm/string.hpp>
#pragma warning(pop)
#include <algorithm>
#include <filesystem>
#include <chrono>
const std::string PREFIX = "musikcube";
const std::string TEMP_EXTENSION = ".tmp";
namespace fs = boost::filesystem;
namespace al = boost::algorithm;
namespace fs = std::filesystem;
using namespace musik::core::sdk;
using Lock = std::unique_lock<std::recursive_mutex>;
@ -56,27 +55,28 @@ static std::string tempFilename(const std::string& root, size_t id, int64_t inst
}
static std::string finalFilename(const std::string& root, size_t id, std::string type) {
al::replace_all(type, "/", "-");
str::ReplaceAll(type, "/", "-");
return root + "/" + PREFIX + "_" + std::to_string(id) + "_" + type;
}
static bool isTemp(const fs::path& path) {
return path.extension().string() == TEMP_EXTENSION;
return path.extension().u8string() == TEMP_EXTENSION;
}
static bool isTemp(const std::string& path) {
return isTemp(fs::path(path));
return isTemp(fs::path(fs::u8path(path)));
}
static time_t touch(const std::string& path) {
static std::filesystem::file_time_type touch(const std::string& path) {
auto fsPath = fs::u8path(path);
try {
std::time_t now = time(nullptr);
fs::last_write_time(path, now);
std::chrono::time_point now = fs::file_time_type::clock::now();
fs::last_write_time(fsPath, now);
}
catch (...) {
}
return fs::last_write_time(path);
return fs::last_write_time(fsPath);
}
static bool rm(const std::string& path) {
@ -91,7 +91,7 @@ static bool rm(const std::string& path) {
}
static bool rm(const fs::path& p) {
return rm(p.string());
return rm(p.u8string());
}
LruDiskCache::LruDiskCache()
@ -111,9 +111,9 @@ void LruDiskCache::Init(const std::string& root, size_t maxEntries) {
this->Purge(); /* always purge partial files on startup */
/* index all the completed files... */
boost::system::error_code ec;
std::error_code ec;
fs::directory_iterator end;
fs::directory_iterator file(this->root, ec);
fs::directory_iterator file(fs::u8path(this->root), ec);
while (file != end) {
if (!is_directory(file->status())) {
@ -134,9 +134,9 @@ void LruDiskCache::Init(const std::string& root, size_t maxEntries) {
void LruDiskCache::Purge() {
Lock lock(stateMutex);
boost::system::error_code ec;
std::error_code ec;
fs::directory_iterator end;
fs::directory_iterator file(this->root, ec);
fs::directory_iterator file(fs::u8path(this->root), ec);
while (file != end) {
if (!is_directory(file->status())) {
@ -149,17 +149,16 @@ void LruDiskCache::Purge() {
}
LruDiskCache::EntryPtr LruDiskCache::Parse(const fs::path& path) {
std::string fn = path.stem().string() + path.extension().string();
std::vector<std::string> parts;
boost::split(parts, fn, boost::is_any_of("_"));
std::string fn = path.stem().u8string() + path.extension().u8string();
std::vector<std::string> parts = str::Split(fn, "_");
if (parts.size() == 3 && parts[0] == PREFIX) {
try {
auto entry = std::shared_ptr<Entry>(new Entry());
entry->id = std::stoull(parts[1].c_str());
entry->path = path.string();
entry->path = path.u8string();
entry->type = parts[2];
entry->time = fs::last_write_time(path);
al::replace_all(entry->type, "-", "/");
str::ReplaceAll(entry->type, "-", "/");
return entry;
}
catch (...) {
@ -249,10 +248,10 @@ FILE* LruDiskCache::Open(size_t id, int64_t instanceId, const std::string& mode,
}
/* ensure the cache directory exists */
boost::system::error_code ec;
boost::filesystem::path p(this->root);
if (!boost::filesystem::exists(p)) {
boost::filesystem::create_directories(p, ec);
std::error_code ec;
fs::path p(fs::u8path(this->root));
if (!fs::exists(p)) {
fs::create_directories(p, ec);
}
/* open the file and return it regardless of cache status. */
@ -308,8 +307,8 @@ void LruDiskCache::Touch(size_t id) {
if (it != end) {
auto e = (*it);
fs::path p(e->path);
if (boost::filesystem::exists(p)) {
e->time = touch(p.string());
if (fs::exists(p)) {
e->time = touch(p.u8string());
this->SortAndPrune();
return;
}

View File

@ -38,10 +38,7 @@
#include <memory>
#include <ctime>
#include <cstdint>
#pragma warning(push, 0)
#include <boost/filesystem.hpp>
#pragma warning(pop)
#include <filesystem>
class LruDiskCache {
public:
@ -63,7 +60,7 @@ class LruDiskCache {
uint64_t id;
std::string path;
std::string type;
std::time_t time;
std::filesystem::file_time_type time;
};
using EntryPtr = std::shared_ptr<Entry>;
@ -71,7 +68,7 @@ class LruDiskCache {
void SortAndPrune();
static std::shared_ptr<Entry> Parse(const boost::filesystem::path& path);
static std::shared_ptr<Entry> Parse(const std::filesystem::path& path);
std::recursive_mutex stateMutex;

View File

@ -247,7 +247,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@ -264,7 +264,7 @@
</ClCompile>
<Link>
<AdditionalDependencies>shlwapi.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>../../3rdparty/bin/win32/lib;../../../../boost_1_74_0/lib32-msvc-14.2;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../3rdparty/bin/win32/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
@ -272,7 +272,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-DLL|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@ -289,7 +289,7 @@
</ClCompile>
<Link>
<AdditionalDependencies>shlwapi.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>../../3rdparty/bin/win32/lib;../../../../boost_1_74_0/lib32-msvc-14.2;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../3rdparty/bin/win32/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
@ -297,7 +297,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Con|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@ -314,7 +314,7 @@
</ClCompile>
<Link>
<AdditionalDependencies>shlwapi.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>../../3rdparty/bin/win32/lib;../../../../boost_1_74_0/lib32-msvc-14.2;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../3rdparty/bin/win32/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
@ -322,7 +322,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@ -338,7 +338,7 @@
</ClCompile>
<Link>
<AdditionalDependencies>shlwapi.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>../../3rdparty/bin/win64/lib;../../../../boost_1_74_0/lib64-msvc-14.2;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../3rdparty/bin/win64/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
@ -346,7 +346,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-DLL|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@ -362,7 +362,7 @@
</ClCompile>
<Link>
<AdditionalDependencies>shlwapi.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>../../3rdparty/bin/win64/lib;../../../../boost_1_74_0/lib64-msvc-14.2;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../3rdparty/bin/win64/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
@ -370,7 +370,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Con|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@ -386,14 +386,14 @@
</ClCompile>
<Link>
<AdditionalDependencies>shlwapi.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>../../3rdparty/bin/win64/lib;../../../../boost_1_74_0/lib64-msvc-14.2;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../3rdparty/bin/win64/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
@ -413,13 +413,13 @@
</ClCompile>
<Link>
<AdditionalDependencies>shlwapi.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>../../3rdparty/bin/win32/lib;../../../../boost_1_74_0/lib32-msvc-14.2;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../3rdparty/bin/win32/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-DLL|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
@ -439,13 +439,13 @@
</ClCompile>
<Link>
<AdditionalDependencies>shlwapi.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>../../3rdparty/bin/win32/lib;../../../../boost_1_74_0/lib32-msvc-14.2;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../3rdparty/bin/win32/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Con|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
@ -465,13 +465,13 @@
</ClCompile>
<Link>
<AdditionalDependencies>shlwapi.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>../../3rdparty/bin/win32/lib;../../../../boost_1_74_0/lib32-msvc-14.2;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../3rdparty/bin/win32/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
@ -491,13 +491,13 @@
</ClCompile>
<Link>
<AdditionalDependencies>shlwapi.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>../../3rdparty/bin/win64/lib;../../../../boost_1_74_0/lib64-msvc-14.2;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../3rdparty/bin/win64/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-DLL|x64'">
<ClCompile>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
@ -517,13 +517,13 @@
</ClCompile>
<Link>
<AdditionalDependencies>shlwapi.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>../../3rdparty/bin/win64/lib;../../../../boost_1_74_0/lib64-msvc-14.2;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../3rdparty/bin/win64/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Con|x64'">
<ClCompile>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include;../../3rdparty/win32_include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
@ -543,7 +543,7 @@
</ClCompile>
<Link>
<AdditionalDependencies>shlwapi.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>../../3rdparty/bin/win64/lib;../../../../boost_1_74_0/lib64-msvc-14.2;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../3rdparty/bin/win64/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>

View File

@ -39,11 +39,6 @@
#include <musikcore/sdk/constants.h>
#include <musikcore/sdk/IPlugin.h>
#pragma warning(push, 0)
#include <boost/filesystem.hpp>
#include <boost/filesystem/detail/utf8_codecvt_facet.hpp>
#pragma warning(pop)
#ifdef WIN32
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
return true;
@ -56,13 +51,6 @@
static class HttpDataStreamPlugin : public musik::core::sdk::IPlugin {
public:
HttpDataStreamPlugin() {
/* enable utf8 filesystem (required in windows, maybe not macos/linux */
std::locale locale = std::locale();
std::locale utf8Locale(locale, new boost::filesystem::detail::utf8_codecvt_facet);
boost::filesystem::path::imbue(utf8Locale);
}
virtual void Release() { };
virtual const char* Name() { return "HTTP IDataStream"; }
virtual const char* Version() { return "0.1.0"; }

View File

@ -93,7 +93,7 @@ ScanResult OpenMptIndexerSource::Scan(
this->UpdateMetadata(path, this, indexer);
}
catch (...) {
std::string error = str::format("error reading metadata for %s", path.c_str());
std::string error = str::Format("error reading metadata for %s", path.c_str());
debug->Error(PLUGIN_NAME.c_str(), error.c_str());
}
}
@ -161,7 +161,7 @@ static std::string formatDefaultValue(const char* key, const char* defaultValue,
prefs->GetString(key, threadLocalBuffer, 4096, defaultValue);
std::string value(threadLocalBuffer);
threadLocalBuffer[0] = 0;
return str::format(value, type.c_str());
return str::Format(value, type.c_str());
}
void OpenMptIndexerSource::UpdateMetadata(
@ -184,7 +184,7 @@ void OpenMptIndexerSource::UpdateMetadata(
nullptr, nullptr, nullptr, nullptr, nullptr);
if (!module) {
debug->Error(PLUGIN_NAME.c_str(), str::format("error opening %s", fn.c_str()).c_str());
debug->Error(PLUGIN_NAME.c_str(), str::Format("error opening %s", fn.c_str()).c_str());
invalidFiles.insert(fn);
}
else {

View File

@ -85,7 +85,7 @@ static std::string getDeviceId() {
}
void PipeWireOut::OnStreamStateChanged(void* data, enum pw_stream_state old, enum pw_stream_state state, const char* error) {
::debug->Info(TAG, str::format("state changed from %d to %d. (%s)", old, state, error ? error : "no additional context").c_str());
::debug->Info(TAG, str::Format("state changed from %d to %d. (%s)", old, state, error ? error : "no additional context").c_str());
}
void PipeWireOut::OnCoreDone(void* userdata, uint32_t id, int seq) {
@ -119,7 +119,7 @@ void PipeWireOut::OnRegistryGlobal(void *userdata, uint32_t id, uint32_t permiss
}
pw_properties_free(dict);
}
::debug->Info(TAG, str::format("detected PipeWire:Interface:Device with id=%d", id).c_str());
::debug->Info(TAG, str::Format("detected PipeWire:Interface:Device with id=%d", id).c_str());
context->instance->deviceList.Add(std::to_string(id), formattedName);
}
}
@ -337,7 +337,7 @@ bool PipeWireOut::StartPipeWire(IBuffer* buffer) {
int result;
if ((result = pw_thread_loop_start(this->pwThreadLoop)) != 0) {
::debug->Error(TAG, str::format("error starting thread loop: %s", spa_strerror(result)).c_str());
::debug->Error(TAG, str::Format("error starting thread loop: %s", spa_strerror(result)).c_str());
goto cleanup;
};
@ -371,7 +371,7 @@ bool PipeWireOut::StartPipeWire(IBuffer* buffer) {
params[0] = spa_format_audio_raw_build(&builder, SPA_PARAM_EnumFormat, &audioInfo);
if (!params[0]) {
::debug->Error(TAG, str::format(
::debug->Error(TAG, str::Format(
"failed to create audio format. channels=%d, rate=%d",
this->channelCount,
this->sampleRate).c_str());
@ -408,7 +408,7 @@ bool PipeWireOut::StartPipeWire(IBuffer* buffer) {
return true;
}
else {
::debug->Error(TAG, str::format(
::debug->Error(TAG, str::Format(
"error starting stream: %s",
spa_strerror(result)).c_str());
}

View File

@ -39,6 +39,7 @@
#include <pulse/pulseaudio.h>
#include <pulse/thread-mainloop.h>
#include <math.h>
#include <vector>
using namespace musik::core::sdk;

View File

@ -34,7 +34,7 @@
#include "BlockingTranscoder.h"
#include "Util.h"
#include <boost/filesystem.hpp>
#include <filesystem>
#include <algorithm>
#include <atomic>
@ -43,6 +43,10 @@
static std::atomic<int> activeCount(0);
namespace std {
namespace fs = std::filesystem;
}
using namespace musik::core::sdk;
BlockingTranscoder::BlockingTranscoder(
@ -116,10 +120,15 @@ bool BlockingTranscoder::Transcode() {
this->encoder->Finalize();
this->output->Release();
this->output = nullptr;
boost::system::error_code ec;
boost::filesystem::rename(this->tempFilename, this->finalFilename, ec);
std::error_code ec;
std::fs::rename(
std::fs::u8path(this->tempFilename),
std::fs::u8path(this->finalFilename),
ec);
if (ec) {
boost::filesystem::remove(this->tempFilename, ec);
std::fs::remove(
std::fs::u8path(this->tempFilename),
ec);
}
else {
result = true;
@ -134,8 +143,8 @@ bool BlockingTranscoder::Transcode() {
this->Cleanup();
if (!result) {
boost::system::error_code ec;
boost::filesystem::remove(this->tempFilename, ec);
std::error_code ec;
std::fs::remove(std::fs::u8path(this->tempFilename), ec);
}
return result;

View File

@ -26,4 +26,4 @@ endif()
find_library(LIBZ NAMES z)
message(STATUS "[server] using " ${LIBMICROHTTPD} ", " ${LIBZ})
target_link_libraries(server ${Boost_LIBRARIES} ${LIBZ} ${LIBMICROHTTPD} ${EXTRA_LIBS})
target_link_libraries(server ${LIBZ} ${LIBMICROHTTPD} ${EXTRA_LIBS})

View File

@ -35,6 +35,7 @@
#pragma once
#include <string>
#include <unordered_map>
#include "Util.h"
//#define ENABLE_DEBUG 1
@ -222,26 +223,26 @@ namespace broadcast {
static const std::string play_queue_changed = "play_queue_changed";
}
static auto PLAYBACK_STATE_TO_STRING = makeBimap<musik::core::sdk::PlaybackState, std::string>({
static auto PLAYBACK_STATE_TO_STRING = std::unordered_map<musik::core::sdk::PlaybackState, std::string>({
{ musik::core::sdk::PlaybackState::Stopped, "stopped" },
{ musik::core::sdk::PlaybackState::Playing, "playing" },
{ musik::core::sdk::PlaybackState::Prepared, "prepared" },
{ musik::core::sdk::PlaybackState::Paused, "paused" }
});
static auto REPEAT_MODE_TO_STRING = makeBimap<musik::core::sdk::RepeatMode, std::string>({
static auto REPEAT_MODE_TO_STRING = std::unordered_map<musik::core::sdk::RepeatMode, std::string>({
{ musik::core::sdk::RepeatMode::None, "none" },
{ musik::core::sdk::RepeatMode::Track, "track" },
{ musik::core::sdk::RepeatMode::List, "list" }
});
static auto REPLAYGAIN_MODE_TO_STRING = makeBimap<musik::core::sdk::ReplayGainMode, std::string>({
static auto REPLAYGAIN_MODE_TO_STRING = std::unordered_map<musik::core::sdk::ReplayGainMode, std::string>({
{ musik::core::sdk::ReplayGainMode::Disabled, "disabled" },
{ musik::core::sdk::ReplayGainMode::Album, "album" },
{ musik::core::sdk::ReplayGainMode::Track, "track" },
});
static auto TRANSPORT_TYPE_TO_STRING = makeBimap<musik::core::sdk::TransportType, std::string>({
static auto TRANSPORT_TYPE_TO_STRING = std::unordered_map<musik::core::sdk::TransportType, std::string>({
{ musik::core::sdk::TransportType::Gapless, "gapless" },
{ musik::core::sdk::TransportType::Crossfade, "crossfade" },
});

View File

@ -40,15 +40,13 @@
#include <musikcore/sdk/IEnvironment.h>
#include <musikcore/sdk/IDebug.h>
#pragma warning(push, 0)
#include <boost/thread/shared_mutex.hpp>
#include <boost/thread/locks.hpp>
#pragma warning(pop)
#include <shared_mutex>
#include <mutex>
class ReadWriteLock {
typedef boost::shared_mutex Mutex;
typedef boost::unique_lock<Mutex> WriteLock;
typedef boost::shared_lock<Mutex> ReadLock;
typedef std::shared_mutex Mutex;
typedef std::unique_lock<Mutex> WriteLock;
typedef std::shared_lock<Mutex> ReadLock;
public:
WriteLock Write() {

View File

@ -42,14 +42,13 @@
#include <musikcore/sdk/String.h>
#pragma warning(push, 0)
#include <boost/filesystem.hpp>
#include <boost/algorithm/string.hpp>
#include <websocketpp/base64/base64.hpp>
#pragma warning(pop, 0)
#include <unordered_map>
#include <string>
#include <cstdlib>
#include <filesystem>
#include <fcntl.h>
#include <stdio.h>
@ -66,6 +65,10 @@
static const char* ENVIRONMENT_DISABLE_HTTP_SERVER_AUTH = "MUSIKCUBE_DISABLE_HTTP_SERVER_AUTH";
static const char* TAG = "HttpServer";
namespace std {
namespace fs = std::filesystem;
}
using namespace musik::core::sdk;
std::unordered_map<std::string, std::string> CONTENT_TYPE_MAP = {
@ -100,10 +103,8 @@ struct Range {
static std::string contentType(const std::string& fn) {
try {
boost::filesystem::path p(fn);
std::string ext = boost::trim_copy(p.extension().string());
boost::to_lower(ext);
std::fs::path p(std::fs::u8path(fn));
std::string ext = str::ToLowerCopy(str::Trim(p.extension().u8string()));
auto it = CONTENT_TYPE_MAP.find(ext);
if (it != CONTENT_TYPE_MAP.end()) {
return it->second;
@ -117,10 +118,9 @@ static std::string contentType(const std::string& fn) {
static std::string fileExtension(const std::string& fn) {
try {
boost::filesystem::path p(fn);
std::string ext = boost::trim_copy(p.extension().string());
std::fs::path p(std::fs::u8path(fn));
std::string ext = str::ToLowerCopy(str::Trim(p.extension().u8string()));
if (ext.size()) {
boost::to_lower(ext);
return ext[0] == '.' ? ext.substr(1) : ext;
}
}
@ -177,17 +177,14 @@ static Range* parseRange(IDataStream* file, const char* range) {
if (str.substr(0, 6) == "bytes=") {
str = str.substr(6);
std::vector<std::string> parts;
boost::split(parts, str, boost::is_any_of("-"));
std::vector<std::string> parts = str::Split(str, "-");
if (parts.size() == 2) {
try {
size_t from = (size_t) std::max(0, std::stoi(boost::algorithm::trim_copy(parts[0])));
size_t from = (size_t) std::max(0, std::stoi(str::Trim(parts[0])));
size_t to = size;
if (parts.at(1).size()) {
to = (size_t) std::min((int) size, std::stoi(boost::algorithm::trim_copy(parts[1])));
to = (size_t) std::min((int) size, std::stoi(str::Trim(parts[1])));
}
if (to > from) {
@ -265,10 +262,7 @@ static bool isAuthenticated(MHD_Connection *connection, Context& context) {
std::string encoded = auth.substr(6);
if (encoded.size()) {
std::string decoded = websocketpp::base64_decode(encoded);
std::vector<std::string> userPass;
boost::split(userPass, decoded, boost::is_any_of(":"));
std::vector<std::string> userPass = str::Split(decoded, ":");
if (userPass.size() == 2) {
std::string password = GetPreferenceString(context.prefs, key::password, defaults::password);
return userPass[0] == "default" && userPass[1] == password;
@ -368,7 +362,7 @@ MHD_Result HttpServer::HandleRequest(
auto server = static_cast<HttpServer*>(cls);
#ifdef ENABLE_DEBUG
server->context.debug->Info(TAG, str::format("new request: %s", url).c_str());
server->context.debug->Info(TAG, str::Format("new request: %s", url).c_str());
#endif
struct MHD_Response* response = nullptr;
@ -393,8 +387,7 @@ MHD_Result HttpServer::HandleRequest(
urlStr = urlStr.substr(1);
}
std::vector<std::string> parts;
boost::split(parts, urlStr, boost::is_any_of("/"));
std::vector<std::string> parts = str::Split(urlStr, "/");
if (parts.size() > 0) {
/* /audio/id/<id> OR /audio/external_id/<external_id> */
if (parts.at(0) == fragment::audio && parts.size() == 3) {
@ -413,7 +406,7 @@ MHD_Result HttpServer::HandleRequest(
if (response) {
#ifdef ENABLE_DEBUG
server->context.debug->Info(TAG, str::format("return http %d", status).c_str());
server->context.debug->Info(TAG, str::Format("return http %d", status).c_str());
#endif
ret = MHD_queue_response(connection, status, response);
@ -480,7 +473,7 @@ int HttpServer::HandleAudioTrackRequest(
bool isOnDemandTranscoder = !!dynamic_cast<TranscodingAudioDataStream*>(file);
#ifdef ENABLE_DEBUG
server->context.debug->Info(TAG, str::format(
server->context.debug->Info(TAG, str::Format(
"range request: %s, resolved range: %s, isOnDemandTranscoder=%s",
rangeVal ? rangeVal : "[unspecified]",
range ? range->HeaderValue().c_str() : "[unresolved]",
@ -543,7 +536,7 @@ int HttpServer::HandleAudioTrackRequest(
&fileFreeCallback);
#ifdef ENABLE_DEBUG
server->context.debug->Info(TAG, str::format("response length=%d", ((length == 0) ? 0 : length + 1)).c_str());
server->context.debug->Info(TAG, str::Format("response length=%d", ((length == 0) ? 0 : length + 1)).c_str());
#endif
if (response) {
@ -555,7 +548,7 @@ int HttpServer::HandleAudioTrackRequest(
if (!isOnDemandTranscoder) {
MHD_add_response_header(response, "Accept-Ranges", "bytes");
if (boost::filesystem::exists(title)) {
if (std::fs::exists(std::fs::u8path(filename))) {
MHD_add_response_header(response, "X-musikcube-Filename-Override", externalId.c_str());
}
}
@ -587,7 +580,7 @@ int HttpServer::HandleAudioTrackRequest(
status = MHD_HTTP_PARTIAL_CONTENT;
#ifdef ENABLE_DEBUG
if (rangeVal) {
server->context.debug->Info(TAG, str::format("range header: %s", range->HeaderValue().c_str()).c_str());
server->context.debug->Info(TAG, str::Format("range header: %s", range->HeaderValue().c_str()).c_str());
}
#endif
}

View File

@ -41,13 +41,15 @@
#include <thread>
#include <set>
#include <map>
#include <filesystem>
#include <functional>
#include <chrono>
#pragma warning(push, 0)
#include <boost/filesystem.hpp>
#pragma warning(pop)
namespace fs = std::filesystem;
using namespace std::chrono;
using namespace musik::core::sdk;
using namespace boost::filesystem;
std::mutex transcoderMutex;
std::condition_variable waitForTranscode;
@ -71,23 +73,43 @@ static T* getTypedEncoder(Context& context, const std::string& format) {
return nullptr;
}
static size_t lastWriteTime(const fs::path& path) {
std::error_code ec;
return (size_t)duration_cast<milliseconds>(
std::filesystem::last_write_time(path, ec).time_since_epoch()).count();
}
static size_t lastWriteTime(const std::string& path) {
return lastWriteTime(fs::u8path(path));
}
static std::filesystem::file_time_type touch(const std::string& path) {
auto fsPath = fs::u8path(path);
try {
std::chrono::time_point now = fs::file_time_type::clock::now();
fs::last_write_time(fsPath, now);
}
catch (...) {
}
return fs::last_write_time(fsPath);
}
static std::string cachePath(Context& context) {
char buf[4096];
context.environment->GetPath(PathType::Data, buf, sizeof(buf));
std::string path = std::string(buf) + "/cache/transcoder/";
boost::filesystem::path boostPath(path);
if (!exists(boostPath)) {
create_directories(boostPath);
fs::path fsPath(fs::u8path(path));
if (!fs::exists(fsPath)) {
fs::create_directories(fsPath);
}
return path;
}
static void iterateTranscodeCache(Context& context, std::function<void(path)> cb) {
static void iterateTranscodeCache(Context& context, std::function<void(fs::path)> cb) {
if (cb) {
directory_iterator end;
directory_iterator file(cachePath(context));
fs::directory_iterator end;
fs::directory_iterator file(fs::u8path(cachePath(context)));
while (file != end) {
if (!is_directory(file->status())) {
cb(file->path());
@ -98,20 +120,19 @@ static void iterateTranscodeCache(Context& context, std::function<void(path)> cb
}
void Transcoder::RemoveTempTranscodeFiles(Context& context) {
iterateTranscodeCache(context, [](path p) {
if (p.extension().string() == ".tmp") {
boost::system::error_code ec;
remove(p, ec);
iterateTranscodeCache(context, [](fs::path p) {
if (p.extension().u8string() == ".tmp") {
std::error_code ec;
fs::remove(p, ec);
}
});
}
void Transcoder::PruneTranscodeCache(Context& context) {
std::map<time_t, path> sorted;
std::map<time_t, fs::path> sorted;
boost::system::error_code ec;
iterateTranscodeCache(context, [&sorted, &ec](path p) {
sorted[last_write_time(p, ec)] = p;
iterateTranscodeCache(context, [&sorted](fs::path p) {
sorted[lastWriteTime(p)] = p;
});
int maxSize = context.prefs->GetInt(
@ -122,8 +143,8 @@ void Transcoder::PruneTranscodeCache(Context& context) {
auto it = sorted.begin();
while (extra > 0 && it != sorted.end()) {
auto p = it->second;
boost::system::error_code ec;
if (remove(p, ec)) {
std::error_code ec;
if (fs::remove(p, ec)) {
--extra;
}
++it;
@ -146,7 +167,7 @@ static void getTempAndFinalFilename(
do {
tempFn = finalFn + "." + std::to_string(rand()) + ".tmp";
} while (exists(tempFn));
} while (fs::exists(fs::u8path(tempFn)));
}
IDataStream* Transcoder::Transcode(
@ -192,9 +213,8 @@ IDataStream* Transcoder::TranscodeOnDemand(
std::string expectedFilename, tempFilename;
getTempAndFinalFilename(context, uri, bitrate, format, tempFilename, expectedFilename);
if (exists(expectedFilename)) {
boost::system::error_code ec;
last_write_time(expectedFilename, time(nullptr), ec);
if (fs::exists(fs::u8path(expectedFilename))) {
touch(expectedFilename);
return context.environment->GetDataStream(expectedFilename.c_str(), OpenFlags::Read);
}
@ -211,7 +231,7 @@ IDataStream* Transcoder::TranscodeOnDemand(
transcoderStream = new TranscodingAudioDataStream(
context, encoder, uri, tempFilename, expectedFilename, bitrate, format);
/* if the stream has an indeterminite length, close it down and
/* if the stream has an indeterminate length, close it down and
re-open it without caching options; we don't want to fill up
the storage disk */
if (transcoderStream->Length() < 0) {
@ -247,9 +267,8 @@ IDataStream* Transcoder::TranscodeAndWait(
getTempAndFinalFilename(context, uri, bitrate, format, tempFilename, expectedFilename);
/* already exists? */
if (exists(expectedFilename)) {
boost::system::error_code ec;
last_write_time(expectedFilename, time(nullptr), ec);
if (fs::exists(fs::u8path(expectedFilename))) {
touch(expectedFilename);
return context.environment->GetDataStream(expectedFilename.c_str(), OpenFlags::Read);
}

View File

@ -36,16 +36,15 @@
#include "Util.h"
#include <algorithm>
#include <atomic>
#pragma warning(push, 0)
#include <boost/filesystem.hpp>
#pragma warning(pop)
#include <filesystem>
#define BUFFER_SIZE 8192
#define SAMPLES_PER_BUFFER BUFFER_SIZE / 4 /* sizeof(float) */
static std::atomic<int> activeCount(0);
namespace fs = std::filesystem;
using PositionType = TranscodingAudioDataStream::PositionType;
TranscodingAudioDataStream::TranscodingAudioDataStream(
@ -138,8 +137,8 @@ bool TranscodingAudioDataStream::Close() {
/* incomplete, delete... */
fclose(this->outFile);
this->outFile = nullptr;
boost::system::error_code ec;
boost::filesystem::remove(this->tempFilename, ec);
std::error_code ec;
fs::remove(fs::u8path(this->tempFilename), ec);
}
Dispose();
@ -173,8 +172,8 @@ void TranscodingAudioDataStream::Dispose() {
if (this->outFile) {
fclose(this->outFile);
this->outFile = nullptr;
boost::system::error_code ec;
boost::filesystem::remove(this->tempFilename, ec);
std::error_code ec;
fs::remove(fs::u8path(this->tempFilename), ec);
}
delete this;
@ -297,10 +296,13 @@ PositionType TranscodingAudioDataStream::Read(void *buffer, PositionType bytesTo
this->encoder->Finalize(this->tempFilename.c_str());
boost::system::error_code ec;
boost::filesystem::rename(this->tempFilename, this->finalFilename, ec);
std::error_code ec;
fs::rename(
fs::u8path(this->tempFilename),
fs::u8path(this->finalFilename),
ec);
if (ec) {
boost::filesystem::remove(this->tempFilename, ec);
fs::remove(fs::u8path(this->tempFilename), ec);
}
}
}
@ -316,8 +318,8 @@ internal_error:
this->eof = true;
fclose(this->outFile);
this->outFile = nullptr;
boost::system::error_code ec;
boost::filesystem::remove(this->tempFilename, ec);
std::error_code ec;
fs::remove(fs::u8path(this->tempFilename), ec);
return 0;
}

View File

@ -35,10 +35,8 @@
#pragma once
#include <string>
#pragma warning(push, 0)
#include <boost/bimap.hpp>
#pragma warning(pop)
#include <algorithm>
#include <unordered_map>
#include <musikcore/sdk/IPreferences.h>
#include <musikcore/sdk/IValue.h>
@ -53,11 +51,12 @@ extern __thread char threadLocalBuffer[4096];
extern thread_local char threadLocalBuffer[4096];
#endif
template <typename L, typename R>
boost::bimap<L, R>
static makeBimap(std::initializer_list<typename boost::bimap<L, R>::value_type> list) {
/* http://stackoverflow.com/a/31841462 */
return boost::bimap<L, R>(list.begin(), list.end());
template <typename K, typename V>
typename std::unordered_map<K, V>::const_iterator
static FindKeyByValue(const std::unordered_map<K, V>& map, const V& value) {
return std::find_if(map.begin(), map.end(), [&value](const std::pair<K, V> &p) {
return p.second == value;
});
}
static std::string GetPreferenceString(

View File

@ -36,6 +36,7 @@
#include "Constants.h"
#include <musikcore/sdk/constants.h>
#include <musikcore/sdk/String.h>
using websocketpp::lib::placeholders::_1;
using websocketpp::lib::placeholders::_2;
@ -49,19 +50,8 @@ static const char* TAG = "WebSocketServer";
/* UTILITY METHODS */
namespace str {
template<typename... Args>
static std::string format(const std::string& format, Args ... args) {
/* https://stackoverflow.com/a/26221725 */
size_t size = std::snprintf(nullptr, 0, format.c_str(), args ...) + 1; /* extra space for '\0' */
std::unique_ptr<char[]> buf(new char[size]);
std::snprintf(buf.get(), size, format.c_str(), args ...);
return std::string(buf.get(), buf.get() + size - 1); /* omit the '\0' */
}
}
static std::string nextMessageId() {
return str::format("musikcube-server-%d", ++nextId);
return str::Format("musikcube-server-%d", ++nextId);
}
static std::shared_ptr<char*> jsonToStringArray(const json& jsonArray) {
@ -194,10 +184,10 @@ void WebSocketServer::ThreadProc() {
wss->run();
}
catch (websocketpp::exception const & e) {
this->context.debug->Error(TAG, str::format("[ThreadProc] websocketpp::exception: %s", e.what()).c_str());
this->context.debug->Error(TAG, str::Format("[ThreadProc] websocketpp::exception: %s", e.what()).c_str());
}
catch (std::exception& e) {
this->context.debug->Error(TAG, str::format("[ThreadProc] sttd::exception: %s", e.what()).c_str());
this->context.debug->Error(TAG, str::Format("[ThreadProc] sttd::exception: %s", e.what()).c_str());
}
catch (...) {
this->context.debug->Error(TAG, "[ThreadProc] unknown/unexpected exception");
@ -1427,7 +1417,7 @@ void WebSocketServer::RespondWithGetGainSettings(connection_hdl connection, json
float preampGain = context.environment->GetPreampGain();
this->RespondWithOptions(connection, request, {
{ key::replaygain_mode, REPLAYGAIN_MODE_TO_STRING.left.find(replayGainMode)->second },
{ key::replaygain_mode, REPLAYGAIN_MODE_TO_STRING.find(replayGainMode)->second },
{ key::preamp_gain, preampGain }
});
}
@ -1439,10 +1429,11 @@ void WebSocketServer::RespondWithSetGainSettings(connection_hdl connection, json
float currentGain = context.environment->GetPreampGain();
auto currentMode = context.environment->GetReplayGainMode();
auto currentModeString = REPLAYGAIN_MODE_TO_STRING.left.find(currentMode)->second;
auto currentModeString = REPLAYGAIN_MODE_TO_STRING.find(currentMode)->second;
ReplayGainMode newMode = REPLAYGAIN_MODE_TO_STRING.right.find(
options.value(key::replaygain_mode, currentModeString))->second;
ReplayGainMode newMode = FindKeyByValue<musik::core::sdk::ReplayGainMode, std::string>(
REPLAYGAIN_MODE_TO_STRING,
options.value(key::replaygain_mode, currentModeString))->first;
float newGain = options.value(key::preamp_gain, currentGain);
@ -1504,20 +1495,21 @@ void WebSocketServer::RespondWithSetEqualizerSettings(connection_hdl connection,
void WebSocketServer::RespondWithGetTransportType(connection_hdl connection, json& request) {
auto type = context.environment->GetTransportType();
this->RespondWithOptions(connection, request, {
{ key::type, TRANSPORT_TYPE_TO_STRING.left.find(type)->second }
{ key::type, TRANSPORT_TYPE_TO_STRING.find(type)->second }
});
}
void WebSocketServer::RespondWithSetTransportType(connection_hdl connection, json& request) {
auto& options = request[message::options];
std::string currentType = TRANSPORT_TYPE_TO_STRING.left
std::string currentType = TRANSPORT_TYPE_TO_STRING
.find(context.environment->GetTransportType())->second;
auto newType = options.value(key::type, currentType);
if (currentType != newType) {
auto enumType = TRANSPORT_TYPE_TO_STRING.right.find(newType)->second;
auto enumType = FindKeyByValue<musik::core::sdk::TransportType, std::string>(
TRANSPORT_TYPE_TO_STRING, newType)->first;
context.environment->SetTransportType(enumType);
}
@ -1617,8 +1609,8 @@ json WebSocketServer::WebSocketServer::ReadTrackMetadata(ITrack* track) {
}
void WebSocketServer::BuildPlaybackOverview(json& options) {
options[key::state] = PLAYBACK_STATE_TO_STRING.left.find(context.playback->GetPlaybackState())->second;
options[key::repeat_mode] = REPEAT_MODE_TO_STRING.left.find(context.playback->GetRepeatMode())->second;
options[key::state] = PLAYBACK_STATE_TO_STRING.find(context.playback->GetPlaybackState())->second;
options[key::repeat_mode] = REPEAT_MODE_TO_STRING.find(context.playback->GetRepeatMode())->second;
options[key::volume] = context.playback->GetVolume();
options[key::shuffled] = context.playback->IsShuffled();
options[key::muted] = context.playback->IsMuted();
@ -1655,11 +1647,11 @@ void WebSocketServer::OnMessage(server* s, connection_hdl hdl, message_ptr msg)
}
}
catch (std::exception& e) {
this->context.debug->Error(TAG, str::format("OnMessage failed: %s", e.what()).c_str());
this->context.debug->Error(TAG, str::Format("OnMessage failed: %s", e.what()).c_str());
this->RespondWithInvalidRequest(hdl, value::invalid, value::invalid);
}
catch (...) {
this->context.debug->Error(TAG, str::format("message parse failed: %s", msg->get_payload().c_str()).c_str());
this->context.debug->Error(TAG, str::Format("message parse failed: %s", msg->get_payload().c_str()).c_str());
this->RespondWithInvalidRequest(hdl, value::invalid, value::invalid);
}
}

View File

@ -41,11 +41,6 @@
#include <musikcore/sdk/IPlaybackRemote.h>
#include <musikcore/sdk/IPlugin.h>
#pragma warning(push, 0)
#include <boost/filesystem.hpp>
#include <boost/filesystem/detail/utf8_codecvt_facet.hpp>
#pragma warning(pop)
#include <thread>
#ifdef WIN32
@ -154,13 +149,6 @@ static class PlaybackRemote : public IPlaybackRemote {
static class Plugin : public IPlugin {
public:
Plugin() {
/* enable utf8 filesystem (required in windows, maybe not macos/linux */
std::locale locale = std::locale();
std::locale utf8Locale(locale, new boost::filesystem::detail::utf8_codecvt_facet);
boost::filesystem::path::imbue(utf8Locale);
}
virtual void Release() { }
virtual const char* Name() { return "musikcube Server (wss, http)"; }
virtual const char* Version() { return "0.7.0"; }

View File

@ -233,14 +233,14 @@
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>../../3rdparty/include;../../3rdparty/win32_include;../../../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;MHD_W32LIB;BUILDING_MHD_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>../../3rdparty/include;../../3rdparty/win32_include;../../../../3rdparty/win32_include;../../3rdparty/asio/asio/include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;MHD_W32LIB;BUILDING_MHD_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;ASIO_STANDALONE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib32-msvc-14.2;../../3rdparty/bin/win32/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../3rdparty/bin/win32/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>zlibstatD.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
@ -254,14 +254,14 @@
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>../../3rdparty/include;../../3rdparty/win32_include;../../../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;MHD_W32LIB;BUILDING_MHD_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>../../3rdparty/include;../../3rdparty/win32_include;../../../../3rdparty/win32_include;../../3rdparty/asio/asio/include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;MHD_W32LIB;BUILDING_MHD_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;ASIO_STANDALONE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib32-msvc-14.2;../../3rdparty/bin/win32/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../3rdparty/bin/win32/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>zlibstatD.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
@ -275,14 +275,14 @@
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>../../3rdparty/include;../../3rdparty/win32_include;../../../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;MHD_W32LIB;BUILDING_MHD_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>../../3rdparty/include;../../3rdparty/win32_include;../../../../3rdparty/win32_include;../../3rdparty/asio/asio/include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;MHD_W32LIB;BUILDING_MHD_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;ASIO_STANDALONE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib32-msvc-14.2;../../3rdparty/bin/win32/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../3rdparty/bin/win32/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>zlibstatD.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
@ -296,14 +296,14 @@
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>../../3rdparty/include;../../3rdparty/win32_include;../../../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;MHD_W32LIB;BUILDING_MHD_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>../../3rdparty/include;../../3rdparty/win32_include;../../../../3rdparty/win32_include;../../3rdparty/asio/asio/include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;MHD_W32LIB;BUILDING_MHD_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;ASIO_STANDALONE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib64-msvc-14.2;../../3rdparty/bin/win64/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>;../../3rdparty/bin/win64/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>zlibstatD.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
@ -312,14 +312,14 @@
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>../../3rdparty/include;../../3rdparty/win32_include;../../../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;MHD_W32LIB;BUILDING_MHD_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>../../3rdparty/include;../../3rdparty/win32_include;../../../../3rdparty/win32_include;../../3rdparty/asio/asio/include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;MHD_W32LIB;BUILDING_MHD_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;ASIO_STANDALONE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib64-msvc-14.2;../../3rdparty/bin/win64/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>;../../3rdparty/bin/win64/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>zlibstatD.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
@ -328,14 +328,14 @@
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>../../3rdparty/include;../../3rdparty/win32_include;../../../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;MHD_W32LIB;BUILDING_MHD_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>../../3rdparty/include;../../3rdparty/win32_include;../../../../3rdparty/win32_include;../../3rdparty/asio/asio/include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;MHD_W32LIB;BUILDING_MHD_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;ASIO_STANDALONE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib64-msvc-14.2;../../3rdparty/bin/win64/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>;../../3rdparty/bin/win64/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>zlibstatD.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
@ -346,8 +346,8 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>../../3rdparty/include;../../3rdparty/win32_include;../../../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;MHD_W32LIB;BUILDING_MHD_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>../../3rdparty/include;../../3rdparty/win32_include;../../../../3rdparty/win32_include;../../3rdparty/asio/asio/include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;MHD_W32LIB;BUILDING_MHD_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;ASIO_STANDALONE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<DebugInformationFormat>None</DebugInformationFormat>
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
@ -359,7 +359,7 @@
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib32-msvc-14.2;../../3rdparty/bin/win32/lib</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../3rdparty/bin/win32/lib</AdditionalLibraryDirectories>
<AdditionalDependencies>zlibstat.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
@ -377,8 +377,8 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>../../3rdparty/include;../../3rdparty/win32_include;../../../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;MHD_W32LIB;BUILDING_MHD_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>../../3rdparty/include;../../3rdparty/win32_include;../../../../3rdparty/win32_include;../../3rdparty/asio/asio/include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;MHD_W32LIB;BUILDING_MHD_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;ASIO_STANDALONE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<DebugInformationFormat>None</DebugInformationFormat>
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
@ -390,7 +390,7 @@
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib32-msvc-14.2;../../3rdparty/bin/win32/lib</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../3rdparty/bin/win32/lib</AdditionalLibraryDirectories>
<AdditionalDependencies>zlibstat.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
@ -408,8 +408,8 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>../../3rdparty/include;../../3rdparty/win32_include;../../../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;MHD_W32LIB;BUILDING_MHD_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>../../3rdparty/include;../../3rdparty/win32_include;../../../../3rdparty/win32_include;../../3rdparty/asio/asio/include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;MHD_W32LIB;BUILDING_MHD_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;ASIO_STANDALONE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<DebugInformationFormat>None</DebugInformationFormat>
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
@ -421,7 +421,7 @@
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib32-msvc-14.2;../../3rdparty/bin/win32/lib</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>../../3rdparty/bin/win32/lib</AdditionalLibraryDirectories>
<AdditionalDependencies>zlibstat.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
@ -439,9 +439,9 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>../../3rdparty/include;../../3rdparty/win32_include;../../../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../3rdparty/include;../../3rdparty/win32_include;../../../../3rdparty/win32_include;../../3rdparty/asio/asio/include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<DebugInformationFormat>None</DebugInformationFormat>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;MHD_W32LIB;BUILDING_MHD_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;MHD_W32LIB;BUILDING_MHD_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;ASIO_STANDALONE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<LanguageStandard>stdcpp17</LanguageStandard>
@ -449,7 +449,7 @@
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib64-msvc-14.2;../../3rdparty/bin/win64/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>;../../3rdparty/bin/win64/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>zlibstatD.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
@ -460,9 +460,9 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>../../3rdparty/include;../../3rdparty/win32_include;../../../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../3rdparty/include;../../3rdparty/win32_include;../../../../3rdparty/win32_include;../../3rdparty/asio/asio/include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<DebugInformationFormat>None</DebugInformationFormat>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;MHD_W32LIB;BUILDING_MHD_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;MHD_W32LIB;BUILDING_MHD_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;ASIO_STANDALONE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<LanguageStandard>stdcpp17</LanguageStandard>
@ -470,7 +470,7 @@
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib64-msvc-14.2;../../3rdparty/bin/win64/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>;../../3rdparty/bin/win64/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>zlibstatD.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
@ -481,9 +481,9 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>../../3rdparty/include;../../3rdparty/win32_include;../../../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../3rdparty/include;../../3rdparty/win32_include;../../../../3rdparty/win32_include;../../3rdparty/asio/asio/include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<DebugInformationFormat>None</DebugInformationFormat>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;MHD_W32LIB;BUILDING_MHD_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;MHD_W32LIB;BUILDING_MHD_LIB;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;BOOST_DATE_TIME_NO_LIB;BOOST_REGEX_NO_LIB;_WEBSOCKETPP_CPP11_TYPE_TRAITS_;ASIO_STANDALONE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<LanguageStandard>stdcpp17</LanguageStandard>
@ -491,7 +491,7 @@
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib64-msvc-14.2;../../3rdparty/bin/win64/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>;../../3rdparty/bin/win64/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>zlibstatD.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>

View File

@ -233,7 +233,7 @@
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>3rdparty/include;../../3rdparty/win32_include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
@ -254,7 +254,7 @@
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>3rdparty/include;../../3rdparty/win32_include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
@ -275,7 +275,7 @@
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>3rdparty/include;../../3rdparty/win32_include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
@ -346,7 +346,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>3rdparty/include;../../3rdparty/win32_include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<DebugInformationFormat>None</DebugInformationFormat>
@ -377,7 +377,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>3rdparty/include;../../3rdparty/win32_include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<DebugInformationFormat>None</DebugInformationFormat>
@ -408,7 +408,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>3rdparty/include;../../3rdparty/win32_include;../../../../boost_1_74_0;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>3rdparty/include;../../3rdparty/win32_include;../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;WIN32_LEAN_AND_MEAN;NOMINMAX;ZLIB_WINAPI;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<DebugInformationFormat>None</DebugInformationFormat>

View File

@ -4,7 +4,6 @@ set (taglibreader_SOURCES
)
add_library(taglibreader SHARED ${taglibreader_SOURCES})
include_directories(${Boost_INCLUDE_DIRS})
find_library(LIBZ z)
@ -34,4 +33,4 @@ else()
endif()
message(STATUS "[taglibmetadatareader] using ${LIBTAG}")
target_link_libraries(taglibreader ${Boost_LIBRARIES} ${LIBTAG} ${LIBZ})
target_link_libraries(taglibreader ${LIBTAG} ${LIBZ})

View File

@ -34,6 +34,8 @@
#include "TaglibMetadataReader.h"
#include <musikcore/sdk/String.h>
#ifdef WIN32
#include <taglib/toolkit/tlist.h>
#include <taglib/toolkit/tfile.h>
@ -94,57 +96,6 @@
using namespace musik::core::sdk;
namespace str {
static std::string lower(std::string input) {
std::transform(input.begin(), input.end(), input.begin(), ::tolower);
return input;
}
static inline bool isSpace(const char c) {
return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == '\v' || c == '\f';
}
std::string trim(const std::string& str) {
if (str.size()) {
int length = (size_t) str.size();
int start = 0, end = length;
int i = 0;
while (i < length) {
if (!isSpace(str[i])) {
break;
}
++start;
++i;
}
i = end - 1;
while (i >= 0) {
if (!isSpace(str[i])) {
break;
}
--i;
}
if (end >= start) {
std::string result = str.substr((size_t) start, (size_t) end - start);
return result;
}
}
return str;
}
static std::vector<std::string> split(
const std::string& in, const std::string& delim)
{
std::vector<std::string> result;
size_t last = 0, next = 0;
while ((next = in.find(delim, last)) != std::string::npos) {
result.push_back(std::move(trim(in.substr(last, next - last))));
last = next + 1;
}
result.push_back(std::move(trim(in.substr(last))));
return result;
}
}
#ifdef WIN32
static inline std::wstring utf8to16(const char* utf8) {
int size = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, 0, 0);
@ -200,7 +151,7 @@ static bool isValidYear(const std::string& year) {
static float toReplayGainFloat(const std::string& input) {
/* trim any trailing " db" or "db" noise... */
std::string lower = str::lower(input);
std::string lower = str::ToLowerCopy(input);
if (lower.find(" db") == lower.length() - 3) {
lower = lower.substr(0, lower.length() - 3);
}
@ -252,7 +203,8 @@ void TaglibMetadataReader::Release() {
bool TaglibMetadataReader::CanRead(const char *extension) {
if (extension && strlen(extension)) {
std::string ext(str::lower(extension[0] == '.' ? &extension[1] : extension));
std::string withoutLeadingDot = std::string(extension[0] == '.' ? &extension[1] : extension);
std::string ext = str::ToLowerCopy(withoutLeadingDot);
return
ext.compare("opus") == 0 ||
ext.compare("wv") == 0 ||
@ -294,7 +246,7 @@ bool TaglibMetadataReader::Read(const char* uri, ITagStore *track) {
/* ID3v2 is a trainwreck, so it requires special processing */
if (extension.size()) {
if (str::lower(extension) == "mp3") {
if (str::ToLowerCopy(extension) == "mp3") {
this->ReadID3V2(uri, track);
}
}
@ -522,7 +474,7 @@ void TaglibMetadataReader::ExtractReplayGain(const T& map, ITagStore *target)
void TaglibMetadataReader::SetTagValueWithPossibleTotal(
const std::string& value, const std::string& valueKey, const std::string& totalKey, ITagStore* track)
{
std::vector<std::string> parts = str::split(value, "/");
std::vector<std::string> parts = str::Split(value, "/");
this->SetTagValue(valueKey.c_str(), parts[0].c_str(), track);
if (parts.size() > 1) {
this->SetTagValue(totalKey.c_str(), parts[1].c_str(), track);
@ -809,7 +761,7 @@ void TaglibMetadataReader::SetSlashSeparatedValues(
{
if (!tagString.isEmpty()) {
std::string value(tagString.to8Bit(true));
std::vector<std::string> splitValues = str::split(value, "/");
std::vector<std::string> splitValues = str::Split(value, "/");
std::vector<std::string>::iterator it = splitValues.begin();
for( ; it != splitValues.end(); ++it) {
track->SetValue(key, it->c_str());

View File

@ -259,7 +259,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../;../../3rdparty/include/;../../../../boost_1_74_0/;taglib-1.11;taglib-1.11/taglib;taglib-1.11/taglib/ape;taglib-1.11/taglib/asf;taglib-1.11/taglib/flac;taglib-1.11/taglib/mpc;taglib-1.11/taglib/mpeg;taglib-1.11/taglib/mpeg/id3v1;taglib-1.11/taglib/mpeg/id3v2;taglib-1.11/taglib/mpeg/id3v2/frames;taglib-1.11/taglib/ogg;taglib-1.11/taglib/ogg/flac;taglib-1.11/taglib/ogg/opus;taglib-1.11/taglib/ogg/speex;taglib-1.11/taglib/ogg/vorbis;taglib-1.11/taglib/toolkit;taglib-1.11/taglib/trueaudio;taglib-1.11/taglib/wavpack;taglib-1.11/taglib/xm;taglib-1.11/taglib/riff;taglib-1.11/taglib/riff/aiff;taglib-1.11/taglib/riff/wav;taglib-1.11/taglib/mod;taglib-1.11/taglib/s3m;taglib-1.11/taglib/mp4;taglib-1.11/taglib/it;taglib-1.11/3rdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include/;taglib-1.11;taglib-1.11/taglib;taglib-1.11/taglib/ape;taglib-1.11/taglib/asf;taglib-1.11/taglib/flac;taglib-1.11/taglib/mpc;taglib-1.11/taglib/mpeg;taglib-1.11/taglib/mpeg/id3v1;taglib-1.11/taglib/mpeg/id3v2;taglib-1.11/taglib/mpeg/id3v2/frames;taglib-1.11/taglib/ogg;taglib-1.11/taglib/ogg/flac;taglib-1.11/taglib/ogg/opus;taglib-1.11/taglib/ogg/speex;taglib-1.11/taglib/ogg/vorbis;taglib-1.11/taglib/toolkit;taglib-1.11/taglib/trueaudio;taglib-1.11/taglib/wavpack;taglib-1.11/taglib/xm;taglib-1.11/taglib/riff;taglib-1.11/taglib/riff/aiff;taglib-1.11/taglib/riff/wav;taglib-1.11/taglib/mod;taglib-1.11/taglib/s3m;taglib-1.11/taglib/mp4;taglib-1.11/taglib/it;taglib-1.11/3rdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;TAGLIB_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@ -278,7 +278,7 @@
</ClCompile>
<Link>
<OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib32-msvc-14.2;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<GenerateMapFile>true</GenerateMapFile>
<MapFileName>$(TargetDir)$(TargetName).map</MapFileName>
@ -291,7 +291,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-DLL|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../;../../3rdparty/include/;../../../../boost_1_74_0/;taglib-1.11;taglib-1.11/taglib;taglib-1.11/taglib/ape;taglib-1.11/taglib/asf;taglib-1.11/taglib/flac;taglib-1.11/taglib/mpc;taglib-1.11/taglib/mpeg;taglib-1.11/taglib/mpeg/id3v1;taglib-1.11/taglib/mpeg/id3v2;taglib-1.11/taglib/mpeg/id3v2/frames;taglib-1.11/taglib/ogg;taglib-1.11/taglib/ogg/flac;taglib-1.11/taglib/ogg/opus;taglib-1.11/taglib/ogg/speex;taglib-1.11/taglib/ogg/vorbis;taglib-1.11/taglib/toolkit;taglib-1.11/taglib/trueaudio;taglib-1.11/taglib/wavpack;taglib-1.11/taglib/xm;taglib-1.11/taglib/riff;taglib-1.11/taglib/riff/aiff;taglib-1.11/taglib/riff/wav;taglib-1.11/taglib/mod;taglib-1.11/taglib/s3m;taglib-1.11/taglib/mp4;taglib-1.11/taglib/it;taglib-1.11/3rdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include/;taglib-1.11;taglib-1.11/taglib;taglib-1.11/taglib/ape;taglib-1.11/taglib/asf;taglib-1.11/taglib/flac;taglib-1.11/taglib/mpc;taglib-1.11/taglib/mpeg;taglib-1.11/taglib/mpeg/id3v1;taglib-1.11/taglib/mpeg/id3v2;taglib-1.11/taglib/mpeg/id3v2/frames;taglib-1.11/taglib/ogg;taglib-1.11/taglib/ogg/flac;taglib-1.11/taglib/ogg/opus;taglib-1.11/taglib/ogg/speex;taglib-1.11/taglib/ogg/vorbis;taglib-1.11/taglib/toolkit;taglib-1.11/taglib/trueaudio;taglib-1.11/taglib/wavpack;taglib-1.11/taglib/xm;taglib-1.11/taglib/riff;taglib-1.11/taglib/riff/aiff;taglib-1.11/taglib/riff/wav;taglib-1.11/taglib/mod;taglib-1.11/taglib/s3m;taglib-1.11/taglib/mp4;taglib-1.11/taglib/it;taglib-1.11/3rdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;TAGLIB_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@ -310,7 +310,7 @@
</ClCompile>
<Link>
<OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib32-msvc-14.2;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<GenerateMapFile>true</GenerateMapFile>
<MapFileName>$(TargetDir)$(TargetName).map</MapFileName>
@ -323,7 +323,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Con|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../;../../3rdparty/include/;../../../../boost_1_74_0/;taglib-1.11;taglib-1.11/taglib;taglib-1.11/taglib/ape;taglib-1.11/taglib/asf;taglib-1.11/taglib/flac;taglib-1.11/taglib/mpc;taglib-1.11/taglib/mpeg;taglib-1.11/taglib/mpeg/id3v1;taglib-1.11/taglib/mpeg/id3v2;taglib-1.11/taglib/mpeg/id3v2/frames;taglib-1.11/taglib/ogg;taglib-1.11/taglib/ogg/flac;taglib-1.11/taglib/ogg/opus;taglib-1.11/taglib/ogg/speex;taglib-1.11/taglib/ogg/vorbis;taglib-1.11/taglib/toolkit;taglib-1.11/taglib/trueaudio;taglib-1.11/taglib/wavpack;taglib-1.11/taglib/xm;taglib-1.11/taglib/riff;taglib-1.11/taglib/riff/aiff;taglib-1.11/taglib/riff/wav;taglib-1.11/taglib/mod;taglib-1.11/taglib/s3m;taglib-1.11/taglib/mp4;taglib-1.11/taglib/it;taglib-1.11/3rdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include/;taglib-1.11;taglib-1.11/taglib;taglib-1.11/taglib/ape;taglib-1.11/taglib/asf;taglib-1.11/taglib/flac;taglib-1.11/taglib/mpc;taglib-1.11/taglib/mpeg;taglib-1.11/taglib/mpeg/id3v1;taglib-1.11/taglib/mpeg/id3v2;taglib-1.11/taglib/mpeg/id3v2/frames;taglib-1.11/taglib/ogg;taglib-1.11/taglib/ogg/flac;taglib-1.11/taglib/ogg/opus;taglib-1.11/taglib/ogg/speex;taglib-1.11/taglib/ogg/vorbis;taglib-1.11/taglib/toolkit;taglib-1.11/taglib/trueaudio;taglib-1.11/taglib/wavpack;taglib-1.11/taglib/xm;taglib-1.11/taglib/riff;taglib-1.11/taglib/riff/aiff;taglib-1.11/taglib/riff/wav;taglib-1.11/taglib/mod;taglib-1.11/taglib/s3m;taglib-1.11/taglib/mp4;taglib-1.11/taglib/it;taglib-1.11/3rdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;TAGLIB_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@ -342,7 +342,7 @@
</ClCompile>
<Link>
<OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib32-msvc-14.2;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<GenerateMapFile>true</GenerateMapFile>
<MapFileName>$(TargetDir)$(TargetName).map</MapFileName>
@ -355,7 +355,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../;../../3rdparty/include/;../../../../boost_1_74_0/;taglib-1.11;taglib-1.11/taglib;taglib-1.11/taglib/ape;taglib-1.11/taglib/asf;taglib-1.11/taglib/flac;taglib-1.11/taglib/mpc;taglib-1.11/taglib/mpeg;taglib-1.11/taglib/mpeg/id3v1;taglib-1.11/taglib/mpeg/id3v2;taglib-1.11/taglib/mpeg/id3v2/frames;taglib-1.11/taglib/ogg;taglib-1.11/taglib/ogg/flac;taglib-1.11/taglib/ogg/opus;taglib-1.11/taglib/ogg/speex;taglib-1.11/taglib/ogg/vorbis;taglib-1.11/taglib/toolkit;taglib-1.11/taglib/trueaudio;taglib-1.11/taglib/wavpack;taglib-1.11/taglib/xm;taglib-1.11/taglib/riff;taglib-1.11/taglib/riff/aiff;taglib-1.11/taglib/riff/wav;taglib-1.11/taglib/mod;taglib-1.11/taglib/s3m;taglib-1.11/taglib/mp4;taglib-1.11/taglib/it;taglib-1.11/3rdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include/;taglib-1.11;taglib-1.11/taglib;taglib-1.11/taglib/ape;taglib-1.11/taglib/asf;taglib-1.11/taglib/flac;taglib-1.11/taglib/mpc;taglib-1.11/taglib/mpeg;taglib-1.11/taglib/mpeg/id3v1;taglib-1.11/taglib/mpeg/id3v2;taglib-1.11/taglib/mpeg/id3v2/frames;taglib-1.11/taglib/ogg;taglib-1.11/taglib/ogg/flac;taglib-1.11/taglib/ogg/opus;taglib-1.11/taglib/ogg/speex;taglib-1.11/taglib/ogg/vorbis;taglib-1.11/taglib/toolkit;taglib-1.11/taglib/trueaudio;taglib-1.11/taglib/wavpack;taglib-1.11/taglib/xm;taglib-1.11/taglib/riff;taglib-1.11/taglib/riff/aiff;taglib-1.11/taglib/riff/wav;taglib-1.11/taglib/mod;taglib-1.11/taglib/s3m;taglib-1.11/taglib/mp4;taglib-1.11/taglib/it;taglib-1.11/3rdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;TAGLIB_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@ -374,7 +374,7 @@
</ClCompile>
<Link>
<OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib64-msvc-14.2;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<GenerateMapFile>true</GenerateMapFile>
<MapFileName>$(TargetDir)$(TargetName).map</MapFileName>
@ -386,7 +386,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-DLL|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../;../../3rdparty/include/;../../../../boost_1_74_0/;taglib-1.11;taglib-1.11/taglib;taglib-1.11/taglib/ape;taglib-1.11/taglib/asf;taglib-1.11/taglib/flac;taglib-1.11/taglib/mpc;taglib-1.11/taglib/mpeg;taglib-1.11/taglib/mpeg/id3v1;taglib-1.11/taglib/mpeg/id3v2;taglib-1.11/taglib/mpeg/id3v2/frames;taglib-1.11/taglib/ogg;taglib-1.11/taglib/ogg/flac;taglib-1.11/taglib/ogg/opus;taglib-1.11/taglib/ogg/speex;taglib-1.11/taglib/ogg/vorbis;taglib-1.11/taglib/toolkit;taglib-1.11/taglib/trueaudio;taglib-1.11/taglib/wavpack;taglib-1.11/taglib/xm;taglib-1.11/taglib/riff;taglib-1.11/taglib/riff/aiff;taglib-1.11/taglib/riff/wav;taglib-1.11/taglib/mod;taglib-1.11/taglib/s3m;taglib-1.11/taglib/mp4;taglib-1.11/taglib/it;taglib-1.11/3rdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include/;taglib-1.11;taglib-1.11/taglib;taglib-1.11/taglib/ape;taglib-1.11/taglib/asf;taglib-1.11/taglib/flac;taglib-1.11/taglib/mpc;taglib-1.11/taglib/mpeg;taglib-1.11/taglib/mpeg/id3v1;taglib-1.11/taglib/mpeg/id3v2;taglib-1.11/taglib/mpeg/id3v2/frames;taglib-1.11/taglib/ogg;taglib-1.11/taglib/ogg/flac;taglib-1.11/taglib/ogg/opus;taglib-1.11/taglib/ogg/speex;taglib-1.11/taglib/ogg/vorbis;taglib-1.11/taglib/toolkit;taglib-1.11/taglib/trueaudio;taglib-1.11/taglib/wavpack;taglib-1.11/taglib/xm;taglib-1.11/taglib/riff;taglib-1.11/taglib/riff/aiff;taglib-1.11/taglib/riff/wav;taglib-1.11/taglib/mod;taglib-1.11/taglib/s3m;taglib-1.11/taglib/mp4;taglib-1.11/taglib/it;taglib-1.11/3rdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;TAGLIB_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@ -405,7 +405,7 @@
</ClCompile>
<Link>
<OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib64-msvc-14.2;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<GenerateMapFile>true</GenerateMapFile>
<MapFileName>$(TargetDir)$(TargetName).map</MapFileName>
@ -417,7 +417,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Con|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../;../../3rdparty/include/;../../../../boost_1_74_0/;taglib-1.11;taglib-1.11/taglib;taglib-1.11/taglib/ape;taglib-1.11/taglib/asf;taglib-1.11/taglib/flac;taglib-1.11/taglib/mpc;taglib-1.11/taglib/mpeg;taglib-1.11/taglib/mpeg/id3v1;taglib-1.11/taglib/mpeg/id3v2;taglib-1.11/taglib/mpeg/id3v2/frames;taglib-1.11/taglib/ogg;taglib-1.11/taglib/ogg/flac;taglib-1.11/taglib/ogg/opus;taglib-1.11/taglib/ogg/speex;taglib-1.11/taglib/ogg/vorbis;taglib-1.11/taglib/toolkit;taglib-1.11/taglib/trueaudio;taglib-1.11/taglib/wavpack;taglib-1.11/taglib/xm;taglib-1.11/taglib/riff;taglib-1.11/taglib/riff/aiff;taglib-1.11/taglib/riff/wav;taglib-1.11/taglib/mod;taglib-1.11/taglib/s3m;taglib-1.11/taglib/mp4;taglib-1.11/taglib/it;taglib-1.11/3rdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include/;taglib-1.11;taglib-1.11/taglib;taglib-1.11/taglib/ape;taglib-1.11/taglib/asf;taglib-1.11/taglib/flac;taglib-1.11/taglib/mpc;taglib-1.11/taglib/mpeg;taglib-1.11/taglib/mpeg/id3v1;taglib-1.11/taglib/mpeg/id3v2;taglib-1.11/taglib/mpeg/id3v2/frames;taglib-1.11/taglib/ogg;taglib-1.11/taglib/ogg/flac;taglib-1.11/taglib/ogg/opus;taglib-1.11/taglib/ogg/speex;taglib-1.11/taglib/ogg/vorbis;taglib-1.11/taglib/toolkit;taglib-1.11/taglib/trueaudio;taglib-1.11/taglib/wavpack;taglib-1.11/taglib/xm;taglib-1.11/taglib/riff;taglib-1.11/taglib/riff/aiff;taglib-1.11/taglib/riff/wav;taglib-1.11/taglib/mod;taglib-1.11/taglib/s3m;taglib-1.11/taglib/mp4;taglib-1.11/taglib/it;taglib-1.11/3rdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;TAGLIB_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@ -436,7 +436,7 @@
</ClCompile>
<Link>
<OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib64-msvc-14.2;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<GenerateMapFile>true</GenerateMapFile>
<MapFileName>$(TargetDir)$(TargetName).map</MapFileName>
@ -450,7 +450,7 @@
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>../../;../../3rdparty/include/;../../../../boost_1_74_0/;taglib-1.11;taglib-1.11/taglib;taglib-1.11/taglib/ape;taglib-1.11/taglib/asf;taglib-1.11/taglib/flac;taglib-1.11/taglib/mpc;taglib-1.11/taglib/mpeg;taglib-1.11/taglib/mpeg/id3v1;taglib-1.11/taglib/mpeg/id3v2;taglib-1.11/taglib/mpeg/id3v2/frames;taglib-1.11/taglib/ogg;taglib-1.11/taglib/ogg/flac;taglib-1.11/taglib/ogg/opus;taglib-1.11/taglib/ogg/speex;taglib-1.11/taglib/ogg/vorbis;taglib-1.11/taglib/toolkit;taglib-1.11/taglib/trueaudio;taglib-1.11/taglib/wavpack;taglib-1.11/taglib/xm;taglib-1.11/taglib/riff;taglib-1.11/taglib/riff/aiff;taglib-1.11/taglib/riff/wav;taglib-1.11/taglib/mod;taglib-1.11/taglib/s3m;taglib-1.11/taglib/mp4;taglib-1.11/taglib/it;taglib-1.11/3rdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include/;taglib-1.11;taglib-1.11/taglib;taglib-1.11/taglib/ape;taglib-1.11/taglib/asf;taglib-1.11/taglib/flac;taglib-1.11/taglib/mpc;taglib-1.11/taglib/mpeg;taglib-1.11/taglib/mpeg/id3v1;taglib-1.11/taglib/mpeg/id3v2;taglib-1.11/taglib/mpeg/id3v2/frames;taglib-1.11/taglib/ogg;taglib-1.11/taglib/ogg/flac;taglib-1.11/taglib/ogg/opus;taglib-1.11/taglib/ogg/speex;taglib-1.11/taglib/ogg/vorbis;taglib-1.11/taglib/toolkit;taglib-1.11/taglib/trueaudio;taglib-1.11/taglib/wavpack;taglib-1.11/taglib/xm;taglib-1.11/taglib/riff;taglib-1.11/taglib/riff/aiff;taglib-1.11/taglib/riff/wav;taglib-1.11/taglib/mod;taglib-1.11/taglib/s3m;taglib-1.11/taglib/mp4;taglib-1.11/taglib/it;taglib-1.11/3rdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;TAGLIB_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
@ -470,7 +470,7 @@
</ClCompile>
<Link>
<OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib32-msvc-14.2;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
@ -483,7 +483,7 @@
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>../../;../../3rdparty/include/;../../../../boost_1_74_0/;taglib-1.11;taglib-1.11/taglib;taglib-1.11/taglib/ape;taglib-1.11/taglib/asf;taglib-1.11/taglib/flac;taglib-1.11/taglib/mpc;taglib-1.11/taglib/mpeg;taglib-1.11/taglib/mpeg/id3v1;taglib-1.11/taglib/mpeg/id3v2;taglib-1.11/taglib/mpeg/id3v2/frames;taglib-1.11/taglib/ogg;taglib-1.11/taglib/ogg/flac;taglib-1.11/taglib/ogg/opus;taglib-1.11/taglib/ogg/speex;taglib-1.11/taglib/ogg/vorbis;taglib-1.11/taglib/toolkit;taglib-1.11/taglib/trueaudio;taglib-1.11/taglib/wavpack;taglib-1.11/taglib/xm;taglib-1.11/taglib/riff;taglib-1.11/taglib/riff/aiff;taglib-1.11/taglib/riff/wav;taglib-1.11/taglib/mod;taglib-1.11/taglib/s3m;taglib-1.11/taglib/mp4;taglib-1.11/taglib/it;taglib-1.11/3rdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include/;taglib-1.11;taglib-1.11/taglib;taglib-1.11/taglib/ape;taglib-1.11/taglib/asf;taglib-1.11/taglib/flac;taglib-1.11/taglib/mpc;taglib-1.11/taglib/mpeg;taglib-1.11/taglib/mpeg/id3v1;taglib-1.11/taglib/mpeg/id3v2;taglib-1.11/taglib/mpeg/id3v2/frames;taglib-1.11/taglib/ogg;taglib-1.11/taglib/ogg/flac;taglib-1.11/taglib/ogg/opus;taglib-1.11/taglib/ogg/speex;taglib-1.11/taglib/ogg/vorbis;taglib-1.11/taglib/toolkit;taglib-1.11/taglib/trueaudio;taglib-1.11/taglib/wavpack;taglib-1.11/taglib/xm;taglib-1.11/taglib/riff;taglib-1.11/taglib/riff/aiff;taglib-1.11/taglib/riff/wav;taglib-1.11/taglib/mod;taglib-1.11/taglib/s3m;taglib-1.11/taglib/mp4;taglib-1.11/taglib/it;taglib-1.11/3rdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;TAGLIB_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
@ -503,7 +503,7 @@
</ClCompile>
<Link>
<OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib32-msvc-14.2;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
@ -516,7 +516,7 @@
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>../../;../../3rdparty/include/;../../../../boost_1_74_0/;taglib-1.11;taglib-1.11/taglib;taglib-1.11/taglib/ape;taglib-1.11/taglib/asf;taglib-1.11/taglib/flac;taglib-1.11/taglib/mpc;taglib-1.11/taglib/mpeg;taglib-1.11/taglib/mpeg/id3v1;taglib-1.11/taglib/mpeg/id3v2;taglib-1.11/taglib/mpeg/id3v2/frames;taglib-1.11/taglib/ogg;taglib-1.11/taglib/ogg/flac;taglib-1.11/taglib/ogg/opus;taglib-1.11/taglib/ogg/speex;taglib-1.11/taglib/ogg/vorbis;taglib-1.11/taglib/toolkit;taglib-1.11/taglib/trueaudio;taglib-1.11/taglib/wavpack;taglib-1.11/taglib/xm;taglib-1.11/taglib/riff;taglib-1.11/taglib/riff/aiff;taglib-1.11/taglib/riff/wav;taglib-1.11/taglib/mod;taglib-1.11/taglib/s3m;taglib-1.11/taglib/mp4;taglib-1.11/taglib/it;taglib-1.11/3rdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include/;taglib-1.11;taglib-1.11/taglib;taglib-1.11/taglib/ape;taglib-1.11/taglib/asf;taglib-1.11/taglib/flac;taglib-1.11/taglib/mpc;taglib-1.11/taglib/mpeg;taglib-1.11/taglib/mpeg/id3v1;taglib-1.11/taglib/mpeg/id3v2;taglib-1.11/taglib/mpeg/id3v2/frames;taglib-1.11/taglib/ogg;taglib-1.11/taglib/ogg/flac;taglib-1.11/taglib/ogg/opus;taglib-1.11/taglib/ogg/speex;taglib-1.11/taglib/ogg/vorbis;taglib-1.11/taglib/toolkit;taglib-1.11/taglib/trueaudio;taglib-1.11/taglib/wavpack;taglib-1.11/taglib/xm;taglib-1.11/taglib/riff;taglib-1.11/taglib/riff/aiff;taglib-1.11/taglib/riff/wav;taglib-1.11/taglib/mod;taglib-1.11/taglib/s3m;taglib-1.11/taglib/mp4;taglib-1.11/taglib/it;taglib-1.11/3rdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;TAGLIB_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
@ -536,7 +536,7 @@
</ClCompile>
<Link>
<OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib32-msvc-14.2;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
@ -549,7 +549,7 @@
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>../../;../../3rdparty/include/;../../../../boost_1_74_0/;taglib-1.11;taglib-1.11/taglib;taglib-1.11/taglib/ape;taglib-1.11/taglib/asf;taglib-1.11/taglib/flac;taglib-1.11/taglib/mpc;taglib-1.11/taglib/mpeg;taglib-1.11/taglib/mpeg/id3v1;taglib-1.11/taglib/mpeg/id3v2;taglib-1.11/taglib/mpeg/id3v2/frames;taglib-1.11/taglib/ogg;taglib-1.11/taglib/ogg/flac;taglib-1.11/taglib/ogg/opus;taglib-1.11/taglib/ogg/speex;taglib-1.11/taglib/ogg/vorbis;taglib-1.11/taglib/toolkit;taglib-1.11/taglib/trueaudio;taglib-1.11/taglib/wavpack;taglib-1.11/taglib/xm;taglib-1.11/taglib/riff;taglib-1.11/taglib/riff/aiff;taglib-1.11/taglib/riff/wav;taglib-1.11/taglib/mod;taglib-1.11/taglib/s3m;taglib-1.11/taglib/mp4;taglib-1.11/taglib/it;taglib-1.11/3rdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include/;taglib-1.11;taglib-1.11/taglib;taglib-1.11/taglib/ape;taglib-1.11/taglib/asf;taglib-1.11/taglib/flac;taglib-1.11/taglib/mpc;taglib-1.11/taglib/mpeg;taglib-1.11/taglib/mpeg/id3v1;taglib-1.11/taglib/mpeg/id3v2;taglib-1.11/taglib/mpeg/id3v2/frames;taglib-1.11/taglib/ogg;taglib-1.11/taglib/ogg/flac;taglib-1.11/taglib/ogg/opus;taglib-1.11/taglib/ogg/speex;taglib-1.11/taglib/ogg/vorbis;taglib-1.11/taglib/toolkit;taglib-1.11/taglib/trueaudio;taglib-1.11/taglib/wavpack;taglib-1.11/taglib/xm;taglib-1.11/taglib/riff;taglib-1.11/taglib/riff/aiff;taglib-1.11/taglib/riff/wav;taglib-1.11/taglib/mod;taglib-1.11/taglib/s3m;taglib-1.11/taglib/mp4;taglib-1.11/taglib/it;taglib-1.11/3rdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;TAGLIB_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
@ -569,7 +569,7 @@
</ClCompile>
<Link>
<OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib64-msvc-14.2;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
@ -581,7 +581,7 @@
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>../../;../../3rdparty/include/;../../../../boost_1_74_0/;taglib-1.11;taglib-1.11/taglib;taglib-1.11/taglib/ape;taglib-1.11/taglib/asf;taglib-1.11/taglib/flac;taglib-1.11/taglib/mpc;taglib-1.11/taglib/mpeg;taglib-1.11/taglib/mpeg/id3v1;taglib-1.11/taglib/mpeg/id3v2;taglib-1.11/taglib/mpeg/id3v2/frames;taglib-1.11/taglib/ogg;taglib-1.11/taglib/ogg/flac;taglib-1.11/taglib/ogg/opus;taglib-1.11/taglib/ogg/speex;taglib-1.11/taglib/ogg/vorbis;taglib-1.11/taglib/toolkit;taglib-1.11/taglib/trueaudio;taglib-1.11/taglib/wavpack;taglib-1.11/taglib/xm;taglib-1.11/taglib/riff;taglib-1.11/taglib/riff/aiff;taglib-1.11/taglib/riff/wav;taglib-1.11/taglib/mod;taglib-1.11/taglib/s3m;taglib-1.11/taglib/mp4;taglib-1.11/taglib/it;taglib-1.11/3rdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include/;taglib-1.11;taglib-1.11/taglib;taglib-1.11/taglib/ape;taglib-1.11/taglib/asf;taglib-1.11/taglib/flac;taglib-1.11/taglib/mpc;taglib-1.11/taglib/mpeg;taglib-1.11/taglib/mpeg/id3v1;taglib-1.11/taglib/mpeg/id3v2;taglib-1.11/taglib/mpeg/id3v2/frames;taglib-1.11/taglib/ogg;taglib-1.11/taglib/ogg/flac;taglib-1.11/taglib/ogg/opus;taglib-1.11/taglib/ogg/speex;taglib-1.11/taglib/ogg/vorbis;taglib-1.11/taglib/toolkit;taglib-1.11/taglib/trueaudio;taglib-1.11/taglib/wavpack;taglib-1.11/taglib/xm;taglib-1.11/taglib/riff;taglib-1.11/taglib/riff/aiff;taglib-1.11/taglib/riff/wav;taglib-1.11/taglib/mod;taglib-1.11/taglib/s3m;taglib-1.11/taglib/mp4;taglib-1.11/taglib/it;taglib-1.11/3rdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;TAGLIB_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
@ -601,7 +601,7 @@
</ClCompile>
<Link>
<OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib64-msvc-14.2;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
@ -613,7 +613,7 @@
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>../../;../../3rdparty/include/;../../../../boost_1_74_0/;taglib-1.11;taglib-1.11/taglib;taglib-1.11/taglib/ape;taglib-1.11/taglib/asf;taglib-1.11/taglib/flac;taglib-1.11/taglib/mpc;taglib-1.11/taglib/mpeg;taglib-1.11/taglib/mpeg/id3v1;taglib-1.11/taglib/mpeg/id3v2;taglib-1.11/taglib/mpeg/id3v2/frames;taglib-1.11/taglib/ogg;taglib-1.11/taglib/ogg/flac;taglib-1.11/taglib/ogg/opus;taglib-1.11/taglib/ogg/speex;taglib-1.11/taglib/ogg/vorbis;taglib-1.11/taglib/toolkit;taglib-1.11/taglib/trueaudio;taglib-1.11/taglib/wavpack;taglib-1.11/taglib/xm;taglib-1.11/taglib/riff;taglib-1.11/taglib/riff/aiff;taglib-1.11/taglib/riff/wav;taglib-1.11/taglib/mod;taglib-1.11/taglib/s3m;taglib-1.11/taglib/mp4;taglib-1.11/taglib/it;taglib-1.11/3rdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>../../;../../3rdparty/include/;taglib-1.11;taglib-1.11/taglib;taglib-1.11/taglib/ape;taglib-1.11/taglib/asf;taglib-1.11/taglib/flac;taglib-1.11/taglib/mpc;taglib-1.11/taglib/mpeg;taglib-1.11/taglib/mpeg/id3v1;taglib-1.11/taglib/mpeg/id3v2;taglib-1.11/taglib/mpeg/id3v2/frames;taglib-1.11/taglib/ogg;taglib-1.11/taglib/ogg/flac;taglib-1.11/taglib/ogg/opus;taglib-1.11/taglib/ogg/speex;taglib-1.11/taglib/ogg/vorbis;taglib-1.11/taglib/toolkit;taglib-1.11/taglib/trueaudio;taglib-1.11/taglib/wavpack;taglib-1.11/taglib/xm;taglib-1.11/taglib/riff;taglib-1.11/taglib/riff/aiff;taglib-1.11/taglib/riff/wav;taglib-1.11/taglib/mod;taglib-1.11/taglib/s3m;taglib-1.11/taglib/mp4;taglib-1.11/taglib/it;taglib-1.11/3rdparty;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;TAGLIB_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
@ -633,7 +633,7 @@
</ClCompile>
<Link>
<OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
<AdditionalLibraryDirectories>../../../../boost_1_74_0/lib64-msvc-14.2;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>

View File

@ -87,7 +87,7 @@ class WaveOut : public IOutput {
/* note we apparently use a std::list<> here, and not std::set<> because
when we need to do a lookup we have a WaveOutBuffer*, and not a shared_ptr.
we could fix this up by using boost::enable_shared_from_this */
we could fix this up by using std::enable_shared_from_this */
typedef std::deque<WaveOutBufferPtr> BufferList;
/* instance state relating to output device, including the thread that