Because 
XBMC  wasn't designed with storing media info/images in the local folders in mind, when you delete a video from inside XBMC, it leaves behind the .nfo files + images associated with the video.
To keep my media folders clean, I wrote up a quick and dirty AutoIT script.
I'm sure it can be improved (probably massively), but I can't be bothered... it works for me.
These are also scheduled to run first thing every morning
TV Shows My TV shows are structured like:;
; AutoIt Version: 3.0
; Language:       English
; Platform:       Win9x/NT
;
#Include <File.au3>
#Include <Array.au3>
#include <Date.au3>
$tvNormalMoveDir =          "Q:\TV Shows"
;----------------------------------
$FileList= _getdirandsubdirs($tvNormalMoveDir);
If @Error=1 Then
    MsgBox (0,"","No Folders Found.")
    Exit
EndIf
;_ArrayDisplay($FileList,"$FileList")
$rows = UBound($FileList)
;Display $FileList's contents
$output = ""
For $r = 0 to UBound($FileList) - 1
    $cont = $tvNormalMoveDir&"\"&$FileList[$r];
    $files=_FileListToArray($cont,"*",1)
    ;_ArrayDisplay($files,"$FileList")
    Dim $arr[100];
    $fpCount = 0;
    $found = 0
    For $c = 1 to UBound($files) - 1;
        $fname = StringTrimRight($files[$c], 4)
        if (($files[$c] == $fname&".avi") OR ($files[$c] == $fname&".flv") OR ($files[$c] == $fname&".wmv")) then
            $found = 1
        elseif (($files[$c] == $fname&".mpg") OR ($files[$c] == $fname&".mpeg") OR ($files[$c] == $fname&".mp4")) then
            $found = 1
        elseif ( ($files[$c] == $fname&".mkv") OR ($files[$c] == $fname&".flv") OR ($files[$c] == $fname&".wmv")) then
            $found = 1
        endif
        if $found = 1 then
            $arr[$fpCount] = $fname;
            $fpCount = $fpCount + 1;
            $found = 0
        endif
    Next
    ;_ArrayDisplay($arr,"$FileList")
    $fpCount = 0;
    $found = 0;
    ; second pass, eliminate all where name doesn't match
    For $c = 1 to UBound($files) - 1;
        $fname = StringTrimRight($files[$c], 4)
        if ($arr[$fpCount] == $fname) then
            ContinueLoop
        else
            if ($arr[$fpCount + 1] <> $fname) then
                if ( ($files[$c] == $fname&".nfo") OR ($files[$c] == $fname&".tbn") ) then
                    $found = 1
                elseif ( ($files[$c] == $fname&".idx") OR ($files[$c] == $fname&".sub") ) then
                    $found = 1
                elseif ( (($files[$c] == $fname&".srt") OR ($files[$c] == $fname&".log") ) then
                    $found = 1
                endif
                if ($found == 1) then
                    $toDel = $tvNormalMoveDir&"\"&$FileList[$r]&"\"&$files[$c];
                    $found = 0
                    if (FileExists ($toDel)) then
                        FileDelete ($toDel)
                        $output = $output & $toDel & @CRLF;
                    endif
                endif
            else
                $fpCount = $fpCount + 1;
            endif
        endif
    Next
    ;_ArrayDisplay($arr,"$FileList")
Next
;MsgBox (0,"",$output)
IF ($output <> "") THEN
    $file = FileOpen($tvNormalMoveDir&"\cleanerLog.log", 1)
    FileWriteLine ( $file, "---------------------------------------------------------" )
    ; Show current local time
    $tCur = _Date_Time_GetLocalTime()
    FileWriteLine ( $file, "Current date/time .: " & _Date_Time_SystemTimeToDateTimeStr($tCur) )
    FileWriteLine ( $file, "===============================================================" )
    FileWriteLine ( $file, $output )
    FileClose($file)
ENDIF
Func _getdirandsubdirs($dir)
Dim $Array1[1];
$c=1;
$d=0;
$temp="";
$folders=_FileListToArray($dir,"*",2)
While $c < UBound($folders, 1)
    $temp=_FileListToArray($dir&"\"&$folders[$c],"*.",2)
    $d=1;
    While $d < UBound($temp, 1)
        if ($temp[$d] <> ".actors") then
            _ArrayAdd($folders,$folders[$c]&"\"&$temp[$d])
            _ArrayAdd($Array1, $folders[$c]&"\"&$temp[$d])
        endif
        $d=$d+1;
    WEnd
    $c=$c+1;
WEnd
_ArrayDelete($Array1, 0)
return $Array1;
EndFunc
  Movies My Movies are structured like:; AutoIt Version: 3.0
; Language:       English
; Platform:       Win9x/NT
;
#Include <File.au3>
#Include <Array.au3>
#include <Date.au3>
$movieNormalMoveDir =       "Q:\Movies"
;----------------------------------
$FileList= _getdirandsubdirs($movieNormalMoveDir);
If @Error=1 Then
    MsgBox (0,"","No Folders Found.")
    Exit
EndIf
;_ArrayDisplay($FileList,"$FileList")
$rows = UBound($FileList)
;Display $FileList's contents
$output = ""
For $r = 0 to UBound($FileList) - 1
    $cont = $movieNormalMoveDir&"\"&$FileList[$r];
    ; Shows the filenames of all files in the current directory.
    $search = FileFindFirstFile($cont&"\*.avi")
    ; Check if the search was successful
    If $search = -1 Then
        $search = FileFindFirstFile($cont&"\*.mp4")
        If $search = -1 Then
            $search = FileFindFirstFile($cont&"\*.mkv")
            If $search = -1 Then
                $search = FileFindFirstFile($cont&"\*.mpg")
                If $search = -1 Then
                    $search = FileFindFirstFile($cont&"\*.mpeg")
                    If $search = -1 Then
                        $search = FileFindFirstFile($cont&"\*.wmv")
                        If $search = -1 Then
                            $search = FileFindFirstFile($cont&"\*.flv")
                        EndIf
                    EndIf
                EndIf
            EndIf
        EndIf
    EndIf
    If ($search = -1) Then
        if (FileExists ($cont)) then
            $size = DirGetSize($cont, 1)
            $megs = Round($size[0] / 1024 / 1024)
            if ($megs < 100) then
                $output = $output & $cont & @CRLF & "Size (MB): "& $megs & @CRLF;
                DirRemove($cont, 1)
            endif
        endif
    endif
    ; Close the search handle
    FileClose($search)
Next
IF ($output <> "") THEN
    $file = FileOpen($movieNormalMoveDir&"\cleanerLog.log", 1)
    FileWriteLine ( $file, "---------------------------------------------------------" )
    ; Show current local time
    $tCur = _Date_Time_GetLocalTime()
    FileWriteLine ( $file, "Current date/time .: " & _Date_Time_SystemTimeToDateTimeStr($tCur) )
    FileWriteLine ( $file, "===============================================================" )
    FileWriteLine ( $file, $output )
    FileClose($file)
ENDIF
Func _getdirandsubdirs($dir)
$c=1;
$d=0;
$temp="";
$folders=_FileListToArray($dir,"*",2)
Dim $arrayDel[1]
While $c < UBound($folders, 1)
    $temp=_FileListToArray($dir&"\"&$folders[$c],"*",2)
    $d=1;
    While $d < UBound($temp, 1)
        if ($temp[$d] <> ".actors") then
            _ArrayAdd($folders,$folders[$c]&"\"&$temp[$d])
            _ArrayAdd($arrayDel,$folders[$c])
        endif
        $d=$d+1;
    WEnd
    $c=$c+1;
WEnd
_ArrayDelete($arrayDel, 0)
$aNewArray = _ArrayUnique($arrayDel)
;_ArrayDisplay($aNewArray,"$FileList")
For $x = 1 to UBound($aNewArray) - 1;
    ; lookup existing entry
    $iKeyIndex = _ArraySearch($folders, $aNewArray[$x])
    If Not @error Then
        _ArrayDelete($folders, $iKeyIndex)
    EndIf
Next
_ArrayDelete($folders, 0)
return $folders;
EndFunc
  
No comments:
Post a Comment