aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/SDK/burner/ISOBurner.cpp
diff options
context:
space:
mode:
authorJean-Francois Mauguit <jfmauguit@mac.com>2024-09-24 09:03:25 -0400
committerGitHub <noreply@github.com>2024-09-24 09:03:25 -0400
commitbab614c421ed7ae329d26bf028c4a3b1d2450f5a (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Plugins/SDK/burner/ISOBurner.cpp
parent4bde6044fddf053f31795b9eaccdd2a5a527d21f (diff)
parent20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (diff)
downloadwinamp-bab614c421ed7ae329d26bf028c4a3b1d2450f5a.tar.gz
Merge pull request #5 from WinampDesktop/community
Merge to main
Diffstat (limited to 'Src/Plugins/SDK/burner/ISOBurner.cpp')
-rw-r--r--Src/Plugins/SDK/burner/ISOBurner.cpp67
1 files changed, 67 insertions, 0 deletions
diff --git a/Src/Plugins/SDK/burner/ISOBurner.cpp b/Src/Plugins/SDK/burner/ISOBurner.cpp
new file mode 100644
index 00000000..84d45f62
--- /dev/null
+++ b/Src/Plugins/SDK/burner/ISOBurner.cpp
@@ -0,0 +1,67 @@
+#include "ISOBurner.h"
+#include "../nu/AutoChar.h"
+#include "ifc_burner_writecallback.h"
+
+ISOBurner::ISOBurner(obj_primo *_primo) : BurnerCommon(_primo)
+{
+}
+
+int ISOBurner::Open()
+{
+ if (!primo)
+ return 1;
+
+ return 0;
+}
+
+int ISOBurner::Write(wchar_t driveLetter, const wchar_t *isoFile, int flags, unsigned int speed, ifc_burner_writecallback *callback)
+{
+ DWORD unit[] = {driveLetter, 0xFFFFFFFF};
+ DWORD ret = primo->WriteOtherCDImage(unit, (PBYTE)(char *)AutoChar(isoFile), flags, speed);
+ if (ret != PRIMOSDK_OK)
+ return 1;
+
+ while (1)
+ {
+ DWORD cursec = 0, totsec = 0;
+ ret = primo->RunningStatus(PRIMOSDK_GETSTATUS, &cursec, &totsec);
+
+ if (ret == PRIMOSDK_RUNNING)
+ {
+ if (callback)
+ {
+ int abort = callback->OnStatus(cursec, totsec);
+ if (abort)
+ {
+ ret = primo->RunningStatus(PRIMOSDK_ABORT, 0, 0);
+ callback = 0; // cheap way to prevent making further callbacks
+ }
+ }
+ WaitForSingleObject(triggerEvent, 500);
+ }
+ else if (ret == PRIMOSDK_OK)
+ {
+ DWORD unit = driveLetter;
+ ret = primo->UnitStatus(&unit, NULL, NULL, NULL, NULL);
+
+ if (ret == PRIMOSDK_OK && callback)
+ callback->Finished();
+ break;
+ }
+ else
+ break;
+ }
+
+ if (ret != PRIMOSDK_OK)
+ return 1;
+
+ return 0;
+}
+
+#define CBCLASS ISOBurner
+START_DISPATCH;
+CB(ISOBURNER_OPEN, Open)
+CB(ISOBURNER_WRITE, Write)
+VCB(ISOBURNER_FORCECALLBACK, ForceCallback)
+END_DISPATCH;
+#undef CBCLASS