/* * Copyright 2013, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. * * Authors: * Ingo Weinhold */ #include #include #include #include #include #include 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) { // check whether the MIME:TYPE attribute exists BNode node; attr_info info; return node.SetTo(&entry) == B_OK && node.GetAttrInfo(BPrivate::Storage::Mime::kTypeAttr, &info) == B_OK; } } // namespace Mime } // namespace Storage } // namespace BPrivate