Add CLI: info Add CLI: restore Improves UPnP support for Plex CSS: Add min-width for Ch.No. Fixed missing images on cache for localhost
275 lines
5.3 KiB
Go
275 lines
5.3 KiB
Go
package src
|
|
|
|
import (
|
|
b64 "encoding/base64"
|
|
"errors"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
func xTeVeAutoBackup() (err error) {
|
|
|
|
var archiv = "xteve_auto_backup_" + time.Now().Format("20060102_1504") + ".zip"
|
|
var target string
|
|
var sourceFiles = make([]string, 0)
|
|
var oldBackupFiles = make([]string, 0)
|
|
var debug string
|
|
|
|
if len(Settings.BackupPath) > 0 {
|
|
System.Folder.Backup = Settings.BackupPath
|
|
}
|
|
|
|
showInfo("Backup Path:" + System.Folder.Backup)
|
|
|
|
err = checkFolder(System.Folder.Backup)
|
|
if err != nil {
|
|
ShowError(err, 1070)
|
|
return
|
|
}
|
|
|
|
// Alte Backups löschen
|
|
files, err := ioutil.ReadDir(System.Folder.Backup)
|
|
|
|
if err == nil {
|
|
|
|
for _, file := range files {
|
|
|
|
if filepath.Ext(file.Name()) == ".zip" && strings.Contains(file.Name(), "xteve_auto_backup") {
|
|
oldBackupFiles = append(oldBackupFiles, file.Name())
|
|
}
|
|
|
|
}
|
|
|
|
// Alle Backups löschen
|
|
var end int
|
|
switch Settings.BackupKeep {
|
|
case 0:
|
|
end = 0
|
|
default:
|
|
end = Settings.BackupKeep - 1
|
|
}
|
|
|
|
for i := 0; i < len(oldBackupFiles)-end; i++ {
|
|
|
|
os.RemoveAll(System.Folder.Backup + oldBackupFiles[i])
|
|
debug = fmt.Sprintf("Delete backup file:%s", oldBackupFiles[i])
|
|
showDebug(debug, 1)
|
|
|
|
}
|
|
|
|
if Settings.BackupKeep == 0 {
|
|
return
|
|
}
|
|
|
|
} else {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
// Backup erstellen
|
|
if err == nil {
|
|
|
|
target = System.Folder.Backup + archiv
|
|
|
|
for _, i := range SystemFiles {
|
|
sourceFiles = append(sourceFiles, System.Folder.Config+i)
|
|
}
|
|
|
|
sourceFiles = append(sourceFiles, System.Folder.ImagesUpload)
|
|
|
|
err = zipFiles(sourceFiles, target)
|
|
|
|
if err == nil {
|
|
|
|
debug = fmt.Sprintf("Create backup file:%s", target)
|
|
showDebug(debug, 1)
|
|
|
|
showInfo("Backup file:" + target)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func xteveBackup() (archiv string, err error) {
|
|
|
|
err = checkFolder(System.Folder.Temp)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
archiv = "xteve_backup_" + time.Now().Format("20060102_1504") + ".zip"
|
|
|
|
var target = System.Folder.Temp + archiv
|
|
var sourceFiles = make([]string, 0)
|
|
|
|
for _, i := range SystemFiles {
|
|
sourceFiles = append(sourceFiles, System.Folder.Config+i)
|
|
}
|
|
|
|
sourceFiles = append(sourceFiles, System.Folder.Data)
|
|
|
|
err = zipFiles(sourceFiles, target)
|
|
if err != nil {
|
|
ShowError(err, 0)
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func xteveRestore(archive string) (newWebURL string, err error) {
|
|
|
|
var newPort, oldPort, backupVersion, tmpRestore string
|
|
|
|
tmpRestore = System.Folder.Temp + "restore" + string(os.PathSeparator)
|
|
|
|
err = checkFolder(tmpRestore)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
// Zip Archiv in tmp entpacken
|
|
err = extractZIP(archive, tmpRestore)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
// Neue Config laden um den Port und die Version zu überprüfen
|
|
newConfig, err := loadJSONFileToMap(tmpRestore + "settings.json")
|
|
if err != nil {
|
|
ShowError(err, 0)
|
|
return
|
|
}
|
|
|
|
backupVersion = newConfig["version"].(string)
|
|
if backupVersion < System.Compatibility {
|
|
err = errors.New(getErrMsg(1013))
|
|
return
|
|
}
|
|
|
|
// Zip Archiv in den Config Ordner entpacken
|
|
err = extractZIP(archive, System.Folder.Config)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
// Neue Config laden um den Port und die Version zu überprüfen
|
|
newConfig, err = loadJSONFileToMap(System.Folder.Config + "settings.json")
|
|
if err != nil {
|
|
ShowError(err, 0)
|
|
return
|
|
}
|
|
|
|
newPort = newConfig["port"].(string)
|
|
oldPort = Settings.Port
|
|
|
|
if newPort == oldPort {
|
|
|
|
if err != nil {
|
|
ShowError(err, 0)
|
|
}
|
|
|
|
loadSettings()
|
|
|
|
err := Init()
|
|
if err != nil {
|
|
ShowError(err, 0)
|
|
return "", err
|
|
}
|
|
|
|
err = StartSystem(true)
|
|
if err != nil {
|
|
ShowError(err, 0)
|
|
return "", err
|
|
}
|
|
|
|
return "", err
|
|
}
|
|
|
|
var url = System.URLBase + "/web/"
|
|
newWebURL = strings.Replace(url, ":"+oldPort, ":"+newPort, 1)
|
|
|
|
os.RemoveAll(tmpRestore)
|
|
|
|
return
|
|
}
|
|
|
|
func xteveRestoreFromWeb(input string) (newWebURL string, err error) {
|
|
|
|
// Base64 Json String in base64 umwandeln
|
|
b64data := input[strings.IndexByte(input, ',')+1:]
|
|
|
|
// Base64 in bytes umwandeln und speichern
|
|
sDec, err := b64.StdEncoding.DecodeString(b64data)
|
|
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
var archive = System.Folder.Temp + "restore.zip"
|
|
|
|
err = writeByteToFile(archive, sDec)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
newWebURL, err = xteveRestore(archive)
|
|
|
|
return
|
|
}
|
|
|
|
// XteveRestoreFromCLI : Wiederherstellung über die Kommandozeile
|
|
func XteveRestoreFromCLI(archive string) (err error) {
|
|
|
|
var confirm string
|
|
|
|
println()
|
|
showInfo(fmt.Sprintf("Version:%s Build: %s", System.Version, System.Build))
|
|
showInfo(fmt.Sprintf("Backup File:%s", archive))
|
|
showInfo(fmt.Sprintf("System Folder:%s", getPlatformPath(System.Folder.Config)))
|
|
println()
|
|
|
|
fmt.Print("All data will be replaced with those from the backup. Should the files be restored? [yes|no]:")
|
|
|
|
fmt.Scanln(&confirm)
|
|
|
|
switch strings.ToLower(confirm) {
|
|
|
|
case "yes":
|
|
break
|
|
|
|
case "no":
|
|
return
|
|
|
|
default:
|
|
fmt.Println("Invalid input")
|
|
return
|
|
|
|
}
|
|
|
|
if len(System.Folder.Config) > 0 {
|
|
|
|
err = checkFilePermission(System.Folder.Config)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
_, err = xteveRestore(archive)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
showHighlight(fmt.Sprintf("Restor:Backup was successfully restored. %s can now be started normally", System.Name))
|
|
|
|
}
|
|
return
|
|
}
|