t8-mod/source/proxy-dll/demonware/fileshare.hpp
2023-11-10 14:08:30 -08:00

104 lines
3.4 KiB
C++

#pragma once
#include "data_types.hpp"
namespace demonware::fileshare
{
const char* get_fileshare_host_name();
enum fileshareCategory_e
{
FILESHARE_CATEGORY_ALL = 0,
FILESHARE_CATEGORY_CONTENT_SERVER_START = 1,
FILESHARE_CATEGORY_EMBLEM = 1,
FILESHARE_CATEGORY_PAINTJOB = 2,
FILESHARE_CATEGORY_VARIANT = 3,
FILESHARE_CATEGORY_DECAL = 4,
FILESHARE_CATEGORY_GUNRENDER = 5,
FILESHARE_CATEGORY_CLIP = 6,
FILESHARE_CATEGORY_EMBLEMIMAGE = 7,
FILESHARE_CATEGORY_FILM = 10,
FILESHARE_CATEGORY_SCREENSHOT = 11,
FILESHARE_CATEGORY_CUSTOM_GAME_MODE = 12,
FILESHARE_CATEGORY_CONTENT_SERVER_END = 12,
FILESHARE_CATEGORY_CLIP_PRIVATE = 14,
FILESHARE_CATEGORY_SCREENSHOT_PRIVATE = 15,
FILESHARE_CATEGORY_CUSTOM_GAME_MODE_PRIVATE = 16,
FILESHARE_CATEGORY_INGAMESTORE_START = 100,
FILESHARE_CATEGORY_INGAMESTORE_MAPPACKS = 100,
FILESHARE_CATEGORY_INGAMESTORE_THEMES = 101,
FILESHARE_CATEGORY_INGAMESTORE_AVATARS = 102,
FILESHARE_CATEGORY_INGAMESTORE_WEAPONPACKS = 103,
FILESHARE_CATEGORY_INGAMESTORE_CALLINGCARDPACKS = 104,
FILESHARE_CATEGORY_INGAMESTORE_STORAGEPACKS = 105,
FILESHARE_CATEGORY_INGAMESTORE_END = 105,
FILESHARE_CATEGORY_MOTD_IMAGES = 120,
FILESHARE_CATEGORY_VOTE_IMAGES = 130,
FILESHARE_CATEGORY_MDLC = 1000,
FILESHARE_CATEGORY_MDLC_DEDICATED = 1001,
FILESHARE_CATEGORY_MDLC_LAST = 1999,
FILESHARE_CATEGORY_AVI = 32768,
FILESHARE_CATEGORY_EXEMONITOR = 32769,
FILESHARE_CATEGORY_INVALID = -1
};
const char* get_category_extension(fileshareCategory_e cat);
fileshareCategory_e get_extension_category(const char* ext);
std::string get_fileshare_directory();
std::string get_file_name(const uint64_t fileID,
fileshareCategory_e category = FILESHARE_CATEGORY_INVALID);
std::string get_file_url(const std::string& file);
std::string get_file_path(const std::string& file);
std::string get_metadata_path(const std::string& file);
class FileMetadata final
{
public:
FileMetadata() = default;
~FileMetadata() = default;
enum file_status
{
FILE_STATUS_UNKNOWN = 0,
FILE_STATUS_INVALID = -1,
FILE_STATUS_UPLOADING = 1,
FILE_STATUS_UPLOADED = 2,
FILE_STATUS_DESCRIBED = 3
} status{};
struct file_info
{
uint64_t id;
std::string name;
uint32_t size;
uint32_t timestamp;
} file{};
struct author_info
{
uint64_t xuid;
std::string name;
} author{};
fileshareCategory_e category = FILESHARE_CATEGORY_ALL;
std::string fileName = "";
size_t fileSize = 0;
std::string ddl_metadata = "";
std::map<uint64_t, uint64_t> tags;
bool MetadataTaskResult(bdFileMetaData* output, bool download);
bool ReadMetaDataJson(const std::string& file, file_status expect = FILE_STATUS_UNKNOWN);
bool WriteMetaDataJson(const std::string& file, file_status status = FILE_STATUS_UNKNOWN);
private:
std::string SerializeMetaJSON();
bool ParseMetaJSON(const std::string& input);
};
std::vector<uint64_t> fileshare_list_demo_ids();
}