# cfg.py

# utiliser les variables mnu_zik, mnu_rad, ... pour mettre à jour le manuel utilisateur
# 2020_guide_utilisateur_xavbox

import mod.aba as aba
import mod.commun as commun
import inc.mpc as mpc
import mod.mtn as mtn
import mod.rad as rad
import mod.zik as zik

hard_name "Xavbox"
soft_name "jk2020"
fichierVersion "/opt/jk2019/tout/VERSION.txt" # attention : variable inutilisée dans mtn.py (problème de substitution)
DIR_JK "/opt/jk2019"
# CONFIG_INI="/opt/jk2019/tout/ini/config.ini"
CONFIG_INI="/m/py_user.ini"
NIV_AIDE_VOC_DEFAULT 3
ONLINE_BACKUP_dir "http://gangand.net/jj/jk2019"
ONLINE_BACKUP_file "jk2019.tgz"
MACHINE_DEV_1 "jkmusic12"     # machine maître raspi 3b+
MACHINE_DEV_2 "cuisine_38"    # machine secondaire raspi zero

# variables à construire avec code_gen
# idem pour la fonction commande() dans jukebox.py

# animation sonore
SOUND_1 "/opt/jk2019/tout/ini/sound/maximize.mp3"
SOUND_2 "/opt/jk2019/tout/ini/sound/map.mp3"
SOUND_3 "/opt/jk2019/tout/ini/sound/switch.mp3"

# mpd
PLAYLISTS_PATH="/m/playlists"
MOUNT_USB="/m"

# module rad
# MEMO_RAD = "/m/memo/rad/py_rad_der_radio.txt"
ALL_RADIOS "/opt/jk2019/conf/all_radios.txt"
REC_RAW "/m/music/rec/raw/"
REC_RAW_REL "rec/raw/"

# module zik
PL_ZIK_MEMO="py_zik_memo"   # /m/playlists/zik_memo.m3u, mémorise playliste quand on quitte
ZIK_MEMO_DIR "/m/memo/zik"
ZIK_MEMO "/m/memo/zik/py_zik_memo.txt"    # combiné à PL_ZIK_MEMO, mémorise la position dans playliste et progression
ZIK_FAV "py_zik_fav"      # /m/playlists/zik_fav_1.m3u = favoris normaux (une fois la commande *)
                            # /m/playlists/zik_fav_2.m3u = super favoris (deux fois la commande *)

# module aba
DIRE_FILE_ATTENTE "/m/file_attente_dire"
BIBLIO_CLE_USB "cle_usb"
BIBLIO_PERSO_ZIP "perso_zip"
CLE_USB_BROWSE_M_MUSIC False
M_MUSIC "/m/music"
DEFAUT_BIBLIO "audio_cite_classiques"

LG_FRANCAIS "francais"
LG_ALLEMAND "allemand"
LG_ANGLAIS "anglais"

WAV_WAV "/m/deleting_allowed.wav"

