1 /* 2 * Copyright 2013, Haiku, Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Ingo Weinhold <ingo_weinhold@gmx.de> 7 */ 8 9 10 #include <mime/DatabaseDirectory.h> 11 12 #include <fs_attr.h> 13 #include <Node.h> 14 #include <StringList.h> 15 16 #include <mime/database_support.h> 17 #include <mime/DatabaseLocation.h> 18 19 20 namespace BPrivate { 21 namespace Storage { 22 namespace Mime { 23 24 25 DatabaseDirectory::DatabaseDirectory() 26 : 27 BMergedDirectory(B_COMPARE) 28 { 29 } 30 31 32 DatabaseDirectory::~DatabaseDirectory() 33 { 34 } 35 36 37 status_t 38 DatabaseDirectory::Init(DatabaseLocation* databaseLocation, 39 const char* superType) 40 { 41 status_t error = BMergedDirectory::Init(); 42 if (error != B_OK) 43 return error; 44 45 const BStringList& directories = databaseLocation->Directories(); 46 int32 count = directories.CountStrings(); 47 for (int32 i = 0; i < count; i++) { 48 BString directory = directories.StringAt(i); 49 if (superType != NULL) 50 directory << '/' << superType; 51 52 AddDirectory(directory); 53 } 54 55 return B_OK; 56 } 57 58 59 bool 60 DatabaseDirectory::ShallPreferFirstEntry(const entry_ref& entry1, int32 index1, 61 const entry_ref& entry2, int32 index2) 62 { 63 return _IsValidMimeTypeEntry(entry1) || !_IsValidMimeTypeEntry(entry2); 64 } 65 66 67 bool 68 DatabaseDirectory::_IsValidMimeTypeEntry(const entry_ref& entry) 69 { 70 // check whether the MIME:TYPE attribute exists 71 BNode node; 72 attr_info info; 73 return node.SetTo(&entry) == B_OK 74 && node.GetAttrInfo(BPrivate::Storage::Mime::kTypeAttr, &info) == B_OK; 75 } 76 77 78 } // namespace Mime 79 } // namespace Storage 80 } // namespace BPrivate 81