haiku/headers/private/storage/mime/DatabaseLocation.h
Ingo Weinhold b94857b322 Refactor MIME DB access
* Add class DatabaseLocation. It contains a list of the MIME DB
  directory paths plus methods to access type files.
* Move all low-level MIME DB access functions from
  database_{support,access} to DatabaseLocation. All code that formerly
  used those now requires a DatabaseLocation object. In BMimeType and in
  the registrar the default object is used, but the low-level classes
  can now be reused with different locations.
* Move get_icon_data() from database_access to database_support and
  delete the former, which is now empty.
2013-05-07 23:15:36 +02:00

120 lines
3.3 KiB
C++

/*
* Copyright 2013, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <ingo_weinhold@gmx.de>
*/
#ifndef _MIME_DATABASE_LOCATION_H
#define _MIME_DATABASE_LOCATION_H
#include <Mime.h>
#include <StringList.h>
namespace BPrivate {
namespace Storage {
namespace Mime {
class DatabaseLocation {
public:
DatabaseLocation();
~DatabaseLocation();
bool AddDirectory(const BString& directory);
// paths
const BStringList& Directories() const
{ return fDirectories; }
BString WritableDirectory() const
{ return fDirectories.StringAt(0); }
BString WritablePathForType(const char* type) const
{ return _TypeToFilename(type, 0); }
// opening type nodes
status_t OpenType(const char* type, BNode& _node) const;
status_t OpenOrCreateType(const char* type,
BNode& _node, bool* _didCreate = NULL)
const;
// generic type attributes access
ssize_t ReadAttribute(const char* type,
const char* attribute, void* data,
size_t length, type_code datatype) const;
status_t ReadMessageAttribute(const char* type,
const char* attribute, BMessage& _message)
const;
status_t ReadStringAttribute(const char* type,
const char* attribute, BString& _string)
const;
status_t WriteAttribute(const char* type,
const char* attribute, const void* data,
size_t length, type_code datatype,
bool* _didCreate) const;
status_t WriteMessageAttribute(const char* type,
const char* attribute,
const BMessage& message, bool* _didCreate)
const;
status_t DeleteAttribute(const char* type,
const char* attribute) const;
// type attribute convenience getters
status_t GetAppHint(const char* type, entry_ref& _ref);
status_t GetAttributesInfo(const char* type,
BMessage& _info);
status_t GetShortDescription(const char* type,
char* description);
status_t GetLongDescription(const char* type,
char* description);
status_t GetFileExtensions(const char* type,
BMessage& _extensions);
status_t GetIcon(const char* type, BBitmap& _icon,
icon_size size);
status_t GetIcon(const char* type, uint8*& _data,
size_t& _size);
status_t GetIconForType(const char* type,
const char* fileType, BBitmap& _icon,
icon_size which);
status_t GetIconForType(const char* type,
const char* fileType, uint8*& _data,
size_t& _size);
status_t GetPreferredApp(const char* type,
char* signature, app_verb verb);
status_t GetSnifferRule(const char* type,
BString& _result);
status_t GetSupportedTypes(const char* type,
BMessage& _types);
bool IsInstalled(const char* type);
private:
BString _TypeToFilename(const char* type, int32 index)
const;
status_t _OpenType(const char* type, BNode& _node,
int32& _index) const;
status_t _CreateTypeNode(const char* type, BNode& _node)
const;
status_t _CopyTypeNode(BNode& source, const char* type,
BNode& _target) const;
private:
BStringList fDirectories;
};
} // namespace Mime
} // namespace Storage
} // namespace BPrivate
#endif // _MIME_DATABASE_LOCATION_H