From ec6bd99cdfebed97945075a67f2c9f68536e3474 Mon Sep 17 00:00:00 2001 From: Hyperblast Date: Wed, 5 Mar 2025 09:03:01 +0500 Subject: [PATCH 1/5] update foobar2000 versions --- ci/test.cmd | 14 ++++++++++++++ docs/building.md | 4 ++-- js/api_tests/src/foobar2000/test_context.js | 2 +- scripts/install/foobar2000.cmd | 18 ++++++++++++++---- .../v2.24-x64/profile/config.sqlite | Bin 0 -> 45056 bytes .../foobar2000/v2.24-x64/profile/theme.fth | Bin 0 -> 1136 bytes .../foobar2000/v2.24/profile/config.sqlite | Bin 0 -> 45056 bytes .../foobar2000/v2.24/profile/theme.fth | Bin 0 -> 1136 bytes 8 files changed, 31 insertions(+), 7 deletions(-) create mode 100644 scripts/install/foobar2000/v2.24-x64/profile/config.sqlite create mode 100644 scripts/install/foobar2000/v2.24-x64/profile/theme.fth create mode 100644 scripts/install/foobar2000/v2.24/profile/config.sqlite create mode 100644 scripts/install/foobar2000/v2.24/profile/theme.fth diff --git a/ci/test.cmd b/ci/test.cmd index 33d21479..5ae66435 100644 --- a/ci/test.cmd +++ b/ci/test.cmd @@ -28,6 +28,13 @@ set API_TEST_ERROR=0 set BEEFWEB_TEST_FOOBAR2000_VERSION=v2.1-x64 cmd /c yarn test @if errorlevel 1 set API_TEST_ERROR=1 + + @echo. + @echo === Running API tests on foobar2000 v2.24-x64 === + @echo. + set BEEFWEB_TEST_FOOBAR2000_VERSION=v2.24-x64 + cmd /c yarn test + @if errorlevel 1 set API_TEST_ERROR=1 ) else ( @echo. @echo === Running API tests on foobar2000 v1.6 === @@ -49,6 +56,13 @@ set API_TEST_ERROR=0 set BEEFWEB_TEST_FOOBAR2000_VERSION=v2.1 cmd /c yarn test @if errorlevel 1 set API_TEST_ERROR=1 + + @echo. + @echo === Running API tests on foobar2000 v2.24 === + @echo. + set BEEFWEB_TEST_FOOBAR2000_VERSION=v2.24 + cmd /c yarn test + @if errorlevel 1 set API_TEST_ERROR=1 ) @popd diff --git a/docs/building.md b/docs/building.md index 0bfd6f8a..bbc61421 100644 --- a/docs/building.md +++ b/docs/building.md @@ -153,7 +153,7 @@ Full build needs to be performed before running API tests. Additionally player binaries have to be installed: ``` -> scripts\install\foobar2000.cmd v2.1-x64 +> scripts\install\foobar2000.cmd v2.24-x64 ``` or @@ -173,7 +173,7 @@ This command supports various parameters via environment variables: `BEEFWEB_TEST_BUILD_TYPE` - which build type to use (defaults to `Debug`) -`BEEFWEB_TEST_FOOBAR2000_VERSION` - foobar2000 version to use (defaults to `v2.1-x64`) +`BEEFWEB_TEST_FOOBAR2000_VERSION` - foobar2000 version to use (defaults to `v2.24-x64`) `BEEFWEB_TEST_DEADBEEF_VERSION` - DeaDBeeF version to use (defaults to `v1.9`) diff --git a/js/api_tests/src/foobar2000/test_context.js b/js/api_tests/src/foobar2000/test_context.js index ef467435..566a35ad 100644 --- a/js/api_tests/src/foobar2000/test_context.js +++ b/js/api_tests/src/foobar2000/test_context.js @@ -11,7 +11,7 @@ export class Foobar2000TestContextFactory extends TestContextFactory config.playerId = 'foobar2000'; const { BEEFWEB_TEST_FOOBAR2000_VERSION } = process.env; - config.playerVersion = BEEFWEB_TEST_FOOBAR2000_VERSION || 'v2.1-x64'; + config.playerVersion = BEEFWEB_TEST_FOOBAR2000_VERSION || 'v2.24-x64'; config.playerDir = path.join(config.appsDir, 'foobar2000', config.playerVersion); config.pluginBuildDir = path.join( diff --git a/scripts/install/foobar2000.cmd b/scripts/install/foobar2000.cmd index bae02429..1ebd0333 100644 --- a/scripts/install/foobar2000.cmd +++ b/scripts/install/foobar2000.cmd @@ -1,7 +1,7 @@ @setlocal @if "%1" == "v1.6" ( - @set pkg_file=foobar2000_v1.6.14.exe + @set pkg_file=foobar2000_v1.6.17.exe @goto :install ) @@ -16,17 +16,27 @@ ) @if "%1" == "v2.1" ( - @set pkg_file=foobar2000_v2.1.5.exe + @set pkg_file=foobar2000_v2.1.6.exe @goto :install ) @if "%1" == "v2.1-x64" ( - @set pkg_file=foobar2000-x64_v2.1.5.exe + @set pkg_file=foobar2000-x64_v2.1.6.exe + @goto :install +) + +@if "%1" == "v2.24" ( + @set pkg_file=foobar2000_v2.24.2.exe + @goto :install +) + +@if "%1" == "v2.24-x64" ( + @set pkg_file=foobar2000-x64_v2.24.2.exe @goto :install ) @echo Usage: %~nx0 version -@echo Supported versions: v1.6 v2.0 v2.0-x64 v2.1 v2.1-x64 +@echo Supported versions: v1.6 v2.0 v2.0-x64 v2.1 v2.1-x64 v2.24 v2.24-x64 @cmd /c exit 1 @goto :end diff --git a/scripts/install/foobar2000/v2.24-x64/profile/config.sqlite b/scripts/install/foobar2000/v2.24-x64/profile/config.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..4032bb720b9592569394ea00b971171630ed47a8 GIT binary patch literal 45056 zcmeI*&u`mg7zgmzv70p6x)%wRsN>?Qhf=mT#IYUQ5)!i=yNbwCmZpdaMw_N?3Cb_h zq)g(JJAXqtfjI8Ogy7DB0|;qX4qTWfBrYIv;m7MV0axovs%@H7eP8)a-q)_*JpQOT z_y!6rB*4z&l@6N3}YDcVx00bZa0SG_<0uX=z1RyXL=q3~Cr6pmw z+^=mngL`;n~~8s zl}P78H}P(3fxv0U|5y~>IjkEd4`PZtfxpTrrq6Su`gdU;tGz7h#@z29rJ_r{Tq zJJJckjyIh(-t}swSYBPRq_?1V7S8sEh8 zN-Um!ZQ=9)Cy|N#do&wBCC=h@E1Rwwb2tWV=5P$##AOHafoFjphAikJ9 z2zvXCPCLbqOQ63KzMwz=0uX=z1Rwwb2tWV=5P$##AaI@pQvaR*hxz{){g}{i_zMaI zAOHafKmY;|fB*y_009U<00K{4z>0~=M!nMuGMz!cJLqS2f`djq&~uvVTXuoDrsgxv z$f?X!ERAIi)AZeJPH|k<5JYxt*H&jI@I24S8U>HJIoD*G=H{4X>MkEgH}!nM$`@=U z%>T#eJwor%U!M8_;sYQ60SG_<0uX=z1Rwwb2tWV=5O{I|FNlip@H|57d66ZftHU{h zF#j*n3ZXyKJG9LkC=h@E1Rwwb2tWV=5P$##AOHafOd)Vt5{+2&G<$onyBqW}t$p$S zHBlPQB)h$UuL#=pU_Z0ntF`OzW%7oeHS>nST;Fw>W-BhUa{NWJ9My7N-LcGkrqd1D zdQ1#v>brZJ2en>Cb!^?URfXkjE6+5?bC}~=S>_i!U$^)*1G;4p@;5JOK~#={I(qKl zn@4y5C%zB!{}R1L=$G^Xy+uEq;sEg{5P$##AOHafKmY;|fB*y_009U@1r|i(SRVf0 znE=V=^8mu*%mav7F%Zr&4-lIdm80zcu^E6c|1Z*cLf@tH^s8v_XhQ%35P$##AOHaf zKmY;|fB*!}xxlI<2Cq&|u6--(C|TcO1=IJKmRD?k`@OF5R$g-q&$K(uOZd?qs$>4TDQ5~hAF+1-YOv~vWvn|!(R|crAQE*j*_rgJc zy#ICkolleH!@oZN;00Izz00bZa0SG_<0uX?};|fG` z_R~x&NYNdpnLapnRlqb;0`V~aFVI867ZeCU00Izz00bZa0SG_<0uX=z1fGe&mLLti z+33Rrrg^4+W}06N$Q*QKB2%NkB25GJDlmtRF%O ze{NzC<#^Y{2owW>Fd$Y<&QD2AR#m7`P)*7#DM~C!RaMANDkugC6es2u7JZNlKrVhza)3Qw=!C=EdoO?b1b(sPhB*%?Ct$Vk zrOMV*{!{-+bZ33}`>YG32?*{0F&hwTG?*Wb7b|g|mZQJu!Jo@3Sg?qRTK~Ab{z{u` z_XWQtqL1Ytg4CdkB?Z0zv$S5%b*cJ6Kc1~k_dsgU#nN2ouyVNX_iMDw>RY<<{t1v8 zbg>0fJDz@6w9U1BrijCn+eIxPHRxig%lA61F!<%Le@T{~zP8RwkQ#Kcnvdo8%RlUM zZIDT~`O9(fbqY`o4ER>>DQTNq>#*o%Rei)6-uM8R1dx`TlThxOvfFdd%;}H!e&XG8 z0!c1VHdBn-CDd<8siF*)@A6)g zlsBr(@q6@@2dK`vwZ383n=tp@qi-)Ak=g8{dFfk6z&NPu!Y&7Qv~@!##VtA}T?@=d{Jm>PK`HO_y2?c2et z?Ym~~#DlY4*DJ!*fD|V{Ie$*5N;|NuabG1lm#-<%LkOm(4@phzF}F#tr)BzgrN;Mh zD7*@RsVPKKZ&0mtVu=Ljepy0)qXVOHcY`3Pk%i{8Vn3+8DOy-&2 zd`J%S{4$e;OS83hD6KbJ^=eyE$wNdC$OTCvgba0O{?aKazD#!O(TfnP->Eu8@=Irj z>2D-^=77+Uelc>LJ~NUTd1H8a`0FzV!;^Q~5$zCw00bZa0SG_<0uX=z1iAuSnRIS^ zT-cjvS64Q})n;S8wowkNo7=H!)-C&X#g{6!GwVyS4bsz6qgoH8ivMCoTAV9gTJ)vo z%cYBU`Lgt!e_5KFuSj!?v$IpuZgq1flz2C@lX`X_R~i>ct+5tf-F|J8Uo|aNciPR) z`cka-B{{Y-w3WU+P-nBb(hamz9Xuw`&W6(l>dekNlltJl2iobq7iecCvz1Ec#>Rxb zb1~6Uquq@&stp_yX4HP#C`)q{f5tCQssjVLnX!{aqyBqwM)mYnF`b*35cZypg}Kmf z)fyY!NV_Y^V}k8&I&HiQm2zorX3|Oy zgn8QddYhy<^O>u-Cet)mVV0@8ydT}v zi=I{VY&pvRC+JN=Z_=Oc`3d3x5P$##AOHafKmY;|fB*y_009WxJ%PtWS-5>1A@PXF zGV$hUj3CPYCuy0`ALw=3;1v`IKmY;|fB*y_009U<00Izz00jCFIGYrWMEo*)WoLao zY~}0Q;;jo}axazHYK6QZY^;Xc`IT0+vHEJhXy^sAXc){5T$gFK>@rK?3(ay=%XM|f zGK=}%OhZOtGyZ(;VMnj%yWI;Q4`W@!t&SmO;p$yyOH? zJ`C#cxq~kp-u<8cD$4&S=@mjhra#gv^z}YY5O0A11Rwwb2tWV=5P$##AOHafKp-wK zDjG-f@PCg4ByBzpApDnc0I?v3!fD0<5|4`VVfO#X2tX(QKk^NsPtsTDC%l3J0SG_< z0uX=z1Rwwb2tWV=5cr=6%nXX*bnn_YunLY`2pr~_fzPy}Z1cP4b&c1Gnq&B;?fceu z34RkipXd23@V~WR<|i7>=aXVM)$2%6?7$2(nR$xhF-=!2<`jHhQw_(rY~NK2?o){y z6K_88{rp?k4j%sUou7*@rNnTp*MVmn{EmD#VEnFqooDNHlQ~7L$atTws>*?-e2|Lo(9e)SI?DeGbf54E1p*L&00bZa0SG_< z0uX=z1Rwx``y#L`B=`Km_`?MHd8U89pMMO0Ag>S2`s7wEf$Pbd(800bZa0SG_< b0uX=z1Rwwb2;3imWq$pCKB2%NkB25GJDlmtRF%O ze{NzC<#^Y{2owW>Fd$Y<&QD2AR#m7`P)*7#DM~C!RaMANDkugC6es2u7JZNlKrVhza)3Qw=!C=EdoO?b1b(sPhB*%?Ct$Vk zrOMV*{!{-+bZ33}`>YG32?*{0F&hwTG?*Wb7b|g|mZQJu!Jo@3Sg?qRTK~Ab{z{u` z_XWQtqL1Ytg4CdkB?Z0zv$S5%b*cJ6Kc1~k_dsgU#nN2ouyVNX_iMDw>RY<<{t1v8 zbg>0fJDz@6w9U1BrijCn+eIxPHRxig%lA61F!<%Le@T{~zP8RwkQ#Kcnvdo8%RlUM zZIDT~`O9(fbqY`o4ER>>DQTNq>#*o%Rei)6-uM8R1dx`TlThxOvfFdd%;}H!e&XG8 z0!c1VHdBn-CDd<8siF*)@A6)g zlsBr(@q6@@2dK`vwZ383n=tp@qi-)Ak=g8{dFfk6z&NPu!Y&7Qv~@!##VtA}T?@=d{Jm>PK`HO_y2?c2et z?Ym~~#DlY4*DJ!*fD|V{Ie$*5N;|NuabG1lm#-<%LkOm(4@phzF}F#tr)BzgrN;Mh zD7*@RsVPKKZ&0mtVu= Date: Wed, 5 Mar 2025 09:07:55 +0500 Subject: [PATCH 2/5] add deadbeef v1.10 RC --- ci/install.sh | 7 +++++-- ci/test.sh | 1 + scripts/install/deadbeef.sh | 5 +++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/ci/install.sh b/ci/install.sh index ba50af1d..a8a3509b 100755 --- a/ci/install.sh +++ b/ci/install.sh @@ -4,8 +4,11 @@ set -e function main { - scripts/install/deadbeef.sh v1.8 - scripts/install/deadbeef.sh v1.9 + cd scripts/install + + ./deadbeef.sh v1.8 + ./deadbeef.sh v1.9 + ./deadbeef.sh v1.10 } source "$(dirname $0)/run_in_docker.sh" diff --git a/ci/test.sh b/ci/test.sh index 41d867ae..4c3ac46a 100755 --- a/ci/test.sh +++ b/ci/test.sh @@ -35,6 +35,7 @@ function main run_server_tests run_api_tests v1.8 run_api_tests v1.9 + run_api_tests v1.10 } source "$(dirname $0)/run_in_docker.sh" diff --git a/scripts/install/deadbeef.sh b/scripts/install/deadbeef.sh index 8ee8934f..e566bd92 100755 --- a/scripts/install/deadbeef.sh +++ b/scripts/install/deadbeef.sh @@ -15,6 +15,11 @@ case "$version" in hash='aa17741053f63a7fceace003bf269bd4c4c9e55e42ee14286d9fbf34fbc8e014' ;; + 'v1.10') + url='https://sourceforge.net/projects/deadbeef/files/travis/linux/1.10/deadbeef-static_1.10.0-rc1-1_x86_64.tar.bz2' + hash='3226f09f4ee4e4fb3e3db79971402e55d9ae38dee0ca9e4761ba007e85f62764' + ;; + *) echo "usage: $(basename $0) " exit 1 From a86850768d9b74952c4c75b0dfd75a5a6e4125af Mon Sep 17 00:00:00 2001 From: Hyperblast Date: Wed, 5 Mar 2025 09:17:43 +0500 Subject: [PATCH 3/5] fix foobar2000 installation --- ci/install.cmd | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ci/install.cmd b/ci/install.cmd index fbf52066..de359d81 100644 --- a/ci/install.cmd +++ b/ci/install.cmd @@ -10,6 +10,9 @@ if "%BUILD_ARCH%" == "x64" ( cmd /c scripts\install\foobar2000.cmd v2.1-x64 @if errorlevel 1 goto :end + + cmd /c scripts\install\foobar2000.cmd v2.24-x64 + @if errorlevel 1 goto :end ) else ( cmd /c scripts\install\foobar2000.cmd v1.6 @if errorlevel 1 goto :end @@ -19,6 +22,9 @@ if "%BUILD_ARCH%" == "x64" ( cmd /c scripts\install\foobar2000.cmd v2.1 @if errorlevel 1 goto :end + + cmd /c scripts\install\foobar2000.cmd v2.24 + @if errorlevel 1 goto :end ) :end From 186acc1104ff2639d64086847f48407e5545c641 Mon Sep 17 00:00:00 2001 From: Hyperblast Date: Wed, 5 Mar 2025 09:46:35 +0500 Subject: [PATCH 4/5] fix behavior under ddb v1.10 --- cpp/server/deadbeef/player.hpp | 11 +++++++++++ cpp/server/deadbeef/player_control.cpp | 21 +++++++++++---------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/cpp/server/deadbeef/player.hpp b/cpp/server/deadbeef/player.hpp index fcc9b7db..4bb51c14 100644 --- a/cpp/server/deadbeef/player.hpp +++ b/cpp/server/deadbeef/player.hpp @@ -134,6 +134,17 @@ class PlayerImpl final : public Player bool playNextBy(const std::string& expression, PlaylistItemSelector selector); PlaylistInfo getPlaylistInfo(ddb_playlist_t* playlist, int index, bool isCurrent); + bool isStopped() + { + if (ddbApi->get_output()->state() == OUTPUT_STATE_STOPPED) + { + PlaylistItemPtr activeItem(ddbApi->streamer_get_playing_track()); + return !activeItem; + } + + return false; + } + PlaylistMutex playlistMutex_; ConfigMutex configMutex_; PlaylistMapping playlists_; diff --git a/cpp/server/deadbeef/player_control.cpp b/cpp/server/deadbeef/player_control.cpp index 45b78e84..9c1b1ac4 100644 --- a/cpp/server/deadbeef/player_control.cpp +++ b/cpp/server/deadbeef/player_control.cpp @@ -211,22 +211,23 @@ void PlayerImpl::pause() ddbApi->sendmessage(DB_EV_PAUSE, 0, 0, 0); } +// DeaDBeeF behavior: +// < v1.10: DB_EV_TOGGLE_PAUSE acts like playOrPause +// >= v1.10: DB_EV_TOGGLE_PAUSE acts like togglePause +// Check playback state manually to support all versions + void PlayerImpl::togglePause() { - if (ddbApi->get_output()->state() == OUTPUT_STATE_STOPPED) - { - PlaylistItemPtr activeItem(ddbApi->streamer_get_playing_track()); - - if (!activeItem) - return; - } - - ddbApi->sendmessage(DB_EV_TOGGLE_PAUSE, 0, 0, 0); + if (!isStopped()) + ddbApi->sendmessage(DB_EV_TOGGLE_PAUSE, 0, 0, 0); } void PlayerImpl::playOrPause() { - ddbApi->sendmessage(DB_EV_TOGGLE_PAUSE, 0, 0, 0); + if (isStopped()) + ddbApi->sendmessage(DB_EV_PLAY_CURRENT, 0, 0, 0); + else + ddbApi->sendmessage(DB_EV_TOGGLE_PAUSE, 0, 0, 0); } void PlayerImpl::setMuted(Switch value) From 88c752e7ddd9415acf7e15e27d13411793b3b9f4 Mon Sep 17 00:00:00 2001 From: Hyperblast Date: Wed, 5 Mar 2025 09:54:54 +0500 Subject: [PATCH 5/5] update change log and docs --- ChangeLog.md | 3 ++- docs/building.md | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index da6ebbcb..328cd487 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -3,7 +3,8 @@ - Fix ignoring of "clientConfigDir" setting ### DeaDBeeF - Provide universal .deb package to match `deadbeef-static_*.deb` -- Fix deadlock with streamer +- Fix deadlock with streamer code +- Fix playOrPause command behavior under v1.10 # Changes in v0.10 (released 2025-02-28) - Add ability to configure output device diff --git a/docs/building.md b/docs/building.md index bbc61421..bb5194ab 100644 --- a/docs/building.md +++ b/docs/building.md @@ -84,7 +84,7 @@ Alternatively you can build from console: And create package: ``` -> cpack +> cpack -C Release ``` `foo_beefweb-*.zip` will be created in `build\Release` directory. @@ -150,7 +150,9 @@ This command supports `--env buildType` and `--env outputDir` with the same defa Full build needs to be performed before running API tests. -Additionally player binaries have to be installed: +`curl` should be available in `PATH`. + +Additionally player binaries should be installed: ``` > scripts\install\foobar2000.cmd v2.24-x64