xref: /haiku/src/libs/print/libprint/PrinterData.cpp (revision e9c4d47ad719d6fd67cd9b75b41ebbec563e7a79)
1 /*
2  * PrinterData.cpp
3  * Copyright 1999-2000 Y.Takagi All Rights Reserved.
4  */
5 
6 #include <Directory.h>
7 #include <FindDirectory.h>
8 #include <Path.h>
9 #include <StorageDefs.h>
10 
11 #include "PrinterData.h"
12 
13 const char *PD_DRIVER_NAME      = "Driver Name";
14 const char *PD_PRINTER_NAME     = "Printer Name";
15 const char *PD_COMMENTS         = "Comments";
16 const char *PD_TRANSPORT        = "transport";
17 const char *PD_PROTOCOL_CLASS   = "libprint:protocolClass";
18 
19 PrinterData::PrinterData(BNode *node)
20 	: fProtocolClass(0)
21 	, fNode(node)
22 {
23 	load();
24 }
25 
26 PrinterData::~PrinterData()
27 {
28 }
29 
30 void PrinterData::load()
31 {
32 	if (fNode == NULL) return;
33 
34 	char buffer[512];
35 
36 	fNode->ReadAttr(PD_DRIVER_NAME,  B_STRING_TYPE, 0, buffer, sizeof(buffer));
37 	// TODO fix possible buffer overrun (not terminated string).
38 	fDriverName = buffer;
39 	fNode->ReadAttr(PD_PRINTER_NAME, B_STRING_TYPE, 0, buffer, sizeof(buffer));
40 	fPrinterName = buffer;
41 	fNode->ReadAttr(PD_COMMENTS,     B_STRING_TYPE, 0, buffer, sizeof(buffer));
42 	fComments = buffer;
43 	fNode->ReadAttr(PD_TRANSPORT,    B_STRING_TYPE, 0, buffer, sizeof(buffer));
44 	fTransport = buffer;
45 
46 	int32 valueI32;
47 	fNode->ReadAttr(PD_PROTOCOL_CLASS, B_INT32_TYPE, 0, &valueI32, sizeof(valueI32));
48 	fProtocolClass = (int)valueI32;
49 }
50 
51 void PrinterData::save()
52 {
53 	if (fNode == NULL) return;
54 
55 	int32 valueI32 = (int32)fProtocolClass;
56 	fNode->WriteAttr(PD_PROTOCOL_CLASS, B_INT32_TYPE, 0, &valueI32, sizeof(valueI32));
57 }
58 
59 bool PrinterData::getPath(string &path) const
60 {
61 	if (fNode == NULL) return false;
62 
63 	node_ref nref;
64 	if (fNode->GetNodeRef(&nref) != B_OK) return false;
65 
66 	BDirectory dir(&nref);
67 	if (dir.InitCheck() != B_OK) return false;
68 
69 	BPath path0(&dir, ".");
70 	if (path0.InitCheck() != B_OK) return false;
71 
72 	path = path0.Path();
73 	return true;
74 }
75