#ifndef DATA_H #define DATA_H #include "pl.h" #include "util.h" #include "wcharptr.h" struct ElvData { int rating = 0; bool bWatched = false; bool bTVOriginal = false; wchar_t sRating[3] = {0}; wchar_t siEp[5] = {0}; wchar_t title[128] = {0}; }; struct DlvData { wchar_t date[64] = {0}; wchar_t source[64] = {0}; wchar_t screenwriter[64] = {0}; wchar_t hint[128] = {0}; wchar_t wiki[128] = {0}; }; struct DatView { DatView(const wchar_t* filename, size_t cb); ~DatView(); HANDLE hf; HANDLE hm; void* view; /* TODO: Handle exceptions on read and write... */ }; constexpr size_t CB_SERIALIZE_ELVDATA = 1+sizeof(ElvData); unsigned char* Serialize(const ElvData& e, unsigned char* buf); unsigned char* Unserialize(ElvData& e, unsigned char* buf); inline int FromWeb(const int iEp, ElvData& e, DlvData& d) noexcept { WcharPtr title, wiki, date, source, hint; const int r = Pl("episode_data","fetch_episode_data",iEp,&title,&wiki,&date,&source,&hint); if (title) Wcscpy(e.title, title); if (wiki) Wcscpy(d.wiki, wiki); if (date) Wcscpy(d.date, date); if (source) Wcscpy(d.source, source); if (hint) Wcscpy(d.hint, hint); return r; } inline bool FromProlog(const int iEp, ElvData& e) noexcept { if (WcharPtr title; Pl("episode_data","episode_title",iEp,&title)) Wcscpy(e.title, title); else return false; if (Pl("episode_data","episode_rating",iEp,&e.rating)) Swprintf(e.sRating, L"%d", e.rating); if (Pl("episode_data","tv_original",iEp)) e.bTVOriginal = true; if (Pl("track_episodes","watched",iEp)) e.bWatched = true; Swprintf(e.siEp, L"%d", iEp); return true; } inline void FromProlog(const int iEp, DlvData& d) noexcept { if (WcharPtr wiki; Pl("episode_data","episode_wiki",iEp,&wiki)) Wcscpy(d.wiki, wiki); if (WcharPtr screenwriter; Pl("episode_data","episode_datum",iEp,"Screenwriter",&screenwriter)) Wcscpy(d.screenwriter, screenwriter); if (WcharPtr date; Pl("episode_data","episode_datum",iEp,"Date",&date)) Wcscpy(d.date, date); if (WcharPtr source; Pl("episode_data","episode_datum",iEp,"Source",&source)) Wcscpy(d.source, source); if (WcharPtr hint; Pl("episode_data","episode_datum",iEp,"Hint",&hint)) Wcscpy(d.hint, hint); } #endif