Merge branch 'beta'

This commit is contained in:
marmei
2020-02-14 20:02:28 +01:00
17 changed files with 90 additions and 145 deletions

View File

@@ -24,7 +24,7 @@
<div id="content"> <div id="content">
<form id="authentication" action="/web/" method="post"> <form id="authentication" action="" method="post">
<h5>{{.account.username.title}}:</h5> <h5>{{.account.username.title}}:</h5>
<input id="username" type="text" name="username" placeholder="Username" value=""> <input id="username" type="text" name="username" placeholder="Username" value="">

View File

@@ -18,7 +18,7 @@ menuItems.push(new MainMenuItem("log", "{{.mainMenu.item.log}}", "log.png", "{{.
menuItems.push(new MainMenuItem("logout", "{{.mainMenu.item.logout}}", "logout.png", "{{.mainMenu.headline.logout}}")); menuItems.push(new MainMenuItem("logout", "{{.mainMenu.item.logout}}", "logout.png", "{{.mainMenu.headline.logout}}"));
// Kategorien für die Einstellungen // Kategorien für die Einstellungen
var settingsCategory = new Array(); var settingsCategory = new Array();
settingsCategory.push(new SettingsCategoryItem("{{.settings.category.general}}", "xteveAutoUpdate,tuner,epgSource,api,scheme.m3u,scheme.xml")); settingsCategory.push(new SettingsCategoryItem("{{.settings.category.general}}", "xteveAutoUpdate,tuner,epgSource,api"));
settingsCategory.push(new SettingsCategoryItem("{{.settings.category.files}}", "update,files.update,temp.path,cache.images,xepg.replace.missing.images")); settingsCategory.push(new SettingsCategoryItem("{{.settings.category.files}}", "update,files.update,temp.path,cache.images,xepg.replace.missing.images"));
settingsCategory.push(new SettingsCategoryItem("{{.settings.category.streaming}}", "buffer,buffer.size.kb,buffer.timeout,user.agent,ffmpeg.path,ffmpeg.options,vlc.path,vlc.options")); settingsCategory.push(new SettingsCategoryItem("{{.settings.category.streaming}}", "buffer,buffer.size.kb,buffer.timeout,user.agent,ffmpeg.path,ffmpeg.options,vlc.path,vlc.options"));
settingsCategory.push(new SettingsCategoryItem("{{.settings.category.backup}}", "backup.path,backup.keep")); settingsCategory.push(new SettingsCategoryItem("{{.settings.category.backup}}", "backup.path,backup.keep"));

View File

@@ -305,30 +305,6 @@ var SettingsCategory = /** @class */ (function () {
setting.appendChild(tdLeft); setting.appendChild(tdLeft);
setting.appendChild(tdRight); setting.appendChild(tdRight);
break; break;
case "scheme.m3u":
var tdLeft = document.createElement("TD");
tdLeft.innerHTML = "{{.settings.schemeM3U.title}}" + ":";
var tdRight = document.createElement("TD");
var text = ["HTTP", "HTTPS"];
var values = ["HTTP", "HTTPS"];
var select = content.createSelect(text, values, data, settingsKey);
select.setAttribute("onchange", "javascript: this.className = 'changed'");
tdRight.appendChild(select);
setting.appendChild(tdLeft);
setting.appendChild(tdRight);
break;
case "scheme.xml":
var tdLeft = document.createElement("TD");
tdLeft.innerHTML = "{{.settings.schemeXML.title}}" + ":";
var tdRight = document.createElement("TD");
var text = ["HTTP", "HTTPS"];
var values = ["HTTP", "HTTPS"];
var select = content.createSelect(text, values, data, settingsKey);
select.setAttribute("onchange", "javascript: this.className = 'changed'");
tdRight.appendChild(select);
setting.appendChild(tdLeft);
setting.appendChild(tdRight);
break;
} }
return setting; return setting;
}; };
@@ -410,12 +386,6 @@ var SettingsCategory = /** @class */ (function () {
case "xepg.replace.missing.images": case "xepg.replace.missing.images":
text = "{{.settings.replaceEmptyImages.description}}"; text = "{{.settings.replaceEmptyImages.description}}";
break; break;
case "scheme.m3u":
text = "{{.settings.schemeM3U.description}}";
break;
case "scheme.xml":
text = "{{.settings.schemeXML.description}}";
break;
default: default:
text = ""; text = "";
break; break;

View File

@@ -307,14 +307,6 @@
"title": "Number of Tuners", "title": "Number of Tuners",
"description": "Number of parallel connections that can be established to the provider.<br>Available for: Plex, Emby (HDHR), M3U (with active buffer).<br>After a change, xTeVe must be delete in the Plex / Emby DVR settings and set up again." "description": "Number of parallel connections that can be established to the provider.<br>Available for: Plex, Emby (HDHR), M3U (with active buffer).<br>After a change, xTeVe must be delete in the Plex / Emby DVR settings and set up again."
}, },
"schemeM3U":{
"title": "URL protocol for xteve.m3u",
"description": "Determines which URL protocol is used for the xTeVe streaming URLs. If you using a reverse proxy over HTTPS, set this to HTTPS."
},
"schemeXML":{
"title": "URL protocol for xteve.xml",
"description": "Determines which URL protocol is used for the xTeVe image URLs. If you using a reverse proxy over HTTPS, set this to HTTPS."
},
"filesUpdate": { "filesUpdate": {
"title": "Updates all files at startup", "title": "Updates all files at startup",
"description": "Updates all playlists, tuner and XMLTV files at startup." "description": "Updates all playlists, tuner and XMLTV files at startup."

View File

@@ -24,7 +24,7 @@
<div id="content"> <div id="content">
<form id="authentication" action="/web/" method="post"> <form id="authentication" action="" method="post">
<h5>{{.login.username.title}}:</h5> <h5>{{.login.username.title}}:</h5>
<input id="username" type="text" name="username" placeholder="Username" value=""> <input id="username" type="text" name="username" placeholder="Username" value="">

View File

@@ -1429,7 +1429,9 @@ func thirdPartyBuffer(streamID int, playlistID string) {
case "FFMPEG": case "FFMPEG":
a = strings.Replace(a, "[URL]", url, -1) a = strings.Replace(a, "[URL]", url, -1)
if i == 0 { if i == 0 {
args = []string{"-user-agent", Settings.UserAgent} if len(Settings.UserAgent) != 0 {
args = []string{"-user_agent", Settings.UserAgent}
}
} }
args = append(args, a) args = append(args, a)
@@ -1438,7 +1440,10 @@ func thirdPartyBuffer(streamID int, playlistID string) {
if a == "[URL]" { if a == "[URL]" {
a = strings.Replace(a, "[URL]", url, -1) a = strings.Replace(a, "[URL]", url, -1)
args = append(args, a) args = append(args, a)
args = append(args, fmt.Sprintf(":http-user-agent=%s", Settings.UserAgent))
if len(Settings.UserAgent) != 0 {
args = append(args, fmt.Sprintf(":http-user-agent=%s", Settings.UserAgent))
}
} else { } else {
args = append(args, a) args = append(args, a)

View File

@@ -146,3 +146,20 @@ func extractGZIP(gzipBody []byte, fileSource string) (body []byte, err error) {
body = resB.Bytes() body = resB.Bytes()
return return
} }
func compressGZIP(data *[]byte, file string) (err error) {
if len(file) != 0 {
f, err := os.Create(file)
if err != nil {
return err
}
w := gzip.NewWriter(f)
w.Write(*data)
w.Close()
}
return
}

View File

@@ -98,6 +98,8 @@ func Init() (err error) {
System.File.XML = getPlatformFile(fmt.Sprintf("%s%s.xml", System.Folder.Data, System.AppName)) System.File.XML = getPlatformFile(fmt.Sprintf("%s%s.xml", System.Folder.Data, System.AppName))
System.File.M3U = getPlatformFile(fmt.Sprintf("%s%s.m3u", System.Folder.Data, System.AppName)) System.File.M3U = getPlatformFile(fmt.Sprintf("%s%s.m3u", System.Folder.Data, System.AppName))
System.Compressed.GZxml = getPlatformFile(fmt.Sprintf("%s%s.xml.gz", System.Folder.Data, System.AppName))
err = activatedSystemAuthentication() err = activatedSystemAuthentication()
if err != nil { if err != nil {
return return
@@ -223,8 +225,6 @@ func StartSystem(updateProviderFiles bool) (err error) {
return return
} }
setURLScheme()
// Systeminformationen in der Konsole ausgeben // Systeminformationen in der Konsole ausgeben
showInfo(fmt.Sprintf("UUID:%s", Settings.UUID)) showInfo(fmt.Sprintf("UUID:%s", Settings.UUID))
showInfo(fmt.Sprintf("Tuner (Plex / Emby):%d", Settings.Tuner)) showInfo(fmt.Sprintf("Tuner (Plex / Emby):%d", Settings.Tuner))

View File

@@ -56,6 +56,10 @@ func updateServerSettings(request RequestStruct) (settings SettingsStrcut, err e
} }
if len(newUpdateTimes) == 0 {
newUpdateTimes = append(newUpdateTimes, "0000")
}
value = newUpdateTimes value = newUpdateTimes
case "cache.images": case "cache.images":
@@ -144,8 +148,6 @@ func updateServerSettings(request RequestStruct) (settings SettingsStrcut, err e
return return
} }
setURLScheme()
if Settings.AuthenticationWEB == false { if Settings.AuthenticationWEB == false {
Settings.AuthenticationAPI = false Settings.AuthenticationAPI = false

View File

@@ -42,6 +42,10 @@ type SystemStruct struct {
XML string XML string
} }
Compressed struct {
GZxml string
}
Flag struct { Flag struct {
Branch string Branch string
Debug int Debug int
@@ -280,8 +284,6 @@ type SettingsStrcut struct {
MappingFirstChannel float64 `json:"mapping.first.channel"` MappingFirstChannel float64 `json:"mapping.first.channel"`
Port string `json:"port"` Port string `json:"port"`
SSDP bool `json:"ssdp"` SSDP bool `json:"ssdp"`
SchemeM3U string `json:"scheme.m3u"`
SchemeXML string `json:"scheme.xml"`
TempPath string `json:"temp.path"` TempPath string `json:"temp.path"`
Tuner int `json:"tuner"` Tuner int `json:"tuner"`
Update []string `json:"update"` Update []string `json:"update"`

View File

@@ -138,8 +138,6 @@ func loadSettings() (settings SettingsStrcut, err error) {
defaults["version"] = System.DBVersion defaults["version"] = System.DBVersion
defaults["xteveAutoUpdate"] = true defaults["xteveAutoUpdate"] = true
defaults["temp.path"] = System.Folder.Temp defaults["temp.path"] = System.Folder.Temp
defaults["scheme.M3U"] = "HTTP"
defaults["scheme.XML"] = "HTTP"
// Default Werte setzen // Default Werte setzen
for key, value := range defaults { for key, value := range defaults {
@@ -254,14 +252,6 @@ func setGlobalDomain(domain string) {
return return
} }
func setURLScheme() {
System.ServerProtocol.M3U = strings.ToLower(Settings.SchemeM3U)
System.ServerProtocol.XML = strings.ToLower(Settings.SchemeXML)
return
}
// UUID generieren // UUID generieren
func createUUID() (uuid string) { func createUUID() (uuid string) {
uuid = time.Now().Format("2006-01") + "-" + randomString(4) + "-" + randomString(6) uuid = time.Now().Format("2006-01") + "-" + randomString(4) + "-" + randomString(6)

File diff suppressed because one or more lines are too long

View File

@@ -206,7 +206,7 @@ func Auto(w http.ResponseWriter, r *http.Request) {
// xTeVe : Web Server /xmltv/ und /m3u/ // xTeVe : Web Server /xmltv/ und /m3u/
func xTeVe(w http.ResponseWriter, r *http.Request) { func xTeVe(w http.ResponseWriter, r *http.Request) {
var requestType, groupTitle, file, content string var requestType, groupTitle, file, content, contentType string
var err error var err error
var path = strings.TrimPrefix(r.URL.Path, "/") var path = strings.TrimPrefix(r.URL.Path, "/")
var groups = []string{} var groups = []string{}
@@ -216,7 +216,6 @@ func xTeVe(w http.ResponseWriter, r *http.Request) {
// XMLTV Datei // XMLTV Datei
if strings.Contains(path, "xmltv/") { if strings.Contains(path, "xmltv/") {
w.Header().Set("Content-Type", "application/xml")
requestType = "xml" requestType = "xml"
file = System.Folder.Data + getFilenameFromPath(path) file = System.Folder.Data + getFilenameFromPath(path)
@@ -260,6 +259,13 @@ func xTeVe(w http.ResponseWriter, r *http.Request) {
return return
} }
contentType = http.DetectContentType([]byte(content))
if strings.Contains(strings.ToLower(contentType), "xml") {
contentType = "application/xml; charset=utf-8"
}
w.Header().Set("Content-Type", contentType)
if err == nil { if err == nil {
w.Write([]byte(content)) w.Write([]byte(content))
} }
@@ -585,6 +591,8 @@ func Web(w http.ResponseWriter, r *http.Request) {
var language LanguageUI var language LanguageUI
setGlobalDomain(r.Host)
if System.Dev == true { if System.Dev == true {
lang, err = loadJSONFileToMap(fmt.Sprintf("html/lang/%s.json", Settings.Language)) lang, err = loadJSONFileToMap(fmt.Sprintf("html/lang/%s.json", Settings.Language))

View File

@@ -641,9 +641,10 @@ func createXMLTVFile() (err error) {
var xmlOutput = []byte(xml.Header + string(content)) var xmlOutput = []byte(xml.Header + string(content))
writeByteToFile(System.File.XML, xmlOutput) writeByteToFile(System.File.XML, xmlOutput)
xepgXML = XMLTV{} showInfo("XEPG:" + fmt.Sprintf("Compress XMLTV file (%s)", System.Compressed.GZxml))
err = compressGZIP(&xmlOutput, System.Compressed.GZxml)
//saveMapToJSONFile(System.File.Images, Data.Cache.ImageCache) xepgXML = XMLTV{}
return return
} }

View File

@@ -21,8 +21,7 @@ menuItems.push(new MainMenuItem("logout", "{{.mainMenu.item.logout}}", "logout.p
// Kategorien für die Einstellungen // Kategorien für die Einstellungen
var settingsCategory = new Array() var settingsCategory = new Array()
settingsCategory.push(new SettingsCategoryItem("{{.settings.category.general}}", "xteveAutoUpdate,tuner,epgSource,api,scheme.m3u,scheme.xml")) settingsCategory.push(new SettingsCategoryItem("{{.settings.category.general}}", "xteveAutoUpdate,tuner,epgSource,api"));settingsCategory.push(new SettingsCategoryItem("{{.settings.category.files}}", "update,files.update,temp.path,cache.images,xepg.replace.missing.images"))
settingsCategory.push(new SettingsCategoryItem("{{.settings.category.files}}", "update,files.update,temp.path,cache.images,xepg.replace.missing.images"))
settingsCategory.push(new SettingsCategoryItem("{{.settings.category.streaming}}", "buffer,buffer.size.kb,buffer.timeout,user.agent,ffmpeg.path,ffmpeg.options,vlc.path,vlc.options")) settingsCategory.push(new SettingsCategoryItem("{{.settings.category.streaming}}", "buffer,buffer.size.kb,buffer.timeout,user.agent,ffmpeg.path,ffmpeg.options,vlc.path,vlc.options"))
settingsCategory.push(new SettingsCategoryItem("{{.settings.category.backup}}", "backup.path,backup.keep")) settingsCategory.push(new SettingsCategoryItem("{{.settings.category.backup}}", "backup.path,backup.keep"))
settingsCategory.push(new SettingsCategoryItem("{{.settings.category.authentication}}", "authentication.web,authentication.pms,authentication.m3u,authentication.xml,authentication.api")) settingsCategory.push(new SettingsCategoryItem("{{.settings.category.authentication}}", "authentication.web,authentication.pms,authentication.m3u,authentication.xml,authentication.api"))

View File

@@ -372,38 +372,6 @@ class SettingsCategory {
setting.appendChild(tdRight) setting.appendChild(tdRight)
break break
case "scheme.m3u":
var tdLeft = document.createElement("TD")
tdLeft.innerHTML = "{{.settings.schemeM3U.title}}" + ":"
var tdRight = document.createElement("TD")
var text:any[] = ["HTTP", "HTTPS"]
var values:any[] = ["HTTP", "HTTPS"]
var select = content.createSelect(text, values, data, settingsKey)
select.setAttribute("onchange", "javascript: this.className = 'changed'")
tdRight.appendChild(select)
setting.appendChild(tdLeft)
setting.appendChild(tdRight)
break
case "scheme.xml":
var tdLeft = document.createElement("TD")
tdLeft.innerHTML = "{{.settings.schemeXML.title}}" + ":"
var tdRight = document.createElement("TD")
var text:any[] = ["HTTP", "HTTPS"]
var values:any[] = ["HTTP", "HTTPS"]
var select = content.createSelect(text, values, data, settingsKey)
select.setAttribute("onchange", "javascript: this.className = 'changed'")
tdRight.appendChild(select)
setting.appendChild(tdLeft)
setting.appendChild(tdRight)
break
} }
return setting return setting
@@ -515,15 +483,6 @@ class SettingsCategory {
text = "{{.settings.replaceEmptyImages.description}}" text = "{{.settings.replaceEmptyImages.description}}"
break break
case "scheme.m3u":
text = "{{.settings.schemeM3U.description}}"
break
case "scheme.xml":
text = "{{.settings.schemeXML.description}}"
break
default: default:
text = "" text = ""
break break

View File

@@ -39,7 +39,7 @@ var GitHub = GitHubStruct{Branch: "master", User: "xteve-project", Repo: "xTeVe-
const Name = "xTeVe" const Name = "xTeVe"
// Version : Version, die Build Nummer wird in der main func geparst. // Version : Version, die Build Nummer wird in der main func geparst.
const Version = "2.1.1.0112" const Version = "2.1.1.0117"
// DBVersion : Datanbank Version // DBVersion : Datanbank Version
const DBVersion = "2.1.0" const DBVersion = "2.1.0"