From e94b959727ef232c519c84159515021d96c6d03d Mon Sep 17 00:00:00 2001 From: Aman Karmani Date: Tue, 17 Nov 2020 15:04:06 -0800 Subject: [PATCH] Add /lineup.m3u representation --- ProxyWebModuleUnit.dfm | 5 +++++ ProxyWebModuleUnit.pas | 28 ++++++++++++++++++++++++++++ hdhr/HDHR.pas | 20 ++++++++++++++++++++ 3 files changed, 53 insertions(+) diff --git a/ProxyWebModuleUnit.dfm b/ProxyWebModuleUnit.dfm index f0ef802..722003e 100644 --- a/ProxyWebModuleUnit.dfm +++ b/ProxyWebModuleUnit.dfm @@ -28,6 +28,11 @@ object ProxyWebModule: TProxyWebModule PathInfo = '/lineup.xml' OnAction = ProxyWebModuleLineupXMLActionAction end + item + Name = 'LineupM3UAction' + PathInfo = '/lineup.m3u' + OnAction = ProxyWebModuleLineupM3UActionAction + end item Name = 'TunerAction' PathInfo = '/tuner[0-99]/v*' diff --git a/ProxyWebModuleUnit.pas b/ProxyWebModuleUnit.pas index e243f66..5c52821 100644 --- a/ProxyWebModuleUnit.pas +++ b/ProxyWebModuleUnit.pas @@ -50,6 +50,8 @@ TProxyWebModule = class(TWebModule) Response: TWebResponse; var Handled: Boolean); procedure ProxyWebModuleLineupXMLActionAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); + procedure ProxyWebModuleLineupM3UActionAction(Sender: TObject; + Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); procedure ProxyWebModuleTunerActionAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); procedure WebModuleCreate(Sender: TObject); @@ -376,6 +378,32 @@ procedure TProxyWebModule.ProxyWebModuleLineupXMLActionAction(Sender: TObject; end; end; +procedure TProxyWebModule.ProxyWebModuleLineupM3UActionAction(Sender: TObject; + Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); +var + lLineup: TLineup; +begin + Handled := True; + try + TLogger.LogFmt(cLogDefault, 'Received lineup.m3u request from %s', [Request.RemoteAddr]); + try + lLineup := TLineup.Create; + try + GetLineup(lLineup); + + Response.ContentType := 'audio/x-mpegurl'; + Response.Content := lLineup.ToM3U; + finally + lLineup.Free; + end; + finally + TLogger.LogFmt(cLogDefault, 'Finished lineup.m3u request from %s', [Request.RemoteAddr]); + end; + except + HandleException; + end; +end; + procedure TProxyWebModule.CheckClientChannelMapUpdated; var lCetonConfig: TCetonConfig; diff --git a/hdhr/HDHR.pas b/hdhr/HDHR.pas index 024d3f4..682ca91 100644 --- a/hdhr/HDHR.pas +++ b/hdhr/HDHR.pas @@ -218,6 +218,7 @@ TLineup = class function ToJSON: String; function ToXML: String; + function ToM3U: String; end; THDHRUtils = class abstract @@ -334,6 +335,25 @@ function TLineup.ToXML: String; Result := lXMLDoc.XML.Text; end; +function TLineup.ToM3U: String; +var + out: string; + lItem: TLineupItem; + i: Integer; +begin + out := '#EXTM3U' + #13; + + for i := 0 to fList.Count-1 do + begin + lItem := fList[i]; + + out := out + '#EXTINF:0 channel-number="' + lItem.GuideNumber + '",' + lItem.GuideName + #13; + out := out + lItem.URL + #13 + #13; + end; + + Result := out; +end; + { TTag } class function TTag.TryFromBytes(const aBytes: TBytes;