---
marp: true
paginate: true
---
<!--- ESISTE UNA VERSIONE PDF più leggibile se questa risulta confusionaria --->
# Inizializzazione 
1. Aggiungere il percorso di vlc alla variabile d'ambiente path.
  - Installare vlc se non già fatto.
  - Verificare se l'installazione è come da default in 
  ```C:\Program Files\VideoLAN\VLC```, altrimenti: 
	- Cercare vlc sulla ricerca di windows (forse è chiamato in modi leggermente diversi, quali ad esempio VLC media player)
  	- Apri percorso file
  	- Tasto destro -> Apri percorso file sul file selezionato da windows
  	- Ci troveremo nella cartella nella quale c'è un file chiamato vlc (questo così com'è scritto, non in modi diversi)

---

  - Cerchiamo "modifica le variabili di ambiente relative al sistema", apriamo
  - clicchiamo su variabile d'ambiente in basso a destra
  - Doppio click su Path per aprire la variabile corrispondente
  - Aggiungiamo il percorso cliccando su nuovo e incollando il percorso, nel mio caso con un'installazione base è ```C:\Program Files\VideoLAN\VLC```

---
# Spiegazione sui file
## Formato toml
Toml è un file di configurazione simile a yml che si pone come alternativa più semplice alla lettura del classico file json usato principalmente per il web.

---
### Json
Il formato di json è il seguente:
```json
{
  "key1": "value",
  "key2": {
    "key2.1": "value"
  },
  "key3": ["value", 5140]
}
```

---
### Yaml
Il formato yml o yaml è il seguente:
```yaml
key1: value
key2:
  key2.1: value
key3:
  - value
  - 5140
```

---

### Toml
Il formato toml è il seguente:
```toml
key1 = value

[key2]
key2.1 = value

[[key3]]
value

[[key3]]
5140
```

---
### Perchè toml?
Pur preferendo json perchè mi sembra il più facilmente intuibile anche se molto pieno di caratteri speciali che possono inizialmente creare confusione, useremo toml perchè nativamente supportato da rust, il linguaggio che ho usato per la creazione di questo programma.
Yaml è molto più pulito di json ma ha spazi significativi, il che non lo rende così facile da scrivere su blocco note.

---

## Toml nei file qui presenti
### File Library
I file animelibrary.toml e mangalibrary.toml sono i due file designati alla gestione dei preferiti. Hanno formato:
```toml
[[AnimeSource]] # Scelta tra: Animeworld
name = "Nome dell'opera"
episodeList = ""
```

```toml
[[MangaSource]] # Scelta tra: Mangaworld, Mangago
name = "Nome dell'opera"
mangapage = ""
```

---

