Post du "02/11/2024, 13h19"

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
AffichagePersonnalisation getCurrentAffichagePersonnalisation()
{
    // _
    const std::pair<std::wstring, std::wstring> m_espace1{ L"", L" " };
    // _
    const std::pair<std::wstring, std::wstring> m_espace2{L"", L" "};
    // _
    const std::pair <std::wstring, std::wstring> m_espace3{ L"", L" " };
 
    auto& r_e_1_0 = m_espace1.first, & r_e_1_1 = m_espace1.second;
    auto& r_e_2_0 = m_espace2.first, & r_e_2_1 = m_espace2.second;
    auto& r_e_3_0 = m_espace3.first, & r_e_3_1 = m_espace3.second;
 
    // h
    std::vector<std::pair<std::wstring, std::wstring>> m_labelsHeure{ { L"h", L"h" },            // 0
                                                                    { L"H", L"h" },            // 1
                                                                    { L"heure", L"heures" },   // 2
                                                                    { L"Heure", L"Heures" },   // 3
                                                                    { L"HEURE", L"HEURES" } }; // 4
 
    auto& r_lH_0{ m_labelsHeure[0] };
    auto& r_lH_1{ m_labelsHeure[1] };
    auto& r_lH_2{ m_labelsHeure[2] };
    auto& r_lH_3{ m_labelsHeure[3] };
    auto& r_lH_4{ m_labelsHeure[4] };
 
    // min
    std::vector<std::pair<std::wstring, std::wstring>> m_labelsMinute{ { L"min", L"min" },          // 0
                                                                     { L"Min", L"Min" },          // 1
                                                                     { L"MIN", L"MIN" },          // 2
                                                                     { L"minute", L"minutes" },   // 3
                                                                     { L"Minute", L"Minutes" },   // 4
                                                                     { L"MINUTE", L"MINUTES" } }; // 5
 
    auto& r_lM_0{ m_labelsMinute[0] };
    auto& r_lM_1{ m_labelsMinute[0] };
    auto& r_lM_2{ m_labelsMinute[0] };
    auto& r_lM_3{ m_labelsMinute[0] };
    auto& r_lM_4{ m_labelsMinute[0] };
    auto& r_lM_5{ m_labelsMinute[0] };
 
    //
    std::vector<std::wstring> m_keyColor{ L"\x1b[94;1m", L"\x1b[38;2;0;255;0m", L"\x1b[38;2;255;0;0m", L"\x1b[38;2;255;255;0m" };
    std::wstring m_valuesColor{ L"\x1b[38;2;255;255;255m" }; // Blanc
 
    return AffichagePersonnalisation();
}

A quoi sert tout ce bordel qui est avant la dernière ligne avec le "return" ???

J'ai l'impression que vous avez 5/6 personnalisations possibles.
Alors, pourquoi ne pas créer 5/6 objets de type AffichagePersonnalisation ; et les passer aux fonctions "AffichagePersonnaliser_X" si nécessaire ???
Et faire en sorte que la classe "AffichagePersonnalisation" ne contiennent qu'une personnalisation et pas 5 ou 6.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
class AffichagePersonnalisation
{
public:
    AffichagePersonnalisation() {};
    AffichagePersonnalisation(std::wstring espace, std::pair<std::wstring, std::wstring> labelsHeure, std::pair<std::wstring, std::wstring> labelsMinute) :
        m_espace1(espace), m_espace2(espace), m_espace3(espace), m_labelsHeure(labelsHeure), m_labelsMinute(labelsMinute) {};
 
    std::wstring m_espace1{ L" " };
    std::wstring m_espace2{ L" " };
    std::wstring m_espace3{ L" " };
 
    std::pair<std::wstring, std::wstring> m_labelsHeure{ L"h", L"h" };
    std::pair<std::wstring, std::wstring> m_labelsMinute{ L"min", L"min" };
 
    std::vector<std::wstring> m_keyColor{ L"\x1b[94;1m", L"\x1b[38;2;0;255;0m", L"\x1b[38;2;255;0;0m", L"\x1b[38;2;255;255;0m" };
    std::wstring m_valuesColor{ L"\x1b[38;2;255;255;255m" };
};
...
...
...
 
