forked from gustavofbreunig/PrintQueueWatchCPP
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprintermonitor.cpp
More file actions
60 lines (54 loc) · 1.94 KB
/
printermonitor.cpp
File metadata and controls
60 lines (54 loc) · 1.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include "printermonitor.h"
PrinterMonitor::PrinterMonitor()
{
JobEvent = [this](PrintJobEventArgs* args) {
//check the event and if the function is callable
if (this->JobAdded && args->getEventType() == PrintJobEventTypes::JobAddedEvent)
{
this->JobAdded(args);
} else if (this->JobSet && args->getEventType() == PrintJobEventTypes::JobSetEvent)
{
this->JobSet(args);
} else if (this->JobWritten && args->getEventType() == PrintJobEventTypes::JobWrittenEvent)
{
this->JobWritten(args);
} else if (this->JobDeleted && args->getEventType() == PrintJobEventTypes::JobDeletedEvent)
{
this->JobDeleted(args);
}
};
}
PrinterMonitor::~PrinterMonitor()
{
PrinterChangeNotificationThread::DestroyPthreadMutex();
delete _MonitoredPrinters;
}
void PrinterMonitor::RemovePrinter(std::wstring DeviceName)
{
_MonitoredPrinters->Remove(DeviceName);
}
void PrinterMonitor::AddPrinter(std::wstring DeviceName)
{
if (_MonitoredPrinters == NULL)
{
_MonitoredPrinters = new MonitoredPrinters();
//initialize mutex inside thread class
int mutex_printer_change_error = PrinterChangeNotificationThread::InitializePthreadMutex();
if (mutex_printer_change_error)
{
std::string err("pthred_mutex_init error: ");
err += std::to_string(mutex_printer_change_error);
throw std::runtime_error(err.c_str());
}
}
//is a network printer?
PrinterInformation piTest(DeviceName, PRINTER_ACCESS_USE | READ_CONTROL, NULL);
if (piTest.IsNetworkPrinter())
{
_MonitoredPrinters->Add(DeviceName, new PrinterInformation(DeviceName, PRINTER_ALL_ACCESS | SERVER_ALL_ACCESS | READ_CONTROL, &JobEvent));
}
else
{
_MonitoredPrinters->Add(DeviceName, new PrinterInformation(DeviceName, PRINTER_ALL_ACCESS | READ_CONTROL, &JobEvent));
}
}