aboutsummaryrefslogtreecommitdiff
path: root/c/data.h
blob: 797271d1a5f8482c90fb27422b8284bdb4d68507 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#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};
};

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