1//---------------------------------------------------------------------- 2// This software is part of the Haiku distribution and is covered 3// by the MIT License. 4//--------------------------------------------------------------------- 5/*! 6 \file MimeType.h 7 BMimeType interface declarations. 8*/ 9#ifndef _MIME_TYPE_H 10#define _MIME_TYPE_H 11 12#include <SupportDefs.h> 13#include <StorageDefs.h> 14 15#include <Messenger.h> 16#include <Mime.h> 17#include <File.h> 18#include <Entry.h> 19 20class BBitmap; 21class BResources; 22class BAppFileInfo; 23class BMessenger; 24 25namespace BPrivate { 26 class MimeDatabase; 27} 28 29enum app_verb { 30 B_OPEN 31}; 32 33extern const char *B_APP_MIME_TYPE; // platform dependent 34extern const char *B_PEF_APP_MIME_TYPE; // "application/x-be-executable" 35extern const char *B_PE_APP_MIME_TYPE; // "application/x-vnd.be-peexecutable" 36extern const char *B_ELF_APP_MIME_TYPE; // "application/x-vnd.be-elfexecutable" 37extern const char *B_RESOURCE_MIME_TYPE;// "application/x-be-resource" 38extern const char *B_FILE_MIME_TYPE; // "application/octet-stream" 39 40/* ------------------------------------------------------------- */ 41 42// MIME Monitor BMessage::what value 43enum { 44 B_META_MIME_CHANGED = 'MMCH' 45}; 46 47// MIME Monitor "be:which" values 48enum { 49 B_ICON_CHANGED = 0x00000001, 50 B_PREFERRED_APP_CHANGED = 0x00000002, 51 B_ATTR_INFO_CHANGED = 0x00000004, 52 B_FILE_EXTENSIONS_CHANGED = 0x00000008, 53 B_SHORT_DESCRIPTION_CHANGED = 0x00000010, 54 B_LONG_DESCRIPTION_CHANGED = 0x00000020, 55 B_ICON_FOR_TYPE_CHANGED = 0x00000040, 56 B_APP_HINT_CHANGED = 0x00000080, 57 B_MIME_TYPE_CREATED = 0x00000100, 58 B_MIME_TYPE_DELETED = 0x00000200, 59 B_SNIFFER_RULE_CHANGED = 0x00000400, 60 B_SUPPORTED_TYPES_CHANGED = 0x00000800, 61 62 B_EVERYTHING_CHANGED = (int)0xFFFFFFFF 63}; 64 65// MIME Monitor "be:action" values 66enum { 67 B_META_MIME_MODIFIED = 'MMMD', 68 B_META_MIME_DELETED = 'MMDL', 69}; 70 71/* ------------------------------------------------------------- */ 72 73//! File typing functionality. 74/*! The BMimeType class provides access to the file typing system, which 75 provides the following functionality: 76 - Basic MIME string manipulation 77 - Access to file type information in the MIME database 78 - Ways to receive notifications when parts of the MIME database are updated 79 - Methods to determine/help determine the types of untyped files 80 81 \author <a href='mailto:tylerdauwalder@users.sf.net'>Tyler Dauwalder</a> 82 \author <a href='bonefish@users.sf.net'>Ingo Weinhold</a> 83 \version 0.0.0 84*/ 85class BMimeType { 86public: 87 BMimeType(); 88 BMimeType(const char *mimeType); 89 virtual ~BMimeType(); 90 91 status_t SetTo(const char *mimeType); 92 void Unset(); 93 status_t InitCheck() const; 94 95 /* these functions simply perform string manipulations*/ 96 const char *Type() const; 97 bool IsValid() const; 98 bool IsSupertypeOnly() const; 99 status_t GetSupertype(BMimeType *superType) const; 100 101 bool operator==(const BMimeType &type) const; 102 bool operator==(const char *type) const; 103 104 bool Contains(const BMimeType *type) const; 105 106 /* These functions are for managing data in the meta mime file*/ 107 static bool IsValid(const char *mimeType); 108 109 /* Deprecated Use SetTo instead. */ 110 status_t SetType(const char *mimeType); 111 112 static status_t GuessMimeType(const entry_ref *file, BMimeType *type); 113 static status_t GuessMimeType(const void *buffer, int32 length, 114 BMimeType *type); 115 static status_t GuessMimeType(const char *filename, BMimeType *type); 116 117private: 118 BMimeType(const char *mimeType, const char *mimePath); 119 // if mimePath is NULL, defaults to "/boot/home/config/settings/beos_mime/" 120 121 friend class MimeTypeTest; 122 123// Uncomment, when needed... 124 125 friend class BAppFileInfo; 126// friend class BRoster; 127// friend class TRosterApp; 128// friend class TMimeWorker; 129 130// friend status_t _update_mime_info_(const char *, int32); 131// friend status_t _real_update_app_(BAppFileInfo *, const char *, bool); 132 133// static void _set_local_dispatch_target_(BMessenger *, void (*)(BMessage *)); 134// void _touch_(); 135 136 virtual void _ReservedMimeType1(); 137 virtual void _ReservedMimeType2(); 138 virtual void _ReservedMimeType3(); 139 140 BMimeType &operator=(const BMimeType &); 141 BMimeType(const BMimeType &); 142 143 144// void InitData(const char *type); 145// void InitData(const char *type); 146// status_t OpenFile(bool create_file = false, dev_t dev = -1) const; 147// status_t CloseFile() const; 148 status_t GetSupportedTypes(BMessage *types); 149 status_t SetSupportedTypes(const BMessage *types, bool fullSync = true); 150 151 static status_t GetAssociatedTypes(const char *extension, BMessage *types); 152 153// void MimeChanged(int32 w, const char *type = NULL, 154// bool large = true) const; 155 156 157 char *fType; 158 BFile *fMeta; 159 void *_unused; 160 entry_ref fRef; 161 int fWhere; 162 status_t fCStatus; 163 uint32 _reserved[3]; 164}; 165 166 167#endif // _MIME_TYPE_H 168 169 170