Jump to content
Sign in to follow this  
AZJIO

Search duplicates

Recommended Posts

AZJIO

  Does Not work removing

need help

line 100

;  ;  @AZJIO 2010.07.7
#include <Crypt.au3>
#include <File.au3>
#include <Array.au3>

#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#NoTrayIcon
Global $Stack[50], $Stack1[50]
Global $aArr, $a, $MD5Path
HotKeySet('{ESC}', "_Quit")


$Gui = GUICreate("Search duplicates", 500, 444, -1, -1, 0x00040000, 0x00000010)
$CatchDrop = GUICtrlCreateInput("", 0, 0, 500, 440)
GUICtrlSetState(-1, 136)
GUICtrlSetResizing(-1, 1)
$StatusBar = GUICtrlCreateLabel(@CRLF&'Statusbar            AZJIO 2010.07.7', 5, 380, 480, 30)
GUICtrlSetResizing(-1, 512 + 256 + 64 + 2)
$restart = GUICtrlCreateButton("R", 480, 2, 18, 20)
GUICtrlSetTip(-1, "Restart")

GUICtrlCreateLabel("drag-and-drop", 200, 5, 160, 18)
GUICtrlSetResizing(-1, 3 + 32 + 256 + 512)

GUICtrlCreateLabel("Folder", 15, 5, 60, 17)
GUICtrlSetResizing(-1, 3 + 32 + 256 + 512)
$folder = GUICtrlCreateList("", 10, 25, 480, 100)
GUICtrlSetResizing(-1, 7 + 32 + 512)

; GUICtrlCreateLabel("Duplicates", 15, 130, 60, 18)
; GUICtrlSetResizing(-1, 3 + 32 + 256 + 512)
; $Dubl = GUICtrlCreateList ("", 10, 150, 480, 200)

$Dubl = _GUICtrlListView_Create($Gui, ' ', 10, 130, 480, 220, -1, -1, True)
_GUICtrlListView_SetExtendedListViewStyle($Dubl, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES,$LVS_OWNERDRAWFIXED))
_GUICtrlListView_SetBkColor($Dubl, 0xf0f0f0)
_GUICtrlListView_SetTextBkColor($Dubl, 0xf0f0f0)
_GUICtrlListView_EnableGroupView($Dubl)
_GUICtrlListView_SetColumn($Dubl, 0, 'Duplicates', 480)

;$Dubl = GUICtrlCreateListView(' ', 10, 150, 480, 200, $LVS_NOCOLUMNHEADER + $LVS_SHOWSELALWAYS, $LVS_EX_FULLROWSELECT + $LVS_EX_CHECKBOXES)
;GUICtrlSetBkColor(-1, 0xf0f0f0) ; 0xE0DFE3
;GUICtrlSetResizing($Dubl, 7 + 32 + 64)

; $Select = GUICtrlCreateButton("Select", 180, 355, 70, 25)
; GUICtrlSetResizing(-1, 512 + 256 + 64 + 4)
$Clear = GUICtrlCreateButton("Clear", 260, 355, 70, 25)
GUICtrlSetResizing(-1, 512 + 256 + 64 + 4)
$Search = GUICtrlCreateButton("Search", 340, 355, 70, 25)
GUICtrlSetResizing(-1, 512 + 256 + 64 + 4)
$Delete = GUICtrlCreateButton("Delete", 420, 355, 70, 25)
GUICtrlSetResizing(-1, 512 + 256 + 64 + 4)

$aSizePath=''
$folderList = ''

GUISetState()
_Crypt_Startup()

