#RequireAdmin #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_icon=Rename\Rename.ico #AutoIt3Wrapper_outfile=Rename.exe #AutoIt3Wrapper_Res_Fileversion=1.0.0.0 #AutoIt3Wrapper_Res_Field=Nom (short)|Rename #AutoIt3Wrapper_Res_Field=Nom (long)|Rename #AutoIt3Wrapper_Res_Field=Version (short)|1.0 #AutoIt3Wrapper_Res_Field=Version (long)|1.0.0.0 #AutoIt3Wrapper_Res_Field=Description|Module de renommage de fichiers #AutoIt3Wrapper_Res_Field=Type|Rename #AutoIt3Wrapper_Res_Field=Auteur|ZDS [Equipe nAiO] #AutoIt3Wrapper_Res_Field=Site|http://www.naio.fr #AutoIt3Wrapper_Res_SaveSource=n #AutoIt3Wrapper_UseUpx=n #AutoIt3Wrapper_Res_Language=1036 #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ; Entête du module Global Const _ $MODULE_NOM = "Rename", $MODULE_AUTEUR = "ZDS", $MODULE_VERSION = "1.0", $MODULE_DIR = @ScriptDir&"\"&StringRegExpReplace(@ScriptName, "\.[^\.]+$","") Global Const _ $DEBUG_MODE = (FileExists("debug.txt")=1) #Region Librairies AutoIt ; Classic #Include #Include #Include ; Extended #include #Include #Include #Include #Include #EndRegion #Region Librairies nAiO ;~ #Include ".\Rename\Compilation.au3" Func si($cond, $true, $false) If $cond Then Return $true Return $false EndFunc Func min($a, $b) Return si($a<$b,$a,$b) EndFunc Func max($a, $b) Return si($a>$b,$a,$b) EndFunc Func state($control, $state) Return BitAND(GUICtrlGetState($control),$state) = $state EndFunc #EndRegion ; Initialisation Global Const $fichierCfg = $MODULE_DIR&"\"&$MODULE_NOM&".ini" _Crypt_Startup() #Region Préparation des paramètres Global $dossier, $filtre, $enable_pattern_saison, $pattern_saison, $enable_pattern_episode, $pattern_episode, $pattern_remplacement, $suffixe_HD, $suffixe_VoStFr chargerDonnees() #EndRegion Local $sortie = gui_Rename() _Crypt_Shutdown() Exit $sortie ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; #Region Interface Func gui_Rename() ; Interface Local $GUI_size[2] = [800,600], $IMG_size[2] = [24,24] Local $GUI = GUICreate($MODULE_NOM, $GUI_size[0], $GUI_size[1], Default, Default, 0x80800000) ; $WS_POPUP = 0x80000000 , $WS_BORDER = 0x00800000 GUISetIcon($MODULE_DIR&"\"&$MODULE_NOM&".ico") TraySetIcon($MODULE_DIR&"\"&$MODULE_NOM&".ico") Local $Label_Titre = GUICtrlCreateLabel(WinGetTitle($GUI), 5, 5, $GUI_size[0]-70, 25, Default, 0x00100000) ; $GUI_WS_EX_PARENTDRAG = 0x00100000 GUICtrlSetBkColor($Label_Titre, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2 GUICtrlSetFont($Label_Titre, 15, 800) Local $Bouton_Configurer = GUICtrlCreateButton("@", $GUI_size[0]-30-30, 5, 25, 25) GUICtrlSetFont($Bouton_Configurer, 14, 400, 1, "Webdings") GUICtrlSetTip($Bouton_Configurer, "Configurer le module") Local $Bouton_Quitter = GUICtrlCreateButton("X", $GUI_size[0]-30, 5, 25, 25) GUICtrlSetFont($Bouton_Quitter, Default, 800) GUICtrlSetTip($Bouton_Quitter, "Quitter le module") Local $Label_Separateur1 = GUICtrlCreateLabel("", 5, 35-1, $GUI_size[0]-10, 1) GUICtrlSetBkColor($Label_Separateur1, 0x000000) ; Ligne n°1 Local $Label_Intitule = GUICtrlCreateLabel("Dossier à renommer", 5, 40+3, 120, 20) GUICtrlSetBkColor($Label_Intitule, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2 Local $Label_DeuxPoints = GUICtrlCreateLabel(":", 125, 40+3, 10, 20) GUICtrlSetBkColor($Label_DeuxPoints, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2 Local $Bouton_Dossier = GUICtrlCreateButton($dossier, 135, 40-1, $GUI_size[0]-140-105-105, 22) GUICtrlSetTip($Bouton_Dossier, "Choisir un dossier à scanner") ; Ligne n°1 : Filtre Local $Input_Filtre = GUICtrlCreateInput($filtre, $GUI_size[0]-105-105, 40-1, 100, 22) GUICtrlSetTip($Input_Filtre, "Choisir un filtre à appliquer sur le dossier à scanner") ; Ligne n°2 Local $Label_Intitule = GUICtrlCreateLabel("RegExp de la saison", 5, 65+3, 120, 20) GUICtrlSetBkColor($Label_Intitule, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2 Local $Label_DeuxPoints = GUICtrlCreateLabel(":", 125, 65+3, 10, 20) GUICtrlSetBkColor($Label_DeuxPoints, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2 Local $Checkbox_EnablePatternSaison = GUICtrlCreateCheckbox("", 135, 65, 15, 20) GUICtrlSetBkColor($Checkbox_EnablePatternSaison, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2 GUICtrlSetState($Checkbox_EnablePatternSaison, si($enable_pattern_saison, $GUI_CHECKED, $GUI_UNCHECKED)) GUICtrlSetTip($Checkbox_EnablePatternSaison, "Sélectionner pour pouvoir isoler un numéro de saison") Local $Input_PatternSaison = GUICtrlCreateInput($pattern_saison, 155, 65-1, $GUI_size[0]-140-105-20, 22) GUICtrlSetTip($Input_PatternSaison, "Choisir une RegExp pour la selection de la saison") ; Ligne n°3 Local $Label_Intitule = GUICtrlCreateLabel("RegExp de l'épisode", 5, 90+3, 120, 20) GUICtrlSetBkColor($Label_Intitule, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2 Local $Label_DeuxPoints = GUICtrlCreateLabel(":", 125, 90+3, 10, 20) GUICtrlSetBkColor($Label_DeuxPoints, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2 Local $Checkbox_EnablePatternEpisode = GUICtrlCreateCheckbox("", 135, 90, 15, 20) GUICtrlSetBkColor($Checkbox_EnablePatternEpisode, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2 GUICtrlSetState($Checkbox_EnablePatternEpisode, si($enable_pattern_episode, $GUI_CHECKED, $GUI_UNCHECKED)) GUICtrlSetTip($Checkbox_EnablePatternEpisode, "Sélectionner pour pouvoir isoler un numéro d'épisode") Local $Input_PatternEpisode = GUICtrlCreateInput($pattern_episode, 155, 90-1, $GUI_size[0]-140-105-20, 22) GUICtrlSetTip($Input_PatternEpisode, "Choisir une RegExp pour la selection de l'épisode") ; Ligne n°4 Local $Label_Intitule = GUICtrlCreateLabel("Pattern de remplacement", 5, 115+3, 120, 20) GUICtrlSetBkColor($Label_Intitule, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2 Local $Label_DeuxPoints = GUICtrlCreateLabel(":", 125, 115+3, 10, 20) GUICtrlSetBkColor($Label_DeuxPoints, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2 Local $Input_PatternRemplacement = GUICtrlCreateInput($pattern_remplacement, 135, 115-1, $GUI_size[0]-140-105-105, 22) GUICtrlSetTip($Input_PatternRemplacement, "Choisir un modèle pour le nom du fichier"&@CRLF&@CRLF&"%sX% : Numéro de la saison tronqué à X caractères"&@CRLF&"%eX% : Numéro de l'épisode tronqué à X caractères"&@CRLF&"(si non renseigné, X=2)") ; Ligne n°4 : Checkbox Local $Checkbox_HD = GUICtrlCreateCheckbox("HD", $GUI_size[0]-105-105, 115-1, 35, 22) GUICtrlSetBkColor($Checkbox_HD, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2 GUICtrlSetState($Checkbox_HD, si($suffixe_HD, $GUI_CHECKED, $GUI_UNCHECKED)) GUICtrlSetTip($Checkbox_HD, "Sélectionner si le fichier est en Haute-Définition") Local $Checkbox_VoStFr = GUICtrlCreateCheckbox("VoStFr", $GUI_size[0]-60-105, 115-1, 55, 22) GUICtrlSetBkColor($Checkbox_VoStFr, -2) ; $GUI_BKCOLOR_TRANSPARENT = -2 GUICtrlSetState($Checkbox_VoStFr, si($suffixe_VoStFr, $GUI_CHECKED, $GUI_UNCHECKED)) GUICtrlSetTip($Checkbox_VoStFr, "Sélectionner si le fichier est en VO soustitrée en français") ; Boutons Local $Bouton_Scanner = GUICtrlCreateButton("Scan", $GUI_size[0]-105, 40, 100, 45) GUICtrlSetState($Bouton_Scanner, si(FileExists($dossier),$GUI_ENABLE,$GUI_DISABLE)) GUICtrlSetTip($Bouton_Scanner, "Lancer la procédure de scan du dossier") Global $Bouton_Renommer = GUICtrlCreateButton("Renommer", $GUI_size[0]-105, 90, 100, 45) GUICtrlSetState($Bouton_Renommer, $GUI_DISABLE) GUICtrlSetTip($Bouton_Renommer, "Lancer la procédure de renommage des fichiers") Local $Label_Separateur2 = GUICtrlCreateLabel("", 5, 140-1, $GUI_size[0]-10, 1) GUICtrlSetBkColor($Label_Separateur2, 0x000000) ; Liste de valeurs à afficher Global $Listview_Fichiers = GuiCtrlCreateListView("|Nom du fichier|S|E|Nom du fichier renommé", 5, 145, $GUI_size[0]-10, $GUI_size[1]-145-25-5, BitOR($WS_EX_CLIENTEDGE, $LVS_SHOWSELALWAYS), BitOR($LVS_EX_CHECKBOXES, $LVS_EX_FULLROWSELECT)) GUICtrlSetTip($Bouton_Renommer, "Cocher les fichiers à renommer") ; Tailles des colonnes _GUICtrlListView_SetColumnWidth($Listview_Fichiers, 0, 22) _GUICtrlListView_SetColumnWidth($Listview_Fichiers, 1, 300) _GUICtrlListView_SetColumnWidth($Listview_Fichiers, 2, 30) _GUICtrlListView_SetColumnWidth($Listview_Fichiers, 3, 30) _GUICtrlListView_SetColumnWidth($Listview_Fichiers, 4, $GUI_size[0]-10-22-300-30-30-20) ; Progression Global $Label_Infos = GUICtrlCreateLabel("", 5, $GUI_size[1]-25+2, $GUI_size[0]-300-15, 20) GUICtrlSetBkColor($Label_Infos, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont($Label_Infos, 10) Global $ProgressBar_Infos = GUICtrlCreateProgress($GUI_size[0]-300-5,$GUI_size[1]-25, 300, 20) ; Traitement GUISetState() _GUICtrlListView_RegisterSortCallBack($Listview_Fichiers) GUIRegisterMsg($WM_NOTIFY, "notify") Local $stop = False, $count = 0, $Lancer_Scanner = False, $Lancer_Renommer = False, $previous_patterns = "" While Not $stop $msg = GUIGetMsg() Switch $msg Case -3, $Bouton_Quitter ; $GUI_EVENT_CLOSE = -3 $stop = True Case $Bouton_Configurer GUISetState(@SW_HIDE, $GUI) ; Création de la fenêtre Local $GUICONFIG = GUICreate($MODULE_NOM&" v"&$MODULE_VERSION, 300, 250, Default, Default, 0x80800000) ; $WS_POPUP = 0x80000000 , $WS_BORDER = 0x00800000 GUISetIcon($MODULE_DIR&"\"&$MODULE_NOM&".ico", Default, $GUICONFIG) ; Déclaration des éléments graphiques Local $GUICONFIG_TITRE = GUICtrlCreateLabel($MODULE_NOM&" : Configuration", 5, 5, 230, 25, Default, 0x00100000) ; $GUI_WS_EX_PARENTDRAG = 0x00100000 GUICtrlSetBkColor($GUICONFIG_TITRE, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetFont($GUICONFIG_TITRE, 15, 800) GUICtrlSetResizing($GUICONFIG_TITRE, $GUI_DOCKLEFT+$GUI_DOCKTOP+$GUI_DOCKRIGHT+$GUI_DOCKHEIGHT) Local $GUICONFIG_QUITTER = GUICtrlCreateButton("û", 270, 5, 25, 25) GUICtrlSetFont($GUICONFIG_QUITTER, 18, 400, 1, "Wingdings") GUICtrlSetTip($GUICONFIG_QUITTER, "Quitter la configuration") GUICtrlSetResizing($GUICONFIG_QUITTER, $GUI_DOCKRIGHT+$GUI_DOCKTOP+$GUI_DOCKWIDTH+$GUI_DOCKHEIGHT) Local $GUICONFIG_SEPARATEUR = GUICtrlCreateLabel("", 5, 34, 290, 1) GUICtrlSetBkColor($GUICONFIG_SEPARATEUR, 0x000000) GUICtrlSetResizing($GUICONFIG_SEPARATEUR, $GUI_DOCKLEFT+$GUI_DOCKTOP+$GUI_DOCKRIGHT+$GUI_DOCKHEIGHT) Local $GUICONFIG_DONNEES = GUICtrlCreateEdit("", 5, 40, 290, 205) GUICtrlSetData($GUICONFIG_DONNEES, getDonnees()) GUICtrlSetFont($GUICONFIG_DONNEES, Default, Default, Default, "Courier New") GUICtrlSetTip($GUICONFIG_DONNEES, "Données structurées au format INI pour"&@CRLF&"la configuration du module '"&$MODULE_NOM&"'."&@CRLF&"(Attention : réservé aux connaisseurs)", "Données de configuration") GUICtrlSetResizing($GUICONFIG_DONNEES, $GUI_DOCKLEFT+$GUI_DOCKTOP+$GUI_DOCKRIGHT+$GUI_DOCKBOTTOM) ; Démarrage de l'affichage GUISetState(@SW_SHOW, $GUICONFIG) ; Traitement Local $config_stop = False While Not $config_stop Local $config_msg = GUIGetMsg() Switch $config_msg Case $GUI_EVENT_CLOSE, $GUICONFIG_QUITTER Local $flux = FileOpen($fichierCfg,10) If @error = 0 Then FileWrite($flux, GUICtrlRead($GUICONFIG_DONNEES)) FileClose($flux) chargerDonnees() $config_stop = True EndIf Case Else ; Rien EndSwitch WEnd GUISetState(@SW_HIDE, $GUICONFIG) GUIDelete($GUICONFIG) Local $reponse = MsgBox(4, $MODULE_NOM, "Relancer le scan?") ; Finalisation GUISetState(@SW_SHOW, $GUI) GUICtrlSetData($Bouton_Dossier, $dossier) GUICtrlSetData($Input_Filtre, $filtre) GUICtrlSetState($Checkbox_EnablePatternSaison, si($enable_pattern_saison, $GUI_CHECKED, $GUI_UNCHECKED)) GUICtrlSetData($Input_PatternSaison, $pattern_saison) GUICtrlSetState($Checkbox_EnablePatternEpisode, si($enable_pattern_episode, $GUI_CHECKED, $GUI_UNCHECKED)) GUICtrlSetData($Input_PatternEpisode, $pattern_episode) GUICtrlSetData($Input_PatternRemplacement, $pattern_remplacement) GUICtrlSetState($Bouton_Scanner, si(FileExists($dossier), $GUI_ENABLE, $GUI_DISABLE)) $Lancer_Scanner = ($reponse = 6) Case $Bouton_Dossier Local $folder = FileSelectFolder("Choisissez un dossier :", "", Default, @ScriptDir, $GUI) If Not @error Then If FileExists($folder) Then $dossier = $folder GUICtrlSetData($Bouton_Dossier, $folder) GUICtrlSetState($Bouton_Scanner, si(FileExists(GUICtrlRead($Bouton_Dossier)), $GUI_ENABLE, $GUI_DISABLE)) Else MsgBox(0, $MODULE_NOM, "Dossier choisi incorrect", 10, $GUI) EndIf EndIf Case $Bouton_Scanner $Lancer_Scanner = True Case $Bouton_Renommer $Lancer_Renommer = True Case Else ; Scanner If $Lancer_Scanner = True Then $Lancer_Scanner = False Local $lock = _GUICtrlListView_BeginUpdate($Listview_Fichiers) If $lock Then If Not FileExists($dossier) Then MsgBox(64, $MODULE_NOM, "Dossier introuvable", 30, $GUI) Else GUICtrlSetData($ProgressBar_Infos, 0) _GUICtrlListView_DeleteAllItems($Listview_Fichiers) Local $vide[1] = [0], $liste = _FileListToArray($dossier, $filtre, 1) If @error Then $liste = $vide For $i = 1 To $liste[0] addToListView($Listview_Fichiers, $liste[$i]) GUICtrlSetData($ProgressBar_Infos, 100*($i-0.5)/$liste[0]) Next GUICtrlSetData($Label_Infos, "Scan effectué : "&$liste[0]&" fichier"&si($liste[0]>1,"s","")) If $liste[0] = 0 Then GUICtrlSetData($ProgressBar_Infos, 0) MsgBox(64, $MODULE_NOM, "Aucun fichier", 30, $GUI) Else GUICtrlSetData($ProgressBar_Infos, 100) EndIf $previous_patterns = "" EndIf EndIf _GUICtrlListView_EndUpdate($Listview_Fichiers) EndIf ; Renommer If $Lancer_Renommer = True Then $Lancer_Renommer = False Local $lock = _GUICtrlListView_BeginUpdate($Listview_Fichiers), $liste[1][2] = [[0]] If $lock Then GUICtrlSetData($ProgressBar_Infos, 0) For $i = 0 To _GUICtrlListView_GetItemCount($Listview_Fichiers)-1 Local $check = _GUICtrlListView_GetItemChecked($Listview_Fichiers, $i), $filename_in = _GUICtrlListView_GetItemText($Listview_Fichiers, $i, 1), $filename_out = _GUICtrlListView_GetItemText($Listview_Fichiers, $i, 4) If $check And $filename_in <> $filename_out Then $liste[0][0] = $liste[0][0]+1 ReDim $liste[$liste[0][0]+1][2] $liste[$liste[0][0]][0] = $dossier&"\"&$filename_in $liste[$liste[0][0]][1] = $dossier&"\"&$filename_out EndIf Next If $liste[0][0] > 0 Then Local $reponse = MsgBox(262144+256+48+4, $MODULE_NOM&" v"&$MODULE_VERSION, "Nombre d'éléments à renommer : " & $liste[0][0] & @CRLF & @CRLF & "Confirmer la procédure ?", 30, $GUI), $ok = 0 If $reponse = 6 Then For $i = 1 To $liste[0][0] $ok += FileMove($liste[$i][0],$liste[$i][1]) GUICtrlSetData($ProgressBar_Infos, 100*($i-0.5)/$liste[0][0]) Next GUICtrlSetData($ProgressBar_Infos, 100) If $ok <> $liste[0][0] Then MsgBox(262144+16, $MODULE_NOM&" v"&$MODULE_VERSION, "Erreur lors de la procédure") EndIf EndIf Else MsgBox(262144+16, $MODULE_NOM&" v"&$MODULE_VERSION, "Aucun élément à renommer") EndIf EndIf _GUICtrlListView_EndUpdate($Listview_Fichiers) EndIf ; Modification des valeurs If $filtre <> GUICtrlRead($Input_Filtre) Then $filtre = GUICtrlRead($Input_Filtre) ; Modification importante des valeurs If $enable_pattern_saison <> GUICtrlIsState($Checkbox_EnablePatternSaison, $GUI_CHECKED, True) Then $enable_pattern_saison = GUICtrlIsState($Checkbox_EnablePatternSaison, $GUI_CHECKED, True) If $pattern_saison <> GUICtrlRead($Input_PatternSaison) Then $pattern_saison = GUICtrlRead($Input_PatternSaison) If $enable_pattern_episode <> GUICtrlIsState($Checkbox_EnablePatternEpisode, $GUI_CHECKED, True) Then $enable_pattern_episode = GUICtrlIsState($Checkbox_EnablePatternEpisode, $GUI_CHECKED, True) If $pattern_episode <> GUICtrlRead($Input_PatternEpisode) Then $pattern_episode = GUICtrlRead($Input_PatternEpisode) If $pattern_remplacement <> GUICtrlRead($Input_PatternRemplacement) Then $pattern_remplacement = GUICtrlRead($Input_PatternRemplacement) If $suffixe_HD <> GUICtrlIsState($Checkbox_HD, $GUI_CHECKED, True) Then $suffixe_HD = GUICtrlIsState($Checkbox_HD, $GUI_CHECKED, True) If $suffixe_VoStFr <> GUICtrlIsState($Checkbox_VoStFr, $GUI_CHECKED, True) Then $suffixe_VoStFr = GUICtrlIsState($Checkbox_VoStFr, $GUI_CHECKED, True) If $previous_patterns <> $enable_pattern_saison&"#"&$pattern_saison&"#"&$enable_pattern_episode&"#"&$pattern_episode&"#"&$pattern_remplacement&"#"&$suffixe_HD&"#"&$suffixe_VoStFr Then $previous_patterns = $enable_pattern_saison&"#"&$pattern_saison&"#"&$enable_pattern_episode&"#"&$pattern_episode&"#"&$pattern_remplacement&"#"&$suffixe_HD&"#"&$suffixe_VoStFr GUICtrlSetState($Input_PatternSaison, si($enable_pattern_saison, $GUI_ENABLE, $GUI_DISABLE)) GUICtrlSetState($Input_PatternEpisode, si($enable_pattern_episode, $GUI_ENABLE, $GUI_DISABLE)) Local $lock = _GUICtrlListView_BeginUpdate($Listview_Fichiers) If $lock Then For $i = 0 To _GUICtrlListView_GetItemCount($Listview_Fichiers)-1 Local $filename = _GUICtrlListView_GetItemText($Listview_Fichiers, $i, 1) Local $n_saison = StringRegExp($filename, $pattern_saison, 3) If @error Or Not IsDeclared("n_saison") Or Not IsArray($n_saison) Then $n_saison = "?" Else $n_saison = $n_saison[0] EndIf _GUICtrlListView_SetItemText($Listview_Fichiers, $i, $n_saison, 2) Local $n_episode = StringRegExp($filename, $pattern_episode, 3) If @error Or Not IsDeclared("n_episode") Or Not IsArray($n_episode) Then $n_episode = "?" Else $n_episode = $n_episode[0] EndIf Local $extension = StringRegExp($filename, "\.([^\.]+)$", 3) If @error Or Not IsDeclared("extension") Or Not IsArray($extension) Then $extension = "?" Else $extension = $extension[0] EndIf _GUICtrlListView_SetItemText($Listview_Fichiers, $i, $n_episode, 3) Local $state = (Not $enable_pattern_saison Or $n_saison <> "?") And (Not $enable_pattern_episode Or $n_episode <> "?") And $extension <> "?" _GUICtrlListView_SetItemChecked($Listview_Fichiers, $i, $state) If $state Then Local $renamed_filename = StringReplace(StringReplace($pattern_remplacement, "%s%", StringRight("0"&$n_saison,2)), "%e%", StringRight("0"&$n_episode,2)) For $j = 1 To 4 $renamed_filename = StringReplace(StringReplace($renamed_filename, "%s"&$j&"%", StringRight("000"&$n_saison,$j)), "%e"&$j&"%", StringRight("000"&$n_episode,$j)) Next Local $suffixe = "" If $suffixe_HD And $suffixe_VoStFr Then $suffixe = " [HD-VoStFr]" ElseIf $suffixe_HD Then $suffixe = " [HD]" ElseIf $suffixe_VoStFr Then $suffixe = " [VoStFr]" EndIf $renamed_filename = $renamed_filename&$suffixe&"."&$extension _GUICtrlListView_SetItemText($Listview_Fichiers, $i, $renamed_filename, 4) Else _GUICtrlListView_SetItemText($Listview_Fichiers, $i, $filename, 4) EndIf Next EndIf _GUICtrlListView_EndUpdate($Listview_Fichiers) EndIf EndSwitch WEnd GUIRegisterMsg($WM_NOTIFY, "") _GUICtrlListView_UnRegisterSortCallBack($Listview_Fichiers) sauvegarder() GUIDelete($GUI) Return 0 EndFunc #EndRegion Func sauvegarder() If Not FileExists($fichierCfg) Then Local $flux = FileOpen($fichierCfg, 10) If Not @error Then FileClose($flux) EndIf IniWrite($fichierCfg, $MODULE_NOM, "Dossier", $dossier) IniWrite($fichierCfg, $MODULE_NOM, "Filtre", $filtre) IniWrite($fichierCfg, $MODULE_NOM, "Enable_Pattern_Saison", si($enable_pattern_saison, "Y", "N")) IniWrite($fichierCfg, $MODULE_NOM, "Pattern_Saison", $pattern_saison) IniWrite($fichierCfg, $MODULE_NOM, "Enable_Pattern_Episode", si($enable_pattern_episode, "Y", "N")) IniWrite($fichierCfg, $MODULE_NOM, "Pattern_Episode", $pattern_episode) IniWrite($fichierCfg, $MODULE_NOM, "Pattern_Remplacement", $pattern_remplacement) IniWrite($fichierCfg, $MODULE_NOM, "Suffixe_HD", si($suffixe_HD, "Y", "N")) IniWrite($fichierCfg, $MODULE_NOM, "Suffixe_VoStFr", si($suffixe_VoStFr, "Y", "N")) EndFunc Func getDonnees() Local $resultat = "", $sections = IniReadSectionNames($fichierCfg) If Not @error And $sections[0] > 0 Then For $i = 1 To $sections[0] $resultat = $resultat & @CRLF & @CRLF & "["&$sections[$i]&"]" Local $values = IniReadSection($fichierCfg,$sections[$i]) If Not @error And $values[0][0] > 0 Then For $j = 1 To $values[0][0] $resultat = $resultat & @CRLF & $values[$j][0]&"="&$values[$j][1] Next EndIf Next EndIf Return StringStripWS($resultat,3) EndFunc Func chargerDonnees() $dossier = IniRead($fichierCfg, $MODULE_NOM, "Dossier", @ScriptDir) $filtre = IniRead($fichierCfg, $MODULE_NOM, "Filtre", "*.avi") $enable_pattern_saison = IniRead($fichierCfg, $MODULE_NOM, "Enable_Pattern_Saison", "N") <> "N" $pattern_saison = IniRead($fichierCfg, $MODULE_NOM, "Pattern_Saison", "(?i)s(\d+)") $enable_pattern_episode = IniRead($fichierCfg, $MODULE_NOM, "Enable_Pattern_Episode", "N") <> "N" $pattern_episode = IniRead($fichierCfg, $MODULE_NOM, "Pattern_Episode", "(?i)e(\d+)") $pattern_remplacement = IniRead($fichierCfg, $MODULE_NOM, "Pattern_Remplacement", "Nom - Saison %s% - Episode %e%") $suffixe_HD = IniRead($fichierCfg, $MODULE_NOM, "Suffixe_HD", "N") <> "N" $suffixe_VoStFr = IniRead($fichierCfg, $MODULE_NOM, "Suffixe_VoStFr", "N") <> "N" EndFunc Func addToListView($listview, $filename) Local $n = _GUICtrlListView_GetItemCount($listview) Local $item = GUICtrlCreateListViewItem($n&"|"&$filename&"|"&"?"&"|"&"?"&"|"&$filename, $listview) EndFunc Func notify($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam Local $structure = DllStructCreate($tagNMHEADER, $lParam) If (HWnd(DllStructGetData($structure, "hWndFrom")) = GUICtrlGetHandle($Listview_Fichiers)) Then Switch DllStructGetData($structure, "Code") Case $LVN_COLUMNCLICK ; Clic sur colonne Local $lock = _GUICtrlListView_BeginUpdate($Listview_Fichiers) If $lock Then GUICtrlSetState($Bouton_Renommer, $GUI_DISABLE) Local $tInfo = DllStructCreate($tagNMLISTVIEW, $lParam) If _GUICtrlListView_GetItemCount($Listview_Fichiers) = 0 Then ; Aucun fichier ElseIf DllStructGetData($tInfo, "SubItem") > 0 Then _GUICtrlListView_SortItems(GUICtrlGetHandle($Listview_Fichiers), DllStructGetData($tInfo, "SubItem")) Else For $i = 0 To _GUICtrlListView_GetItemCount($Listview_Fichiers)-1 Local $state = _GUICtrlListView_GetItemChecked($Listview_Fichiers, $i) _GUICtrlListView_SetItemChecked($Listview_Fichiers, $i, Not $state) If Not $state Then GUICtrlSetState($Bouton_Renommer, $GUI_ENABLE) Next EndIf EndIf _GUICtrlListView_EndUpdate($Listview_Fichiers) Case $HDN_BEGINTRACKW ; Colonne redimensionnée Local $column = DllStructGetData($structure, "Item"), $blocked = "023" Return StringInStr($blocked, $column) Case $LVN_ITEMCHANGED Local $tInfo = DllStructCreate($tagNMLISTVIEW, $lParam), $index = DllStructGetData($tInfo, "Item") _GUICtrlListView_SetItemSelected($Listview_Fichiers, $index, False) GUICtrlSetState($Bouton_Renommer, $GUI_DISABLE) For $i = 0 To _GUICtrlListView_GetItemCount($Listview_Fichiers)-1 If _GUICtrlListView_GetItemChecked($Listview_Fichiers, $i) Then GUICtrlSetState($Bouton_Renommer, $GUI_ENABLE) Next EndSwitch EndIf Return $__LISTVIEWCONSTANT_GUI_RUNDEFMSG EndFunc Func sousmenu($handle, $context, $target = 0) If @NumParams = 2 Or $target = 0 Then DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", GUICtrlGetHandle($context), "int", 0, "int", MouseGetPos(0), "int", MouseGetPos(1), "hwnd", $handle, "ptr", 0) Else Local $position = ControlGetPos($handle, "", $target), $coords = DllStructCreate("int;int") DllStructSetData($coords, 1, $position[0]+10) DllStructSetData($coords, 2, $position[1]+10) DllCall("user32.dll", "int", "ClientToScreen", "hwnd", $handle, "ptr", DllStructGetPtr($coords)) DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", GUICtrlGetHandle($context), "int", 0, "int", DllStructGetData($coords, 1), "int", DllStructGetData($coords, 2), "hwnd", $handle, "ptr", 0) EndIf EndFunc Func GUICtrlIsState($control, $state, $read = False) If $read Then Return BitAND(GUICtrlRead($control), $state) = $state Else Return BitAND(GUICtrlGetState($control), $state) = $state EndIf EndFunc