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 14PrintAddOnServerApplication::PrintAddOnServerApplication(const char* signature) 15 : 16 BApplication(signature) 17{ 18 19} 20 21 22void 23PrintAddOnServerApplication::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 52void 53PrintAddOnServerApplication::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 68status_t 69PrintAddOnServerApplication::AddPrinter(const char* driver, 70 const char* spoolFolderName) 71{ 72 PrinterDriverAddOn addOn(driver); 73 return addOn.AddPrinter(spoolFolderName); 74} 75 76 77void 78PrintAddOnServerApplication::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 103status_t 104PrintAddOnServerApplication::ConfigPage(const char* driver, 105 BDirectory* spoolFolder, BMessage* settings) 106{ 107 PrinterDriverAddOn addOn(driver); 108 return addOn.ConfigPage(spoolFolder, settings); 109} 110 111 112void 113PrintAddOnServerApplication::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 138status_t 139PrintAddOnServerApplication::ConfigJob(const char* driver, 140 BDirectory* spoolFolder, 141 BMessage* settings) 142{ 143 PrinterDriverAddOn addOn(driver); 144 return addOn.ConfigJob(spoolFolder, settings); 145} 146 147 148void 149PrintAddOnServerApplication::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 173status_t 174PrintAddOnServerApplication::DefaultSettings(const char* driver, 175 BDirectory* spoolFolder, BMessage* settings) 176{ 177 PrinterDriverAddOn addOn(driver); 178 return addOn.DefaultSettings(spoolFolder, settings); 179} 180 181 182void 183PrintAddOnServerApplication::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 202status_t 203PrintAddOnServerApplication::TakeJob(const char* driver, const char* spoolFile, 204 BDirectory* spoolFolder) 205{ 206 PrinterDriverAddOn addOn(driver); 207 return addOn.TakeJob(spoolFile, spoolFolder); 208} 209 210 211void 212PrintAddOnServerApplication::SendReply(BMessage* message, status_t status) 213{ 214 BMessage reply(B_REPLY); 215 reply.AddInt32(kPrintAddOnServerStatusAttribute, status); 216 message->SendReply(&reply); 217} 218 219 220void 221PrintAddOnServerApplication::SendReply(BMessage* message, BMessage* reply) 222{ 223 reply->AddInt32(kPrintAddOnServerStatusAttribute, B_OK); 224 message->SendReply(reply); 225} 226 227 228int 229main(int argc, char* argv[]) 230{ 231 PrintAddOnServerApplication application( 232 kPrintAddOnServerApplicationSignature); 233 application.Run(); 234} 235