BIB_DISPOS = {
    DEFAUT_BIBLIO: {
        # la clé est utilisée pour les dossier et fichier
        # /m/music/aba/memo_lvr_<clé>.txt et
        # /m/music/aba/<clé>/
        "catalogue" "/opt/jk2019/tout/ini/aba/audiocite_classiques",
        "langue"    LG_FRANCAIS,  # deutsch, english, francais, équivalents pico2wave de-DE, en-GB, fr-FR
        "nom"       "audiocité classiques",
        "website"   "http://www.audiocite.net",
         },
    "audio_cite_contemporains": {
        "catalogue" "/opt/jk2019/tout/ini/aba/audiocite_contemporains",
        "langue"    LG_FRANCAIS,
        "nom"       "audiocité contemporains",
        "website"   "http://www.audiocite.net",
         },
    BIBLIO_CLE_USB: {       # rappel : BIBLIO_CLE_USB = "cle_usb"
        "catalogue" "dynamique",
        "langue"    LG_FRANCAIS,
        "nom"       "clé u s b",
        "website"   "",
        },
    BIBLIO_PERSO_ZIP: {     # rappel : BIBLIO_PERSO_ZIP = "perso_zip"
        "catalogue" "http://gangand.net/aa/audiolivres/perso_zip",
        "langue"    LG_FRANCAIS,
        "nom"       "perso en ligne",
        "website"   "http://gangand.net/aa/audiolivres/perso_zip",
        },
    "librivoxde": {
        "catalogue" "/opt/jk2019/tout/ini/aba/librivox_de",
        "langue"    LG_ALLEMAND,
        "nom"       "librivox allemand",
        "website"   "http://www.librivox.org",
        },
    "librivoxen": {
        "catalogue" "/opt/jk2019/tout/ini/aba/librivox_en",
        "langue"    LG_ANGLAIS,
        "nom"       "librivox anglais",
        "website"   "http://www.librivox.org",
        },
    "librivoxfr": {
        "catalogue" "/opt/jk2019/tout/ini/aba/librivox_fr",
        "langue"    LG_FRANCAIS,
        "nom"       "librivox francais",
        "website"   "http://www.librivox.org",
        },
    "litteaudio": {
        "catalogue" "/opt/jk2019/tout/ini/aba/litteratureaudio",
        "langue"    LG_FRANCAIS,
        "nom"       "littérature audio",
        "website"   "http://www.litteratureaudio.com",
        },
    "divers_src": {
        "catalogue" "/opt/jk2019/tout/ini/aba/autres_sources",
        "langue"    LG_FRANCAIS,
        "nom"       "autres sources",
        "website"   "",
        },
    "tagesschau": {
        "catalogue" "/opt/jk2019/tout/ini/aba/tagesschau",
        "langue"    LG_ALLEMAND,
        "nom"       "tageschau en allemand",
        "website"   "https://www.tagesschau.de/download/podcast/",
        },
        # récupérer les tags .mp3 des podcasts
        # wget -O podcast.html https://www.tagesschau.de/download/podcast
        # récupérer les adresses http d'une page de recherche google
        # grep -o -E http://[-,.\;a-zA-Z/+?0-9=\&_]*  search.htm |sort|uniq|nl
        # for i in $(grep -o -E http://[-,.\;a-zA-Z/+?0-9=\&_]*  search.htm |sort|uniq) ; do n=$((n+1)) ; wget $i  ; done
        # autre solution
        # cat page_web.html | grep -o \
            # -E '\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))'

    "vorleser": {
        "catalogue" "/opt/jk2019/tout/ini/aba/vorleser",
        "langue"    LG_ALLEMAND,
        "nom"       "vorleser en allemand",
        "website"   "http://www.vorleser.net",
        },
        # ~ # TODO : utiliser chromedriver et python/phantomjs, pour télécharger les fichiers distants
    "loyalbooks": {
        "catalogue" "/opt/jk2019/tout/ini/aba/loyalbooks",
        "langue"    LG_ANGLAIS,
        "nom"       "loyalbooks",
        "website"   "http://www.loyalbooks.com",
        } }

mnu_commun = {  # éviter "11" dans ce menu, il est réservé aux menus modules !!!
    "...": [commun.quitter"quitter tout"],

    "0": [commun.qu_mod_co"quitter le module"],
    # "00": [commun.aide_rapide, "connaître les commandes de lancement"],
    "00": [commun.aide_rapide_NEW"connaître les commandes du module"],
    "000": [commun.touches_communes_NEW"connaître les commandes communes"],
    # "000": [commun.touches_module, "connaître les commandes de navigation"],
    # "111": [commun.touches_communes, "connaître les commandes communes"],


    # "..": [commun.detente, "lisent une histoire drôle ou un proverbe au hasard"],

    ".0": [commun.clear_screen"nettoyer l'écran"],
    "0.": [commun.clear_screen"nettoyer l'écran"],

    # "111": [chg_lang, "change la langue par défaut"],
    # "222": [rand_toggle, "mélange ou ordonne les titres"],
    # "444": [debugPL, "[DEV_ONLY], problème de playliste mal ordonnée du livre ... Rhubarbe"],

    # "12": [commun.fake_apprentissage, "mode apprentissage, énonce le rôle des touches et combinaisons de touches"],

    "33": [commun.tts_niveau_aide"définir le niveau de l'aide vocale"],
    "34": [commun.tts_basculer,  "basculer voix de synthèse"],
    "5": [commun.toggle"basculer la pause"],

    "55": [commun.stop"stopper la lecture"],

    "67": [commun.disHeure"annoncer date, heure, température Reims"],
    "68": [commun.temperatures"annoncer températures Reims et Metz"],
    "69": [commun.temperatures2"annoncer températures Auxerre et Orléans"],

    "778": [commun.aideVisuel1"[DEV_ONLY], affichent touches module"],
    "779": [commun.aideVisuel2"[DEV_ONLY], affichent touches communes"],

    # "77": [commun.rebours05mn, "arrêter le module après 5 minutes"],
    # "78": [commun.rebours10mn, "arrêter le module après 10 minutes"],
    # "79": [commun.rebours15mn, "arrêter le module après 15 minutes"],

    "999": [commun.eteindre"éteindre ou programmer l'arrêt de jukebox"],

    "-": [commun.vol_down"baisser le volume"],
    "+": [commun.vol_up"monter le volume"],
    "--": [commun.vol_down2"baisser le volume de deux crans"],
    "---": [commun.vol_down2"baisser le volume de deux crans"],
    "----": [commun.vol_down2"baisser le volume de deux crans"],
    "++": [commun.vol_up2"monter le volume de deux crans"],
    "+++": [commun.vol_up2"monter le volume de deux crans"],
    "++++": [commun.vol_up2"monter le volume de deux crans"],
    "-+": [commun.vol_down4"baisser le volume de quatre crans"] }

