Enregistrement programmé et plannificateur de tâches

Des bugs, où ça ?
lolo_32
Administrateur du site et développeur
Messages : 527
Enregistré le : 22 juil. 2007, 21:46
Carte Tuner : Hauppauge HVR-1300 et HVR-900, et EyeTV Diversity
Êtes-vous un robot ? : Je ne suis pas un robot
Localisation : Dans le pays du fois gras (Gers)

Enregistrement programmé et plannificateur de tâches

Message par lolo_32 »

Pouchin TV Mod plante si l'on met un nom d'enregistrement contenant un caractère de nom de fichier invalide ("/", "\", ":", etc...) et que l'on coche l'option "Ajouter le programme aux tâches planifiées de Windows", car Pouchin essaie de créer un contenant ces caractères, et provoque un plantage. :cry:

Il serait bien de filtrer les caractères problématiques, et de les remplacer dans le planificateur par "-", par exemple.
lolo_32
Administrateur du site et développeur
Messages : 527
Enregistré le : 22 juil. 2007, 21:46
Carte Tuner : Hauppauge HVR-1300 et HVR-900, et EyeTV Diversity
Êtes-vous un robot ? : Je ne suis pas un robot
Localisation : Dans le pays du fois gras (Gers)

Correctif fonctionnel, mais pas forcément très beau

Message par lolo_32 »

Je me répond, car j'ai réussi à compiler avec Visual C++ 2005 Express, donc, j'ai testé la solution, et ça marche.

Voici le diff du fichier main.cpp:

Code : Tout sélectionner

--- PouchinTVMod_src_0.4_RC2/main.cpp   Mon Jun 18 11:53:20 2007
+++ Modifs/main.cpp     Sat Jul 28 17:36:13 2007
@@ -1168,6 +1168,18 @@
        }
 }
 
+
+/**
+ * Protège le nom de la tâche devant être créée
+ **/
+void protege_nom_tache(char* nom) {
+       for (size_t i =0; i<strlen(nom); i++) {
+               if(nom[i] == '/' || nom[i] == '\\' || nom[i] == ':' || nom[i] == '*' || nom[i] == '?' || nom[i] == '"' || nom[i] == '<' || nom[i] == '>') {
+                       nom[i] = '_';
+               }
+       }
+}
+
 static int add_programme(HWND hwndDlg, int sel)
 {
        char buffer[127];
@@ -1244,10 +1256,20 @@
                SystemTimeToFileTime(&sdebut, (LPFILETIME)&fdebut);
                fdebut = fdebut - (UINT64)600000000;
                FileTimeToSystemTime((LPFILETIME)&fdebut, &sdebut);
-               ajouter_tache(prog.nom, sdebut);
+
+               // Remplace les caracteres incorrects
+               char nom_tache[MAX_PATH + 1];
+               strcpy(nom_tache, prog.nom);
+               protege_nom_tache(nom_tache);
+               ajouter_tache(nom_tache, sdebut);
        } else {
                prog.tache = 0;
-               supprimer_tache(prog.nom);
+
+               // Remplace les caractères invalides
+               char nom_tache[MAX_PATH + 1];
+               strcpy(nom_tache, prog.nom);
+               protege_nom_tache(nom_tache);
+               supprimer_tache(nom_tache);
        }
 
        Programmes.insert(Programmes.begin() + sel, prog);
@@ -1264,6 +1286,7 @@
 
 static INT_PTR CALLBACK RecordDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {
 
+       char nom_tache[MAX_PATH + 1]; // pour le nom modifié de la tache
        int sel = -1;
        int n = (int)SendDlgItemMessage(hwndDlg, IDC_LIST_PROGRAMMES, LVM_GETITEMCOUNT, 0, 0);
        for(int i = 0; i < n; i++)
@@ -1399,7 +1422,11 @@
 
                                        if(sel != -1) {
                                                SendDlgItemMessage(hwndDlg, IDC_LIST_PROGRAMMES, LVM_DELETEITEM, sel, 0);
-                                               supprimer_tache(Programmes[sel].nom);
+
+                                               // Remplace les caractères invalides
+                                               strcpy(nom_tache, Programmes[sel].nom);
+                                               protege_nom_tache(nom_tache);
+                                               supprimer_tache(nom_tache);
                                                Programmes.erase(Programmes.begin() + sel);
                                        }
En espérant voie rapidement ce bug corrigé...
lolo_32
Administrateur du site et développeur
Messages : 527
Enregistré le : 22 juil. 2007, 21:46
Carte Tuner : Hauppauge HVR-1300 et HVR-900, et EyeTV Diversity
Êtes-vous un robot ? : Je ne suis pas un robot
Localisation : Dans le pays du fois gras (Gers)

Message par lolo_32 »

Je sais bien, ca le fait pas de se répondre à soi même, mais une version binaire avec ce correctifs, ainsi que d'autres trouvés sur ces forums, est dispo sur http://www.pouchintv.fr/
Modifié en dernier par Gingko le 25 déc. 2011, 09:31, modifié 1 fois.
Raison : Mise à jour de lien