1 /* 2 * Copyright 2010 Haiku, Inc. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Michael Pfeiffer 7 */ 8 #include "PrintAddOnServerApplication.h" 9 10 #include <PrinterDriverAddOn.h> 11 12 #include <String.h> 13 14 PrintAddOnServerApplication::PrintAddOnServerApplication(const char* signature) 15 : 16 BApplication(signature) 17 { 18 19 } 20 21 22 void 23 PrintAddOnServerApplication::MessageReceived(BMessage* message) 24 { 25 switch (message->what) { 26 case kMessageAddPrinter: 27 AddPrinter(message); 28 break; 29 30 case kMessageConfigPage: 31 ConfigPage(message); 32 break; 33 34 case kMessageConfigJob: 35 ConfigJob(message); 36 break; 37 38 case kMessageDefaultSettings: 39 DefaultSettings(message); 40 break; 41 42 case kMessageTakeJob: 43 TakeJob(message); 44 break; 45 46 default: 47 BApplication::MessageReceived(message); 48 } 49 } 50 51 52 void 53 PrintAddOnServerApplication::AddPrinter(BMessage* message) 54 { 55 BString driver; 56 BString name; 57 if (message->FindString(kPrinterDriverAttribute, &driver) != B_OK 58 || message->FindString(kPrinterNameAttribute, &name) != B_OK) { 59 SendReply(message, B_BAD_VALUE); 60 return; 61 } 62 63 status_t status = AddPrinter(driver.String(), name.String()); 64 SendReply(message, status); 65 } 66 67 68 status_t 69 PrintAddOnServerApplication::AddPrinter(const char* driver, 70 const char* spoolFolderName) 71 { 72 PrinterDriverAddOn addOn(driver); 73 return addOn.AddPrinter(spoolFolderName); 74 } 75 76 77 void 78 PrintAddOnServerApplication::ConfigPage(BMessage* message) 79 { 80 BString driver; 81 BString folder; 82 BMessage settings; 83 if (message->FindString(kPrinterDriverAttribute, &driver) != B_OK 84 || message->FindString(kPrinterFolderAttribute, &folder) != B_OK 85 || message->FindMessage(kPrintSettingsAttribute, &settings) != B_OK) { 86 SendReply(message, B_BAD_VALUE); 87 return; 88 } 89 90 BDirectory spoolFolder(folder.String()); 91 status_t status = ConfigPage(driver.String(), &spoolFolder, &settings); 92 93 if (status != B_OK) 94 SendReply(message, status); 95 else { 96 BMessage reply(B_REPLY); 97 reply.AddMessage(kPrintSettingsAttribute, &settings); 98 SendReply(message, &reply); 99 } 100 } 101 102 103 status_t 104 PrintAddOnServerApplication::ConfigPage(const char* driver, 105 BDirectory* spoolFolder, BMessage* settings) 106 { 107 PrinterDriverAddOn addOn(driver); 108 return addOn.ConfigPage(spoolFolder, settings); 109 } 110 111 112 void 113 PrintAddOnServerApplication::ConfigJob(BMessage* message) 114 { 115 BString driver; 116 BString folder; 117 BMessage settings; 118 if (message->FindString(kPrinterDriverAttribute, &driver) != B_OK 119 || message->FindString(kPrinterFolderAttribute, &folder) != B_OK 120 || message->FindMessage(kPrintSettingsAttribute, &settings) != B_OK) { 121 SendReply(message, B_BAD_VALUE); 122 return; 123 } 124 125 BDirectory spoolFolder(folder.String()); 126 status_t status = ConfigJob(driver.String(), &spoolFolder, &settings); 127 128 if (status != B_OK) 129 SendReply(message, status); 130 else { 131 BMessage reply(B_REPLY); 132 reply.AddMessage(kPrintSettingsAttribute, &settings); 133 SendReply(message, &reply); 134 } 135 } 136 137 138 status_t 139 PrintAddOnServerApplication::ConfigJob(const char* driver, 140 BDirectory* spoolFolder, 141 BMessage* settings) 142 { 143 PrinterDriverAddOn addOn(driver); 144 return addOn.ConfigJob(spoolFolder, settings); 145 } 146 147 148 void 149 PrintAddOnServerApplication::DefaultSettings(BMessage* message) 150 { 151 BString driver; 152 BString folder; 153 if (message->FindString(kPrinterDriverAttribute, &driver) != B_OK 154 || message->FindString(kPrinterFolderAttribute, &folder) != B_OK) { 155 SendReply(message, B_BAD_VALUE); 156 return; 157 } 158 159 BMessage settings; 160 BDirectory spoolFolder(folder.String()); 161 status_t status = DefaultSettings(driver.String(), &spoolFolder, &settings); 162 163 if (status != B_OK) 164 SendReply(message, status); 165 else { 166 BMessage reply(B_REPLY); 167 reply.AddMessage(kPrintSettingsAttribute, &settings); 168 SendReply(message, &reply); 169 } 170 } 171 172 173 status_t 174 PrintAddOnServerApplication::DefaultSettings(const char* driver, 175 BDirectory* spoolFolder, BMessage* settings) 176 { 177 PrinterDriverAddOn addOn(driver); 178 return addOn.DefaultSettings(spoolFolder, settings); 179 } 180 181 182 void 183 PrintAddOnServerApplication::TakeJob(BMessage* message) 184 { 185 BString driver; 186 BString folder; 187 BString jobFile; 188 if (message->FindString(kPrinterDriverAttribute, &driver) != B_OK 189 || message->FindString(kPrinterFolderAttribute, &folder) != B_OK 190 || message->FindString(kPrintJobFileAttribute, &jobFile) != B_OK) { 191 SendReply(message, B_BAD_VALUE); 192 return; 193 } 194 195 BDirectory spoolFolder(folder.String()); 196 status_t status = TakeJob(driver.String(), jobFile.String(), 197 &spoolFolder); 198 SendReply(message, status); 199 } 200 201 202 status_t 203 PrintAddOnServerApplication::TakeJob(const char* driver, const char* spoolFile, 204 BDirectory* spoolFolder) 205 { 206 PrinterDriverAddOn addOn(driver); 207 return addOn.TakeJob(spoolFile, spoolFolder); 208 } 209 210 211 void 212 PrintAddOnServerApplication::SendReply(BMessage* message, status_t status) 213 { 214 BMessage reply(B_REPLY); 215 reply.AddInt32(kPrintAddOnServerStatusAttribute, status); 216 message->SendReply(&reply); 217 } 218 219 220 void 221 PrintAddOnServerApplication::SendReply(BMessage* message, BMessage* reply) 222 { 223 reply->AddInt32(kPrintAddOnServerStatusAttribute, B_OK); 224 message->SendReply(reply); 225 } 226 227 228 int 229 main(int argc, char* argv[]) 230 { 231 PrintAddOnServerApplication application( 232 kPrintAddOnServerApplicationSignature); 233 application.Run(); 234 } 235