#### Formati accettati per episodeList e mangapage
Saranno scritti in RegEx (ovvero regular expression), un linguaggio per scrivere pattern. Può essere testato su tool online come [regexr.com](https://regexr.com).
I filtri successivamente sono corretti ma non precisi, potrebbero verificarsi degli errori e validare url non corretti o non validare alcuni corretti. 

---
##### Guida a RegEx 1/4
Un pattern RegEx, talvolta posto tra /, è scritto come un insieme di pattern da corrispondere (match). I pattern che lo costituiscono possono essere semplici caratteri alfanumerici o caratteri speciali.
I caratteri speciali hanno dei significati particolari e pertanto sono indicati, qualora si voglia trovare il match con quel determinato carattere speciale si usa una "escape string", ovvero si antepone \ al carattere speciale:
- ```: -> \:```
- ```? -> \?```
- ```\ -> \\```

---
##### Guida a RegEx 2/4
I caratteri speciali più usati sono:
  - ```?```: carattere opzionale, indica che il match è valido anche se il carattere precedente non è matchato
  - ```.```: carattere universale, matcha ogni carattere
  - ```[]```: insieme, matcha ogni carattere nell'insieme. L'insieme può essere definito anche come una lista di cui sono indicati gli estremi seguendo la tabella dei codici dei caratteri che associa un numero a ogni carattere. All'atto pratico alcuni sono molto intuitivi: ```a-z``` alfabeto inglese minuscolo, ```A-Z``` alfabeto inglese maiuscolo, ```0-9``` cifre decimali.
  - ```^```: negazione, posto all'inizio di un insieme o all'inizio di un gruppo, nega il suo contenuto matchando tutto tranne quello i caratteri che il gruppo o l'insieme matcha 

---
##### Guida a RegEx 3/4
Alcuni insiemi possono essere sintetizzati così:
  - ```\w```: ```[a-zA-Z0-9_]```
  - ```\s```: matcha ogni tipo di spazio e nuova riga (newline, carattere speciale ```\n```) e tabulazione (tab, carattere speciale ```\t```)
  - ```\d```: ```[0-9]```
E per negare il gruppo si usa la lettera maiuscola:
  - ```\W```: ```[^a-zA-Z0-9_]```
  - ```\S```: matcha ogni carattere che non sia uno spazio, nuova riga o tab.
  - ```\D```: ```[^0-9]```

---
##### Guida a RegEx 4/4
Per ripere pattern più volte si seguono:
  - ```{min, max}```: matcha il pattern antecedente per un valore ```min``` di volte obbligatoriamente e fino a un valore ```max```.
  - ```+```: matcha almeno una volta il pattern. Non ha un limite di match possibili
---

##### Animeworld
```re
https?\:\/\/www\.animeworld\.\w{2,3}\/play\/[a-zA-Z0-9\-]+\.\w+(\/\w+)?
```
Es. 
- ```https://www.animeworld.ac/play/frieren-beyond-journeys-end-2.JvOQx```
- ```https://www.animeworld.ac/play/frieren-beyond-journeys-end-2.JvOQx/Xduvm5```

---

##### Mangaworld
```re
https?\:\/\/www\.mangaworld\.\w{2,3}\/manga\/\d+\/\w+
```
Es.
- ```https://www.mangaworld.mx/manga/1683/kingdom```

---
##### Mangago
```re
https?\:\/\/www\.mangago\.me\/read\-manga\/\w+\/
```
Es.
- ```https://www.mangago.me/read-manga/medalist/```

---

### Config
Il file config è il file di impostazioni del programma.
#### [Anime]
Modifica le impostazioni generali delle sorgenti anime.
`source` definisce la sorgente di default da usare.
Sorgenti disponibili:
- Animeworld
---

#### [Manga]
Modifica le impostazioni generali delle sorgenti anime.
`source` definisce la sorgente di default da usare.
Sorgenti disponibili:
- Mangaworld
- Mangago `[W.I.P: known issue nuovi anime non trovati. Nella libreria funziona correttamente]`

---
#### [Manga] reader
L'opzione reader può essere configurata con una delle seguenti alternative. 
Es.
`reader="Okular"`
Alcune sono disponibili solo per alcuni sistemi operativi:
  - Windows:
    - `Sumatra`: Un lettore di pdf e file cbz gratuito e opensource. è estremamente leggero, soprattutto a confronto con google e altri browser. (11 MB di peso)
  - Linux:
    - `Okular`  - Lettore Pdf incluso con l'ambiente desktop KDE-Plasma
--- 
  - Windows e Linux:
    - Calibre - Miglior lettore epub che abbia mai provato, l'ho usato per tanto tempo su windows. Supporta anche Cbz e pdf e tanti altri tipi. Meno preferito rispetto a Sumatra nel caso non lo utiliziate per altro in quanto Calibre, possedendo tante funzionalità, non è così leggero. (300 MB circa)
Encoding:
  - pdf - scarica in formato pdf e lascia all'utente la possibilità di aprirlo come preferisce.
  - cbz - scarica in formato cbz e lascia all'utente la possibilità di aprirlo come preferisce. Specifica sul formato cbz: Il formato cbz è un sostanzialmente una zip costituita da un file di metadata e un insieme di immagini numerate. A differenza del pdf ogni pagina del cbz è gestita come un'immagine.

---
#### [General]
Permette mediante la scelta di una delle due opzioni di disattivare o attivare il menù di conferma dell'uscita dall'app.
```toml
askToQuit = false
askToQuit = true
```
---

#### [Theme]
Modifica i colori dell'app, dispositivi diversi possiedono configurazioni diverse del terminale quindi anche i colori possono vedersi diversamente.
Su Linux uso un terminale quasi trasparente, su Windows ha sfondo nero, su MacOs il terminale è bianco.
Alla versione corrente è supportato solo il formato hex #RRGGBB.
Le opzioni disponibili sono le seguenti:
```
base_border     anime_border        manga_border
menu_text       menu_selection      status_loading
res_border      res_text            res_selection
cmd_text        cmd_keys            list_border
```

---

### Extensions file
I file di configurazione delle singole estensioni si trova sotto la cartella extensions. Ciò è utile per evitare di dover pubblicare una nuova versione ogni cambio di nome di dominio di uno qualsiasi delle source utilizzate. Esiste un file di configurazione per ogni sorgente divisa in anime e manga ma la struttura è analoga. 