After implementing the BMimeType::GetInstalled[Super]Types()
functionality, it became apparent that some restructuring was
needed if I wanted to keep things clean and managble.
storage/MimeDatabase.{h,cpp} have been broken into:
storage/mime/database_support.{h,cpp}
+ MIME database constants
+ high-level database access functions like open_type(),
read_mime_attr(), etc.
storage/mime/database_access.{h,cpp}
+ atomic read functions
+ is_installed()
+ get_icon_data()
storage/mime/Database.{h,cpp}
+ Mime::Database class, which is responsible for all write,
non-atomic read, and mime monitor functionality.
storage/mime/InstalledTypes.{h,cpp}
+ Helper class for Mime::Database::GetInstalled[Super]Types()
storage/mime/Supertype.{h,cpp}
+ Helper class for Mime::InstalledTypes
I haven't merged my intial, somewhat cludgy GetInstalled[Super]Types
implementation into the new setup yet. That comes next, and it ought
to be a more graceful implementation now.
I also implemented BMimeType::Get/SetSupportingTypes(), though
they haven't been tested yet (sorry).
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@862 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -23,7 +23,7 @@
|
||||
*/
|
||||
MIMEManager::MIMEManager()
|
||||
: BLooper("main_mime")
|
||||
, fMimeDatabase()
|
||||
, fDatabase()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -61,8 +61,8 @@ MIMEManager::MessageReceived(BMessage *message)
|
||||
err = message->FindMessenger("target", &messenger);
|
||||
if (!err) {
|
||||
err = message->what == B_REG_MIME_START_WATCHING
|
||||
? fMimeDatabase.StartWatching(messenger)
|
||||
: fMimeDatabase.StopWatching(messenger);
|
||||
? fDatabase.StartWatching(messenger)
|
||||
: fDatabase.StopWatching(messenger);
|
||||
}
|
||||
|
||||
reply.what = B_REG_RESULT;
|
||||
@@ -78,13 +78,43 @@ MIMEManager::MessageReceived(BMessage *message)
|
||||
err = message->FindString("type", &type);
|
||||
if (!err)
|
||||
err = message->what == B_REG_MIME_INSTALL
|
||||
? fMimeDatabase.Install(type)
|
||||
: fMimeDatabase.Delete(type);
|
||||
? fDatabase.Install(type)
|
||||
: fDatabase.Delete(type);
|
||||
|
||||
reply.what = B_REG_RESULT;
|
||||
reply.AddInt32("result", err);
|
||||
message->SendReply(&reply, this);
|
||||
break;
|
||||
}
|
||||
|
||||
case B_REG_MIME_GET_INSTALLED_TYPES:
|
||||
{
|
||||
BMessage types;
|
||||
const char *supertype;
|
||||
err = message->FindString("supertype", &supertype);
|
||||
if (err == B_NAME_NOT_FOUND)
|
||||
err = fDatabase.GetInstalledTypes(&types);
|
||||
else if (!err)
|
||||
err = fDatabase.GetInstalledTypes(supertype, &types);
|
||||
|
||||
reply.what = B_REG_RESULT;
|
||||
reply.AddInt32("result", err);
|
||||
reply.AddMessage("types", &types);
|
||||
message->SendReply(&reply, this);
|
||||
break;
|
||||
}
|
||||
|
||||
case B_REG_MIME_GET_INSTALLED_SUPERTYPES:
|
||||
{
|
||||
BMessage types;
|
||||
err = fDatabase.GetInstalledSupertypes(&types);
|
||||
|
||||
reply.what = B_REG_RESULT;
|
||||
reply.AddInt32("result", err);
|
||||
reply.AddMessage("types", &types);
|
||||
message->SendReply(&reply, this);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
printf("MIMEMan: msg->what == %.4s\n", &(message->what));
|
||||
@@ -112,7 +142,7 @@ MIMEManager::HandleSetParam(BMessage *message)
|
||||
entry_ref ref;
|
||||
err = message->FindRef("app hint", &ref);
|
||||
if (!err)
|
||||
err = fMimeDatabase.SetAppHint(type, &ref);
|
||||
err = fDatabase.SetAppHint(type, &ref);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -121,7 +151,7 @@ MIMEManager::HandleSetParam(BMessage *message)
|
||||
BMessage info;
|
||||
err = message->FindMessage("attr info", &info);
|
||||
if (!err)
|
||||
err = fMimeDatabase.SetAttrInfo(type, &info);
|
||||
err = fDatabase.SetAttrInfo(type, &info);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -134,8 +164,8 @@ MIMEManager::HandleSetParam(BMessage *message)
|
||||
err = message->FindString("description", &description);
|
||||
if (!err)
|
||||
err = (isLong
|
||||
? fMimeDatabase.SetLongDescription(type, description)
|
||||
: fMimeDatabase.SetShortDescription(type, description));
|
||||
? fDatabase.SetLongDescription(type, description)
|
||||
: fDatabase.SetShortDescription(type, description));
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -144,11 +174,10 @@ MIMEManager::HandleSetParam(BMessage *message)
|
||||
BMessage extensions;
|
||||
err = message->FindMessage("extensions", &extensions);
|
||||
if (!err)
|
||||
err = fMimeDatabase.SetFileExtensions(type, &extensions);
|
||||
err = fDatabase.SetFileExtensions(type, &extensions);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case B_REG_MIME_ICON:
|
||||
case B_REG_MIME_ICON_FOR_TYPE:
|
||||
{
|
||||
@@ -163,11 +192,11 @@ MIMEManager::HandleSetParam(BMessage *message)
|
||||
if (!err)
|
||||
err = message->FindString("file type", &fileType);
|
||||
if (!err)
|
||||
err = fMimeDatabase.SetIconForType(type, fileType, data,
|
||||
err = fDatabase.SetIconForType(type, fileType, data,
|
||||
dataSize, (icon_size)size);
|
||||
} else {
|
||||
if (!err)
|
||||
err = fMimeDatabase.SetIcon(type, data, dataSize,
|
||||
err = fDatabase.SetIcon(type, data, dataSize,
|
||||
(icon_size)size);
|
||||
}
|
||||
break;
|
||||
@@ -182,10 +211,19 @@ MIMEManager::HandleSetParam(BMessage *message)
|
||||
if (!err)
|
||||
err = message->FindInt32("app verb", &verb);
|
||||
if (!err)
|
||||
err = fMimeDatabase.SetPreferredApp(type, signature, (app_verb)verb);
|
||||
err = fDatabase.SetPreferredApp(type, signature, (app_verb)verb);
|
||||
break;
|
||||
}
|
||||
|
||||
case B_REG_MIME_SUPPORTED_TYPES:
|
||||
{
|
||||
BMessage types;
|
||||
err = message->FindMessage("types", &types);
|
||||
if (!err)
|
||||
err = fDatabase.SetSupportedTypes(type, &types);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
err = B_BAD_VALUE;
|
||||
break;
|
||||
@@ -214,11 +252,11 @@ MIMEManager::HandleDeleteParam(BMessage *message)
|
||||
if (!err) {
|
||||
switch (which) {
|
||||
case B_REG_MIME_APP_HINT:
|
||||
err = fMimeDatabase.DeleteAppHint(type);
|
||||
err = fDatabase.DeleteAppHint(type);
|
||||
break;
|
||||
|
||||
case B_REG_MIME_ATTR_INFO:
|
||||
err = fMimeDatabase.DeleteAttrInfo(type);
|
||||
err = fDatabase.DeleteAttrInfo(type);
|
||||
break;
|
||||
|
||||
case B_REG_MIME_DESCRIPTION:
|
||||
@@ -227,13 +265,13 @@ MIMEManager::HandleDeleteParam(BMessage *message)
|
||||
err = message->FindBool("long", &isLong);
|
||||
if (!err)
|
||||
err = isLong
|
||||
? fMimeDatabase.DeleteLongDescription(type)
|
||||
: fMimeDatabase.DeleteShortDescription(type);
|
||||
? fDatabase.DeleteLongDescription(type)
|
||||
: fDatabase.DeleteShortDescription(type);
|
||||
break;
|
||||
}
|
||||
|
||||
case B_REG_MIME_FILE_EXTENSIONS:
|
||||
err = fMimeDatabase.DeleteFileExtensions(type);
|
||||
err = fDatabase.DeleteFileExtensions(type);
|
||||
break;
|
||||
|
||||
case B_REG_MIME_ICON:
|
||||
@@ -246,10 +284,10 @@ MIMEManager::HandleDeleteParam(BMessage *message)
|
||||
if (!err)
|
||||
err = message->FindString("file type", &fileType);
|
||||
if (!err)
|
||||
err = fMimeDatabase.DeleteIconForType(type, fileType, (icon_size)size);
|
||||
err = fDatabase.DeleteIconForType(type, fileType, (icon_size)size);
|
||||
} else {
|
||||
if (!err)
|
||||
err = fMimeDatabase.DeleteIcon(type, (icon_size)size);
|
||||
err = fDatabase.DeleteIcon(type, (icon_size)size);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -259,12 +297,16 @@ MIMEManager::HandleDeleteParam(BMessage *message)
|
||||
int32 verb;
|
||||
err = message->FindInt32("app verb", &verb);
|
||||
if (!err)
|
||||
err = fMimeDatabase.DeletePreferredApp(type, (app_verb)verb);
|
||||
err = fDatabase.DeletePreferredApp(type, (app_verb)verb);
|
||||
break;
|
||||
}
|
||||
|
||||
case B_REG_MIME_SNIFFER_RULE:
|
||||
err = fMimeDatabase.DeleteSnifferRule(type);
|
||||
err = fDatabase.DeleteSnifferRule(type);
|
||||
break;
|
||||
|
||||
case B_REG_MIME_SUPPORTED_TYPES:
|
||||
err = fDatabase.DeleteSupportedTypes(type);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#define MIME_MANAGER_H
|
||||
|
||||
#include <Looper.h>
|
||||
#include <MimeDatabase.h>
|
||||
#include <mime/Database.h>
|
||||
|
||||
class MIMEManager : public BLooper {
|
||||
public:
|
||||
@@ -16,7 +16,7 @@ private:
|
||||
void HandleSetParam(BMessage *message);
|
||||
void HandleDeleteParam(BMessage *message);
|
||||
|
||||
BPrivate::MimeDatabase fMimeDatabase;
|
||||
BPrivate::Storage::Mime::Database fDatabase;
|
||||
};
|
||||
|
||||
#endif // MIME_MANAGER_H
|
||||
|
||||
Reference in New Issue
Block a user