Added code for:

+ {Get,Set}IconForType()
+ Delete*() functions


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@834 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Tyler Dauwalder
2002-08-20 09:37:04 +00:00
parent 19ac754088
commit 1ed04c7ce3
6 changed files with 631 additions and 408 deletions
+109 -6
View File
@@ -48,7 +48,11 @@ MIMEManager::MessageReceived(BMessage *message)
switch (message->what) {
case B_REG_MIME_SET_PARAM:
HandleSetParam(message);
break;
break;
case B_REG_MIME_DELETE_PARAM:
HandleDeleteParam(message);
break;
case B_REG_MIME_START_WATCHING:
case B_REG_MIME_STOP_WATCHING:
@@ -89,7 +93,7 @@ MIMEManager::MessageReceived(BMessage *message)
}
}
// HandleSetParam
// HandleSetParam
//! Handles all B_REG_MIME_SET_PARAM messages
void
MIMEManager::HandleSetParam(BMessage *message)
@@ -139,16 +143,26 @@ MIMEManager::HandleSetParam(BMessage *message)
}
case B_REG_MIME_ICON:
case B_REG_MIME_ICON_FOR_TYPE:
{
// Begin temporary fix code
const void *data;
ssize_t dataSize;
int32 size;
err = message->FindData("icon data", B_RAW_TYPE, &data, &dataSize);
if (!err)
err = message->FindInt32("icon size", &size);
if (!err)
err = fMimeDatabase.SetIcon(type, (icon_size)size, data, dataSize);
if (which == B_REG_MIME_ICON_FOR_TYPE) {
const char *fileType;
if (!err)
err = message->FindString("file type", &fileType);
if (!err)
err = fMimeDatabase.SetIconForType(type, fileType, data,
dataSize, (icon_size)size);
} else {
if (!err)
err = fMimeDatabase.SetIcon(type, data, dataSize,
(icon_size)size);
}
break;
// End temporary fix code
@@ -188,4 +202,93 @@ MIMEManager::HandleSetParam(BMessage *message)
BMessage reply(B_REG_RESULT);
reply.AddInt32("result", err);
message->SendReply(&reply, this);
}
}
// HandleSetParam
//! Handles all B_REG_MIME_SET_PARAM messages
void
MIMEManager::HandleDeleteParam(BMessage *message)
{
// using BPrivate::MimeDatabase;
status_t err;
int32 which;
const char *type;
err = message->FindString("type", &type);
if (!err)
err = message->FindInt32("which", &which);
if (!err) {
switch (which) {
case B_REG_MIME_APP_HINT:
err = fMimeDatabase.DeleteAttribute(type, BPrivate::MimeDatabase::kAppHintAttr);
break;
case B_REG_MIME_DESCRIPTION:
{
bool isLong;
const char *description;
err = message->FindBool("long", &isLong);
if (!err)
err = fMimeDatabase.DeleteAttribute(type,
(isLong
? BPrivate::MimeDatabase::kLongDescriptionAttr
: BPrivate::MimeDatabase::kShortDescriptionAttr));
break;
}
case B_REG_MIME_PREFERRED_APP:
{
int32 verb;
err = message->FindInt32("app verb", &verb);
if (!err) {
switch (verb) {
case B_OPEN:
err = fMimeDatabase.DeleteAttribute(type, BPrivate::MimeDatabase::kPreferredAppAttr);
break;
default:
err = B_BAD_VALUE;
break;
}
}
break;
}
case B_REG_MIME_ICON:
case B_REG_MIME_ICON_FOR_TYPE:
{
int32 size;
err = message->FindInt32("icon size", &size);
if (which == B_REG_MIME_ICON_FOR_TYPE) {
const char *fileType;
if (!err)
err = message->FindString("file type", &fileType);
if (!err) {
std::string attr = ((size == B_MINI_ICON)
? BPrivate::MimeDatabase::kMiniIconAttrPrefix
: BPrivate::MimeDatabase::kLargeIconAttrPrefix)
+ BPrivate::MimeDatabase::ToLower(fileType);
err = fMimeDatabase.DeleteAttribute(type, attr.c_str());
}
} else {
if (!err) {
err = fMimeDatabase.DeleteAttribute(type, (size == B_MINI_ICON
? BPrivate::MimeDatabase::kMiniIconAttr
: BPrivate::MimeDatabase::kLargeIconAttr));
}
}
break;
}
default:
err = B_BAD_VALUE;
break;
}
}
BMessage reply(B_REG_RESULT);
reply.AddInt32("result", err);
message->SendReply(&reply, this);
}
+2
View File
@@ -14,6 +14,8 @@ public:
virtual void MessageReceived(BMessage *message);
private:
void HandleSetParam(BMessage *message);
void HandleDeleteParam(BMessage *message);
BPrivate::MimeDatabase fMimeDatabase;
};