const void SequenceVisionnage_film::AffichagePersonnaliser_Film(AffichagePersonnalisation perso)
{
    m_espace1 = perso.m_espace1;
    m_labelHeureSingulier = perso.m_labelsHeure.first;
    m_labelHeurePluriel = perso.m_labelsHeure.second;
    m_espace2 = perso.m_espace2;
    m_espace3 = perso.m_espace3;
    m_labelMinuteSingulier = perso.m_labelsMinute.first;
    m_labelMinutePluriel = perso.m_labelsMinute.second;
 
    m_keyColor = perso.m_keyColor;
    m_valuesColor = perso.m_valuesColor;
}
...
...
...
const void Film::AffichagePersonnaliser_Film(AffichagePersonnalisation perso)
{
    m_espace1 = perso.m_espace1;
    m_labelHeureSingulier = perso.m_labelsHeure.first;
    m_labelHeurePluriel = perso.m_labelsHeure.second;
    m_espace2 = perso.m_espace2;
    m_espace3 = perso.m_espace3;
    m_labelMinuteSingulier = perso.m_labelsMinute.first;
    m_labelMinutePluriel = perso.m_labelsMinute.second;
 
    m_keyColor = perso.m_keyColor;
    m_valuesColor = perso.m_valuesColor;
}
...
...
...
const void Serie::AffichagePersonnaliser_Serie(AffichagePersonnalisation perso)
{
    m_espace1 = perso.m_espace1;
    m_labelHeureSingulier = perso.m_labelsHeure.first;
    m_labelHeurePluriel = perso.m_labelsHeure.second;
    m_espace2 = perso.m_espace2;
    m_espace3 = perso.m_espace3;
    m_labelMinuteSingulier = perso.m_labelsMinute.first;
    m_labelMinutePluriel = perso.m_labelsMinute.second;
 
    m_keyColor = perso.m_keyColor;
    m_valuesColor = perso.m_valuesColor;
}
Putain de copier-coller qui fait qu'on doit faire des modifications partout à la moindre "amélioration" du code.
Arrêtez les copier-coller !!!

Exemple d'utilisation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
...
AffichagePersonnalisation perso_short_minuscule = AffichagePersonnalisation{};
AffichagePersonnalisation perso_short_majuscule = AffichagePersonnalisation{L"", { L"H", L"H" },{ L"MIN", L"MIN" }};
AffichagePersonnalisation perso_short_pascalCase = AffichagePersonnalisation{L"", { L"H", L"H" },{ L"Min", L"Min" }};
AffichagePersonnalisation perso_long_minuscule = AffichagePersonnalisation{L"", { L"heure", L"heures" },{ L"minute", L"minutes" }};
AffichagePersonnalisation perso_long_majuscule = AffichagePersonnalisation{L"", { L"HEURE", L"HEURES" },{ L"MINUTE", L"MINUTES" } };
AffichagePersonnalisation perso_long_pascalCase = AffichagePersonnalisation{L"", { L"Heure", L"Heures" },{ L"Minute", L"Minutes" }};

AffichagePersonnalisation person = getCurrentAffichagePersonnalisation();//fonction à implémenter pour récupérer la configuration de personnalisation de l'utilisateur.
...

// j'ai rien compris à votre gestion des couleurs ni de vos espaces !!!!
---------------------

Post du "02/11/2024, 22h39"

Code : Sélectionner tout - Visualiser dans une fenêtre à part
AffichagePersonnalisation getCurrentAffichagePersonnalisation()...
Toujours du code qui sert à rien !!!

Mais (film.cpp) :
Pourquoi autant de groupes de constantes qui se répètent ???
(Dans les versions suivantes du code sous GitHub, ça se calme mais faites attention quand vous ajoutez du code, évitez les copier-coller à l'aveugle.)

date_year_month_day_format : format d'une date contenant l'année, le mois et le jour
date_month_day_format : format d'une date contenant le mois et le jour (pas l'année)
date_day_format : format d'une date contenant juste le jour (pas le mois ni l'année)
Leur nom et leur valeur ne vous indique pas assez à quoi elles servent ???

Les autres formats sont construits à partir de ces formats.

Vous avez "déplié" dans la valeur de la variable "filename_format_rg" les différents formats possibles, mais vous trouverez dedans les valeurs de "date_year_month_day_format", de "date_month_day_format" et de "date_day_format".
Attention avec cette version dépliée qui est, je trouve, plus compliquée à maintenir (mais c'est vrai que c'est peut-être plus simple pour compter/numéroter les captures).

Attention, dans vos exemples de test, il y a l'extension du nom du fichier.
Dans le code, c'est la partie "stem" (la tige : nom du fichier sans l'extension) du nom du fichier qui est utilisé.
Mais cela montre bien comment les captures (group) se numérotent et aussi que le nom du "stream" est dans la capture 12, pas 11.

---------------------

Post du "03/11/2024, 13h27"