# juk, accueil du programme
mnu_juk = {
    "1": [rad.reprendre"démarrer la radio"],
    "2": [zik.reprendre"lancer la musique"],
    "3": [aba.reprendre"ouvrir les audiolivres"],
    "4": [mtn.reprendre"accéder à la maintenance"],
    "11": [commun.juk_menu_special11,"ouvrir le menu spécial jukebox"],          # menu spécial (= commandes diverses utiles)
    }
mnu_juk_activer = {
    "0""juk",
    "1""rad",
    "2""zik",
    "3""aba",
    "4""mtn",
    "8""juk" }
juk_special11 = {
    "1": [rad.reprendre"démarrer la radio"],
    "2": [zik.reprendre"lancer la musique"],
    "3": [aba.reprendre"ouvrir les audiolivres"],
    "4": [mtn.reprendre"accéder à la maintenance"],
    "5": [commun.temperatures"annoncer la température de deux villes"],
    "6": [commun.temperatures2"annoncer la température de deux villes"],
    "7": [commun.fake_apprentissage"mode apprentissage, énonce le rôle des touches et combinaisons de touches"],
    "8": [commun.tts_niveau_aide"définir le niveau de l'aide vocale"],
    "9": [commun.tts_basculer,  "basculer voix de synthèse"], }

# aba, audiolivres
mnu_aba = {    # audiocite.net, litteratureaudio.com, librivox, clé usb, perso
    "B": [aba.biblio_perso_zip,         "B comme brouillon"],
    "D": [aba.biblio_perso_zip,         "D comme debug ou développement"],
    "E": [aba.entree_lire,              "lit ou télécharge le livre actuel"], # touche Entrée
    # ~ "EE": [aba.entree_lire_livre_court, "télécharge et lit le livre actuel si inférieur à 5 minutes"], # touche Entrée 2 fois

    "1": [aba.livre_prec,   "passer au livre précédent"],
    "2": [aba.livre_hasard"choisir un livre au hasard"],
    "3": [aba.livre_suiv,   "passer au livre suivant"],
    "4": [aba.prev_trk,     "aller au chapitre précédent"],
    "6": [aba.next_trk,     "aller au chapitre suivant"],
    "7": [mpc.rew_10s,      "reculer de 10 s"],
    "9": [mpc.fwd_30s,      "avancer de 30 s"],

    # menus aba : 11, 22, 33
    "11": [aba.menu_voc11,"ouvrir le menu spécial audiolivres"],  # menu spécial (= commandes diverses utiles)
    "22": [aba.fav_menu"gérer les favoris et indésirables"],      # menu favoris/bannis

    "44": [aba.trk_first,   "sauter au premier chapitre"],
    "66": [aba.trk_last,    "sauter au dernier chapitre"],

    "91": [aba.stats_fichiers"donner des statistiques sur fichiers"],

    "/":  [aba.aba_nfo1"annoncer titre et auteur du livre"],
    "//": [aba.aba_nfo2"annoncer numéro, genre et durée du livre"],
    "/*": [aba.aba_nfo3"annoncer numéro, lecteur et poids du livre"],

    "*":  [aba.fav_add"ajouter le livre actuel aux favoris"],
    "**": [aba.fav_del"supprimer le livre des favoris"] }