While 1
    $msg = GUIGetMsg()
    Select
        ; drag-and-drop
        Case $msg = -13
            $triger = 0
            If @GUI_DropId = $CatchDrop Then
                $aFolder = StringSplit(GUICtrlRead($CatchDrop), '|')
                $GuiPos = WinGetPos($Gui)
                GUICtrlSetPos($CatchDrop, $GuiPos[2], 0)
                GUICtrlSetData($CatchDrop, '')
                GUICtrlSetPos($CatchDrop, 0, 0)
                For $i = 1 To $aFolder[0]
                    If StringInStr(FileGetAttrib($aFolder[$i]), "D") = 0 Then
                        $triger = 1
                    Else
                        GUICtrlSetData($folder, StringRegExpReplace($aFolder[$i], '(?:.*)\\(.*), '\1'))
                        $folderList &= '|' & $aFolder[$i]
                    EndIf
                Next
            EndIf
            If $triger = 1 Then
                $triger = 0
                MsgBox(0, "Error", 'Only folders.')
            EndIf
            
        Case $msg = $Clear
            _GUICtrlListView_DeleteAllItems($Dubl)
            $folderList = ''
            GUICtrlSetData($folder, '')
            GUICtrlSetData($Dubl, '')
            $aSizePath = ''
            $aArr = ''
            $aArrT = ''
            $TempMD5 = ''
            $aArrOut = ''
            $aArrMD5 = ''
            
        Case $msg = $Delete
            GUICtrlSetData($StatusBar, 'Start Delete...')
            ;_GUICtrlListView_EnableGroupView($Dubl,False)
            ;_ArrayDisplay($aArrOut, "$aArrOut")
            For $i = 1 to $aArrOut[0][0]
            ;_ArrayDisplay(_GUICtrlListView_GetItem($Dubl, $i), "step "& $i)
            $zTrig=0
;MsgBox(0, 'Message', $aArrOut[0][0] &@CRLF& $i)
                If _GUICtrlListView_GetItemChecked($Dubl,$aArrOut[$i][0])=1 And FileExists($aArrOut[$i][1]) Then
;MsgBox(0, 'step - '&$i, $aArrOut[0][0]&' - total' &@CRLF& $aArrOut[$i][0]&' - ID'  &@CRLF&'Path - ' &$aArrOut[$i][1])
                    ; If $zTrig=1 And _GUICtrlListView_GetItemChecked($Dubl,$aArrOut[$i-1][0])=1 And FileExists($aArrOut[$i-1][1]) Then
                        ; $zTrig=0
                        ; FileDelete($aArrOut[$i-1][1])
                        ; _GUICtrlListView_DeleteItem($Dubl, $aArrOut[$i-1][0])
                    ; EndIf
                    ; $zTrig=1
                    FileDelete($aArrOut[$i][1])
                    _GUICtrlListView_DeleteItem($Dubl, $aArrOut[$i][0])
                    $aArrOut[$i][0]=''
                    $aArrOut[$i][1]=''
                EndIf
            Next
            ;_ArrayDisplay($aArrOut, "$aArrOut")
            GUICtrlSetData($StatusBar, 'Removed')
        Case $msg = $Search
            If $aSizePath<>'' Then
                _GUICtrlListView_DeleteAllItems($Dubl)
                GUICtrlSetData($Dubl, '')
                $aSizePath = ''
                $aArr = ''
                $aArrT = ''
                $TempMD5 = ''
                $aArrOut = ''
                $aArrMD5 = ''
            EndIf
            
            $aSizePath = ''
            $timer = TimerInit()
            If StringLeft($folderList, 1)='|' Then $folderList = StringTrimLeft($folderList, 1)
            $aFolderList = StringSplit($folderList, '|')
            For $i = 1 To $aFolderList[0]
                If FileExists($aFolderList[$i]) Then
                    FileFindNextFirst($aFolderList[$i])
                    While 1
                        $tempname = FileFindNext()
                        If $tempname = "" Then ExitLoop
                        $aSizePath &= '|' & FileGetSize($tempname) & '|' & $tempname
                    WEnd
                EndIf
            Next
            $aArrT = StringSplit(StringTrimLeft($aSizePath, 1), "|")
            $aSizePath='1' ;clear and indicator
;_ArrayDisplay($aArrT, "$aArrT") ;  (size|path)
;_ArrayDisplay($aArrT,"$aArrT",-1,-1,-1,-1, 'size|path')
            Dim $aArr[$aArrT[0] / 2 + 1][2]
            $aArr[0][0] = $aArrT[0] / 2
            For $i = 1 To $aArrT[0]
                If Mod($i, 2) = 0 Then
                    $aArr[$i / 2][0] = Int($aArrT[$i - 1])
                    $aArr[$i / 2][1] = $aArrT[$i]
                EndIf
            Next
            _ArraySort($aArr, 0, 1, $aArr[0][0], 0)
;_ArrayDisplay($aArr, "$aArr")

            $aArrOut = ''
            Dim $aArrOut[1][2]
            $a = 0
            $0b = 0
            $gp=0
            
            $kol=0
            $triger = 0
            $triger2 = 0
            $TempSize = ''
            For $i = 1 To $aArr[0][0]
            $kol+=1
                If $aArr[$i][0] = $TempSize Then
                    If $triger = 0 Then
                        $MD5Path = ''
                        $MD5Path &= '|' & _Crypt_HashFile($aArr[$i - 1][1], 0x00008003) & '|' & $aArr[$i - 1][1]
                    EndIf
                    $triger = 1
                    $MD5Path &= '|' & _Crypt_HashFile($aArr[$i][1], 0x00008003) & '|' & $aArr[$i][1]
                Else
                    $triger = 0
                EndIf
                If $aArr[0][0]=2 and $triger = 1 Then $triger2 = 1
                If $i = $aArr[0][0] Then $triger = 0
                If $triger = 0 And $triger2 = 1 Then ;  ======================================


                    $aMD5PathT = StringSplit(StringTrimLeft($MD5Path, 1), "|")
;_ArrayDisplay($aMD5PathT, "$aMD5PathT")

                    Dim $aArrMD5[$aMD5PathT[0] / 2 + 1][2]
                    $aArrMD5[0][0] = $aMD5PathT[0] / 2
                    For $o = 1 To $aMD5PathT[0]
                        If Mod($o, 2) = 0 Then
                            $aArrMD5[$o / 2][0] = $aMD5PathT[$o - 1]
                            $aArrMD5[$o / 2][1] = $aMD5PathT[$o]
                        EndIf
                    Next

                    _ArraySort($aArrMD5, 0, 1, $aArrMD5[0][0], 0)
;_ArrayDisplay($aArrMD5, "$aArrMD5")

                    ;===================================================================
                    $0triger = 0
                    $0triger2 = 0
                    $TempMD5 = ''
                    For $0i = 1 To $aArrMD5[0][0]
                        If $a-$0b < 3 Then
                            $a+=100
                            ReDim $aArrOut[$a][2]
                        EndIf
                        ;If $aArrMD5[$0i][0] = $TempMD5 and $aArrMD5[$0i][0]<>'' Then
                        If $aArrMD5[$0i][0] = $TempMD5 Then
                            If $0triger = 0 Then
                                $0b += 1
                                $gp+=1
                            _GUICtrlListView_InsertGroup($Dubl, -1, $gp, '---'&$gp&'---')
GUICtrlSetData($StatusBar, 'total: ' &$aArr[0][0]&', current: '&$kol &', group: '&$gp &', added: '&$0b &', time: '& Ceiling(TimerDiff($timer)/1000)&', size: '& Ceiling($aArr[$i][0]/1000)& 'kb' &@CRLF& $aArrMD5[$0i - 1][1])
                                $aArrOut[$0b][0] = _GUICtrlListView_AddItem($Dubl, $aArrMD5[$0i - 1][1])
                                _GUICtrlListView_SetItemGroupID($Dubl, $aArrOut[$0b][0], $gp)
                                $aArrOut[$0b][1] = $aArrMD5[$0i - 1][1]
                            EndIf
                            $0triger = 1
                            $0b += 1
GUICtrlSetData($StatusBar, 'total: ' &$aArr[0][0]&', current: '&$kol &', group: '&$gp &', added: '&$0b &', time: '& Ceiling(TimerDiff($timer)/1000) &', size: '& Ceiling($aArr[$i][0]/1000)& 'kb' &@CRLF& $aArrMD5[$0i][1])
                            $aArrOut[$0b][0] = _GUICtrlListView_AddItem($Dubl, $aArrMD5[$0i][1])
                            _GUICtrlListView_SetItemGroupID($Dubl, $aArrOut[$0b][0], $gp)
                            _GUICtrlListView_SetItemChecked($Dubl,$aArrOut[$0b][0])
                            $aArrOut[$0b][1] = $aArrMD5[$0i][1]
                        Else
                            $0triger = 0
                        EndIf
;_ArrayDisplay($aArrOut, "$aArrOut")

                        ; If $0i = $aArrMD5[0][0] Then $0triger = 0
                        ; If $0triger = 0 And $0triger2 = 1 Then
                            ;$gp+=1
                            ;_GUICtrlListView_InsertGroup($Dubl, -1, $gp, '---'&$gp&'---')
                            ;_GUICtrlListView_AddItem($Dubl, ' ')
                            ;GUICtrlSetState(-1,128)
                        ; EndIf
                        ; If $0triger = 1 Then
                            ; $0triger2 = 1
                        ; Else
                            ; $0triger2 = 0
                        ; EndIf
                        $TempMD5 = $aArrMD5[$0i][0]
                        _GUICtrlListView_SetColumnWidth($Dubl, 0, $LVSCW_AUTOSIZE)

                        ;_GUICtrlListView_SetColumn($Dubl, 0, ' ', 480)
                    Next
                EndIf ;==================================================================================================================
                If $triger = 1 Then
                    $triger2 = 1
                Else
                    $triger2 = 0
                EndIf
                $TempSize = $aArr[$i][0]
            Next
                    ReDim $aArrOut[$0b+1][2]
                    $aArrOut[0][0]=$0b
GUICtrlSetData($StatusBar, 'total: ' &$aArr[0][0]&', groups: '&$gp &', added: '&$0b &', time: '& Ceiling(TimerDiff($timer)/1000) &@CRLF& 'Executed!')
            ;_ArrayDisplay($aArrOut, "$aArrOut")
        Case $msg = $restart
            _restart()
        Case $msg = -3
            _Crypt_Shutdown()
            Exit
    EndSelect
WEnd

;========================================

Func FileFindNextFirst($FindCat)
    $Stack[0] = 1
    $Stack1[1] = $FindCat
    $Stack[$Stack[0]] = FileFindFirstFile($Stack1[$Stack[0]] & "\*.*")
    Return $Stack[$Stack[0]]
EndFunc   ;==>FileFindNextFirst

Func FileFindNext()
    While 1
        $file = FileFindNextFile($Stack[$Stack[0]])
        If @error Then
            FileClose($Stack[$Stack[0]])
            If $Stack[0] = 1 Then
                Return ""
            Else
                $Stack[0] -= 1
                ContinueLoop
            EndIf
        Else
            If StringInStr(FileGetAttrib($Stack1[$Stack[0]] & "\" & $file), "D") > 0 Then
                $Stack[0] += 1
                $Stack1[$Stack[0]] = $Stack1[$Stack[0] - 1] & "\" & $file
                $Stack[$Stack[0]] = FileFindFirstFile($Stack1[$Stack[0]] & "\*.*")
                ContinueLoop
            Else
                Return $Stack1[$Stack[0]] & "\" & $file
            EndIf
        EndIf
    WEnd
EndFunc   ;==>FileFindNext

Func _restart()
    Local $sAutoIt_File = @TempDir & "\~Au3_ScriptRestart_TempFile.au3"
    Local $sRunLine, $sScript_Content, $hFile

    $sRunLine = @ScriptFullPath
    If Not @Compiled Then $sRunLine = @AutoItExe & ' /AutoIt3ExecuteScript ""' & $sRunLine & '""'
    If $CmdLine[0] > 0 Then $sRunLine &= ' ' & $CmdLineRaw

    $sScript_Content &= '#NoTrayIcon' & @CRLF & _
            'While ProcessExists(' & @AutoItPID & ')' & @CRLF & _
            '   Sleep(10)' & @CRLF & _
            'WEnd' & @CRLF & _
            'Run("' & $sRunLine & '")' & @CRLF & _
            'FileDelete(@ScriptFullPath)' & @CRLF

    $hFile = FileOpen($sAutoIt_File, 2)
    FileWrite($hFile, $sScript_Content)
    FileClose($hFile)

    Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & $sAutoIt_File & '"', @ScriptDir, @SW_HIDE)
    Sleep(1000)
    Exit
EndFunc   ;==>_restart

Func _Quit()
    Exit
EndFunc   ;==>_Quit
 

Synchronization

$aArrOut[$0b][0] = _GUICtrlListView_AddItem($Dubl, $aArrMD5[$0i][1])
$aArrOut[$0b][1] = $aArrMD5[$0i][1]

string 109 (discrepancy)

MsgBox(0, 'step - '&$i, $aArrOut[0][0]&' - total' &@CRLF& $aArrOut[$i][0]&' - ID'  &@CRLF&Path - ' &$aArrOut[$i][1] &@CRLF&  ItemText- ' & _GUICtrlListView_GetItemText($Dubl,$aArrOut[$i][0]))
Edited by AZJIO

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×