Example #1
0
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);
}
status_t
Icon::CopyTo(BMimeType& type, bool force) const
{
	status_t status = B_OK;

	if (fLarge != NULL || force)
		status = type.SetIcon(fLarge, B_LARGE_ICON);
	if (fMini != NULL || force)
		status = type.SetIcon(fMini, B_MINI_ICON);
	if (fData != NULL || force)
		status = type.SetIcon(fData, fSize);
	return status;
}
Example #3
0
// 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;
}