aba_special11 = {         # menu vocal spécial
    "1": [aba.select_presents"sélectionner les livres présents"],
    "2": [aba.select_favoris"sélectionner vos livres favoris"],
    # ~ "3": [aba.select_lecteur, "sélectionner les livres du lecteur actuel"],
    # ~ "4": [aba.select_genre, "sélectionner les livres du genre actuel"],
    "3": [aba.select_tout"réinitialiser la sélection, en prenant tous les livres"],
    "4": [aba.choisir_livre"choisir directement un livre par son numéro"],
    # ~ "7": [aba.hasard_10_livres, "télécharger 10 livres au hasard"],
    "5": [aba.menu_biblio"changer de bibliothèque"],
    "6": [aba.supprimer_livre"supprimer le livre présent"],
    "7": [aba.supprimer_livres"supprimer tous les livres présents"],
    "8": [aba.supprimer_livres_tous"supprimer les livres présents dans toutes les bibliothèques"],
     }
aba_bibliotheques = {   # menu vocal bibliothèques
    # c'est aba_bibliotheques qui désignent les bibliothèques visibles et utilisables
    "1": [aba.biblio_audio_cite_classiques"activer la bibliothèque audio cité classiques"],
    "2": [aba.biblio_audio_cite_contemporains"activer la bibliothèque audio cité contemporains"],
    "3": [aba.biblio_litterature"activer la bibliothèque littérature audio"],  # catalogue pas dynamique des 500 préférés (492 restants)
    "4": [aba.biblio_cle_usb"lire les livres de la clé u s b"],
    "5": [aba.biblio_perso_zip"activer la bibliothèque personnelle en ligne"],
    "6": [aba.biblio_librivoxde"activer la bibliothèque librivox allemand"],
    "7": [aba.biblio_librivoxen"activer la bibliothèque librivox anglais"],
    "8": [aba.biblio_librivoxfr"activer la bibliothèque librivox francais"],
    "9": [aba.biblio_tagesschau"activer la bibliothèque tagesschau"],
    # "8": [aba.biblio_vorleser, "activer la bibliothèque vorleser"],
    # "9": [aba.biblio_loyalbooks, "activer la bibliothèque loyalbooks"],
    }
aba_fav_ban = {         # menu vocal favoris et bannis
    "1": [aba.fav_add"ajouter le livre aux favoris"],
    "2": [aba.fav_del"supprimer le livre des favoris"],
    "3": [aba.ban_add"ajouter le livre aux bannis"],
    "4": [aba.ban_del"supprimer le livre des bannis"] }

# mtn, maintenance
mnu_mtn = {
    "11": [mtn.menu_voc11"accéder aux commandes de maintenance utiles"],
    "88": [mtn.bak_restor"restaurer ou mettre à jour jukebox depuis la dernière version en ligne"],
    "99": [mtn.bak_backup"sauvegarder jukebox"] }
mtn_special11 = {         # menu vocal spécial
    "1": [mtn.bak_restor"restaure jukebox depuis la dernière version en ligne"],
    "2": [mtn.bak_backup"sauvegarde jukebox"],
    # "3": [mtn.annoncer_version_actu, "annoncer la version actuelle du programme"],
    # "4": [mtn.annoncer_version_maj, "annoncer la version disponible en mise à jour"],
     }

