Threadfin M3U Datei erstellen
(groups []string)
| 186 | |
| 187 | // Threadfin M3U Datei erstellen |
| 188 | func buildM3U(groups []string) (m3u string, err error) { |
| 189 | |
| 190 | var imgc = Data.Cache.Images |
| 191 | var m3uChannels = make(map[float64]XEPGChannelStruct) |
| 192 | var channelNumbers []float64 |
| 193 | |
| 194 | for _, dxc := range Data.XEPG.Channels { |
| 195 | var xepgChannel XEPGChannelStruct |
| 196 | err := json.Unmarshal([]byte(mapToJSON(dxc)), &xepgChannel) |
| 197 | if err == nil { |
| 198 | var channelNumber, err = strconv.ParseFloat(strings.TrimSpace(xepgChannel.XChannelID), 64) |
| 199 | |
| 200 | if xepgChannel.TvgName == "" { |
| 201 | xepgChannel.TvgName = xepgChannel.Name |
| 202 | } |
| 203 | if xepgChannel.XActive && !xepgChannel.XHideChannel { |
| 204 | if len(groups) > 0 { |
| 205 | |
| 206 | if indexOfString(xepgChannel.XGroupTitle, groups) == -1 { |
| 207 | goto Done |
| 208 | } |
| 209 | |
| 210 | } |
| 211 | |
| 212 | if err == nil { |
| 213 | m3uChannels[channelNumber] = xepgChannel |
| 214 | channelNumbers = append(channelNumbers, channelNumber) |
| 215 | } |
| 216 | |
| 217 | } |
| 218 | } |
| 219 | |
| 220 | Done: |
| 221 | } |
| 222 | |
| 223 | // M3U Inhalt erstellen |
| 224 | sort.Float64s(channelNumbers) |
| 225 | |
| 226 | var xmltvURL = fmt.Sprintf("%s://%s/xmltv/threadfin.xml", System.ServerProtocol.XML, System.Domain) |
| 227 | if Settings.ForceHttps && Settings.HttpsThreadfinDomain != "" { |
| 228 | xmltvURL = fmt.Sprintf("https://%s/xmltv/threadfin.xml", Settings.HttpsThreadfinDomain) |
| 229 | } |
| 230 | m3u = fmt.Sprintf(`#EXTM3U url-tvg="%s" x-tvg-url="%s"`+"\n", xmltvURL, xmltvURL) |
| 231 | |
| 232 | for _, channelNumber := range channelNumbers { |
| 233 | |
| 234 | var channel = m3uChannels[channelNumber] |
| 235 | |
| 236 | group := channel.XGroupTitle |
| 237 | if channel.XCategory != "" { |
| 238 | group = channel.XCategory |
| 239 | } |
| 240 | |
| 241 | if Settings.ForceHttps && Settings.HttpsThreadfinDomain != "" { |
| 242 | u, err := url.Parse(channel.URL) |
| 243 | if err == nil { |
| 244 | u.Scheme = "https" |
| 245 | host_split := strings.Split(u.Host, ":") |
no test coverage detected