#cs ----------------------------------------------------------------------------
	
	AutoIt Version: 3.2.2.0
	Author:         Greenhorn
	
	Script Function:
	WinShorten a GUI for Shorten
	
#ce ----------------------------------------------------------------------------


#NoTrayIcon
#include <GuiConstants.au3>
#include <GUIList.au3>
#include <Array.au3>

Dim $Array, $Target, $File, $c

FileInstall("shorten.exe", @SystemDir & "\shorten.exe", 1)
FileInstall("cygwin1.dll", @SystemDir & "\cygwin1.dll", 1)
GUICreate("WinShorten", 640, 420, -1, -1, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))

$Group_1 = GUICtrlCreateGroup(" Dateien ", 20, 30, 580, 270)
$Add = GUICtrlCreateButton("Hinzufügen", 490, 70, 90, 30)
GUICtrlSetState(-1, $GUI_FOCUS)
$Del = GUICtrlCreateButton("Entfernen", 490, 140, 90, 30)
$List = GUICtrlCreateList("", 60, 60, 370, 214)
$Group_2 = GUICtrlCreateGroup(" Optionen ", 20, 310, 180, 100)
$Compress = GUICtrlCreateRadio("Komprimieren", 30, 330, 100, 20)
$Extract = GUICtrlCreateRadio("Extrahieren", 30, 370, 100, 20)
$Start = GUICtrlCreateButton("Start", 500, 320, 100, 30)
$Exit = GUICtrlCreateButton("Beenden", 500, 370, 100, 30)

GUISetState()
Do
	$msg = GUIGetMsg()
	Select
		Case $msg = $Add
			File_Add()
		Case $msg = $Del
			$chosen = _GUICtrlListSelectedIndex($List)
			_GUICtrlListDeleteItem($List, $chosen)
		Case $msg = $Compress
			$c = ""
		Case $msg = $Extract
			$c = "-x "
		Case $msg = $Start
			Convert()
			CmdClose()
		Case $msg = $Exit
			CmdClose()
			Exit
	EndSelect
Until $msg = $GUI_EVENT_CLOSE
Exit


; File Add

Func File_Add()
	$message = "Hold down Ctrl or Shift to choose multiple files."
	$var = FileOpenDialog($message, @DesktopDir & "\", "(*.wav)|(*.shn)", 1 + 4)
	$Array = StringSplit($var, "|")
	If $Array[0] = 1 Then
		$ArFile = StringSplit($Array[1], "\")
		$i = $ArFile[0]
		GUICtrlSetData($List, $ArFile[$i])
		If StringInStr($var, ".wav") <> 0 Then
			GUICtrlSetState($Compress, $GUI_CHECKED)
			GUICtrlSetState($Extract, $GUI_DISABLE)
		ElseIf StringInStr($var, ".shn") <> 0 Then
			GUICtrlSetState($Extract, $GUI_CHECKED)
			GUICtrlSetState($Compress, $GUI_DISABLE)
			$c= "-x "
		EndIf
	EndIf
	For $i = 2 To UBound($Array) - 1
		$File = $Array[$i]
		GUICtrlSetData($List, $File)
		If StringInStr($File, ".wav") <> 0 Then
			GUICtrlSetState($Compress, $GUI_CHECKED)
			GUICtrlSetState($Extract, $GUI_DISABLE)
		ElseIf StringInStr($File, ".shn") <> 0 Then
			GUICtrlSetState($Extract, $GUI_CHECKED)
			GUICtrlSetState($Compress, $GUI_DISABLE)
			$c= "-x "
		EndIf
	Next
EndFunc   ;==>File_Add

; Convert

Func Convert()
	#include <GuiConstants.au3>
	
	Unchecked()
	No_Space()
	GUICreate("Fortschritt", 392, 136, -1, -1, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))
	
	$Progress = GUICtrlCreateProgress(20, 30, 350, 20)
	$Label = GUICtrlCreateLabel("", 20, 70, 350, 20)
	$percent = (100/ (UBound($Array) - 2))
	If $c = "" Then
		$Act = "komprimiert"
	Else
		$Act = "extrahiert"
	EndIf

	GUISetState()
	GUICtrlSetData($Label, "Dateien werden " & $Act & "...")
	$tmp = $Array[1]
	$Path = StringRegExpReplace($tmp, "\\", "/")
	If $Array[0] = 1 Then 
		Run(@ComSpec & " /k " & "shorten " & $c & $Path, "", @SW_HIDE)
		GUICtrlSetData($Progress, 100)
		Sleep(100)
	EndIf
	For $i = 2 To UBound($Array) - 1
		Run(@ComSpec & " /k " & "shorten " & $c & $Path & "/" & $Array[$i], "", @SW_HIDE)
		GUICtrlSetData($Progress, ($i * $percent))
		Sleep(100)
	Next
	MsgBox(64, "Fertig", "Dateien wurden erfolgreich " & $Act)
	WinKill("Fortschritt")
EndFunc   ;==>Convert

; CmdClose

Func CmdClose()
	Do
		$PID = ProcessExists("cmd.exe")
		If $PID Then ProcessClose($PID)
	Until $PID = 0
EndFunc   ;==>CmdClose

; Unchecked

Func Unchecked()
	$Un = GUICtrlGetState($Extract)
	$Unx = GUICtrlGetState($Compress)
	$UnList = _GUICtrlListCount($List)
	Select
		Case $Un = $GUI_UNCHECKED
			MsgBox(4096, "Error", "Bitte Option wählen!")
		Case $Unx = $GUI_UNCHECKED
			MsgBox(4096, "Error", "Bitte Option wählen!")
		Case $UnList = 0
			MsgBox(4096, "Error", "Es wurden keine Dateien ausgewählt!")
	EndSelect
EndFunc   ;==>Unchecked

; No Space

Func No_Space()
	
	If $Array[0] = 1 Then
		$ArFile = StringSplit($Array[1], "\")
		$i = $ArFile[0]
		$Title = StringRegExp($ArFile[$i], "[ ]", 1)
		If @extended Then
			$Target = StringRegExpReplace($ArFile[$i], "[ ]", "")
			_ArrayPop($ArFile)
			FileMove($ArFile & "\" & $Title, $ArFile[1] & "\" & $Target)
		EndIf
	EndIf
	For $i = 2 To $Array[0]
		$ArStr = $Array[$i]
		$Target = StringRegExp($ArStr, "[ ]", 1)
		If @extended Then
			$Target = StringRegExpReplace($ArStr, "[ ]", "")
			FileMove($Array[1] & "\" & $Array[$i], $Array[1] & "\" & $Target)
		EndIf
	Next
EndFunc   ;==>No_Space
