1/* 2 * Copyright 2002-2007, Haiku, Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef _MIME_ASSOCIATED_TYPES_H 6#define _MIME_ASSOCIATED_TYPES_H 7 8 9#include <SupportDefs.h> 10 11#include <map> 12#include <set> 13#include <string> 14 15class BMessage; 16class BString; 17struct entry_ref; 18 19 20namespace BPrivate { 21namespace Storage { 22namespace Mime { 23 24 25class DatabaseLocation; 26class MimeSniffer; 27 28 29class AssociatedTypes { 30public: 31 AssociatedTypes(DatabaseLocation* databaseLocation, 32 MimeSniffer* mimeSniffer); 33 ~AssociatedTypes(); 34 35 status_t GetAssociatedTypes(const char *extension, BMessage *types); 36 status_t GuessMimeType(const char *filename, BString *result); 37 status_t GuessMimeType(const entry_ref *ref, BString *result); 38 39 status_t SetFileExtensions(const char *type, const BMessage *extensions); 40 status_t DeleteFileExtensions(const char *type); 41 42 void PrintToStream() const; 43private: 44 status_t AddAssociatedType(const char *extension, const char *type); 45 status_t RemoveAssociatedType(const char *extension, const char *type); 46 47 status_t BuildAssociatedTypesTable(); 48 49 status_t ProcessType(const char *type); 50 std::string PrepExtension(const char *extension) const; 51 52 std::map<std::string, std::set<std::string> > fFileExtensions; // mime type => set of associated file extensions 53 std::map<std::string, std::set<std::string> > fAssociatedTypes; // file extension => set of associated mime types 54 55private: 56 DatabaseLocation* fDatabaseLocation; 57 MimeSniffer* fMimeSniffer; 58 bool fHaveDoneFullBuild; 59}; 60 61} // namespace Mime 62} // namespace Storage 63} // namespace BPrivate 64 65#endif // _MIME_ASSOCIATED_TYPES_H 66