+ Updated doxygen
+ Added code for: - B_REG_MIME_SET_PARAM::B_REG_MIME_PREFERRED_APP - B_REG_MIME_SET_PARAM::B_REG_MIME_APP_HINT - B_REG_MIME_SET_PARAM::B_REG_MIME_ICON git-svn-id: file:///srv/svn/repos/haiku/trunk/current@821 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
dff6cb3f88
commit
7cf4e78a5d
@ -1,7 +1,11 @@
|
|||||||
// MIMEManager.cpp
|
// MIMEManager.cpp
|
||||||
|
|
||||||
|
#include <Bitmap.h>
|
||||||
|
#include <ClassInfo.h>
|
||||||
#include <Message.h>
|
#include <Message.h>
|
||||||
#include <RegistrarDefs.h>
|
#include <RegistrarDefs.h>
|
||||||
|
#include <TypeConstants.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
@ -9,9 +13,9 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\class MIMEManager
|
\class MIMEManager
|
||||||
\brief MIMEManager is the master of the MIME data base.
|
\brief MIMEManager handles communication between BMimeType and the system-wide
|
||||||
|
MimeDatabase object for BMimeType's write and non-atomic read functions.
|
||||||
|
|
||||||
All write and non-atomic read accesses are carried out by this class.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// constructor
|
// constructor
|
||||||
@ -43,42 +47,8 @@ MIMEManager::MessageReceived(BMessage *message)
|
|||||||
|
|
||||||
switch (message->what) {
|
switch (message->what) {
|
||||||
case B_REG_MIME_SET_PARAM:
|
case B_REG_MIME_SET_PARAM:
|
||||||
{
|
HandleSetParam(message);
|
||||||
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_DESCRIPTION:
|
|
||||||
{
|
|
||||||
bool isLong;
|
|
||||||
const char *description;
|
|
||||||
err = message->FindBool("long", &isLong);
|
|
||||||
if (!err)
|
|
||||||
err = message->FindString("description", &description);
|
|
||||||
if (!err) {
|
|
||||||
err = (isLong
|
|
||||||
? fMimeDatabase.SetLongDescription(type, description)
|
|
||||||
: fMimeDatabase.SetShortDescription(type, description));
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
|
||||||
err = B_BAD_VALUE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
reply.what = B_SIMPLE_DATA;
|
|
||||||
reply.AddInt32("result", err);
|
|
||||||
message->SendReply(&reply, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case B_REG_MIME_START_WATCHING:
|
case B_REG_MIME_START_WATCHING:
|
||||||
case B_REG_MIME_STOP_WATCHING:
|
case B_REG_MIME_STOP_WATCHING:
|
||||||
@ -91,7 +61,7 @@ MIMEManager::MessageReceived(BMessage *message)
|
|||||||
: fMimeDatabase.StopWatching(messenger);
|
: fMimeDatabase.StopWatching(messenger);
|
||||||
}
|
}
|
||||||
|
|
||||||
reply.what = B_SIMPLE_DATA;
|
reply.what = B_REG_RESULT;
|
||||||
reply.AddInt32("result", err);
|
reply.AddInt32("result", err);
|
||||||
message->SendReply(&reply, this);
|
message->SendReply(&reply, this);
|
||||||
break;
|
break;
|
||||||
@ -106,7 +76,7 @@ MIMEManager::MessageReceived(BMessage *message)
|
|||||||
err = message->what == B_REG_MIME_INSTALL
|
err = message->what == B_REG_MIME_INSTALL
|
||||||
? fMimeDatabase.Install(type)
|
? fMimeDatabase.Install(type)
|
||||||
: fMimeDatabase.Delete(type);
|
: fMimeDatabase.Delete(type);
|
||||||
reply.what = B_SIMPLE_DATA;
|
reply.what = B_REG_RESULT;
|
||||||
reply.AddInt32("result", err);
|
reply.AddInt32("result", err);
|
||||||
message->SendReply(&reply, this);
|
message->SendReply(&reply, this);
|
||||||
break;
|
break;
|
||||||
@ -119,3 +89,103 @@ MIMEManager::MessageReceived(BMessage *message)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// HandleSetParam
|
||||||
|
//! Handles all B_REG_MIME_SET_PARAM messages
|
||||||
|
void
|
||||||
|
MIMEManager::HandleSetParam(BMessage *message)
|
||||||
|
{
|
||||||
|
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:
|
||||||
|
{
|
||||||
|
entry_ref ref;
|
||||||
|
err = message->FindRef("app hint", &ref);
|
||||||
|
if (!err)
|
||||||
|
err = fMimeDatabase.SetAppHint(type, &ref);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case B_REG_MIME_DESCRIPTION:
|
||||||
|
{
|
||||||
|
bool isLong;
|
||||||
|
const char *description;
|
||||||
|
err = message->FindBool("long", &isLong);
|
||||||
|
if (!err)
|
||||||
|
err = message->FindString("description", &description);
|
||||||
|
if (!err)
|
||||||
|
err = (isLong
|
||||||
|
? fMimeDatabase.SetLongDescription(type, description)
|
||||||
|
: fMimeDatabase.SetShortDescription(type, description));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case B_REG_MIME_PREFERRED_APP:
|
||||||
|
{
|
||||||
|
const char *signature;
|
||||||
|
int32 verb;
|
||||||
|
err = message->FindString("signature", &signature);
|
||||||
|
if (!err)
|
||||||
|
err = message->FindInt32("app verb", &verb);
|
||||||
|
if (!err)
|
||||||
|
err = fMimeDatabase.SetPreferredApp(type, signature, (app_verb)verb);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case B_REG_MIME_ICON:
|
||||||
|
{
|
||||||
|
// 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);
|
||||||
|
break;
|
||||||
|
// End temporary fix code
|
||||||
|
|
||||||
|
/* This is the code I was using until BBitmap::Instantiate blew up on me.
|
||||||
|
|
||||||
|
BMessage iconArchive;
|
||||||
|
int32 size;
|
||||||
|
err = message->FindMessage("icon archive", &iconArchive);
|
||||||
|
if (!err)
|
||||||
|
err = message->FindInt32("size", &size);
|
||||||
|
iconArchive.PrintToStream();
|
||||||
|
if (!err) {
|
||||||
|
BArchivable *unarchived = instantiate_object(&iconArchive);
|
||||||
|
if (unarchived) {
|
||||||
|
BBitmap *icon = cast_as(unarchived, BBitmap);
|
||||||
|
if (icon) {
|
||||||
|
err = icon->InitCheck();
|
||||||
|
if (!err)
|
||||||
|
err = fMimeDatabase.SetIcon(type, icon, (icon_size)size);
|
||||||
|
delete icon;
|
||||||
|
} else
|
||||||
|
err = B_BAD_VALUE;
|
||||||
|
|
||||||
|
} else
|
||||||
|
err = B_NO_MEMORY;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
err = B_BAD_VALUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BMessage reply(B_REG_RESULT);
|
||||||
|
reply.AddInt32("result", err);
|
||||||
|
message->SendReply(&reply, this);
|
||||||
|
}
|
@ -13,6 +13,7 @@ public:
|
|||||||
|
|
||||||
virtual void MessageReceived(BMessage *message);
|
virtual void MessageReceived(BMessage *message);
|
||||||
private:
|
private:
|
||||||
|
void HandleSetParam(BMessage *message);
|
||||||
BPrivate::MimeDatabase fMimeDatabase;
|
BPrivate::MimeDatabase fMimeDatabase;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user