root/headers/os/storage/AppFileInfo.h
/*
 * Copyright 2002-2014, Haiku, Inc. All Rights Reserved.
 * Distributed under the terms of the MIT License.
 */
#ifndef _APP_FILE_INFO_H
#define _APP_FILE_INFO_H


#include <NodeInfo.h>


class BBitmap;
class BFile;
class BMessage;
class BResources;


struct version_info {
        uint32  major;
        uint32  middle;
        uint32  minor;
        uint32  variety;
        uint32  internal;
        char    short_info[64];
        char    long_info[256];
};

enum info_variety {
        B_DEVELOPMENT_VERSION = 0,
        B_ALPHA_VERSION,
        B_BETA_VERSION,
        B_GAMMA_VERSION,
        B_GOLDEN_MASTER_VERSION,
        B_FINAL_VERSION
};

enum info_location {
        B_USE_ATTRIBUTES                = 0x1,
        B_USE_RESOURCES                 = 0x2,
        B_USE_BOTH_LOCATIONS    = 0x3   // == B_USE_ATTRIBUTES | B_USE_RESOURCES
};

enum version_kind {
        B_APP_VERSION_KIND,
        B_SYSTEM_VERSION_KIND
};


class BAppFileInfo: public BNodeInfo {
public:
                                                                BAppFileInfo();
                                                                BAppFileInfo(BFile* file);
        virtual                                         ~BAppFileInfo();

                        status_t                        SetTo(BFile* file);

        virtual status_t                        GetType(char* type) const;
        virtual status_t                        SetType(const char* type);

                        status_t                        GetSignature(char* signature) const;
                        status_t                        SetSignature(const char* signature);

                        status_t                        GetCatalogEntry(char* catalogEntry) const;
                        status_t                        SetCatalogEntry(const char* catalogEntry);

                        status_t                        GetAppFlags(uint32* flags) const;
                        status_t                        SetAppFlags(uint32 flags);
                        status_t                        RemoveAppFlags();

                        status_t                        GetSupportedTypes(BMessage* types) const;
                        status_t                        SetSupportedTypes(const BMessage* types,
                                                                        bool updateMimeDB, bool syncAll);
                        status_t                        SetSupportedTypes(const BMessage* types,
                                                                        bool syncAll);
                        status_t                        SetSupportedTypes(const BMessage* types);
                        bool                            IsSupportedType(const char* type) const;
                        bool                            Supports(BMimeType* type) const;

        virtual status_t                        GetIcon(BBitmap* icon, icon_size which) const;
                        status_t                        SetIcon(const BBitmap* icon, icon_size which,
                                                                        bool updateMimeDB);
        virtual status_t                        SetIcon(const BBitmap* icon, icon_size which);

                        status_t                        GetIcon(uint8** data, size_t* size) const;
                        status_t                        SetIcon(const uint8* data, size_t size,
                                                                        bool updateMimeDB);
                        status_t                        SetIcon(const uint8* data, size_t size);

                        status_t                        GetVersionInfo(version_info* info,
                                                                        version_kind kind) const;
                        status_t                        SetVersionInfo(const version_info* info,
                                                                        version_kind kind);

                        status_t                        GetIconForType(const char* type, BBitmap* icon,
                                                                        icon_size which) const;
                        status_t                        GetIconForType(const char* type, uint8** data,
                                                                        size_t* size) const;
                        status_t                        SetIconForType(const char* type,
                                                                        const BBitmap* icon, icon_size which,
                                                                        bool updateMimeDB);
                        status_t                        SetIconForType(const char* type,
                                                                        const BBitmap* icon, icon_size which);
                        status_t                        SetIconForType(const char* type,
                                                                        const uint8* data, size_t size,
                                                                        bool updateMimeDB);
                        status_t                        SetIconForType(const char* type,
                                                                        const uint8* data, size_t size);

                        void                            SetInfoLocation(info_location location);
                        bool                            IsUsingAttributes() const;
                        bool                            IsUsingResources() const;

private:
        virtual void                            _ReservedAppFileInfo1();
        virtual void                            _ReservedAppFileInfo2();
        virtual void                            _ReservedAppFileInfo3();

                        BAppFileInfo&           operator=(const BAppFileInfo&);
                                                                BAppFileInfo(const BAppFileInfo&);

                        status_t                        GetMetaMime(BMimeType* meta) const;

                        status_t                        _ReadData(const char* name, int32 id,
                                                                        type_code type, void* buffer,
                                                                        size_t bufferSize, size_t& bytesRead,
                                                                        void** allocatedBuffer = NULL) const;
                        status_t                        _WriteData(const char* name, int32 id,
                                                                        type_code type, const void* buffer,
                                                                        size_t bufferSize, bool findID = false);
                        status_t                        _RemoveData(const char* name, type_code type);

private:
                        BResources*                     fResources;
                        info_location           fWhere;
                        uint32                          _reserved[2];
};


#endif  // _APP_FILE_INFO_H