mein Programm ist jetzt soweit fertig, allerdings funktioniert der Aufruf des youtube-dl Konsolenprogramm nur manchmal.
Hab zuerst einen Fehler mit Rechte Vergabe vermutet, das Standalone Programm macht aber denselben Blödsinn.
Wenn ich das Programm starte und mit ps ax die laufenden Prozesse ansehe, stell ich fest, dass der Downloadstring nicht an youtube-dl übergeben wird. An den Titeln liegt's nicht, auf der Shell lässt sich alles runter laden.
Wenn ich den Downloadstring in ein Textfile schreibe (chmod 755) und dieses dann von Purebasic aufrufe funktionierts ebenfalls.
Ist mir echt ein Rätsel...
Dann würde ich gerne die Konsolenausgabe des youtube Prozesses abfangen und weiter verarbeiten.
z.B. könnte ich mit "youtube-dl --extract-audio Adress$" die Titelinformationen auslesen, weiss nur nicht wie...
Mit XBasic lief das alles problemlos, aber das sind eben die kleinen feinen Unterschiede zwischen den Basic Dialekten...
Ich dank schon mal im Vorab
Kurt
Code: Alles auswählen
EnableExplicit
Enumeration
#MainScreen
#DL01_1 = 1
#DL01_2 = 2
#DL01_3 = 3
#DL01_4 = 4
#DL01_5 = 5
#DL01_6 = 6
#DL01_7 = 7
#DL01_8 = 8
#DL01_9 = 9
#BtnAdd
#BtnDownload
#BtnDel
#BtnClear
#BtnExit
#LabAdr
#BtnYesNo
#MeinTimer
EndEnumeration
Procedure Open_MainScreen()
OpenWindow(#MainScreen, 1157, 162, 600, 440, "Youtube Downloader")
CheckBoxGadget(#DL01_1, 0, 0, 500, 25, "")
CheckBoxGadget(#DL01_2, 0, 25, 500, 25, "")
CheckBoxGadget(#DL01_3, 0, 50, 500, 25, "")
CheckBoxGadget(#DL01_4, 0, 75, 500, 25, "")
CheckBoxGadget(#DL01_5, 0, 100, 500, 25, "")
CheckBoxGadget(#DL01_6, 0, 125, 500, 25, "")
CheckBoxGadget(#DL01_7, 0, 150, 500, 25, "")
CheckBoxGadget(#DL01_8, 0, 175, 500, 25, "")
CheckBoxGadget(#DL01_9, 0, 200, 500, 25, "")
ButtonGadget(#BtnAdd, 0, 270, 100, 25, "Hinzufügen")
ButtonGadget(#BtnDownload, 100, 270, 100, 25, "Download")
ButtonGadget(#BtnDel, 200, 270, 100, 25, "Löschen")
ButtonGadget(#BtnClear, 300, 270, 100, 25, "Lösche Alles")
ButtonGadget(#BtnExit, 500, 270, 100, 25, "Ende")
StringGadget(#LabAdr, 0, 233, 600, 25, "")
CheckBoxGadget(#BtnYesNo,200,233,50,25, "Ich bin sicher")
HideGadget(#BtnYesNo,1)
AddWindowTimer(#MainScreen, #MeinTimer, 100) ;1000ms= 1sec
EndProcedure
Open_MainScreen()
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
Global DelFlag, i, Marker, Adress$, ShellPrg
Declare AddAdresse()
Declare Download()
Declare Delete()
Declare ClearAll()
Declare Programmende()
; Event Schleife
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Timer
If EventTimer()=#MeinTimer
If Marker
i+1
Download()
EndIf
EndIf
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Case #PB_Event_Menu
EventMenu = EventMenu()
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Case #PB_Event_Gadget
EventGadget = EventGadget()
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
If EventGadget = #BtnAdd
AddAdresse()
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ElseIf EventGadget = #BtnDownload
HideGadget(#BtnYesNo,1)
For i=1 To 9
If (GetGadgetState (i)) = 1 ; wenn selektiert
DelFlag=1 ; setze Flag
EndIf
Next
If Delflag = 0
SetGadgetText (#LabAdr, "Kein Download selektiert oder vorhanden!")
While WindowEvent():Wend ; updaten
Delay(2000)
SetGadgetText (#LabAdr, "")
Marker=#False
Else
i=0
Marker=#True
EndIf
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ElseIf EventGadget = #BtnDel
HideGadget(#BtnYesNo,1)
For i=1 To 9
If (GetGadgetState (i)) = 1 ; wenn selektiert
DelFlag=1 ; setze Flag
EndIf
Next
Delete()
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ElseIf EventGadget = #BtnClear
ClearAll()
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ElseIf EventGadget = #BtnExit
CloseWindow(#MainScreen)
End
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ElseIf EventGadget = #LabAdr
EndIf
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Case #PB_Event_CloseWindow
EventWindow = EventWindow()
If EventWindow = #MainScreen
CloseWindow(#MainScreen)
End
EndIf
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
EndSelect
; Delay(10)
ForEver
Procedure AddAdresse()
HideGadget(#BtnYesNo,1)
Adress$ = GetGadgetText (#LabAdr) ; Adresse aus dem Textlabel
If Adress$ < > "" ; wenn nichts eingegeben wurde...
For i=1 To 9
If (GetGadgetText (i)) = "" ; Wenn der Platz noch frei ist
SetGadgetText ((i), Adress$) ; Adresse in die Tabelle schreiben
SetGadgetText (#LabAdr, "")
Break
EndIf
Next
EndIf ; ...gibts auch nix zu tun
EndProcedure
Procedure Delete()
If DelFlag=0
SetGadgetText (#LabAdr, "Nichts zum löschen selektiert oder vorhanden!")
While WindowEvent():Wend ; updaten
Delay(2000)
SetGadgetText (#LabAdr, "")
While WindowEvent():Wend ; updaten
ElseIf (GetGadgetState(#BtnYesNo)) = 0
HideGadget(#BtnYesNo,0) ; Button sichtbar machen
SetGadgetText (#LabAdr, "Markierte Downloads löschen ")
While WindowEvent():Wend ; updaten
Else
For i=1 To 9
If (GetGadgetState (i)) = 1 ; wenn der Satus 1
SetGadgetText ((i), "") ; Text löschen
SetGadgetState ((i),0) ; und Status zurück setzen
EndIf
Next
SetGadgetText (#LabAdr, "Markierte Downloads gelöscht!")
SetGadgetState(#BtnYesNo,0) ; Flag für Auswertung löschen
HideGadget(#BtnYesNo,1) ; Button verstecken
While WindowEvent():Wend ; updaten
Delay(2000)
SetGadgetText (#LabAdr, "")
EndIf
DelFlag=0
EndProcedure
Procedure ClearAll()
HideGadget(#BtnYesNo,0)
SetGadgetText (#LabAdr, "Alle Downloads löschen")
While WindowEvent():Wend ; updaten
Delay(2000)
If (GetGadgetState(#BtnYesNo)) = 0
ProcedureReturn
Else
For i=1 To 9
SetGadgetText ((i), "") ; Textfeld und
SetGadgetState ((i),0) ; Status löschen
While WindowEvent():Wend ; updaten
Next
SetGadgetText (#LabAdr, "") ; Label löschen
SetGadgetState (#BtnYesNo,0) ; Flag für Auswertung löschen
HideGadget(#BtnYesNo,1) ; Button verstecken
EndIf
DelFlag=0
SetGadgetText (#LabAdr, "")
HideGadget(#BtnYesNo,1)
While WindowEvent():Wend ; updaten
EndProcedure
Procedure Download()
If i < 10
Adress$ = GetGadgetText (i)
If Adress$ =""
ProcedureReturn
EndIf
SetGadgetText(#LabAdr, "Lade " + Adress$)
While WindowEvent():Wend ; updaten
Delay(1000)
ShellPrg= RunProgram("youtube-dl", Chr(32) + Adress$, ".", #PB_Program_Open|#PB_Program_Write|#PB_Program_Read)
Repeat
Debug ReadProgramString(ShellPrg)
Until Not ProgramRunning(ShellPrg)
SetGadgetText(#LabAdr, "Lade " + Adress$)
While WindowEvent():Wend ; updaten
Delay(1000)
ProcedureReturn
Else
SetGadgetText(#LabAdr, "fertig")
While WindowEvent():Wend ; updaten
EndIf
For i=1 To 9
SetGadgetText ((i), "") ; Textfeld und
SetGadgetState ((i),0) ; Status löschen
Next
SetGadgetText (#LabAdr, "") ; Label löschen
SetGadgetState (#BtnYesNo,0) ; Flag für Auswertung löschen
HideGadget(#BtnYesNo,1) ; Button verstecken
DelFlag=0
Marker=#False
EndProcedure