aboutsummaryrefslogtreecommitdiff
path: root/oop2eindopdr/readme.md
blob: 7c8361488c204318dee6673ff056e571db5dc213 (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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# eindopdracht

in dit document staat overal pokémon verkeerd geschreven als pokemon om alle
broncode ascii-vriendelijk te houden.

combinatie readme en kladblok tijdens ontwikkeling

## gebruikte libraries

- versies moeten nog gedocumenteerd worden
- er wordt er vanuit gegaan dat deze libraries als
  systeemheaders/systeemlibraries (globaal) geïnstalleerd zijn

- [nlohmann/json](https://github.com/nlohmann/json) voor json (de)serializen
- [cpr](https://github.com/libcpr/cpr) voor https requests
- [libzip](https://libzip.org/) voor zip bestanden maken
- [csv2](https://github.com/p-ranav/csv2) voor csv bestanden parsen

## functionaliteit (pseudocode)

```
parse_cli_arguments()
init_update_cache()
case cli_argument.count
  0: // no arguments (interactive mode)
    while 1:
      id = input_text("card id?: ")
      list = filter_card_list(id)
      if list.count > 1:
        card = choose_single_card()
      else:
        card = list[0]
      display_card_with_value_info(card)
  1, 2: // input csv with optional output json (semi-interactive mode)
    ids = parse_csv()
    cards = []
    for id in ids:
      card = get_card_by_id(id)
      display_card(card)
      cards += card;
    if cli_argument.count == 2:
      export_cards_as_zip(cli_argument[0])
    else if input_yn("export? [Y/n]: "):
      output_filename = input_text("export filename?: ")
      export_cards_as_zip(output_filename)

```

## cache formaat (voorbeeld)

```
cache/
  date
  index
  swshp-SWSH001/
    info.json
    card.png
    card_hires.png
    complete
  swshp-SWSH002/
    info.json
    card.png
    card_hires.png
    complete
  swshp-SWSH..../
```

- `date` bevat een unix timestamp wanneer de cache voor het laatst geupdate is
  (gebruikt om te checken of de cache stale is) (misschien overbodig)
- de mappen direct onder de cache map zijn de volledige id's van de pokemon
- `index` bevat op losse regels de namen van de mappen met pokemon info
- `info.json` bevat voor elke kaart de json api response voor die kaart
- `complete` is een leeg bestand die bijhoudt of een kaart 'compleet' is. dit
  houdt in dat alle bestanden in een kaartmap compleet gedownload zijn,
  geschreven zijn en de bestanden weer netjes gesloten zijn.

de cache wordt bij initialisatie gevuld met de `swshp` set aan kaarten (wordt
opgevraagd aan de API). wanneer een kaart gezocht wordt die niet bekend is bij
de Pokedex klasse zal deze automatisch terugvallen op de API om tussen alle
kaarten te zoeken. als de API de kaart wel kan vinden zal deze automatisch
geindexeerd worden in `index` en de bijbehorende bestanden zullen in een losse
map gedownload worden. 

## zip formaat (voorbeeld)

```
output.zip/
  cards.csv
  swshp-SWSH001.png
  swshp-SWSH002.png
  swshp-SWSH....
```

- `cat cards.csv`:
  ```
  id,value
  swshp-SWSH001,3.00
  swshp-SWSH002,2.59
  swshp-SWSH....
  ```
  (punt voor decimale punt inplaats van komma)
- de kaart foto's zijn de -hires variant

## klassen (wip)

- PokemonCard
- PokemonTCGAPIClient
- CacheManager
- DownloadManager
- ZipExport