# rad, radios
mnu_rad = {
    "1": [rad.group1,  "lancer le groupe de radios 1"],
    "2": [rad.group2,  "lancer le groupe de radios 2"],
    "3": [rad.group3,  "lancer le groupe de radios 3"],
    "4": [rad.prev_trk"passer à la station précédente"],

    "6": [rad.next_trk"passer à la station suivante"],

    "7": [mpc.rew_10s"reculer de 10 s"],  # utile pour 22, écoute enregistrements
    "9": [mpc.fwd_30s"avancer de 30 s"],  # utile pour 22, écoute enregistrements

    "8": [rad.rebours,  "programmer un arrêt du module"],

    "11": [rad.menu_voc11,"ouvrir le menu spécial radio"],          # menu spécial (= commandes diverses utiles)
    "22": [rad.enregistrements_ecouter"écouter les enregistrements réalisés"],

    "44": [rad.trk_first"sauter à la première station"],

    "66": [rad.trk_last,  "sauter à la dernière station"],

    "85": [rad.pausepub,  "faire une pause de 1 minute"],
    "88": [rad.enreg_suppr,  "supprimer l'enregistrement actuel si vous les écoutez avec 22"],

    "/":  [rad.rad_nfo1,  "annoncer le nom de la radio"],
    "//": [rad.rad_nfo2,  "annoncer station et groupe en cours"],
    "/*": [rad.rad_nfo3,  "annoncer nombre de stations dans le groupe et leur nom"],

    "*":  [rad.rad_fav1,  "enregistrer 3 minutes"],
    "**": [rad.rad_fav2,  "enregistrer 30 minutes"],
    "*/": [rad.rad_fav3,  "programmer un enregistrement"],

    "*9": [rad.records,   "afficher les enregistrement en cours"] }
rad_special11 = {         # menu vocal spécial
    "1": [rad.group1,  "lancer le groupe de radios 1"],
    "2": [rad.rad_fav1,  "enregistrer 3 minutes"],
    "3": [rad.enregistrements_ecouter"écouter les enregistrements passé"],
    "4": [rad.enregistrements_ecouter_alea"écouter les enregistrements dans le désordre"],

    "5": [rad.pausepub2"faire une pause de 2 mn"],
}

# rec, enregistrements
# mnu_rec = {
    # "1": [rec.rec_todo, "rec todo"] }

# zik, musique
mnu_zik = {
    "1": [zik.az_shuf"jouer la musique au hasard"],
    "2": [zik.fav_play_random"jouer les favoris dans le désordre"],
    "3": [zik.chg_type"changer le type de musique"],
    "4": [zik.prev_trk"passer au morceau précédent"],

    "6": [zik.next_trk"passer au morceau suivant"],

    "46": [zik.random_trk"aller à un morceau de la playliste au hasard"],
    "64": [zik.random_trk"aller à un morceau de la playliste au hasard"],

    "7": [zik.rew_10s"reculer de 10 s"],
    "8": [zik.rebours"programmer un arrêt du module"],
    "9": [zik.fwd_30s"avancer de 30 s"],

    "11": [zik.menu_voc11,"ouvrir le menu spécial musique"],          # menu spécial (= commandes diverses utiles)
    "22": [zik.keepcd"jouer seulement les chansons du dossier en cours"],

    "44": [zik.trk_first"sauter au premier morceau"],

    "66": [zik.trk_last"sauter au dernier morceau"],

    "/": [zik.zik_nfo1""],
    "//": [zik.zik_nfo2""],
    "/*": [zik.zik_nfo3""],

    "*": [zik.fav_add"ajouter aux favoris"],
    "**": [zik.fav_del"retirer des favoris"],
    "*/": [zik.fav_play_random"jouer les favoris"] }
zik_special11 = {         # menu vocal spécial
    "1": [zik.fav_play"jouer les favoris"],
    "2": [zik.fav_play_random"jouer les favoris dans le désordre"],
    "3": [zik.play_all"jouer toute la musique au hasard"],
    "4": [zik.keepcd"jouer seulement les chansons du dossier en cours"],
    "5": [zik.keepcdprt"jouer seulement les chansons du dossier parent en cours"],
    }
zik_fav_ban = {         # menu vocal favoris et bannis
    "1": [zik.fav_add"ajouter le m p 3 aux favoris"],
    "2": [zik.fav_del"supprimer le m p 3 des favoris"],
    "3": [zik.fav_play"jouer les favoris"] }

# index des menus module
dic_menus = {
    "commun"mnu_commun,

    "aba"mnu_aba"aba_special11"aba_special11,
    "juk"mnu_juk"juk_special11"juk_special11,
    "mtn"mnu_mtn"mtn_special11"mtn_special11,
    "rad"mnu_rad"rad_special11"rad_special11,
    "zik"mnu_zik"zik_special11"zik_special11,

    "aba_bibliotheques"aba_bibliotheques,
    "aba_fav_ban"aba_fav_ban,
    }