* Copyright 2013, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <ingo_weinhold@gmx.de>
*/
#include <mime/DatabaseDirectory.h>
#include <fs_attr.h>
#include <Node.h>
#include <StringList.h>
#include <mime/database_support.h>
#include <mime/DatabaseLocation.h>
namespace BPrivate {
namespace Storage {
namespace Mime {
DatabaseDirectory::DatabaseDirectory()
:
BMergedDirectory(B_COMPARE)
{
}
DatabaseDirectory::~DatabaseDirectory()
{
}
status_t
DatabaseDirectory::Init(DatabaseLocation* databaseLocation,
const char* superType)
{
status_t error = BMergedDirectory::Init();
if (error != B_OK)
return error;
const BStringList& directories = databaseLocation->Directories();
int32 count = directories.CountStrings();
for (int32 i = 0; i < count; i++) {
BString directory = directories.StringAt(i);
if (superType != NULL)
directory << '/' << superType;
AddDirectory(directory);
}
return B_OK;
}
bool
DatabaseDirectory::ShallPreferFirstEntry(const entry_ref& entry1, int32 index1,
const entry_ref& entry2, int32 index2)
{
return _IsValidMimeTypeEntry(entry1) || !_IsValidMimeTypeEntry(entry2);
}
bool
DatabaseDirectory::_IsValidMimeTypeEntry(const entry_ref& entry)
{
BNode node;
attr_info info;
return node.SetTo(&entry) == B_OK
&& node.GetAttrInfo(BPrivate::Storage::Mime::kTypeAttr, &info) == B_OK;
}
}
}
}