Table of Contents

How does it work?

I started to draw the processing of the recording script using Mermaid.

graph TD %% ------------------------------------------------------------ %% elements %% ------------------------------------------------------------ Start((Start)) End((End)) LoadCfg(fa:fa-file Load config) UrlOrFile{Given param<br>is an url or<br>a local file?} ParamIsAFile(Param is a file<br>So far local PLS files only.) ParamIsAUrl(Url was detected) FetchHttpHeader GotResponse{Was there<br>a response?} noResponse(Exit: stream or service<br>does not exist) yesResponse(There was a response) ShowHttpHeader[For debugging:<br>Show http response<br>header of given url] ErrorResponse{Error in response?<br>404 or 50x?} YesErrorResponse(Exit: Stream does not<br>exist or not available) DetectedStream{Detect<br>stream<br>header} DetectedDownload{Detect<br>download<br>file} subgraph streamripper HandleAsStream CheckStreamUrl(Check redirects to get<br>last target url<br>or 1st streaming url<br>from a playlist) SRshowVersion(Show Version of Streamripper) SRrecordTest(Record 1 sec of the<br>stream to test<br> streamripper error) SRrecordTestFailed(Show detected error) SRStart(Run Streamripper to<br>download the stream until<br>it breaks or you stop it.) end subgraph file download HandleAsDownload fileGetfilenameFromHeader(Get filename from feader<br>Content-Disposition) setFile1(Set a filename) setFileTemp(Set temp filename) DownloadWithCurl1(Download With Curl) DownloadWithCurl(Download With Curl) fileGetfilenameFromFile{Get id3 tag<br>with ffprobe} setFile2(rename tempfile<br>to title+artist+year) EnterFilename setFile3(rename tempfile<br>to given file) NoFilename(Exit: no filename was given) end %% ------------------------------------------------------------ %% styles %% ------------------------------------------------------------ style Start fill:#8dd,stroke:#088,color:#088,stroke-width:4px style End fill:#8dd,stroke:#088,color:#088,stroke-width:4px style DownloadWithCurl1 fill:#8f8,stroke:#080,color:#080,stroke-width:4px style setFile2 fill:#8f8,stroke:#080,color:#080,stroke-width:4px style setFile3 fill:#8f8,stroke:#080,color:#080,stroke-width:4px style SRStart fill:#8f8,stroke:#080,color:#080,stroke-width:4px style noResponse fill:#f88,stroke:#800,color:#800,stroke-width:4px style YesErrorResponse fill:#f88,stroke:#800,color:#800,stroke-width:4px style NoFilename fill:#f88,stroke:#800,color:#800,stroke-width:4px style SRrecordTestFailed fill:#f88,stroke:#800,color:#800,stroke-width:4px %% ------------------------------------------------------------ %% graphs %% ------------------------------------------------------------ Start==>LoadCfg==>UrlOrFile UrlOrFile-->|File|ParamIsAFile --> HandleAsStream UrlOrFile==>|Url|ParamIsAUrl ParamIsAUrl ==> FetchHttpHeader ==> GotResponse GotResponse --> |No|noResponse--> End GotResponse ==> |Yes|yesResponse --> ShowHttpHeader --> ErrorResponse ErrorResponse --> |Yes|YesErrorResponse --> End ErrorResponse ==> |No|DetectedStream DetectedStream ==> |Yes| HandleAsStream DetectedStream --> |No| DetectedDownload DetectedDownload --> |Yes| HandleAsDownload DetectedDownload --> |no| HandleAsStream HandleAsDownload --> fileGetfilenameFromHeader fileGetfilenameFromHeader --> |Yes|setFile1 --> DownloadWithCurl1 --> End fileGetfilenameFromHeader --> |no|setFileTemp --> DownloadWithCurl --> fileGetfilenameFromFile fileGetfilenameFromFile --> |Yes|setFile2 --> End fileGetfilenameFromFile --> |Yes|EnterFilename EnterFilename --> |Yes| setFile3 --> End EnterFilename --> |no| NoFilename --> End HandleAsStream ==> CheckStreamUrl ==> SRshowVersion ==> SRrecordTest SRrecordTest --> |Failed| SRrecordTestFailed --> End SRrecordTest ==> |OK| SRStart

Damn why did I start it?!