Das heißt der erste Progress zeigt schon alle vier Downloads an und der Zweite springt nur noch auf weil er muß?
[PROJEKT] Automatisierter Download und Verarbeitung von Audiodateien
-
-
Nein, es sollten alle vier Downloads nacheinander angezeigt werden. (Erst 0% bis 100%, dann wieder 0% bis 100%...)
-
Also zu sehen bekomme ich nur zwei Progress Anzeigen.
Die erste läuft von 0 - 100 % durch
Die zweite wird nur angezeigt, aber es passiert nix.
-
Ich habe nochmal etwas rumexperimentiert.
So wie es aussieht, geben die Variablen $DL_state und $DL_size keine Werte aus.
[autoit]
[/autoit]
$DL_size = InetGetInfo($DL_Get, 1)
$DL_state = InetGetInfo($DL_Get, 0)
MsgBox(64, "TEST", $DL_size & $DL_state)Dabei gibts nur ne leere Box
-
Ist bei InetGet der letzte Parameter eine 1?
-
Ja, das habe ich beides versucht.
Was ich fstgestellt habe ist, dass die While-Schleife nur läuft wenn der Eingangswert "True" ist, aber mit der Abfrage bekomme ich den Wert "False" und die schleife wird garnicht erst gestartet.
Des weiteren scheint es so, dass über InetGetInfo(1) ... also der Gesamtgröße des Files erst nach abgeschlossenem Download ausgegeben wird. Was ja wiederum nicht helfen würde.
-
Dann wirst du im Schleifenkopf wohl InetGetInfo(..., 2) verwenden müssen. Die Progressbar funktioniert dann natürlich auch nicht. Vielleicht kannst du die Größe aber auch mit InetGetSize abfragen.
-
So, jetzt habe ich zwischendurch mal neue Fliegengitter aufgezogen
Das hat wohl dann den Wald gelichtet und ich habe wieder die Bäume gesehen ... *lach*
Spaß bei Seite, so wie es aussieht habe ich jetzt eine funktionierende Lösung gefunden.
Spoiler anzeigen
[autoit]Local $media_server = "server.de"
[/autoit] [autoit][/autoit] [autoit]
Local $media_user = "user"
Local $media_passwd = "XXXXXX"
Local $ews = "Nachrichten.mp3"Local $_S2_Conn = ("http://" & $media_user & ":" & $media_passwd & "@" & $media_server)
[/autoit] [autoit][/autoit] [autoit]
ProgressOn ( "News Download", "Aktuelle News wird geladen")
Local $hDownload = InetGet($_S2_Conn & "/News/News.mp3", "..\temp" & $news, 1, 1)
Local $aDataSize = InetGetSize($_S2_Conn & "/News/News.mp3", "..\temp")
Sleep(250)Do
[/autoit] [autoit][/autoit] [autoit]
Local $aDataState = InetGetInfo($hDownload, 0)
Local $aDataProzent = Round(($aDataState / $aDataSize) * 100)#cs
[/autoit] [autoit][/autoit] [autoit]
; ### TESTBOX ###
MsgBox(0, "Blöööck", "Prozente: " & $aDataProzent & @CRLF & _
"aData State: " & $aDataState & @CRLF & _
"aData Size: " & $aDataSize)
#ce
_UpdateProgress($aDataProzent)
Until InetGetInfo($hDownload, 2) ; Check if the download is complete.ProgressOff ( )
[/autoit] [autoit][/autoit] [autoit]MsgBox(0, "ENDE", "Prozente: " & $aDataProzent & @CRLF & _
[/autoit] [autoit][/autoit] [autoit]
"aData State: " & $aDataState & @CRLF & _
"aData Size: " & $aDataSize)Exit
[/autoit] [autoit][/autoit] [autoit]Func _UpdateProgress($percent)
[/autoit]
ProgressSet($percent, int($percent) & "%")
return 1
EndFunc ;==>_UpdateProgress -
Jetzt hab ich bei dem Script-Schnipsel nur noch ein Problem, aber nur eine optische Angelegenheit.
Im Progress Fenster zählt er zwar schön von 0 auf 100% hoch und auch der Ladebalken bewegt sich. Aber irgendwie kommt der Ladebalken nur bis zur Hälfte, dann stehen unten schon 100% und der DL ist abgeschlossen. Ich finde aber den Denkfehler nicht.
-
OK, ich weiß jetzt wo das Problem liegt. Die Downloads sind schneller abgeschlossen als die Progressbar den Ladebalken animiert.
Bevor ich mich hier jetzt weiter reinsteigere .... habe ich nochmal eine wichtige Frage.
Die geladenen Audio-Files sollen ja im Laufe des Projektes noch normalisiert und am Ende zu einem File zusammengeführt werden.
Ist es denn möglich den Download, das Normalisieren und die Zusammenführung usw. alles unter einer Progressbar laufen zu lassen?
-
Ist es denn möglich den Download, das Normalisieren und die Zusammenführung usw. alles unter einer Progressbar laufen zu lassen?
Ja. Wenn es nur diese 3 Teile sind teilst du die % des Downloads durch 3, bei den anderen beiden machst du das selbe (sodass alle von 0 bis 33% gehen) und addierst 33 bzw. 66.
Download: 0 bis 33%
Normalisieren: 34 bis 66%
Zusammenführung: 67 bis 100% -
Die Prograssbar muß jetzt erstmal warten bis ich die anderen Bauteile des Scripts fertig habe, sonst kann ich das immer wieder anpassen
Wie schon in der SB angesprochen kümmere ich mich derzeit um das Zeitmanagement. Also Abfrage der Wochentage, Stunden und Minuten um entsprechende Downloads zu veranlassen.
Die Wochentage konne ich noch recht gut lösen:
[autoit]If $sShortDayName = "Sam" or $sShortDayName = "Son" Then
[/autoit]
If MsgBox(16, "Keine Nachrichten", "Heute ist " & $sLongDayName & @CRLF & @CRLF & "Es gibt am Wochenende" & @CRLF & "keine Nachrichten!" & @CRLF & @CRLF & "Bitte Wochenrückblick nutzen!") = 1 Then Exit
EndIfBei der Zeitberechnung wirds wohl etwas schwieriger .. Irgendwo habe ich hier noch einen Denkfehler, da die bedingte Anweisung noch nciht zur entsprechenden Zeit die Variable anpasst.
[autoit]If (@HOUR < 6) AND (@MIN < 50) Then
[/autoit]
MsgBox(0, "Keine Nachrichten", "Nachrichten erst ab" & @CRLF & "05:50 Uhr")
ElseIf (@HOUR <9) AND (@MIN < 50) Then
$sStd = 06
ElseIf (@HOUR <12) AND (@MIN < 50) Then
$sStd = 09
ElseIf (@HOUR <16) AND (@MIN < 50) Then
$sStd = 12
ElseIf (@HOUR <20) AND (@MIN < 50) Then
$sStd = 16
ElseIf (@HOUR <24) AND (@MIN < 50) Then
$sStd = 20
EndIfEDIT:
OK, gleich zwei Denkfehler habe ich gefunden.
Zum einen müßendie Stunden um 1 reduziert werden, das ist ja kein Thema.
Zum anderen werdenja die Zeiten über 50 Minuten komplett ausgeklammert Da muß ich wohl ganz anders vorgehen ... -
Das mit den Abfragen ist leider etwas komplizierter.
Dein erstes Beispiel sieht ja so aus:
[autoit]If (@HOUR < 6) AND (@MIN < 50) Then
[/autoit]
04:59 Uhr wäre ja zum Beispiel auch vor 05:50 Uhr, würde aber nicht erkannt werden, da 59 größer als 50 ist. Du musst also all diese "Sonderfälle" durch weitere/andere Abfragen richtig erkennen können. -
Ja genau .. das ist mir vorhin auch aufgefallen .. aber dann muß ich das ja für jede Stunde und die wechsel-Stunden zweimal schreiben.
In CMD hatte ich das wie folgt gelöst.
Code
Alles anzeigen: timestamp rem set CURRENTTIME=%TIME::=% set CURRENTTIME=%CURRENTTIME:~0,-3% echo Aktuelle Uhrzeit: %CURRENTTIME% if %CURRENTTIME% LSS 55000 goto nofile if %CURRENTTIME% GEQ 55000 set hour=06 if %CURRENTTIME% GEQ 85000 set hour=09 if %CURRENTTIME% GEQ 115000 set hour=12 if %CURRENTTIME% GEQ 155000 set hour=16 if %CURRENTTIME% GEQ 195000 set hour=20 goto download
Etwas ähnliches gibt es in Autoit nicht oder?
-
Keine Ahnung, ich habe aber eine andere Idee: Du könntest die Uhrzeit einfach in Sekunden umrechnen, dann würde das reibungslos funktionieren.
[autoit]If (_() < _(5, 50)) Then
[/autoit][autoit][/autoit][autoit]
MsgBox(0, "Keine Nachrichten", "Nachrichten erst ab" & @CRLF & "05:50 Uhr")
ElseIf ...
...
EndIfFunc _($iHour=@HOUR, $iMin=@MIN)
[/autoit]
Return $iHour * 60 + $iMin
EndFunc -
Ein Blick in die Vergangenheit hat mir die einfache Lösung gebracht
[autoit]$aktUhrzeit = (@HOUR & @MIN)
[/autoit][autoit][/autoit][autoit]If ($aktUhrzeit < 0550) Then
[/autoit]
If MsgBox(16, "Keine Nachrichten", "Nachrichten erst ab" & @CRLF & "05:50 Uhr") = 1 Then Exit
ElseIf ($aktUhrzeit < 0850) Then
$sStd = "06"
ElseIf ($aktUhrzeit < 1150) Then
$sStd = "09"
ElseIf ($aktUhrzeit < 1550) Then
$sStd = "12"
ElseIf ($aktUhrzeit < 1950) Then
$sStd = "16"
ElseIf ($aktUhrzeit < 2350) Then
$sStd = "20"
EndIfDie Zeit nach 23:50 uhr ist absichtlich noch offen ....
Aber so bekomme ich im ensprechenden Zeitfenster von zum Beispiel 05:50 uhr bis 08:50 Uhr die ensprechende Variable (in dem Fall: "06")
-
Strings und Zahlen so zu vermischen ist gefährlich, das könnte unter Umständen zu Problemen beim Umwandeln ineinander führen.
-
Nu dachte ich, ich hätte ne Lösung
-
Es hindert dich ja nichts daran das trotzdem so zu machen. Außerdem hatte ich kurz vor dir noch etwas gepostet, das ist wahrscheinlich untergegangen.
-
Naja, wenn Du sagst das wäre gefährlich, dass lass ich ja lieber die Finger von meiner Lösung.
Deinen Vorschlag habe ich jetzt erst gesehen ja, aber ich versteh ihn nicht.
In der ersten Zeile rufe ich nach dem "IF" die Funktion "_" auf und gebe ihr keinen Wert mit "()" ... Richtig?
In der Funktion werden die Stunden dann mal 60 genommen und die Minuten hinzuaddiert (Bsp: 12:16 Uhr = 12*60+16 = 736), also wird der 736 zurück gegeben.
Was aber dann passiert entzieht sich mir komplett _(5, 50) <-- ??
-