1/* 2 * This file contains library initialization code. 3 * The required mimetypes and attribute-indices are created here. 4 */ 5 6#include <fs_attr.h> 7#include <fs_index.h> 8#include <Volume.h> 9#include <VolumeRoster.h> 10 11#include <DefaultCatalog.h> 12#include <MutableLocaleRoster.h> 13#include <SystemCatalog.h> 14 15 16namespace BPrivate { 17 18BCatalog gSystemCatalog; 19 20} 21 22 23using BPrivate::DefaultCatalog; 24using BPrivate::MutableLocaleRoster; 25using BPrivate::gSystemCatalog; 26 27 28// helper function that makes sure an attribute-index exists: 29static void EnsureIndexExists(const char *attrName) 30{ 31 BVolume bootVol; 32 BVolumeRoster volRoster; 33 if (volRoster.GetBootVolume(&bootVol) != B_OK) 34 return; 35 struct index_info idxInfo; 36 if (fs_stat_index(bootVol.Device(), attrName, &idxInfo) != 0) 37 fs_create_index(bootVol.Device(), attrName, B_STRING_TYPE, 0); 38} 39 40 41/* 42 * prepares the system for use by the Locale Kit catalogs, 43 * it makes sure that the required indices and mimetype exist: 44 */ 45static void 46SetupCatalogBasics() 47{ 48 // make sure the indices required for catalog-traversal are there: 49 EnsureIndexExists(BLocaleRoster::kCatLangAttr); 50 EnsureIndexExists(BLocaleRoster::kCatSigAttr); 51 52 // install mimetype for default-catalog: 53 BMimeType mt; 54 status_t res = mt.SetTo(DefaultCatalog::kCatMimeType); 55 if (res == B_OK && !mt.IsInstalled()) { 56 // install supertype, if it isn't available 57 BMimeType supertype; 58 res = mt.GetSupertype(&supertype); 59 if (res == B_OK && !supertype.IsInstalled()) { 60 res = supertype.Install(); 61 } 62 63 if (res == B_OK) { 64 // info about the attributes of a catalog... 65 BMessage attrMsg; 66 // ...the catalog signature... 67 attrMsg.AddString("attr:public_name", "Signature"); 68 attrMsg.AddString("attr:name", BLocaleRoster::kCatSigAttr); 69 attrMsg.AddInt32("attr:type", B_STRING_TYPE); 70 attrMsg.AddBool("attr:editable", false); 71 attrMsg.AddBool("attr:viewable", true); 72 attrMsg.AddBool("attr:extra", false); 73 attrMsg.AddInt32("attr:alignment", 0); 74 attrMsg.AddInt32("attr:width", 140); 75 // ...the catalog language... 76 attrMsg.AddString("attr:public_name", "Language"); 77 attrMsg.AddString("attr:name", BLocaleRoster::kCatLangAttr); 78 attrMsg.AddInt32("attr:type", B_STRING_TYPE); 79 attrMsg.AddBool("attr:editable", false); 80 attrMsg.AddBool("attr:viewable", true); 81 attrMsg.AddBool("attr:extra", false); 82 attrMsg.AddInt32("attr:alignment", 0); 83 attrMsg.AddInt32("attr:width", 60); 84 // ...and the catalog fingerprint... 85 attrMsg.AddString("attr:public_name", "Fingerprint"); 86 attrMsg.AddString("attr:name", BLocaleRoster::kCatFingerprintAttr); 87 attrMsg.AddInt32("attr:type", B_INT32_TYPE); 88 attrMsg.AddBool("attr:editable", false); 89 attrMsg.AddBool("attr:viewable", true); 90 attrMsg.AddBool("attr:extra", false); 91 attrMsg.AddInt32("attr:alignment", 0); 92 attrMsg.AddInt32("attr:width", 70); 93 res = mt.SetAttrInfo(&attrMsg); 94 } 95 96 if (res == B_OK) { 97 // file extensions (.catalog): 98 BMessage extMsg; 99 extMsg.AddString("extensions", "catalog"); 100 res = mt.SetFileExtensions(&extMsg); 101 } 102 103 if (res == B_OK) { 104 // short and long descriptions: 105 mt.SetShortDescription("Translation Catalog"); 106 res = mt.SetLongDescription("Catalog with translated application resources"); 107 } 108 109 if (res == B_OK) 110 res = mt.Install(); 111 } 112} 113 114 115void 116__initialize_locale_kit() 117{ 118 SetupCatalogBasics(); 119 120 MutableLocaleRoster::Default()->LoadSystemCatalog(&gSystemCatalog); 121} 122