void InitFileTypes(void) { BMimeType mime; BString string; BMessage msg,ext; BBitmap large_icon(BRect(0, 0, B_LARGE_ICON - 1, B_LARGE_ICON - 1), B_COLOR_8_BIT); memcpy(large_icon.Bits(),kProjectLargeIconBits,1024); BBitmap mini_icon(BRect(0, 0, B_MINI_ICON - 1, B_MINI_ICON - 1), B_COLOR_8_BIT); memcpy(mini_icon.Bits(),kProjectSmallIconBits,256); mime.SetType(PROJECT_MIME_TYPE); mime.SetShortDescription(TR("Paladin Project")); mime.SetLongDescription(TR("File to build a program with Paladin")); mime.SetIcon(&large_icon, B_LARGE_ICON); mime.SetIcon(&mini_icon, B_MINI_ICON); #ifdef __HAIKU__ mime.SetIcon(kProjectVectorIconBits, sizeof(kProjectVectorIconBits)); #endif mime.SetSnifferRule("0.50 [0:32]( -i \"NAME=\" | \"TARGETNAME=\" | " "\"PLATFORM=\" | \"GROUP=\" | \"SOURCEFILE=\")"); mime.SetPreferredApp(APP_SIGNATURE); mime.Install(); ext.AddString("extensions","pld"); mime.SetFileExtensions(&ext); }
// This handles the filetypes being installed with all the extra attributes over the // regular R5 types void MrPeeps::InitFileTypes(void) { BEntry entry("/boot/home/config/settings/MrPeeps"); BFile file; // Check for settings directory if(!entry.Exists()) create_directory("/boot/home/config/settings/MrPeeps",0777); entry.SetTo("/boot/home/config/settings/MrPeeps/MrPeeps"); if(!entry.Exists()) { file.SetTo("/boot/home/config/settings/MrPeeps/MrPeeps",B_READ_WRITE|B_CREATE_FILE); file.Unset(); } entry.SetTo("/boot/home/config/settings/MrPeeps/filetypes_installed"); if(!entry.Exists()) { BFile file("/boot/home/config/settings/MrPeeps/filetypes_installed",B_CREATE_FILE); BMimeType mime; BString string; BMessage msg,info; uint8 installtype=2; int32 index=0; BBitmap large_icon(BRect(0, 0, B_LARGE_ICON-1, B_LARGE_ICON-1), B_COLOR_8_BIT); BBitmap mini_icon(BRect(0, 0, B_MINI_ICON-1, B_MINI_ICON-1), B_COLOR_8_BIT); // install person mime type mime.SetType(PERSON_FILE_TYPE); if(mime.IsInstalled()) { if (mime.GetAttrInfo(&info) == B_OK) { while (info.FindString("attr:name", index++, &string) == B_OK) { if (string.Compare(PERSON_EMAIL5)==0) installtype=1; if (string.Compare(PERSON_BIRTHDAY)==0) { installtype=0; break; } } if (installtype>0) mime.Delete(); } } if(installtype>0) { mime.Install(); large_icon.SetBits(kLargePersonIcon, large_icon.BitsLength(), 0, B_COLOR_8_BIT); mini_icon.SetBits(kSmallPersonIcon, mini_icon.BitsLength(), 0, B_COLOR_8_BIT); mime.SetShortDescription("Person"); mime.SetLongDescription("Information about a person"); mime.SetIcon(&large_icon, B_LARGE_ICON); mime.SetIcon(&mini_icon, B_MINI_ICON); BAlert *alert=new BAlert("Mr. Peeps!", "Would you like to make Mr. Peeps! the " "default application for People files? If not sure, choose 'No'.","Yes","No"); if(alert->Go()==0) mime.SetPreferredApp(APP_SIGNATURE); else mime.SetPreferredApp("application/x-vnd.Be-PEPL"); // General Person data msg.AddString("attr:public_name", "First Name"); msg.AddString("attr:name", PERSON_FIRSTNAME); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 120); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Last Name"); msg.AddString("attr:name", PERSON_LASTNAME); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 120); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Nickname"); msg.AddString("attr:name", PERSON_NICKNAME); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 120); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Title"); msg.AddString("attr:name", PERSON_TITLE); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 120); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Group"); msg.AddString("attr:name", PERSON_GROUP); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 120); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); // Personal data msg.AddString("attr:public_name", "Home Address"); msg.AddString("attr:name", PERSON_ADDRESS); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 120); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Home Address(2)"); msg.AddString("attr:name", PERSON_ADDRESS2); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 120); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "City"); msg.AddString("attr:name", PERSON_CITY); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 90); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "State"); msg.AddString("attr:name", PERSON_STATE); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 50); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Postal Code"); msg.AddString("attr:name", PERSON_ZIP); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 50); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Country"); msg.AddString("attr:name", PERSON_COUNTRY); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 120); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Home Phone"); msg.AddString("attr:name", PERSON_HOME_PHONE); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 90); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Home Fax"); msg.AddString("attr:name", PERSON_FAX); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 90); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Cell phone"); msg.AddString("attr:name", PERSON_CELL_PHONE); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 90); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "E-mail"); msg.AddString("attr:name", PERSON_EMAIL); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 120); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Web Page"); msg.AddString("attr:name", PERSON_URL); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 120); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); // Work data msg.AddString("attr:public_name", "Company"); msg.AddString("attr:name", PERSON_COMPANY); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 120); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Work Address"); msg.AddString("attr:name", PERSON_WORK_ADDRESS); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 120); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Work Address (2)"); msg.AddString("attr:name", PERSON_WORK_ADDRESS2); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 120); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Work City"); msg.AddString("attr:name", PERSON_WORK_CITY); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 90); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Work State"); msg.AddString("attr:name", PERSON_WORK_STATE); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 50); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Work Postal Code"); msg.AddString("attr:name", PERSON_WORK_ZIP); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 50); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Work Country"); msg.AddString("attr:name", PERSON_WORK_COUNTRY); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 120); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Work Phone"); msg.AddString("attr:name", PERSON_WORK_PHONE); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 90); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Work Fax"); msg.AddString("attr:name", PERSON_WORK_FAX); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 90); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Work Cell Phone"); msg.AddString("attr:name", PERSON_WORK_CELL); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 90); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Work E-mail"); msg.AddString("attr:name", PERSON_WORK_EMAIL); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 120); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Work Web Address"); msg.AddString("attr:name", PERSON_WORK_URL); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 120); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Pager"); msg.AddString("attr:name", PERSON_PAGER); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 90); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); // Internet stuff msg.AddString("attr:public_name", "E-mail 3"); msg.AddString("attr:name", PERSON_EMAIL3); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 120); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "E-mail 4"); msg.AddString("attr:name", PERSON_EMAIL4); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 120); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "E-mail 5"); msg.AddString("attr:name", PERSON_EMAIL4); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 120); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "ICQ number"); msg.AddString("attr:name", PERSON_ICQ); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 120); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "AIM number"); msg.AddString("attr:name", PERSON_AIM); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 120); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Jabber name"); msg.AddString("attr:name", PERSON_JABBER); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 120); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Yahoo messenger"); msg.AddString("attr:name", PERSON_YAHOO); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 120); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Other Web Address"); msg.AddString("attr:name", PERSON_OTHER_URL); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 120); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); if(installtype==2) { // Attributes used only by Mr. Peeps! msg.AddString("attr:public_name", "Birthday"); msg.AddString("attr:name", PERSON_BIRTHDAY); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 50); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Anniversary"); msg.AddString("attr:name", PERSON_ANNIVERSARY); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 50); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Spouse"); msg.AddString("attr:name", PERSON_SPOUSE); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 50); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); msg.AddString("attr:public_name", "Children"); msg.AddString("attr:name", PERSON_CHILDREN); msg.AddInt32("attr:type", B_STRING_TYPE); msg.AddBool("attr:viewable", true); msg.AddBool("attr:editable", true); msg.AddInt32("attr:width", 50); msg.AddInt32("attr:alignment", B_ALIGN_LEFT); msg.AddBool("attr:extra", false); } mime.SetAttrInfo(&msg); } } }
status_t CreateAppMetaMimeThread::DoMimeUpdate(const entry_ref* ref, bool* _entryIsDir) { if (ref == NULL) return B_BAD_VALUE; BNode typeNode; BFile file; status_t status = file.SetTo(ref, B_READ_ONLY); if (status < B_OK) return status; bool isDir = file.IsDirectory(); if (_entryIsDir != NULL) *_entryIsDir = isDir; if (isDir) return B_OK; BAppFileInfo appInfo(&file); status = appInfo.InitCheck(); if (status < B_OK) return status; // Read the app sig (which consequently keeps us from updating // non-applications, since we get an error if the file has no // app sig) BString signature; status = file.ReadAttrString("BEOS:APP_SIG", &signature); if (status < B_OK) return B_BAD_TYPE; // Init our various objects BMimeType mime; status = mime.SetTo(signature.String()); if (status < B_OK) return status; InstallNotificationDeferrer _(fDatabase, signature.String()); if (!mime.IsInstalled()) mime.Install(); BString path = "/"; path.Append(signature); path.ToLower(); // Signatures and MIME types are case insensitive, but we want to // preserve the case wherever possible path.Prepend(get_database_directory().c_str()); status = typeNode.SetTo(path.String()); if (status < B_OK) return status; // Preferred App attr_info info; if (status == B_OK && (fForce || typeNode.GetAttrInfo(kPreferredAppAttr, &info) != B_OK)) status = mime.SetPreferredApp(signature.String()); // Short Description (name of the application) if (status == B_OK && (fForce || typeNode.GetAttrInfo(kShortDescriptionAttr, &info) != B_OK)) status = mime.SetShortDescription(ref->name); // App Hint if (status == B_OK && (fForce || typeNode.GetAttrInfo(kAppHintAttr, &info) != B_OK)) status = mime.SetAppHint(ref); // Vector Icon if (status == B_OK && (fForce || typeNode.GetAttrInfo(kIconAttr, &info) != B_OK)) { uint8* data = NULL; size_t size = 0; if (appInfo.GetIcon(&data, &size) == B_OK) { status = mime.SetIcon(data, size); free(data); } } // Mini Icon BBitmap miniIcon(BRect(0, 0, 15, 15), B_BITMAP_NO_SERVER_LINK, B_CMAP8); if (status == B_OK && (fForce || typeNode.GetAttrInfo(kMiniIconAttr, &info) != B_OK)) { if (appInfo.GetIcon(&miniIcon, B_MINI_ICON) == B_OK) status = mime.SetIcon(&miniIcon, B_MINI_ICON); } // Large Icon BBitmap largeIcon(BRect(0, 0, 31, 31), B_BITMAP_NO_SERVER_LINK, B_CMAP8); if (status == B_OK && (fForce || typeNode.GetAttrInfo(kLargeIconAttr, &info) != B_OK)) { if (appInfo.GetIcon(&largeIcon, B_LARGE_ICON) == B_OK) status = mime.SetIcon(&largeIcon, B_LARGE_ICON); } // Supported Types bool setSupportedTypes = false; BMessage supportedTypes; if (status == B_OK && (fForce || typeNode.GetAttrInfo(kSupportedTypesAttr, &info) != B_OK)) { if (appInfo.GetSupportedTypes(&supportedTypes) == B_OK) setSupportedTypes = true; } // defer notifications for supported types const char* type; for (int32 i = 0; supportedTypes.FindString("types", i, &type) == B_OK; i++) fDatabase->DeferInstallNotification(type); // set supported types if (setSupportedTypes) status = mime.SetSupportedTypes(&supportedTypes); // Icons for supported types for (int32 i = 0; supportedTypes.FindString("types", i, &type) == B_OK; i++) { // vector icon uint8* data = NULL; size_t size = 0; if (status == B_OK && appInfo.GetIconForType(type, &data, &size) == B_OK) { status = mime.SetIconForType(type, data, size); free(data); } // mini icon if (status == B_OK && appInfo.GetIconForType(type, &miniIcon, B_MINI_ICON) == B_OK) status = mime.SetIconForType(type, &miniIcon, B_MINI_ICON); // large icon if (status == B_OK && appInfo.GetIconForType(type, &largeIcon, B_LARGE_ICON) == B_OK) status = mime.SetIconForType(type, &largeIcon, B_LARGE_ICON); } // undefer notifications for supported types for (int32 i = 0; supportedTypes.FindString("types", i, &type) == B_OK; i++) fDatabase->UndeferInstallNotification(type); return status; }