Skip to content

Commit ff809ff

Browse files
authored
Merge pull request #2 from pidedirecto/fix-buffer-ref-issue
Add support for node-thermal-printer by solving issue with buffer ref not working with n-api
2 parents 91051a9 + 76c73a0 commit ff809ff

1 file changed

Lines changed: 3 additions & 34 deletions

File tree

src/node_printer_win.cc

Lines changed: 3 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -541,21 +541,8 @@ Napi::Value PrintDirectWrapped(const Napi::CallbackInfo& args) {
541541
wd->errorPrefix = "PrintDirect";
542542

543543
bool usedTemp = false;
544-
Napi::Reference<Napi::Buffer<char>> bufRef;
545-
bool haveBufferRef = false;
546-
if (args[0].IsBuffer()) {
547-
Napi::Buffer<char> b = args[0].As<Napi::Buffer<char>>();
548-
if (dataLen <= STREAM_THRESHOLD) {
549-
// keep buffer alive via reference and avoid copying
550-
bufRef = Napi::Persistent(b);
551-
haveBufferRef = true;
552-
} else {
553-
// large buffer -> write to temp file for streaming
554-
// fallthrough to write using dataVec
555-
}
556-
}
557544

558-
if (!haveBufferRef && dataLen > STREAM_THRESHOLD) {
545+
if (dataLen > STREAM_THRESHOLD) {
559546
// write to temp file and let worker stream it
560547
char tmpPath[MAX_PATH];
561548
if (GetTempPathA(MAX_PATH, tmpPath) > 0) {
@@ -579,10 +566,7 @@ Napi::Value PrintDirectWrapped(const Napi::CallbackInfo& args) {
579566
class PrintWorker : public Napi::AsyncWorker {
580567
public:
581568
PrintWorker(Napi::Env env, WorkerData* d, Napi::Promise::Deferred def)
582-
: Napi::AsyncWorker(env), data(d), deferred(def), hasBufferRef(false) {}
583-
584-
PrintWorker(Napi::Env env, WorkerData* d, Napi::Promise::Deferred def, Napi::Reference<Napi::Buffer<char>>&& ref)
585-
: Napi::AsyncWorker(env), data(d), deferred(def), bufferRef(std::move(ref)), hasBufferRef(true) {}
569+
: Napi::AsyncWorker(env), data(d), deferred(def) {}
586570

587571
~PrintWorker() { delete data; }
588572

@@ -647,14 +631,6 @@ Napi::Value PrintDirectWrapped(const Napi::CallbackInfo& args) {
647631
}
648632
}
649633
ifs.close();
650-
} else if (hasBufferRef) {
651-
auto buf = bufferRef.Value();
652-
written = WritePrinter((HANDLE)printerHandle, (LPVOID)buf.Data(), (DWORD)buf.Length(), &dwBytesWritten);
653-
if (!written || dwBytesWritten != (DWORD)buf.Length()) {
654-
data->errorInfo = getLastErrorInfo();
655-
data->errorPrefix = "WritePrinter";
656-
return;
657-
}
658634
} else {
659635
written = WritePrinter((HANDLE)printerHandle, (LPVOID)data->data.data(), (DWORD)data->data.size(), &dwBytesWritten);
660636
if (!written || dwBytesWritten != (DWORD)data->data.size()) {
@@ -689,16 +665,9 @@ Napi::Value PrintDirectWrapped(const Napi::CallbackInfo& args) {
689665
private:
690666
WorkerData* data;
691667
Napi::Promise::Deferred deferred;
692-
Napi::Reference<Napi::Buffer<char>> bufferRef;
693-
bool hasBufferRef;
694668
};
695669

696-
PrintWorker* w = nullptr;
697-
if (haveBufferRef) {
698-
w = new PrintWorker(env, wd, deferred, std::move(bufRef));
699-
} else {
700-
w = new PrintWorker(env, wd, deferred);
701-
}
670+
PrintWorker* w = new PrintWorker(env, wd, deferred);
702671
w->Queue();
703672
return deferred.Promise();
704673
}

0 commit comments

Comments
 (0)