xref: /haiku/src/kits/locale/InitLocaleKit.cpp (revision 25a7b01d15612846f332751841da3579db313082)
160f75e90SOliver Tappe /*
260f75e90SOliver Tappe  * This file contains library initialization code.
360f75e90SOliver Tappe  * The required mimetypes and attribute-indices are created here.
460f75e90SOliver Tappe  */
560f75e90SOliver Tappe 
660f75e90SOliver Tappe #include <fs_attr.h>
760f75e90SOliver Tappe #include <fs_index.h>
860f75e90SOliver Tappe #include <Volume.h>
960f75e90SOliver Tappe #include <VolumeRoster.h>
1060f75e90SOliver Tappe 
1160f75e90SOliver Tappe #include <DefaultCatalog.h>
1260f75e90SOliver Tappe #include <MutableLocaleRoster.h>
1360f75e90SOliver Tappe #include <SystemCatalog.h>
1460f75e90SOliver Tappe 
1560f75e90SOliver Tappe 
1660f75e90SOliver Tappe namespace BPrivate {
1760f75e90SOliver Tappe 
18eaa5e093SOliver Tappe BCatalog gSystemCatalog;
1960f75e90SOliver Tappe 
2060f75e90SOliver Tappe }
2160f75e90SOliver Tappe 
2260f75e90SOliver Tappe 
235ac65b7fSOliver Tappe using BPrivate::DefaultCatalog;
245ac65b7fSOliver Tappe using BPrivate::MutableLocaleRoster;
255ac65b7fSOliver Tappe using BPrivate::gSystemCatalog;
265ac65b7fSOliver Tappe 
275ac65b7fSOliver Tappe 
2860f75e90SOliver Tappe // helper function that makes sure an attribute-index exists:
EnsureIndexExists(const char * attrName)2960f75e90SOliver Tappe static void EnsureIndexExists(const char *attrName)
3060f75e90SOliver Tappe {
3160f75e90SOliver Tappe 	BVolume bootVol;
3260f75e90SOliver Tappe 	BVolumeRoster volRoster;
3360f75e90SOliver Tappe 	if (volRoster.GetBootVolume(&bootVol) != B_OK)
3460f75e90SOliver Tappe 		return;
3560f75e90SOliver Tappe 	struct index_info idxInfo;
36*93b5e561SOliver Tappe 	if (fs_stat_index(bootVol.Device(), attrName, &idxInfo) != 0)
37*93b5e561SOliver Tappe 		fs_create_index(bootVol.Device(), attrName, B_STRING_TYPE, 0);
3860f75e90SOliver Tappe }
3960f75e90SOliver Tappe 
4060f75e90SOliver Tappe 
4160f75e90SOliver Tappe /*
4260f75e90SOliver Tappe  * prepares the system for use by the Locale Kit catalogs,
4360f75e90SOliver Tappe  * it makes sure that the required indices and mimetype exist:
4460f75e90SOliver Tappe  */
4560f75e90SOliver Tappe static void
SetupCatalogBasics()4660f75e90SOliver Tappe SetupCatalogBasics()
4760f75e90SOliver Tappe {
4860f75e90SOliver Tappe 	// make sure the indices required for catalog-traversal are there:
4960f75e90SOliver Tappe 	EnsureIndexExists(BLocaleRoster::kCatLangAttr);
5060f75e90SOliver Tappe 	EnsureIndexExists(BLocaleRoster::kCatSigAttr);
5160f75e90SOliver Tappe 
5260f75e90SOliver Tappe 	// install mimetype for default-catalog:
5360f75e90SOliver Tappe 	BMimeType mt;
5460f75e90SOliver Tappe 	status_t res = mt.SetTo(DefaultCatalog::kCatMimeType);
5560f75e90SOliver Tappe 	if (res == B_OK && !mt.IsInstalled()) {
5660f75e90SOliver Tappe 		// install supertype, if it isn't available
5760f75e90SOliver Tappe 		BMimeType supertype;
5860f75e90SOliver Tappe 		res = mt.GetSupertype(&supertype);
5960f75e90SOliver Tappe 		if (res == B_OK && !supertype.IsInstalled()) {
6060f75e90SOliver Tappe 			res = supertype.Install();
6160f75e90SOliver Tappe 		}
6260f75e90SOliver Tappe 
6360f75e90SOliver Tappe 		if (res == B_OK) {
6460f75e90SOliver Tappe 			// info about the attributes of a catalog...
6560f75e90SOliver Tappe 			BMessage attrMsg;
6660f75e90SOliver Tappe 			// ...the catalog signature...
6760f75e90SOliver Tappe 			attrMsg.AddString("attr:public_name", "Signature");
6860f75e90SOliver Tappe 			attrMsg.AddString("attr:name", BLocaleRoster::kCatSigAttr);
6960f75e90SOliver Tappe 			attrMsg.AddInt32("attr:type", B_STRING_TYPE);
7060f75e90SOliver Tappe 			attrMsg.AddBool("attr:editable", false);
7160f75e90SOliver Tappe 			attrMsg.AddBool("attr:viewable", true);
7260f75e90SOliver Tappe 			attrMsg.AddBool("attr:extra", false);
7360f75e90SOliver Tappe 			attrMsg.AddInt32("attr:alignment", 0);
7460f75e90SOliver Tappe 			attrMsg.AddInt32("attr:width", 140);
7560f75e90SOliver Tappe 			// ...the catalog language...
7660f75e90SOliver Tappe 			attrMsg.AddString("attr:public_name", "Language");
7760f75e90SOliver Tappe 			attrMsg.AddString("attr:name", BLocaleRoster::kCatLangAttr);
7860f75e90SOliver Tappe 			attrMsg.AddInt32("attr:type", B_STRING_TYPE);
7960f75e90SOliver Tappe 			attrMsg.AddBool("attr:editable", false);
8060f75e90SOliver Tappe 			attrMsg.AddBool("attr:viewable", true);
8160f75e90SOliver Tappe 			attrMsg.AddBool("attr:extra", false);
8260f75e90SOliver Tappe 			attrMsg.AddInt32("attr:alignment", 0);
8360f75e90SOliver Tappe 			attrMsg.AddInt32("attr:width", 60);
8460f75e90SOliver Tappe 			// ...and the catalog fingerprint...
8560f75e90SOliver Tappe 			attrMsg.AddString("attr:public_name", "Fingerprint");
8660f75e90SOliver Tappe 			attrMsg.AddString("attr:name", BLocaleRoster::kCatFingerprintAttr);
8760f75e90SOliver Tappe 			attrMsg.AddInt32("attr:type", B_INT32_TYPE);
8860f75e90SOliver Tappe 			attrMsg.AddBool("attr:editable", false);
8960f75e90SOliver Tappe 			attrMsg.AddBool("attr:viewable", true);
9060f75e90SOliver Tappe 			attrMsg.AddBool("attr:extra", false);
9160f75e90SOliver Tappe 			attrMsg.AddInt32("attr:alignment", 0);
9260f75e90SOliver Tappe 			attrMsg.AddInt32("attr:width", 70);
9360f75e90SOliver Tappe 			res = mt.SetAttrInfo(&attrMsg);
9460f75e90SOliver Tappe 		}
9560f75e90SOliver Tappe 
9660f75e90SOliver Tappe 		if (res == B_OK) {
9760f75e90SOliver Tappe 			// file extensions (.catalog):
9860f75e90SOliver Tappe 			BMessage extMsg;
9960f75e90SOliver Tappe 			extMsg.AddString("extensions", "catalog");
10060f75e90SOliver Tappe 			res = mt.SetFileExtensions(&extMsg);
10160f75e90SOliver Tappe 		}
10260f75e90SOliver Tappe 
10360f75e90SOliver Tappe 		if (res == B_OK) {
10460f75e90SOliver Tappe 			// short and long descriptions:
10560f75e90SOliver Tappe 			mt.SetShortDescription("Translation Catalog");
10660f75e90SOliver Tappe 			res = mt.SetLongDescription("Catalog with translated application resources");
10760f75e90SOliver Tappe 		}
10860f75e90SOliver Tappe 
10960f75e90SOliver Tappe 		if (res == B_OK)
11060f75e90SOliver Tappe 			res = mt.Install();
11160f75e90SOliver Tappe 	}
11260f75e90SOliver Tappe }
11360f75e90SOliver Tappe 
11460f75e90SOliver Tappe 
11560f75e90SOliver Tappe void
__initialize_locale_kit()11660f75e90SOliver Tappe __initialize_locale_kit()
11760f75e90SOliver Tappe {
11860f75e90SOliver Tappe 	SetupCatalogBasics();
11960f75e90SOliver Tappe 
1205ac65b7fSOliver Tappe 	MutableLocaleRoster::Default()->LoadSystemCatalog(&gSystemCatalog);
12160f75e90SOliver Tappe }
122