Pourquoi ajouter "_Film" ou "_Serie" à des noms de fonction qui font déjà partie de la classe Film ou de la classe Serie ???
Ca sert juste à complexifier le code.
Ces fonctions "Personnalisent l'affichage", point barre.
Donc appelez ces fonctions "AffichagePersonnaliser" tout court !!!

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
void SequenceVisionnage::Print()
{
...
    if (m_numero == 1) // ???
    {
C'est quoi ce numéro à la con qui se balade et qui s'incrémente à chaque appel de la fonction "Print", en commençant à -1 ???
Réfléchissez avant d'implémenter un truc sans queue ni tête.

Et pourquoi mettre dans la variable "duree_str" un truc qui n'a rien à voir avec l'affichage de la durée ?
Vous aimez bien vous tirer des balles dans le pied ???

C'est quoi ce numéro ?
Pourquoi doit-il changer au cour de la "vie" de l'objet et pas fixe depuis sa création ?

---------------------

Post du "03/11/2024, 23h03"

Idem : Pourquoi ajouter "_Film" ou "_Serie" à des noms de fonction qui font déjà partie de la classe Film ou de la classe Serie ???

Ok ! Mais, bon ! Pouvez-vous expliquer ?
Par exemple :
const void SequenceVisionnage_film::AffichagePersonnaliser_Film(AffichagePersonnalisation perso)
Par :
Set(...) ou
Get(...)
Expliquer QUOI, SVP ?
On veut personnaliser l'affichage d'un objet, bin on crée une fonction "AffichagePersonnaliser" membre de la classe de l'objet, et on passe en paramètre de quoi "personnaliser son affichage", c'est tout.
Si la classe de l'objet avant un champ "PersonnalisationDeLAffichage", on pourrait renommer "AffichagePersonnaliser" en "SetPersonnalisationDeLAffichage" mais quid du type de ce champ ?
"AffichagePersonnaliser" est moins invasif sur la structure interne de l'objet qu'une fonction nommée "SetPersonnalisationDeLAffichage", qui impose logiquement (c'est pas une obligation, mais c'est plus "logique") un champ nommé "m_PersonnalisationDeLAffichage".
Pensez une classe comme un fournisseur de services et la fonction "AffichagePersonnaliser" comme un service qui permet de personnaliser l'affichage de l'objet.

Je tiens quand même à dire que, depuis le début, je vous préviens que le code d'affichage de ces objet n'a rien à foutre dans ces objets/classes (qui sont des objets/classes "métier", et pas des classes pour Interface Homme-Machine).

Ainsi :
const void Serie::AffichagePersonnaliser_Serie(AffichagePersonnalisation perso) ===> struct Saison, struct Episode, struct SequenceVisionnage et struct InfosVisionnage !!!
Putain, arrêtez de mettre des "const" devant des "void" ou des "class", ça n'a aucun putain de sens, BORDEL !!!
Quelle est la question ?
Si c'est comment faire en sorte que la personnalisation d'affichage d'un objet "Serie" se propage aux objets qu'il "gèrent".
Le plus naturel, c'est de propager cette personnalisation à ces objets :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
const void Serie::AffichagePersonnaliser(AffichagePersonnalisation& perso)
{
...
     for (auto& saison : saisons)
    {
        saison.AffichagePersonnaliser(perso);
    }   
}
(Attention, ici, on ne gère pas si une saison est ajoutée après la personnalisation de l'affichage de la série : revoir le Design de la classe pour cela)
Et ainsi de suite.
Mais le plus simple, c'est que ces objets ne gèrent pas leur affichage !!!
---------------------

Post du "04/11/2024, 15h59"

Bonjour,

Ni Set(...), ni Get(...) !!!

Et sans std::wstring Print_Dates_de_visionnage(std::vector<DateRecord>& m_DatesVisionnage) !!!
Quelle est la question ???
Pourquoi supprimer une des rares fonctions qui n'est pas un simple copier-coller d'une autre, et qui apporte un vrai "plus" ???
---------------------

Post du "05/11/2024, 10h58"

Il faudrait renommer la fonction "initialiser_Avec" avec un nom plus correct.
Comme "extraireListeDePaireDepuisContenuFichier", non ?
Peu de Valeur Ajoutée à la fonction "lire_paireCleValeur_depuisFichierTxt", non ?

Mais vous avez eu le réflexe de factoriser le code, c'est très très bien !!!
---------------------

Post du "05/11/2024, 22h48"

C'est complètement nimportnawak.
Reprenez l'ancien code et ne corrigez que la valeur d'une seule constante.
Votre post du "02/11/2024, 22h39" donne mais le moyen de vérifier les valeurs de ces constantes !!!