summaryrefslogtreecommitdiffstats
path: root/abs/core
diff options
context:
space:
mode:
Diffstat (limited to 'abs/core')
-rw-r--r--abs/core/mythtv/stable-0.25/git_src/checkout_mythtv.sh40
-rw-r--r--abs/core/mythtv/stable-0.25/git_src/checkout_mythweb.sh38
-rw-r--r--abs/core/mythtv/stable-0.25/git_src/git_hash1
-rw-r--r--abs/core/mythtv/stable-0.25/git_src/git_hash_web1
-rw-r--r--abs/core/mythtv/stable-0.25/mythplugins/PKGBUILD135
-rw-r--r--abs/core/mythtv/stable-0.25/mythplugins/__changelog1
-rw-r--r--abs/core/mythtv/stable-0.25/mythplugins/mythburn.py.patch285
-rw-r--r--abs/core/mythtv/stable-0.25/mythplugins/mythplugins-mythzoneminder.install11
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/0001-protect-metadata-loads-from-multiple-threads.patch52
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/0004-restore-fe-netcontrol-play-resume-functionality.patch27
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/MythBase.php.patch19
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/PKGBUILD172
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/__changelog5
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/bonjour-correction.patch32
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/git_version.patch13
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/HOST_SETTINGS.xml98
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/dvd_backup.xml39
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/game.xml12
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/info_menu.xml76
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/is.xml3
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/library.xml.patch26
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/linhes.xml60
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/mainmenu.xml.patch37
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/mythbackup.xml20
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/mythrestore.xml21
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/optical_menu.xml.patch23
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/original/create_patch.sh5
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/siriusmenu.xml419
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/update.xml9
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/update2.xml20
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/util_menu.xml.patch16
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/xmmenu.xml574
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/myth.sh4
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/myth_settings.patch1981
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/mythbackend38
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/mythbackend.lr9
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/mythbackend.sh117
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/mythfrontend.lr9
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/mythtv.install25
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/pretty9
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/smolt_jump.patch10
-rwxr-xr-xabs/core/mythtv/stable-0.25/mythtv/tmdb3.py278
-rwxr-xr-xabs/core/mythtv/stable-0.25/mythtv/tmdb3_db_update.py47
-rw-r--r--abs/core/mythtv/stable-0.25/mythweb/PKGBUILD77
-rw-r--r--abs/core/mythtv/stable-0.25/mythweb/mythweb.include8
-rw-r--r--abs/core/mythtv/stable-0.25/mythweb/mythweb.install18
-rw-r--r--abs/core/mythtv/stable-0.25/mythweb/mythweb_gen_light.conf1
-rw-r--r--abs/core/mythtv/stable-0.25/mythweb/schedules.php.patch16
-rw-r--r--abs/core/mythtv/stable-0.25/mythweb/sorting.php.patch19
-rw-r--r--abs/core/mythtv/stable-0.25/mythweb/tv-schedules.php.patch15
50 files changed, 0 insertions, 4971 deletions
diff --git a/abs/core/mythtv/stable-0.25/git_src/checkout_mythtv.sh b/abs/core/mythtv/stable-0.25/git_src/checkout_mythtv.sh
deleted file mode 100644
index 2dc923a..0000000
--- a/abs/core/mythtv/stable-0.25/git_src/checkout_mythtv.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/bin/bash
-#Quick script used to checkout the MythTV source
-#This source should be used build all mythplugins & main program
-#76df8e6c8f7b84a157607d8c25fd19f39d8dc830
-_gitroot="https://github.com/MythTV/mythtv.git"
-_gitname="mythtv"
-startdir=`pwd`
-#Set this to True, to update mythtv to the latest.
-#If not true then it will use the hash stored in git_hash
-_current="True"
-
-_checkoutHASH=`cat git_hash`
-
-if [ -d $_gitname ]
-then
- cd $_gitname
- git checkout fixes/0.25
- git pull
- echo "The local files are updated."
-else
- git clone -b fixes/0.25 $_gitroot
-fi
-
-if [ -d $_gitname ]
-then
- cd $_gitname
- if [ $_current == True ]
- then
- git rev-parse HEAD > $startdir/git_hash
- else
- git checkout $_checkoutHASH
- fi
- pwd
- ls
-# cd $_gitname
- sh ./version.sh `pwd`
-fi
-echo "GIT checkout done or server timeout"
-
-
diff --git a/abs/core/mythtv/stable-0.25/git_src/checkout_mythweb.sh b/abs/core/mythtv/stable-0.25/git_src/checkout_mythweb.sh
deleted file mode 100644
index 6e8e67e..0000000
--- a/abs/core/mythtv/stable-0.25/git_src/checkout_mythweb.sh
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/bin/bash
-#Quick script used to checkout the Mythweb source
-#This source should be used build all mythplugins & main program
-#76df8e6c8f7b84a157607d8c25fd19f39d8dc830
-_gitroot="https://github.com/MythTV/mythweb.git"
-_gitname="mythweb"
-startdir=`pwd`
-#Set this to True, to update mythtv to the latest.
-#If not true then it will use the hash stored in git_hash
-_current="True"
-
-_checkoutHASH=`cat git_hash_web`
-
-if [ -d $_gitname ]
-then
- cd $_gitname
- git checkout fixes/0.25
- git pull
- echo "The local files are updated."
-else
- git clone -b fixes/0.25 $_gitroot
-fi
-
-if [ -d $_gitname ]
-then
- cd $_gitname
- if [ $_current == True ]
- then
- git rev-parse HEAD > $startdir/git_hash_web
- else
- git checkout $_checkoutHASH
- fi
- pwd
- ls
-fi
-echo "GIT checkout done or server timeout"
-
-
diff --git a/abs/core/mythtv/stable-0.25/git_src/git_hash b/abs/core/mythtv/stable-0.25/git_src/git_hash
deleted file mode 100644
index 0d4d167..0000000
--- a/abs/core/mythtv/stable-0.25/git_src/git_hash
+++ /dev/null
@@ -1 +0,0 @@
-b5adf034713acfd1923eecad2f96c43be688d0d0
diff --git a/abs/core/mythtv/stable-0.25/git_src/git_hash_web b/abs/core/mythtv/stable-0.25/git_src/git_hash_web
deleted file mode 100644
index 04176fb..0000000
--- a/abs/core/mythtv/stable-0.25/git_src/git_hash_web
+++ /dev/null
@@ -1 +0,0 @@
-48778a639409bc591ee4a6ab4bec543da94e66c1
diff --git a/abs/core/mythtv/stable-0.25/mythplugins/PKGBUILD b/abs/core/mythtv/stable-0.25/mythplugins/PKGBUILD
deleted file mode 100644
index 7278249..0000000
--- a/abs/core/mythtv/stable-0.25/mythplugins/PKGBUILD
+++ /dev/null
@@ -1,135 +0,0 @@
-# $Id: PKGBUILD 91281 2010-09-26 06:04:21Z remy $
-# Maintainer: Giovanni Scafora <giovanni@archlinux.org>
-
-pkgbase=mythplugins
-pkgname=('mytharchive'
- 'mythbrowser'
- 'mythgallery'
- 'mythgame'
- 'mythmusic'
- 'mythnetvision'
- 'mythnews'
- 'mythweather'
- 'mythzoneminder')
-pkgver=0.25
-pkgrel=19
-
-arch=('i686' 'x86_64')
-url="http://www.mythtv.org"
-license=('GPL')
-conflicts=('mythmovies')
-makedepends=("mythtv>=${pkgver}" 'mplayer' 'fftw2' 'dvdauthor' 'libexif'
- 'python-imaging' 'libcdaudio' 'taglib' 'perl-xml-simple' 'dcraw'
- 'libvisual' 'perl-xml-xpath' 'perl-image-size' 'perl-json'
- 'perl-class-inspector' 'perl-datetime-format-iso8601'
- 'flac' 'libvorbis' 'python2' 'python-pycurl' 'python-oauth'
- 'libcdio' 'fftw')
-
-source=(mythburn.py.patch)
-
-
-#_gitroot="https://github.com/MythTV/mythtv.git"
-#_gitname="mythplugins"
-
-build() {
-
- if [ -e ${srcdir}/mythplugins ]
- then
- rm -rf ${srcdir}/mythplugins
- fi
-
- cd ${startdir}
- msg "copy in myth plugins src"
- cp -rp ../git_src/mythtv/mythplugins $srcdir
- cd ${srcdir}/${pkgbase}
-
-
-
- msg "The local files are updated."
- #find . -name '*.py' -type f | xargs sed -i 's@^#!.*python$@#!/usr/bin/python2@'
- cd ${srcdir}/${pkgbase}
- ./configure --prefix=/usr \
- --enable-all --python=/usr/bin/python2
-
- qmake mythplugins.pro || return 1
- make || return 1
-}
-
-package_mytharchive() {
- pkgdesc="MythTV plugin that lets you create DVDs from or archive your recorded shows"
- depends=("mythtv>=${pkgver}" 'libxmu' 'pil' 'dvdauthor' 'm2vrequantiser' 'mjpegtools' 'cdrkit' 'dvd+rw-tools')
-# replaces=('mytharchive')
- cd "${srcdir}/${_gitname}/${pkgbase}/mytharchive"
-
- patch mythburn/scripts/mythburn.py < $srcdir/mythburn.py.patch || return 1
- make INSTALL_ROOT="${pkgdir}" install || return 1
-}
-
-package_mythbrowser() {
- pkgdesc="Mini web browser for MythTV"
- depends=("mythtv>=${pkgver}")
-# replaces=('mythbrowser')
- cd "${srcdir}/${_gitname}/${pkgbase}/mythbrowser"
- make INSTALL_ROOT="${pkgdir}" install || return 1
-}
-
-package_mythgallery() {
- pkgdesc="Image gallery plugin for MythTV"
- depends=("mythtv>=${pkgver}" 'libexif')
-# replaces=('mythgallery')
- cd "${srcdir}/${_gitname}/${pkgbase}/mythgallery"
- make INSTALL_ROOT="${pkgdir}" install || return 1
-}
-
-package_mythgame() {
- pkgdesc="Game emulator module for MythTV"
- depends=("mythtv>=${pkgver}" 'zlib')
-# replaces=('mythgame')
- cd "${srcdir}/${_gitname}/${pkgbase}/mythgame"
- make INSTALL_ROOT="${pkgdir}" install || return 1
-}
-
-package_mythmusic() {
- pkgdesc="Music playing plugin for MythTV"
- depends=("mythtv>=${pkgver}" 'flac' 'libvorbis' 'libcdaudio' 'cdparanoia' 'taglib' 'libvisual-plugins' 'libcdio' 'fftw' )
-# replaces=('mythmusic')
- cd "${srcdir}/${_gitname}/${pkgbase}/mythmusic"
- make INSTALL_ROOT="${pkgdir}" install || return 1
-}
-
-package_mythnetvision() {
- pkgdesc="MythNetvision plugin for MythTV"
- depends=("mythtv>=${pkgver}" 'python-pycurl' 'python-oauth' 'python2-lxml' 'python2' )
-# replaces=('mythnetvision')
- cd "${srcdir}/${_gitname}/${pkgbase}/mythnetvision"
- make INSTALL_ROOT="${pkgdir}" install || return 1
-}
-
-package_mythnews() {
- pkgdesc="News checking plugin for MythTV"
- depends=("mythtv>=${pkgver}")
-# replaces=('mythnews')
- cd "${srcdir}/${_gitname}/${pkgbase}/mythnews"
- make INSTALL_ROOT="${pkgdir}" install || return 1
-}
-
-package_mythweather() {
- pkgdesc="Weather checking plugin for MythTV"
- depends=("mythtv>=${pkgver}" 'perl-xml-xpath' 'perl-image-size'
- 'perl-class-inspector' 'perl-datetime-format-iso8601'
- 'perl-date-manip' 'perl-json')
-# replaces=('mythweather')
- cd "${srcdir}/${_gitname}/${pkgbase}/mythweather"
- make INSTALL_ROOT="${pkgdir}" install || return 1
-}
-
-package_mythzoneminder() {
- pkgdesc="Allows for viewing of CCTV cameras through zoneminder"
- depends=("mythtv>=${pkgver}")
-# replaces=('mythzoneminder')
-# install=mythplugins-mythzoneminder.install
- cd "${srcdir}/${_gitname}/${pkgbase}/mythzoneminder"
- make INSTALL_ROOT="${pkgdir}" install || return 1
-}
-
-md5sums=('19446f65722769926bafad220bbc6551')
diff --git a/abs/core/mythtv/stable-0.25/mythplugins/__changelog b/abs/core/mythtv/stable-0.25/mythplugins/__changelog
deleted file mode 100644
index 48cdce8..0000000
--- a/abs/core/mythtv/stable-0.25/mythplugins/__changelog
+++ /dev/null
@@ -1 +0,0 @@
-placeholder
diff --git a/abs/core/mythtv/stable-0.25/mythplugins/mythburn.py.patch b/abs/core/mythtv/stable-0.25/mythplugins/mythburn.py.patch
deleted file mode 100644
index 380385b..0000000
--- a/abs/core/mythtv/stable-0.25/mythplugins/mythburn.py.patch
+++ /dev/null
@@ -1,285 +0,0 @@
---- mythburn.py.orig 2012-12-16 15:23:41.000000000 -0600
-+++ mythburn.py 2012-12-18 14:23:56.000000000 -0600
-@@ -44,7 +44,7 @@
-
-
- # version of script - change after each update
--VERSION="0.1.20120304-1"
-+VERSION="0.1.20121218-1"
-
- # keep all temporary files for debugging purposes
- # set this to True before a first run through when testing
-@@ -93,6 +93,7 @@
- from fcntl import ioctl
- import CDROM
- from shutil import copy
-+from subprocess import Popen, PIPE
-
- import MythTV
- from MythTV.altdict import OrdDict
-@@ -425,7 +426,7 @@
- os.remove(os.path.join(root, name))
-
- #############################################################
--# Romoves all the objects from a directory
-+# Removes all the objects from a directory
-
- def deleteEverythingInFolder(folder):
- for root, dirs, files in os.walk(folder, topdown=False):
-@@ -615,7 +616,7 @@
- # of a video file from its stream info file
-
- def getVideoParams(folder):
-- """Returns the video resolution, fps and aspect ratio for the video file from the streamindo.xml file"""
-+ """Returns the video resolution, fps and aspect ratio for the video file from the streaminfo.xml file"""
-
- #open the XML containing information about this file
- infoDOM = xml.dom.minidom.parse(os.path.join(folder, 'streaminfo.xml'))
-@@ -651,14 +652,14 @@
- # Gets the aspect ratio of a video file from its stream info file
-
- def getAspectRatioOfVideo(index):
-- """Returns the aspect ratio of the video file (1.333, 1.778, etc)"""
-+ """Returns the aspect ratio of the original video file (1.333, 1.778, etc)"""
-
- #open the XML containing information about this file
-- infoDOM = xml.dom.minidom.parse(os.path.join(getItemTempPath(index), 'streaminfo.xml'))
-+ infoDOM = xml.dom.minidom.parse(os.path.join(getItemTempPath(index), 'streaminfo_orig.xml'))
-
- #error out if its the wrong XML
- if infoDOM.documentElement.tagName != "file":
-- fatalError("Stream info file doesn't look right (%s)" % os.path.join(getItemTempPath(index), 'streaminfo.xml'))
-+ fatalError("Stream info file doesn't look right (%s)" % os.path.join(getItemTempPath(index), 'streaminfo_orig.xml'))
- video = infoDOM.getElementsByTagName("file")[0].getElementsByTagName("streams")[0].getElementsByTagName("video")[0]
- if video.attributes["aspectratio"].value != 'N/A':
- aspect_ratio = float(video.attributes["aspectratio"].value)
-@@ -679,7 +680,7 @@
-
- #error out if its the wrong XML
- if infoDOM.documentElement.tagName != "file":
-- fatalError("Stream info file doesn't look right (%s)" % os.path.join(getItemTempPath(index), 'streaminfo_orig.xml'))
-+ fatalError("Stream info file doesn't look right (%s)" % os.path.join(getItemTempPath(index), 'streaminfo.xml'))
-
- video = infoDOM.getElementsByTagName("file")[0].getElementsByTagName("streams")[0].getElementsByTagName("video")[0]
- video_start = float(video.attributes["start_time"].value)
-@@ -1432,9 +1433,23 @@
-
- data.rating = str(vid.userrating)
-
-- if doesFileExist(vid.coverfile):
-- data.coverfile = vid.coverfile
-+ data.coverfile = None
-
-+ #Check filename for valid path. If valid return nothing.
-+ if os.path.isfile(str(vid.coverfile)):
-+ write("Coverart is in local directory: %s" % vid.coverfile)
-+ data.coverfile = vid.coverfile
-+ else:
-+ # iterate through storage group directories to get Coverart
-+ for sg in DB.getStorageGroup(groupname='Coverart', hostname=DB.gethostname()):
-+ if os.path.isfile(os.path.join(sg.dirname, str(vid.coverfile))):
-+ write("Coverart is in Storage Groups: %s%s" % (sg.dirname, vid.coverfile))
-+ data.coverfile = os.path.join(sg.dirname, str(vid.coverfile))
-+ break
-+
-+ if data.coverfile == None:
-+ write("No Coverart Found")
-+
- elif file.attributes["type"].value=="file":
- data.type = file.attributes["type"].value
- data.filename = file.attributes["filename"].value
-@@ -1485,6 +1500,30 @@
-
-
- #############################################################
-+# Finds the path of a video file from a Storage Group
-+
-+def getVideoPath(filename):
-+
-+ filepath = None
-+
-+ #Check filename for valid path. If valid return nothing.
-+ if os.path.isfile(filename):
-+ write("Video is in local video directory: %s" % filename)
-+ return (filepath)
-+ else:
-+ # iterate through storage group directories
-+ for sg in DB.getStorageGroup(groupname='Videos', hostname=DB.gethostname()):
-+ wholepath = os.path.join(sg.dirname, filename)
-+ if os.path.isfile(wholepath):
-+ write("Video is in Storage Groups: %s" % wholepath)
-+ filepath = "".join(sg.dirname)
-+ return (filepath)
-+ break
-+
-+ if filepath == None:
-+ write("Video is not in local video directory or Storage Groups")
-+
-+#############################################################
- # Pre-process a single video/recording file
-
- def preProcessFile(file, folder, count):
-@@ -1501,7 +1540,7 @@
- if file.attributes["type"].value == "recording":
- mediafile = file.attributes["filename"].value
- elif file.attributes["type"].value == "video":
-- mediafile = os.path.join(videopath, file.attributes["filename"].value)
-+ mediafile = os.path.join(getVideoPath(file.attributes["filename"].value), file.attributes["filename"].value)
- elif file.attributes["type"].value == "file":
- mediafile = file.attributes["filename"].value
- else:
-@@ -1661,6 +1700,37 @@
- fatalError("Failed while running mytharchivehelper to get stream information.\n"
- "Result: %d, Command was %s" % (result, command))
-
-+ #open the XML containing information about this file
-+ infoDOM = xml.dom.minidom.parse(xmlFilename)
-+
-+ #error out if its the wrong XML
-+ if infoDOM.documentElement.tagName != "file":
-+ fatalError("This info file doesn't look right (%s)." % xmlFilename)
-+
-+ file = infoDOM.getElementsByTagName("file")[0]
-+ video = infoDOM.getElementsByTagName("file")[0].getElementsByTagName("streams")[0].getElementsByTagName("video")[0]
-+
-+ #use ffmpeg to get display aspect ratio (DAR) of video
-+ cmd = "mythffmpeg -i " + quoteCmdArg(file.attributes["filename"].value) + " 2>&1"
-+ aspect_ratio = Popen(cmd, shell=True, stdout=PIPE).stdout.read()
-+ if "DAR" in aspect_ratio:
-+ #clean DAR string
-+ aspect_ratio = aspect_ratio.split("DAR ")[-1].split(",")[0]
-+ aspect_ratio = ''.join([c for c in aspect_ratio if c in '1234567890:']).split(":")
-+ else:
-+ #calculate aspect from video size
-+ aspect_ratio = getVideoSize(xmlFilename)
-+
-+ #convert to decimal
-+ aspect_ratio = float(aspect_ratio[0]) / float(aspect_ratio[1])
-+
-+ write("Video %s aspect ratio is: %s" % (filename, aspect_ratio))
-+
-+ #set aspect ratio
-+ video.setAttribute("aspectratio",str(aspect_ratio))
-+
-+ WriteXMLToFile (infoDOM,xmlFilename)
-+
- # print out the streaminfo.xml file to the log
- infoDOM = xml.dom.minidom.parse(xmlFilename)
- write(xmlFilename + ":-\n" + infoDOM.toprettyxml(" ", ""), False)
-@@ -1707,7 +1777,7 @@
- write("Using cutlist: %s" % cutlist_s)
-
- if (localfile != ""):
-- localfile = quoteFilename(localfile)
-+ localfile = quoteCmdArg(localfile)
- if usecutlist == True:
- command = "mythtranscode --mpeg2 --honorcutlist %s --infile %s --outfile %s" % (cutlist_s, quoteCmdArg(localfile), quoteCmdArg(destination))
- else:
-@@ -1973,7 +2043,7 @@
- #############################################################
- # Re-encodes a file to mpeg2
-
--def encodeVideoToMPEG2(source, destvideofile, video, audio1, audio2, aspectratio, profile):
-+def encodeVideoToMPEG2(source, destvideofile, video, folder, audio1, audio2, aspectratio, profile):
- """Encodes an unknown video source file eg. AVI to MPEG2 video and AC3 audio, use mythffmpeg"""
-
- profileNode = findEncodingProfile(profile)
-@@ -1998,7 +2068,36 @@
- value = quoteCmdArg(destvideofile)
- if value == "%aspect":
- value = aspectratio
-+ if value == "720x480" or value == "720x576":
-+ videores, fps, videoAR = getVideoParams(folder)
-+ videoWidth = int(videores.split("x")[0])
-+ videoHeight = int(videores.split("x")[1])
-+
-+ #add padding to correct for aspects > than 1.9:1
-+ if float(videoAR) >= 1.9:
-+ #check which video type and set the correct height
-+ if videomode == "ntsc":
-+ videoModeHeight = 480
-+ else:
-+ videoModeHeight = 576
-
-+ #calculate the video height based on the aspect ratio of the video
-+ #multiply by 1.185 to compensate for dvds non-square pixels
-+ calVideoHeight = int(round((720 / float(videoAR)) * 1.185))
-+ if calVideoHeight % 2 == 1:
-+ calVideoHeight = calVideoHeight + 1
-+ #write("calVideoHeight: %s" % calVideoHeight)
-+
-+ #use original video height if the calculated video height is close
-+ if (calVideoHeight + 20 < videoHeight) or (calVideoHeight - 20 > videoHeight):
-+ videoHeight = calVideoHeight
-+
-+ cropPixels = videoModeHeight - videoHeight
-+
-+ write("Crop Pixels Total: %s" % cropPixels)
-+ name = "-vf"
-+ value = "\"scale=720:%d, setsar=1:1, pad=720:%d:0:%d:black\"" % (videoModeHeight - cropPixels, videoModeHeight, cropPixels / 2)
-+
- # only re-encode the audio if it is not already in AC3 format
- if audio1[AUDIO_CODEC] == "AC3":
- if name == "-acodec":
-@@ -2094,10 +2193,6 @@
- outaudiosamplerate = 48000
- outaudiocodec = "ac3"
- deinterlace = 0
-- croptop = 0
-- cropright = 0
-- cropbottom = 0
-- cropleft = 0
- qmin = 5
- qmax = 31
- qdiff = 31
-@@ -2121,14 +2216,6 @@
- outvideores = value
- if name == "-deinterlace":
- deinterlace = 1
-- if name == "-croptop":
-- croptop = value
-- if name == "-cropright":
-- cropright = value
-- if name == "-cropbottom":
-- cropbottom = value
-- if name == "-cropleft":
-- cropleft = value
- if name == "-qmin":
- qmin = value
- if name == "-qmax":
-@@ -4409,7 +4496,7 @@
- elif file.attributes["type"].value=="recording":
- mediafile = file.attributes["filename"].value
- elif file.attributes["type"].value=="video":
-- mediafile=os.path.join(videopath, file.attributes["filename"].value)
-+ mediafile=os.path.join(getVideoPath(file.attributes["filename"].value), file.attributes["filename"].value)
- elif file.attributes["type"].value=="file":
- mediafile=file.attributes["filename"].value
- else:
-@@ -4547,7 +4634,7 @@
-
- #do the re-encode
- encodeVideoToMPEG2(mediafile, os.path.join(folder, "newfile2.mpg"), video,
-- audio1, audio2, aspectratio, profile)
-+ folder, audio1, audio2, aspectratio, profile)
- mediafile = os.path.join(folder, 'newfile2.mpg')
-
- #remove the old mediafile that was run through mythtranscode
-@@ -4621,7 +4708,7 @@
- elif file.attributes["type"].value=="recording":
- mediafile = file.attributes["filename"].value
- elif file.attributes["type"].value=="video":
-- mediafile=os.path.join(videopath, file.attributes["filename"].value)
-+ mediafile=os.path.join(getVideoPath(file.attributes["filename"].value), file.attributes["filename"].value)
- elif file.attributes["type"].value=="file":
- mediafile=file.attributes["filename"].value
- else:
-@@ -4701,7 +4788,7 @@
-
- #do the re-encode
- encodeVideoToMPEG2(mediafile, os.path.join(folder, "newfile2.mpg"), video,
-- audio1, audio2, aspectratio, profile)
-+ folder, audio1, audio2, aspectratio, profile)
- mediafile = os.path.join(folder, 'newfile2.mpg')
-
- #remove an intermediate file
diff --git a/abs/core/mythtv/stable-0.25/mythplugins/mythplugins-mythzoneminder.install b/abs/core/mythtv/stable-0.25/mythplugins/mythplugins-mythzoneminder.install
deleted file mode 100644
index a4e0c0d..0000000
--- a/abs/core/mythtv/stable-0.25/mythplugins/mythplugins-mythzoneminder.install
+++ /dev/null
@@ -1,11 +0,0 @@
-post_install() {
- . /etc/systemconfig
- if [ $SystemType = Master_backend -o $SystemType = Standalone ]
- then
- echo "This looks a zoneminder server install"
- echo "Installing zoneminder"
- #for reference the pacman statement below will not work because of a db lock.
- pacman -S zoneminder
- fi
-
-}
diff --git a/abs/core/mythtv/stable-0.25/mythtv/0001-protect-metadata-loads-from-multiple-threads.patch b/abs/core/mythtv/stable-0.25/mythtv/0001-protect-metadata-loads-from-multiple-threads.patch
deleted file mode 100644
index d8f4a0c..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/0001-protect-metadata-loads-from-multiple-threads.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From b20171597097f8b933065ef3291c63194d310fbf Mon Sep 17 00:00:00 2001
-From: George Nassas <george@nassas.com>
-Date: Sun, 10 Jun 2012 13:36:42 -0400
-Subject: [PATCH] protect metadata loads from multiple threads
-
----
- mythtv/libs/libmythmetadata/dbaccess.cpp | 9 +++++++++
- 1 files changed, 9 insertions(+), 0 deletions(-)
-
-diff --git a/mythtv/libs/libmythmetadata/dbaccess.cpp b/mythtv/libs/libmythmetadata/dbaccess.cpp
-index 67cd904..46adb7a 100644
---- a/mythtv/libs/libmythmetadata/dbaccess.cpp
-+++ b/mythtv/libs/libmythmetadata/dbaccess.cpp
-@@ -47,8 +47,11 @@ class SingleValueImp
-
- virtual ~SingleValueImp() {}
-
-+ mutable QMutex mutex;
-+
- void load_data()
- {
-+ QMutexLocker locker(&mutex);
- if (!m_ready)
- {
- fill_from_db();
-@@ -271,8 +274,11 @@ class MultiValueImp
- .arg(m_value_name).arg(m_table_name).arg(m_id_name);
- }
-
-+ mutable QMutex mutex;
-+
- void load_data()
- {
-+ QMutexLocker locker(&mutex);
- if (!m_ready)
- {
- fill_from_db();
-@@ -730,8 +736,11 @@ class FileAssociationsImp
- }
- }
-
-+ mutable QMutex mutex;
-+
- void load_data()
- {
-+ QMutexLocker locker(&mutex);
- if (!m_ready)
- {
- fill_from_db();
---
-1.7.2.5
-
diff --git a/abs/core/mythtv/stable-0.25/mythtv/0004-restore-fe-netcontrol-play-resume-functionality.patch b/abs/core/mythtv/stable-0.25/mythtv/0004-restore-fe-netcontrol-play-resume-functionality.patch
deleted file mode 100644
index 440a37a..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/0004-restore-fe-netcontrol-play-resume-functionality.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 2fb4b7bb111d7ec256f0b0f96c7271bcc0f61766 Mon Sep 17 00:00:00 2001
-From: George Nassas <george@nassas.com>
-Date: Fri, 24 Aug 2012 00:17:08 -0400
-Subject: [PATCH 4/4] restore fe netcontrol play/resume functionality
-
----
- mythtv/programs/mythfrontend/playbackbox.cpp | 4 +++-
- 1 files changed, 3 insertions(+), 1 deletions(-)
-
-diff --git a/mythtv/programs/mythfrontend/playbackbox.cpp b/mythtv/programs/mythfrontend/playbackbox.cpp
-index 734cce1..44bb343 100644
---- a/mythtv/programs/mythfrontend/playbackbox.cpp
-+++ b/mythtv/programs/mythfrontend/playbackbox.cpp
-@@ -3723,7 +3723,9 @@ void PlaybackBox::processNetworkControlCommand(const QString &command)
-
- pginfo.SetPathname(pginfo.GetPlaybackURL());
-
-- PlayX(pginfo, true, true);
-+ bool ignoreBookmark = tokens[1] == "PLAY";
-+
-+ PlayX(pginfo, ignoreBookmark, true);
- }
- else
- {
---
-1.7.2.5
-
diff --git a/abs/core/mythtv/stable-0.25/mythtv/MythBase.php.patch b/abs/core/mythtv/stable-0.25/mythtv/MythBase.php.patch
deleted file mode 100644
index ff1f4b6..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/MythBase.php.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-*** a/mythtv/bindings/php/MythBase.php.old 2011-04-03 06:05:31.000000000 -0500
---- b/mythtv/bindings/php/MythBase.php 2012-03-27 05:05:16.000000000 -0500
-***************
-*** 51,57 ****
-
- public function __destruct() {
- if (!is_null($this->cacheKey))
-! Cache::setObject($this->cacheKey, &$this, $this->cacheLifetime);
- $this->cacheKey = null;
- }
-
---- 51,57 ----
-
- public function __destruct() {
- if (!is_null($this->cacheKey))
-! Cache::setObject($this->cacheKey, $this, $this->cacheLifetime);
- $this->cacheKey = null;
- }
-
diff --git a/abs/core/mythtv/stable-0.25/mythtv/PKGBUILD b/abs/core/mythtv/stable-0.25/mythtv/PKGBUILD
deleted file mode 100644
index 936060b..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/PKGBUILD
+++ /dev/null
@@ -1,172 +0,0 @@
-# $Id: PKGBUILD 91139 2010-09-23 10:45:09Z remy $
-# Maintainer: Giovanni Scafora <giovanni@archlinux.org>
-# Contributor: Juergen Hoetzel <juergen@archlinux.org>
-# Contributor: <kleptophobiac@gmail.com>
-# Contributor: dorphell <dorphell@archlinux.org>
-
-pkgname=mythtv
-pkgver=0.25
-pkgrel=33
-commit_hash=`cat ../git_src/git_hash`
-pkgdesc="A Homebrew PVR project $commit_hash"
-arch=('i686' 'x86_64')
-url="http://www.mythtv.org/"
-license=('GPL')
-depends=('mysql-clients'
- 'qt'
- 'qtwebkit'
- 'lame'
- 'lirc-utils'
- 'ffmpeg'
- 'fribidi'
- 'perl-soap-lite'
- 'perl-date-manip'
- 'perl-xml-sax'
- 'perl-math-round'
- 'perl-net-upnp'
- 'perl-dbd-mysql'
- 'perl-time-hires'
- 'libavc1394'
- 'wget'
- 'libiec61883'
- 'mysql-python'
- 'python2-lxml'
- 'mesa'
- 'libxinerama'
- 'libxrandr'
- 'faad2'
- 'libvdpau'
- 'libcrystalhd-git'
- 'urlgrabber'
- 'python-pycurl'
- 'avahi'
- 'libcec'
- 'perl-io-socket-inet6'
- 'glew'
- 'openssl'
- 'libxml2'
- 'lsdvd'
- 'dvdbackup'
- 'x264')
-
-#glew for gpu commerical flagging
-#openssl for roap
-#lib xml2 for blu-ray
-
-
-makedepends=('yasm' 'libgl' 'git' 'rsync')
-replaces=()
-groups=('pvr')
-#backup=(/usr/share/mythtv/is.xml)
-#options=(!strip)
-#MAKEFLAGS="-j6"
-install='mythtv.install'
-
-#http://code.mythtv.org/trac/ticket/10504 mythweb php
-#http://code.mythtv.org/trac/ticket/10773 mythexpress
-#http://code.mythtv.org/trac/ticket/10825 mythexpress
-#http://code.mythtv.org/trac/ticket/11032 mythexpress
-#patchs=('myth_settings.patch' 'MythBase.php.patch'
-
-patchs=('myth_settings.patch'
- 'bonjour-correction.patch'
- '0001-protect-metadata-loads-from-multiple-threads.patch'
- '0004-restore-fe-netcontrol-play-resume-functionality.patch')
-
-optdepends=('xmltv: to download tv listings')
-replaces=('mythvideo' 'myththemes')
-conflicts=('mythvideo' 'myththemes')
-source=('mythbackend' 'myth.sh' `echo ${patchs[@]:0}`
- 'mythbackend.lr' 'mythfrontend.lr' 'pretty'
- 'tmdb3.py' 'tmdb3_db_update.py')
-
-
-build() {
- if [ -e ${srcdir}/mythtv ]
- then
- rm -rf ${srcdir}/mythtv
- fi
-
- cd ${startdir}
- msg "copy in mythtv src"
- cp -rp ../git_src/mythtv/mythtv $srcdir
- cd ${srcdir}/$pkgname
- echo "#!/bin/bash" > version.sh
- # apply patches
-
- echo "--------------------------applying patches----------------------------------------------------"
- for i in `echo ${patchs[@]:0} `
- do
- echo applying $i
- echo "-----------------------------"
- patch -Np2 -i ${startdir}/src/$i || return 1
- done
- echo "--------------------------done applying patches-----------------------------------------------"
-
- #sed -i -e "s/\`(svnversion \$\${SVNTREEDIR} 2>\/dev\/null) || echo Unknown\`/$pkgver/" version.pro
- #find bindings/python contrib -type f | xargs sed -i 's@^#!.*python$@#!/usr/bin/python2@'
-
- #Fix Python DepreciationWarning
- sed -i 's/return super(Artwork, cls).__new__(cls, attr, parent, imagetype)/return super(Artwork, cls).__new__(cls)/' ${srcdir}/mythtv/bindings/python/MythTV/dataheap.py
-
- #Update tmdb3.py to v3.6 & add tmdb3_db_update.py script & rm tmdb.py
- cp $srcdir/tmdb3*.py $srcdir/mythtv/programs/scripts/metadata/Movie/
- rm -f $srcdir/mythtv/programs/scripts/metadata/Movie/tmdb.py
-
- ARCH=${CARCH/_/-}
- ./configure --prefix=/usr --cpu=${ARCH} \
- --disable-audio-jack \
- --disable-audio-pulse \
- --disable-altivec \
- --disable-distcc \
- --disable-ccache \
- --enable-vdpau \
- --enable-crystalhd \
- --dvb-path=/usr/include \
- --enable-libmp3lame \
- --enable-libx264 \
- --with-bindings=perl,python --python=python2 || return 1
-
- make all || return 1
-}
-
-package() {
- cd "${srcdir}/${pkgname}"
- # basic install
- make INSTALL_ROOT="${pkgdir}" install
- # install contrib files
- rsync -arp --exclude .svn --delete-excluded contrib ${pkgdir}/usr/share/mythtv/ || return 1
- # install database structure
- rsync -arp --exclude .svn --delete-excluded database ${pkgdir}/usr/share/mythtv/ || return 1
- # install docs
- rsync -arp --exclude .svn --delete-excluded docs ${pkgdir}/usr/share/mythtv/ || return 1
-
- # patch the xml LinHES style
- cp -r ${startdir}/menu-xml/*.xml ${pkgdir}/usr/share/mythtv/themes/defaultmenu/
-# mv ${pkgdir}/usr/share/mythtv/themes/defaultmenu/is.xml ${pkgdir}/usr/share/mythtv/
- cd ${pkgdir}/usr/share/mythtv
- patch -p0 < ${startdir}/menu-xml/mainmenu.xml.patch || return 1
- patch -p0 < ${startdir}/menu-xml/optical_menu.xml.patch || return 1
- patch -p0 < ${startdir}/menu-xml/library.xml.patch || return 1
- #patch -p0 < ${startdir}/menu-xml/util_menu.xml.patch || return 1
-
- # make log dir
- mkdir -p ${pkgdir}/var/log/mythtv
- chown 1000.1000 ${pkgdir}/var/log/mythtv
- mkdir -p ${pkgdir}/etc/logrotate.d
- cp ${srcdir}/*.lr ${pkgdir}/etc/logrotate.d
- mkdir -p ${pkgdir}/etc/cron.hourly/
- install -m0755 ${srcdir}/pretty ${pkgdir}/etc/cron.hourly/
-}
-
-md5sums=('7ef6de58240e7aad389a0b13d91b1cf6'
- '2babd4b8e146a7538d18dcd55695b0be'
- '322f48528b350f0e6aebfff6eab4c4ee'
- '8e2a055bb3beae04c88a8e603e080422'
- '67f7316c750fba17fa578d10840b9dbd'
- 'ae23e6a8cffbe335fa37bf59978bf7a2'
- 'f735805a80b0d1180dee01f9df1b7004'
- 'f407d6af23e74a49540755420f84fa58'
- '5469d9921b726db750b991c87d226158'
- '187be42b1ffca6badfa539260ffef65e'
- '7460513f6791574eaa0ae0402ffd3688')
diff --git a/abs/core/mythtv/stable-0.25/mythtv/__changelog b/abs/core/mythtv/stable-0.25/mythtv/__changelog
deleted file mode 100644
index 31cdd16..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/__changelog
+++ /dev/null
@@ -1,5 +0,0 @@
-update to 0.25-fixes
-remove xvmc
-added perl-io-socket-inet6 for perl bindings
-added glew for gpu commerical flagging
-
diff --git a/abs/core/mythtv/stable-0.25/mythtv/bonjour-correction.patch b/abs/core/mythtv/stable-0.25/mythtv/bonjour-correction.patch
deleted file mode 100644
index 9456809..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/bonjour-correction.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 8929314e77dfc5fe9bcc58f4ace4e7ba6fea9bef Mon Sep 17 00:00:00 2001
-From: George Nassas <george@nassas.com>
-Date: Tue, 29 May 2012 10:11:38 -0400
-Subject: [PATCH] make backend's bonjour service name dns-compliant
-
----
- mythtv/programs/mythbackend/mediaserver.cpp | 7 ++-----
- 1 files changed, 2 insertions(+), 5 deletions(-)
-
-diff --git a/mythtv/programs/mythbackend/mediaserver.cpp b/mythtv/programs/mythbackend/mediaserver.cpp
-index 043140d..19d0eb9 100644
---- a/mythtv/programs/mythbackend/mediaserver.cpp
-+++ b/mythtv/programs/mythbackend/mediaserver.cpp
-@@ -256,13 +256,10 @@ void MediaServer::Init(bool bIsMaster, bool bDisableUPnp /* = false */)
- m_bonjour = new BonjourRegister();
- if (m_bonjour)
- {
-- QByteArray dummy;
- QByteArray name("Mythbackend on ");
- name.append(gCoreContext->GetHostName());
-- m_bonjour->Register(nPort,
-- bIsMaster ? "_mythbackend-master._tcp" :
-- "_mythbackend-slave._tcp",
-- name, dummy);
-+ QByteArray txt(bIsMaster ? "\x0Clevel=master" : "\x0Blevel=slave");
-+ m_bonjour->Register(nPort, "_mythbackend._tcp", name, txt);
- }
- #endif
- }
---
-1.7.2.5
-
diff --git a/abs/core/mythtv/stable-0.25/mythtv/git_version.patch b/abs/core/mythtv/stable-0.25/mythtv/git_version.patch
deleted file mode 100644
index 8b1def8..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/git_version.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/mythtv/version.sh b/mythtv/version.sh
-index d2c53af..2cf971f 100755
---- a/mythtv/version.sh
-+++ b/mythtv/version.sh
-@@ -22,7 +22,7 @@ GITREPOPATH="exported"
-
- cd ${GITTREEDIR}
-
--SOURCE_VERSION=$(git describe --dirty || git describe || echo Unknown)
-+SOURCE_VERSION=$(git describe | cut -d- -f 3 || echo Unknown)
-
- case "${SOURCE_VERSION}" in
- exported|Unknown)
diff --git a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/HOST_SETTINGS.xml b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/HOST_SETTINGS.xml
deleted file mode 100644
index b1fa6b5..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/HOST_SETTINGS.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-<mythmenu name="HOST_SETTINGS">
- <button>
- <type>MV_ACCESS_SETUP_MENU</type>
- <text>Access Control</text>
- <action>EXEC mythinstall -s accesscontrol </action>
- </button>
-
- <button>
- <type>MV_SOFTWARE_MENU</type>
- <text>Add/Remove software</text>
- <action>EXEC mythinstall -s plugins,software </action>
- </button>
-
- <button>
- <type>MV_ADVANCED_SETUP_MENU</type>
- <text>Advanced</text>
- <action>EXEC mythinstall -s advanced</action>
- </button>
-
- <button>
- <type>MV_AUDIO_SETUP_MENU</type>
- <text>Audio Settings</text>
- <action>EXEC mythinstall -s sound </action>
- </button>
-
- <button>
- <type>MV_ADVANCED_X_SETUP_MENU</type>
- <text>Display</text>
- <action>EXEC mythinstall -s advancedX</action>
- </button>
-
- <button>
- <type>MV_NETWORK_SETUP_MENU</type>
- <text>Dynamic DNS</text>
- <action>EXEC mythinstall -s ddns </action>
- </button>
-
- <button>
- <type>MV_FILESHARES_MENU</type>
- <text>File Shares</text>
- <action>EXEC mythinstall -s fileshare</action>
- </button>
-
- <button>
- <type>MV_MISC_SETUP_MENU</type>
- <text>Miscellanous</text>
- <action>EXEC mythinstall -s misc </action>
- </button>
-
- <button>
- <type>MV_NETWORK_SETUP_MENU</type>
- <text>Network</text>
- <action>EXEC mythinstall -s network </action>
- </button>
-
- <button>
- <type>MV_IR_SETUP_MENU</type>
- <text>Remotes</text>
- <action>EXEC mythinstall -s ir </action>
- </button>
-
- <button>
- <type>MV_SCREENSAVER_SETUP_MENU</type>
- <text>Screensaver</text>
- <action>EXEC mythinstall -s screensaver </action>
- </button>
-
- <button>
- <type>MV_SHUTDOWN_SETUP_MENU</type>
- <text>Shutdown Settings</text>
- <action>EXEC mythinstall -s sleep </action>
- </button>
-
- <button>
- <type>MV_SYSTEM_SETUP_MENU</type>
- <text>System Type</text>
- <action>EXEC mythinstall -s hostype </action>
- </button>
-
- <button>
- <type>MV_USER_SETUP_MENU</type>
- <text>User Accounts</text>
- <action>EXEC mythinstall -s user </action>
- </button>
-
- <button>
- <type>MV_VNC_SETUP_MENU</type>
- <text>VNC Service</text>
- <action>EXEC mythinstall -s vnc </action>
- </button>
-
- <button>
- <type>MV_WEBACCESS_SETUP_MENU</type>
- <text>Web Security</text>
- <action>EXEC mythinstall -s webuser </action>
- </button>
-
-</mythmenu>
diff --git a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/dvd_backup.xml b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/dvd_backup.xml
deleted file mode 100644
index 2647d81..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/dvd_backup.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<mythmenu name="OPTICAL_DISK">
-
- <button>
- <type>DVD_RIP</type>
- <text>Mirror DVD</text>
- <description>Creates a mirror of your DVD</description>
- <action>EXEC /usr/LH/bin/ripD_eject.sh m &amp;</action>
- </button>
-
- <button>
- <type>DVD_RIP</type>
- <text>ISO of DVD</text>
- <description>Creates an ISO of your DVD</description>
- <action>EXEC /usr/LH/bin/ripD_eject.sh i &amp;</action>
- </button>
-
- <button>
- <type>DVD_RIP</type>
- <text>High Quality</text>
- <description>Creates a high quality MPEG4 of your DVD</description>
- <action>EXEC /usr/LH/bin/ripD_eject.sh h &amp;</action>
- </button>
-
- <button>
- <type>DVD_RIP</type>
- <text>Normal Quality</text>
- <description>Creates a normal quality MPEG4 of your DVD</description>
- <action>EXEC /usr/LH/bin/ripD_eject.sh n &amp;</action>
- </button>
-
- <button>
- <type>DVD_RIP</type>
- <text>Low Quality</text>
- <description>Creates a low quality MPEG4 of your DVD</description>
- <action>EXEC /usr/LH/bin/ripD_eject.sh l &amp;</action>
- </button>
-
-</mythmenu>
diff --git a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/game.xml b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/game.xml
deleted file mode 100644
index 293a9e6..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/game.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<mythmenu name="GAME">
-
- <button>
- <type>GAME</type>
- <text>MythGame</text>
- <description>Play video games</description>
- <action>PLUGIN mythgame</action>
- <depends>mythgame</depends>
- </button>
-
-</mythmenu>
diff --git a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/info_menu.xml b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/info_menu.xml
deleted file mode 100644
index 017f90b..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/info_menu.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<mythmenu name="INFO">
-
- <button>
- <type>NEWS</type>
- <text>News Feeds</text>
- <description>Keep up with the news</description>
- <action>PLUGIN mythnews</action>
- <depends>mythnews</depends>
- </button>
-
- <button>
- <type>MYTHTWITTER_TIMELINE</type>
- <text>Twitter</text>
- <description>Send and receive tweets</description>
- <action>JUMP MythTwitter_Timeline</action>
- <depends>mythtwitter</depends>
- </button>
-
- <button>
- <type>WEATHER</type>
- <text>Weather</text>
- <action>PLUGIN mythweather</action>
- <description>Local weather forecast</description>
- <depends>mythweather</depends>
- </button>
-
- <button>
- <type>WEATHER</type>
- <text>Weather Station</text>
- <action>PLUGIN mythwstation</action>
- <depends>mythwstation</depends>
- </button>
-
- <button>
- <type>WEBPAGE</type>
- <text>Web</text>
- <description>Browse the web</description>
- <action>PLUGIN mythbrowser</action>
- <depends>mythbrowser</depends>
- </button>
-
- <button>
- <type>RECIPE</type>
- <text>Recipes</text>
- <description>Start cooking!</description>
- <action>PLUGIN mythRecipe</action>
- <depends>mythrecipe</depends>
- </button>
-
- <button>
- <type>TV_STATUS</type>
- <text>System Status</text>
- <description>See what your system is doing</description>
- <action>TV_STATUS</action>
- </button>
-
- <button>
- <type>ZONEMINDER</type>
- <text>ZoneMinder</text>
- <description>Home surveillance</description>
- <action>PLUGIN mythzoneminder</action>
- <depends>mythzoneminder</depends>
- </button>
-
-<!--
- <button>
- <type>SMOLT</type>
- <text>Hardware profile</text>
- <description>Tell us what hardware you have so we can support it</description>
- <action>PLUGIN mythsmolt</action>
- <depends>mythsmolt</depends>
- </button>
- -->
-
-</mythmenu>
diff --git a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/is.xml b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/is.xml
deleted file mode 100644
index 88b7e6b..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/is.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<mythmenu name="Internet Steams">
-
-</mythmenu>
diff --git a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/library.xml.patch b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/library.xml.patch
deleted file mode 100644
index 8f80928..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/library.xml.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- themes/defaultmenu/library.xml.orig 2012-06-10 08:02:54.000000000 +0000
-+++ themes/defaultmenu/library.xml 2012-06-10 08:03:38.000000000 +0000
-@@ -40,6 +40,13 @@
- </button>
-
- <button>
-+ <type>STREAM</type>
-+ <text>Online Content</text>
-+ <description>Play content from online sources</description>
-+ <action>MENU gen_is.xml</action>
-+ </button>
-+
-+ <button>
- <type>IMAGES</type>
- <text>Image Gallery</text>
- <description>Look at Pictures</description>
-@@ -51,8 +58,7 @@
- <type>GAME</type>
- <text>Play Games</text>
- <description>Play video games</description>
-- <action>PLUGIN mythgame</action>
-- <depends>mythgame</depends>
-+ <action>MENU game.xml</action>
- </button>
-
- </mythmenu>
diff --git a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/linhes.xml b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/linhes.xml
deleted file mode 100644
index 342766d..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/linhes.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<mythmenu name="LinHES">
-
- <button>
- <type>SETUP_GENERAL</type>
- <text>MythTV Configuration</text>
- <text lang="IT">Impostazioni</text>
- <text lang="ES">Configuración</text>
- <text lang="DE">Zubehör / Konfiguration</text>
- <text lang="DA">Tilbehør/Indstillinger</text>
- <text lang="IS">Uppsetning</text>
- <text lang="NL">Configuratie</text>
- <text lang="PT">Utensílios</text>
- <text lang="SV">Verktyg / Inställningar</text>
- <text lang="JA">設å®~Z</text>
- <text lang="FI">Oheis/Asetukset</text>
- <text lang="ZH_TW">å·¥å~E·/設å®~Z</text>
- <text lang="SL">Nastavitve</text>
- <text lang="ET">Utiliidid / sätted</text>
- <text lang="RU">УÑ~BилиÑ~BÑ~K / Ð~]аÑ~AÑ~BÑ~@ойки</text>
- <text lang="AR">تضبÙ~Jطات</text>
- <text lang="PL">NarzÄ~Ydzia / ustawienia</text>
- <text lang="HE">×¢×~Vר×~Y×~] / ×~T×~R×~Sר×~Uת</text>
- <text lang="HU">Eszközök / Beállítások</text>
- <alttext lang="DE">Verschiedenes</alttext>
- <alttext lang="SV">Inställningar</alttext>
- <alttext lang="ET">Sätted</alttext>
- <alttext lang="RU">Ð~]аÑ~AÑ~BÑ~@ойки</alttext>
- <alttext lang="AR">تضبÙ~Jطات</alttext>
- <description>Configure MythTV and plugins</description>
- <description lang="DE">MythTV und Plugins konfigurieren</description>
- <action>MENU util_menu.xml</action>
- </button>
-
- <button>
- <type>LINHES_SETUP</type>
- <text>LinHES Configuration</text>
- <description>Configure LinHES</description>
- <action>MENU HOST_SETTINGS.xml</action>
- </button>
-
- <button>
- <type>BACKUP</type>
- <text>Backup LinHES</text>
- <action>MENU mythbackup.xml</action>
- </button>
-
- <button>
- <type>RESTORE</type>
- <text>Restore LinHES</text>
- <action>MENU mythrestore.xml</action>
- </button>
-
-<!--#Check for updates-->
- <button>
- <type>UPGRADE</type>
- <text>Update LinHES</text>
- <action>MENU update.xml</action>
- </button>
-<!--#Check for updates-->
-</mythmenu>
diff --git a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/mainmenu.xml.patch b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/mainmenu.xml.patch
deleted file mode 100644
index 73a8940..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/mainmenu.xml.patch
+++ /dev/null
@@ -1,37 +0,0 @@
---- themes/defaultmenu/mainmenu.xml.orig 2012-07-29 21:39:46.000000000 +0000
-+++ themes/defaultmenu/mainmenu.xml 2012-07-29 21:41:50.000000000 +0000
-@@ -1,5 +1,11 @@
- <?xml version="1.0" encoding="UTF-8" ?>
- <mythmenu name="MAIN">
-+ <button>
-+ <type>TV_WATCH_TV</type>
-+ <text>Watch TV</text>
-+ <description>Watch live television</description>
-+ <action>TV_WATCH_LIVE</action>
-+ </button>
-
- <button>
- <type>MENU_MEDIA_LIBRARY</type>
-@@ -30,18 +36,11 @@
- </button>
-
- <button>
-- <type>TV_WATCH_TV</type>
-- <text>Watch TV</text>
-- <description>Watch live television</description>
-- <action>TV_WATCH_LIVE</action>
-- </button>
--
-- <button>
- <type>MENU_UTILITIES_SETUP</type>
-- <text>Setup</text>
-- <description>Configure MythTV and plugins</description>
-- <action>MENU main_settings.xml</action>
-- <password>SetupPinCode</password>
-+ <text>Service Menu</text>
-+ <description>Configure your system</description>
-+ <action>MENU linhes.xml</action>
-+ <password>SetupPinCode</password>
- </button>
-
- </mythmenu>
diff --git a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/mythbackup.xml b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/mythbackup.xml
deleted file mode 100644
index 7890d88..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/mythbackup.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<mythmenu name="LinHES">
- <button>
- <type>BACKUP</type>
- <text>Do you wish to backup?</text>
- <description></description>
- <action>NONE</action>
- </button>
-
- <button>
- <type>BACKUP</type>
- <text>Yes</text>
- <action>EXEC sudo /usr/LH/bin/lh_system_backup &amp;</action>
- </button>
-
- <button>
- <type>BACKUP</type>
- <text>No</text>
- <action>UPMENU</action>
- </button>
-</mythmenu>
diff --git a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/mythrestore.xml b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/mythrestore.xml
deleted file mode 100644
index 161f13f..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/mythrestore.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<mythmenu name="LinHES">
-
- <button>
- <type>RESTORE</type>
- <text>Do you wish to restore?</text>
- <description>This will restore from most recent backup.</description>
- <action>NONE</action>
- </button>
-
- <button>
- <type>RESTORE</type>
- <text>Yes</text>
- <action>EXEC sudo /usr/LH/bin/lh_system_restore &amp;</action>
- </button>
-
- <button>
- <type>BACKUP</type>
- <text>No</text>
- <action>UPMENU</action>
- </button>
-</mythmenu>
diff --git a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/optical_menu.xml.patch b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/optical_menu.xml.patch
deleted file mode 100644
index b836e85..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/optical_menu.xml.patch
+++ /dev/null
@@ -1,23 +0,0 @@
---- themes/defaultmenu/optical_menu.xml.orig 2012-05-02 18:41:38.000000000 +0000
-+++ themes/defaultmenu/optical_menu.xml 2012-07-30 05:33:03.000000000 +0000
-@@ -17,6 +17,20 @@
- </button>
-
- <button>
-+ <type>DVD_RIP</type>
-+ <text>Backup DVD</text>
-+ <description>Backup your DVDs</description>
-+ <action>MENU dvd_backup.xml</action>
-+ </button>
-+
-+ <button>
-+ <type>DVD_RIP</type>
-+ <text>Import Files from DVD</text>
-+ <description>Import all files from a data DVD</description>
-+ <action>EXEC /usr/LH/bin/importfiles.sh &amp;</action>
-+ </button>
-+
-+ <button>
- <type>MUSIC_RIP</type>
- <text>Import CD</text>
- <description>Import music from an audio CD</description>
diff --git a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/original/create_patch.sh b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/original/create_patch.sh
deleted file mode 100644
index 34d8b8c..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/original/create_patch.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-for i in *.xml
-do
- diff -u $i.orig $i > ../$i.patch
-done
diff --git a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/siriusmenu.xml b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/siriusmenu.xml
deleted file mode 100644
index e317b36..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/siriusmenu.xml
+++ /dev/null
@@ -1,419 +0,0 @@
-<mythmenu name="SIRIUS">
- <button>
- <type>MUSIC</type>
- <text>Sirius Hits 1</text>
- <action>EXEC /usr/bin/cliSipie siriushits1</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>StarLite</text>
- <action>EXEC /usr/bin/cliSipie starlite</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Sirius Love</text>
- <action>EXEC /usr/bin/cliSipie siriuslove</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Movin EZ</text>
- <action>EXEC /usr/bin/cliSipie movineasy</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Sirius Gold</text>
- <action>EXEC /usr/bin/cliSipie siriusgold</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>'60s Vibrations</text>
- <action>EXEC /usr/bin/cliSipie 60svibrations</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Totally '70s</text>
- <action>EXEC /usr/bin/cliSipie totally70s</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Big '80s</text>
- <action>EXEC /usr/bin/cliSipie big80s</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>ThePulse</text>
- <action>EXEC /usr/bin/cliSipie thepulse</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Bridge</text>
- <action>EXEC /usr/bin/cliSipie thebridge</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>BBC Radio 1</text>
- <action>EXEC /usr/bin/cliSipie bbcradio1</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Super Shuffle</text>
- <action>EXEC /usr/bin/cliSipie supershuffle</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Elvis Radio</text>
- <action>EXEC /usr/bin/cliSipie elvisradio</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Classic Vinyl</text>
- <action>EXEC /usr/bin/cliSipie classicvinyl</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Classic Rewind</text>
- <action>EXEC /usr/bin/cliSipie classicrewind</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>TheVault</text>
- <action>EXEC /usr/bin/cliSipie thevault</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Jam_ON</text>
- <action>EXEC /usr/bin/cliSipie jamon</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Spectrum</text>
- <action>EXEC /usr/bin/cliSipie thespectrum</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>BuzzSaw</text>
- <action>EXEC /usr/bin/cliSipie buzzsaw</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Octane</text>
- <action>EXEC /usr/bin/cliSipie octane</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Alt Nation</text>
- <action>EXEC /usr/bin/cliSipie altnation</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>1st Wave</text>
- <action>EXEC /usr/bin/cliSipie firstwave</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Hair Nation</text>
- <action>EXEC /usr/bin/cliSipie hairnation</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>'90s Alternative</text>
- <action>EXEC /usr/bin/cliSipie 90salternative</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Garage</text>
- <action>EXEC /usr/bin/cliSipie undergroundgarage</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Left of Center</text>
- <action>EXEC /usr/bin/cliSipie leftofcenter</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Hard Attack</text>
- <action>EXEC /usr/bin/cliSipie hardattack</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Faction</text>
- <action>EXEC /usr/bin/cliSipie faction</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Punk</text>
- <action>EXEC /usr/bin/cliSipie punk</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>The Coffee House</text>
- <action>EXEC /usr/bin/cliSipie coffeehouse</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Margaritaville</text>
- <action>EXEC /usr/bin/cliSipie radiomargaritaville</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Sirius Disorder</text>
- <action>EXEC /usr/bin/cliSipie siriusdisorder</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Reggae</text>
- <action>EXEC /usr/bin/cliSipie reggaerhythms</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Area 33</text>
- <action>EXEC /usr/bin/cliSipie area33</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Boombox</text>
- <action>EXEC /usr/bin/cliSipie boombox</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Chill</text>
- <action>EXEC /usr/bin/cliSipie chill</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>The Beat</text>
- <action>EXEC /usr/bin/cliSipie thebeat</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Strobe</text>
- <action>EXEC /usr/bin/cliSipie thestrobe</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Hip-Hop Nation</text>
- <action>EXEC /usr/bin/cliSipie hiphopnation</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>BackSpin</text>
- <action>EXEC /usr/bin/cliSipie backspin</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Shade 45</text>
- <action>EXEC /usr/bin/cliSipie shade45</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Hot Jamz</text>
- <action>EXEC /usr/bin/cliSipie hotjamz</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Heart &amp; Soul</text>
- <action>EXEC /usr/bin/cliSipie heartandsoul</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>SoulTown</text>
- <action>EXEC /usr/bin/cliSipie soultown</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>New Country</text>
- <action>EXEC /usr/bin/cliSipie newcountry</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Prime Country</text>
- <action>EXEC /usr/bin/cliSipie primecountry</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Roadhouse</text>
- <action>EXEC /usr/bin/cliSipie theroadhouse</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Outlaw Country</text>
- <action>EXEC /usr/bin/cliSipie outlawcountry</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Bluegrass</text>
- <action>EXEC /usr/bin/cliSipie bluegrass</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Spirit</text>
- <action>EXEC /usr/bin/cliSipie spirit</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Praise</text>
- <action>EXEC /usr/bin/cliSipie praise</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Planet Jazz</text>
- <action>EXEC /usr/bin/cliSipie planetjazz</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>JazzCafe</text>
- <action>EXEC /usr/bin/cliSipie jazzcafe</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>PureJazz</text>
- <action>EXEC /usr/bin/cliSipie purejazz</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Spa 73</text>
- <action>EXEC /usr/bin/cliSipie spa73</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Blues</text>
- <action>EXEC /usr/bin/cliSipie siriusblues</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Siriusly Sinatra</text>
- <action>EXEC /usr/bin/cliSipie siriuslysinatra</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Broadway's Best</text>
- <action>EXEC /usr/bin/cliSipie broadwaysbest</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Symphony Hall</text>
- <action>EXEC /usr/bin/cliSipie symphonyhall</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Met Opera Radio</text>
- <action>EXEC /usr/bin/cliSipie metropolitanopera</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Sirius Pops</text>
- <action>EXEC /usr/bin/cliSipie siriuspops</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Universo Latino</text>
- <action>EXEC /usr/bin/cliSipie universolatino</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Rumbon</text>
- <action>EXEC /usr/bin/cliSipie rumbon</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Martha Stewart</text>
- <action>EXEC /usr/bin/cliSipie marthastewartlivingradio</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Sirius Stars</text>
- <action>EXEC /usr/bin/cliSipie siriusstars</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>OutQ Gay Radio</text>
- <action>EXEC /usr/bin/cliSipie siriusoutq</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Patriot</text>
- <action>EXEC /usr/bin/cliSipie siriuspatriot</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Left</text>
- <action>EXEC /usr/bin/cliSipie siriusleft</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>CNN</text>
- <action>EXEC /usr/bin/cliSipie cnn</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>wrn</text>
- <action>EXEC /usr/bin/cliSipie wrn</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Blue Collar Comedy</text>
- <action>EXEC /usr/bin/cliSipie bluecollarcomedy</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Raw Dog Comedy</text>
- <action>EXEC /usr/bin/cliSipie rawdog</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Laugh Break Comedy</text>
- <action>EXEC /usr/bin/cliSipie laughbreak</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>thefoxxhole</text>
- <action>EXEC /usr/bin/cliSipie thefoxxhole</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>lime</text>
- <action>EXEC /usr/bin/cliSipie lime</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Kids Stuff</text>
- <action>EXEC /usr/bin/cliSipie kidsstuff</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Catholic Channel</text>
- <action>EXEC /usr/bin/cliSipie thecatholicchannel</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>EWTN</text>
- <action>EXEC /usr/bin/cliSipie ewtnglobal</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>christiantalk</text>
- <action>EXEC /usr/bin/cliSipie christiantalk</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Sirius NFL Radio</text>
- <action>EXEC /usr/bin/cliSipie siriusnflradio</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Maxim Radio</text>
- <action>EXEC /usr/bin/cliSipie maximradio</action>
- </button>
- <button>
- <type>MUSIC</type>
- <text>Cosmo Radio</text>
- <action>EXEC /usr/bin/cliSipie cosmopolitanradio</action>
- </button>
- <button>
- <type>TV_DELETE</type>
- <text>Stop Listening</text>
- <action>EXEC /usr/bin/sipie_kill</action>
- </button>
-
-</mythmenu>
-
diff --git a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/update.xml b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/update.xml
deleted file mode 100644
index d2ac3fe..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/update.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<mythmenu name="LinHES">
-
- <button>
- <type>UPGRADE</type>
- <text>Check for Updates</text>
- <action>EXEC sudo /usr/LH/bin/linhes_update.sh</action>
- </button>
-
-</mythmenu>
diff --git a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/update2.xml b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/update2.xml
deleted file mode 100644
index 64388cb..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/update2.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<mythmenu name="LinHES">
-
- <button>
- <type>UPGRADE</type>
- <text>Install Updates</text>
- <action>EXEC sudo /usr/LH/bin/linhes_update2.sh install</action>
- </button>
-
- <button>
- <type>UPGRADE</type>
- <text>Cancel Updates</text>
- <action>EXEC sudo /usr/LH/bin/linhes_update2.sh</action>
- </button>
-
- <button>
- <type>UPGRADE</type>
- <text>View Updates</text>
- <action>MENU update3.xml</action>
- </button>
-</mythmenu>
diff --git a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/util_menu.xml.patch b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/util_menu.xml.patch
deleted file mode 100644
index 82d303e..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/util_menu.xml.patch
+++ /dev/null
@@ -1,16 +0,0 @@
---- themes/defaultmenu/util_menu.xml.orig 2010-11-06 00:40:01.000000000 +0000
-+++ themes/defaultmenu/util_menu.xml 2010-11-06 00:45:42.000000000 +0000
-@@ -17,6 +17,13 @@
- </button>
-
- <button>
-+ <type>VIDEO_SCREENSHOOTER</type>
-+ <text>Thumbnail Generator</text>
-+ <description>Generate thumbnail images for videos</description>
-+ <action>EXEC /usr/LH/bin/shootscreens-mythtv.sh</action>
-+ </button>
-+
-+ <button>
- <type>SETUP_MENU</type>
- <text>Setup</text>
- <description>Configure MythTV and plugins</description>
diff --git a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/xmmenu.xml b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/xmmenu.xml
deleted file mode 100644
index 6b26d11..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/xmmenu.xml
+++ /dev/null
@@ -1,574 +0,0 @@
-<!-- Current as of April 25, 2007 -->
-<mythmenu name="XM">
-
- <button>
- <type>MUSIC</type>
- <text>The '40s</text>
- <action>EXEC /usr/bin/xamp kill 4</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>The '50s</text>
- <action>EXEC /usr/bin/xamp kill 5</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>The '60s</text>
- <action>EXEC /usr/bin/xamp kill 6</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>The '70s</text>
- <action>EXEC /usr/bin/xamp kill 7</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>The '80s</text>
- <action>EXEC /usr/bin/xamp kill 8</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>The '90s</text>
- <action>EXEC /usr/bin/xamp kill 9</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>America</text>
- <action>EXEC /usr/bin/xamp kill 10</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>X Country</text>
- <action>EXEC /usr/bin/xamp kill 12</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Willie's Place</text>
- <action>EXEC /usr/bin/xamp kill 13</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Bluegrass Junction</text>
- <action>EXEC /usr/bin/xamp kill 14</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>The Village</text>
- <action>EXEC /usr/bin/xamp kill 15</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Highway 16</text>
- <action>EXEC /usr/bin/xamp kill 16</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>US Country</text>
- <action>EXEC /usr/bin/xamp kill 17</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>20 on 20</text>
- <action>EXEC /usr/bin/xamp kill 20</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>The Heart</text>
- <action>EXEC /usr/bin/xamp kill 23</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>The Blend</text>
- <action>EXEC /usr/bin/xamp kill 25</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Flight 26</text>
- <action>EXEC /usr/bin/xamp kill 26</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Cinemagic</text>
- <action>EXEC /usr/bin/xamp kill 27</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>On Broadway</text>
- <action>EXEC /usr/bin/xamp kill 28</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>U-Pop</text>
- <action>EXEC /usr/bin/xamp kill 29</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>XM Hitlist</text>
- <action>EXEC /usr/bin/xamp kill 30</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Torch</text>
- <action>EXEC /usr/bin/xamp kill 31</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>The Message</text>
- <action>EXEC /usr/bin/xamp kill 32</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Spirit</text>
- <action>EXEC /usr/bin/xamp kill 33</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>enLighten</text>
- <action>EXEC /usr/bin/xamp kill 34</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Deep Tracks</text>
- <action>EXEC /usr/bin/xamp kill 40</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Boneyard</text>
- <action>EXEC /usr/bin/xamp kill 41</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>XM Liquid Metal</text>
- <action>EXEC /usr/bin/xamp kill 42</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>XMU</text>
- <action>EXEC /usr/bin/xamp kill 43</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Fred</text>
- <action>EXEC /usr/bin/xamp kill 44</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>XM Cafe</text>
- <action>EXEC /usr/bin/xamp kill 45</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Top Tracks</text>
- <action>EXEC /usr/bin/xamp kill 46</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Ethel</text>
- <action>EXEC /usr/bin/xamp kill 47</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Squizz</text>
- <action>EXEC /usr/bin/xamp kill 48</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Big Tracks</text>
- <action>EXEC /usr/bin/xamp kill 49</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>The Loft</text>
- <action>EXEC /usr/bin/xamp kill 50</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>XM Music Lab</text>
- <action>EXEC /usr/bin/xamp kill 51</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>The Verge</text>
- <action>EXEC /usr/bin/xamp kill 52</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Fungus</text>
- <action>EXEC /usr/bin/xamp kill 53</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Lucy</text>
- <action>EXEC /usr/bin/xamp kill 54</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Soul Street</text>
- <action>EXEC /usr/bin/xamp kill 60</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>The Flow</text>
- <action>EXEC /usr/bin/xamp kill 61</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Suite 62</text>
- <action>EXEC /usr/bin/xamp kill 62</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>The Groove</text>
- <action>EXEC /usr/bin/xamp kill 64</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>The Rhyme</text>
- <action>EXEC /usr/bin/xamp kill 65</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>RAW</text>
- <action>EXEC /usr/bin/xamp kill 66</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>The City</text>
- <action>EXEC /usr/bin/xamp kill 67</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>The Heat</text>
- <action>EXEC /usr/bin/xamp kill 68</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Real Jazz</text>
- <action>EXEC /usr/bin/xamp kill 70</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Watercolors</text>
- <action>EXEC /usr/bin/xamp kill 71</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Beyond Jazz</text>
- <action>EXEC /usr/bin/xamp kill 72</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>High Standards</text>
- <action>EXEC /usr/bin/xamp kill 73</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Bluesville</text>
- <action>EXEC /usr/bin/xamp kill 74</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Hear Music</text>
- <action>EXEC /usr/bin/xamp kill 75</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Fine Tuning</text>
- <action>EXEC /usr/bin/xamp kill 76</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Audio Visions</text>
- <action>EXEC /usr/bin/xamp kill 77</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Escape</text>
- <action>EXEC /usr/bin/xamp kill 78</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>On The Rocks</text>
- <action>EXEC /usr/bin/xamp kill 79</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>The Move</text>
- <action>EXEC /usr/bin/xamp kill 80</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>BPM</text>
- <action>EXEC /usr/bin/xamp kill 81</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>The System</text>
- <action>EXEC /usr/bin/xamp kill 82</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Chrome</text>
- <action>EXEC /usr/bin/xamp kill 83</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>XM-Chill</text>
- <action>EXEC /usr/bin/xamp kill 84</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Fuego</text>
- <action>EXEC /usr/bin/xamp kill 90</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Viva</text>
- <action>EXEC /usr/bin/xamp kill 91</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Aguila</text>
- <action>EXEC /usr/bin/xamp kill 92</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Caliente</text>
- <action>EXEC /usr/bin/xamp kill 94</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Luna</text>
- <action>EXEC /usr/bin/xamp kill 95</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Air Musique</text>
- <action>EXEC /usr/bin/xamp kill 100</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>The Joint</text>
- <action>EXEC /usr/bin/xamp kill 101</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Sur La Route</text>
- <action>EXEC /usr/bin/xamp kill 102</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>World Zone</text>
- <action>EXEC /usr/bin/xamp kill 103</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Ngoma</text>
- <action>EXEC /usr/bin/xamp kill 104</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>XM Classics</text>
- <action>EXEC /usr/bin/xamp kill 110</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Vox</text>
- <action>EXEC /usr/bin/xamp kill 112</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>XM Pops</text>
- <action>EXEC /usr/bin/xamp kill 113</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>XM Kids</text>
- <action>EXEC /usr/bin/xamp kill 116</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Bob Edwards Show</text>
- <action>EXEC /usr/bin/xamp kill 133</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>XM Comedy</text>
- <action>EXEC /usr/bin/xamp kill 150</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Laugh USA</text>
- <action>EXEC /usr/bin/xamp kill 151</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Special X</text>
- <action>EXEC /usr/bin/xamp kill 154</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>The Agenda</text>
- <action>EXEC /usr/bin/xamp kill 134</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Oprah and Friends</text>
- <action>EXEC /usr/bin/xamp kill 156</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>The Virus</text>
- <action>EXEC /usr/bin/xamp kill 202</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>1 Hit Wonders</text>
- <action>EXEC /usr/bin/xamp kill 300</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Metalcore</text>
- <action>EXEC /usr/bin/xamp kill 301</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>New Indie First</text>
- <action>EXEC /usr/bin/xamp kill 302</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Late Night Mix</text>
- <action>EXEC /usr/bin/xamp kill 303</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Sessions@AOL</text>
- <action>EXEC /usr/bin/xamp kill 304</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>Shuffle</text>
- <action>EXEC /usr/bin/xamp kill 305</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>New Rock First</text>
- <action>EXEC /usr/bin/xamp kill 306</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>New Country First</text>
- <action>EXEC /usr/bin/xamp kill 307</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>New Hip Hop First</text>
- <action>EXEC /usr/bin/xamp kill 308</action>
- </button>
-
- <button>
- <type>MUSIC</type>
- <text>New Pop First</text>
- <action>EXEC /usr/bin/xamp kill 309</action>
- </button>
-
- <button>
- <type>TV_DELETE</type>
- <text>Stop Listening</text>
- <action>EXEC /usr/bin/xamp kill</action>
- </button>
-
-</mythmenu>
diff --git a/abs/core/mythtv/stable-0.25/mythtv/myth.sh b/abs/core/mythtv/stable-0.25/mythtv/myth.sh
deleted file mode 100644
index fb7122c..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/myth.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-export PATH=$PATH:/usr/local/bin
-# set core file size to 0
-ulimit -c 0
-export MALLOC_CHECK_=0 \ No newline at end of file
diff --git a/abs/core/mythtv/stable-0.25/mythtv/myth_settings.patch b/abs/core/mythtv/stable-0.25/mythtv/myth_settings.patch
deleted file mode 100644
index a96051b..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/myth_settings.patch
+++ /dev/null
@@ -1,1981 +0,0 @@
-commit 9b4205fa320c06afde8c6d866b854cb12d3ec99c
-Author: root <root@localhost.localdomain>
-Date: Fri Sep 28 14:25:06 2012 -0500
-
- new patch
-
- Signed-off-by: root <root@localhost.localdomain>
-
-diff --git a/mythtv/libs/libmythbase/mythcorecontext.cpp b/mythtv/libs/libmythbase/mythcorecontext.cpp
-index 84cb01a..6e3c54a 100644
---- a/mythtv/libs/libmythbase/mythcorecontext.cpp
-+++ b/mythtv/libs/libmythbase/mythcorecontext.cpp
-@@ -1260,6 +1260,90 @@ void MythCoreContext::ResetLanguage(void)
- d->language.clear();
- }
-
-+//JM ADDED
-+void MythCoreContext::savesettings_togroup (QString src_hostname,
-+ QString saved_settingsgroupname )
-+{
-+ return d->m_database->savesettings_togroup(src_hostname,
-+ saved_settingsgroupname);
-+}
-+
-+void MythCoreContext::deletesettings(QString delete_hostname,
-+ QString saved_settingsgroupname)
-+{
-+ return d->m_database->deletesettings(delete_hostname,
-+ saved_settingsgroupname);
-+}
-+
-+QMap<QString,QStringList> MythCoreContext::list_settingsgroupname()
-+{
-+ return d->m_database->list_settingsgroupname();
-+}
-+
-+QMap<QString,QStringList> MythCoreContext::diff_settingsgroupname(
-+ QString diff_hostname1,
-+ QString diff_hostname2,
-+ QStringList table_list)
-+{
-+ return d->m_database->diff_settingsgroupname(diff_hostname1,
-+ diff_hostname2,
-+ table_list);
-+}
-+
-+void MythCoreContext::clonesettings(QString src_hostname,
-+ QString saved_settingsgroupname,
-+ QStringList table_list,
-+ bool is_full_clone,
-+ QString dest_hostname)
-+{
-+ return d->m_database->clonesettings(src_hostname,
-+ saved_settingsgroupname,
-+ table_list,
-+ is_full_clone,
-+ dest_hostname);
-+}
-+
-+void MythCoreContext::restoresettings(QString dest_hostname,
-+ QString saved_settingsgroupname,
-+ QStringList table_list )
-+{
-+ return d->m_database->restoresettings( dest_hostname,
-+ saved_settingsgroupname,
-+ table_list);
-+}
-+
-+void MythCoreContext::change_hostname(QString old_hostname,
-+ QString new_hostname)
-+{
-+ return d->m_database->change_hostname(old_hostname, new_hostname) ;
-+}
-+
-+bool MythCoreContext::settings_check(QString src_hostname,
-+ QString saved_settingsgroupname)
-+{
-+ return d->m_database->settings_check(src_hostname,saved_settingsgroupname);
-+}
-+
-+void MythCoreContext::import_settings(QMap<QString,QString> vp_map,
-+ QString table)
-+{
-+ return d->m_database->import_settings(vp_map, table);
-+}
-+
-+
-+QMap<QString, QMap<QString,QString> > MythCoreContext::export_settings(
-+ QString src_hostname,
-+ QString saved_settingsgroupname,
-+ QStringList table_list, bool skip_host )
-+{
-+ return d->m_database->export_settings(src_hostname,
-+ saved_settingsgroupname,
-+ table_list , skip_host );
-+}
-+
-+//END JM ADDED
-+
-+
- void MythCoreContext::InitLocale(void )
- {
- if (!d->m_locale)
-diff --git a/mythtv/libs/libmythbase/mythcorecontext.h b/mythtv/libs/libmythbase/mythcorecontext.h
-index 0917313..3f6d5f8 100644
---- a/mythtv/libs/libmythbase/mythcorecontext.h
-+++ b/mythtv/libs/libmythbase/mythcorecontext.h
-@@ -168,6 +168,40 @@ class MBASE_PUBLIC MythCoreContext : public MythObservable, public MythSocketCBs
- QString GetLanguageAndVariant(void);
- void ResetLanguage(void);
-
-+ //JM ADDED
-+ void savesettings_togroup(QString src_hostname,
-+ QString saved_settingsgroupname );
-+
-+ void deletesettings(QString delete_hostname,
-+ QString saved_settingsgroupname);
-+
-+ QMap<QString,QStringList> list_settingsgroupname();
-+ QMap<QString,QStringList> diff_settingsgroupname(QString diff_hostname1,
-+ QString diff_hostname2,
-+ QStringList table_list);
-+
-+ void clonesettings(QString src_hostname,
-+ QString saved_settingsgroupname,
-+ QStringList table_list,
-+ bool is_full_clone=TRUE,
-+ QString dest_hostname="");
-+
-+ void restoresettings (QString dest_hostname,
-+ QString saved_settingsgroupname,
-+ QStringList table_list);
-+
-+ void change_hostname (QString old_hostname, QString new_hostname);
-+
-+ bool settings_check (QString src_hostname ,QString saved_settingsgroupname);
-+ void import_settings(QMap<QString,QString> vp_map, QString table);
-+
-+ QMap<QString,QMap <QString,QString> > export_settings(
-+ QString src_hostname,
-+ QString saved_settingsgroupname,
-+ QStringList table_list,
-+ bool skip_host = FALSE );
-+ //END JM ADDED
-+
- private:
- MythCoreContextPrivate *d;
-
-diff --git a/mythtv/libs/libmythbase/mythdb.cpp b/mythtv/libs/libmythbase/mythdb.cpp
-index ea30783..e4c1781 100644
---- a/mythtv/libs/libmythbase/mythdb.cpp
-+++ b/mythtv/libs/libmythbase/mythdb.cpp
-@@ -774,7 +774,7 @@ void MythDB::OverrideSettingForSession(
- QString mk = key.toLower(), mk2 = d->m_localhostname + ' ' + mk, mv = value;
- if ("dbschemaver" == mk)
- {
-- LOG(VB_GENERAL, LOG_ERR,
-+ LOG(VB_GENERAL, LOG_ERR,
- QString("ERROR: Refusing to allow override for '%1'.").arg(key));
- return;
- }
-@@ -1055,6 +1055,1015 @@ void MythDB::WriteDelayedSettings(void)
- }
- }
-
-+//JM ADDED
-+void MythDB::savesettings_togroup(QString src_hostname,
-+ QString saved_settingsgroupname )
-+{
-+ LOG(VB_GENERAL, LOG_ERR, QString("Using hostname of : %1")
-+ .arg(src_hostname));
-+ LOG(VB_GENERAL, LOG_ERR, QString("Saving to group: %1")
-+ .arg(saved_settingsgroupname));
-+ if ( settings_check( src_hostname , "current" ) )
-+ {
-+ QStringList table_list;
-+ QString hostname_clause;
-+ table_list.append("settings");
-+ table_list.append("keybindings");
-+ table_list.append("jumppoints");
-+ if ( src_hostname == "GLOBAL" )
-+ hostname_clause = "hostname IS NULL";
-+ else
-+ hostname_clause ="hostname = :HOSTNAME";
-+
-+ foreach (QString table, table_list)
-+ {
-+ QString dest_tablename = table +"_" + saved_settingsgroupname ;
-+ create_new_table(dest_tablename,table);
-+
-+ QString query_string;
-+ // Remove old saved values
-+ MSqlQuery query(MSqlQuery::InitCon());
-+ query_string = QString("DELETE FROM %1 WHERE %2")
-+ .arg(dest_tablename)
-+ .arg(hostname_clause);
-+
-+ //query_string = QString("DELETE FROM %1 WHERE "
-+ // "hostname = :HOSTNAME").arg(dest_tablename);
-+
-+ query.prepare(query_string);
-+ query.bindValue(":HOSTNAME" ,src_hostname);
-+ query.exec();
-+
-+ //insert all new settings
-+ query_string = QString("REPLACE INTO %1 "
-+ "SELECT * from %2 where %3")
-+ .arg(dest_tablename)
-+ .arg(table)
-+ .arg(hostname_clause);
-+// query_string = QString("REPLACE INTO %1 "
-+// "SELECT * from %2 where hostname = :HOSTNAME)")
-+// .arg(dest_tablename)
-+// .arg(table);
-+
-+ query.prepare(query_string);
-+ query.bindValue(":HOSTNAME",src_hostname);
-+ query.exec();
-+ }
-+ }
-+ else
-+ LOG(VB_GENERAL| VB_STDIO|VB_FLUSH, LOG_ERR,
-+ QString("Couldn't find settings for: %1 \n").arg(src_hostname));
-+ return;
-+
-+};
-+
-+void MythDB::deletesettings(QString delete_hostname,
-+ QString saved_settingsgroupname)
-+{
-+ LOG(VB_GENERAL, LOG_ERR, QString("Using hostname of : %1")
-+ .arg(delete_hostname));
-+ LOG(VB_GENERAL, LOG_ERR, QString("Deleting: %1")
-+ .arg(saved_settingsgroupname));
-+ int tempItem;
-+ QString src_tablename;
-+ QStringList table_list;
-+
-+ table_list.append("settings");
-+ table_list.append("keybindings");
-+ table_list.append("jumppoints");
-+ QString hostname_clause;
-+ if ( delete_hostname == "GLOBAL" )
-+ hostname_clause = "hostname IS NULL";
-+ else
-+ hostname_clause ="hostname = :HOSTNAME";
-+
-+ foreach (QString table, table_list)
-+ {
-+ src_tablename = find_group_table_name(table, saved_settingsgroupname);
-+ MSqlQuery query(MSqlQuery::InitCon());
-+ // Remove old saved values
-+ if ( does_table_exist(src_tablename))
-+ {
-+ QString query_string = QString("DELETE from %1 "
-+ "WHERE %2")
-+ .arg(src_tablename)
-+ .arg(hostname_clause);
-+ query.prepare(query_string);
-+ query.bindValue(":HOSTNAME" ,delete_hostname);
-+ query.exec();
-+
-+ //check if ok to delete table
-+ query_string = QString("SELECT count(*) from %1")
-+ .arg(src_tablename);
-+ query.prepare(query_string);
-+ if (query.exec() && query.isActive() && query.size() > 0)
-+ {
-+ query.next();
-+ tempItem = query.value(0).toInt();
-+ if ( tempItem == 0 )
-+ drop_temp_table(src_tablename);
-+ }
-+ }
-+ else
-+ LOG(VB_GENERAL, LOG_ERR,
-+ QString("Couldn't find table: %1").arg(src_tablename));
-+ }
-+ return;
-+}; // end delete settings
-+
-+
-+QMap<QString,QStringList> MythDB::list_settingsgroupname()
-+{
-+ //Returns a QMAP of "settings_groups: hostname"
-+ MSqlQuery query(MSqlQuery::InitCon());
-+ MSqlQuery subquery(MSqlQuery::InitCon());
-+ QString tempItem;
-+ QString temp_hostnameItem;
-+ QStringList hostname_list;
-+ QMap<QString,QStringList> return_list;
-+ QString full_table_name;
-+ query.prepare( "show tables like \"settings%\" " );
-+ if (query.exec() && query.isActive() && query.size() > 0)
-+ {
-+ while (query.next())
-+ {
-+ full_table_name = query.value(0).toString();
-+ tempItem=query.value(0).toString().remove(QRegExp("settings_"));
-+ if ( tempItem != "distro_default" )
-+ {
-+ //loop over tables looking for hostnames
-+ QString query_string = QString("SELECT DISTINCT "
-+ "hostname from %1")
-+ .arg(full_table_name);
-+ subquery.prepare(query_string);
-+
-+ if (subquery.exec() && subquery.isActive()
-+ && subquery.size() > 0)
-+ {
-+ while (subquery.next())
-+ {
-+ temp_hostnameItem = subquery.value(0).toString();
-+ hostname_list.append(temp_hostnameItem);
-+ }
-+ }
-+ //Special case of naming for the settings table;
-+ //This only affects output.
-+ if ( tempItem == "settings" )
-+ return_list["current"] = hostname_list;
-+ else
-+ return_list[tempItem] = hostname_list;
-+
-+ //reset hostname_list for the next group
-+ hostname_list = QStringList();
-+ }
-+ }
-+ }
-+ return return_list;
-+}; // end list_settingsgroupname
-+
-+QMap<QString,QStringList> MythDB::diff_settingsgroupname(
-+ QString diff_hostname1 ,
-+ QString diff_hostname2,
-+ QStringList table_list )
-+{
-+ // Returns a QMAP of tablename : diff results
-+ LOG(VB_GENERAL, LOG_ERR, QString("Comparing settings for:"));
-+ LOG(VB_GENERAL, LOG_ERR, QString("host 1: %1").arg(diff_hostname1));
-+ LOG(VB_GENERAL, LOG_ERR, QString("host 2: %1").arg(diff_hostname2));
-+
-+ QString qstr;
-+ QString tempItem;
-+ QString tempString;
-+
-+ QStringList diff_list;
-+ QStringList settings_list;
-+ QStringList keybinding_list;
-+
-+ QMap<QString,QStringList> return_list;
-+ if ( table_list.isEmpty() )
-+ {
-+ table_list.append("settings");
-+ table_list.append("keybindings");
-+ }
-+
-+ MSqlQuery query(MSqlQuery::InitCon());
-+ foreach (QString table, table_list)
-+ {
-+ if ( table == "settings")
-+ {
-+
-+ qstr= "SELECT distinct settings.value, :DIFF_HOSTNAME1 AS `hostname`, settings_a.data, :DIFF_HOSTNAME2 AS `hostname`"
-+ " , settings_b.data FROM settings LEFT JOIN settings AS settings_a ON settings_a.value = settings.value AND settings_a.hostname = :DIFF_HOSTNAME1"
-+ " LEFT JOIN settings AS settings_b ON settings_b.value = settings.value AND settings_b.hostname = :DIFF_HOSTNAME2"
-+ " WHERE settings_a.data != settings_b.data OR "
-+ " (settings_a.data IS NULL AND settings_b.data IS NOT NULL) OR (settings_a.data IS NOT NULL AND settings_b.data IS NULL);";
-+
-+ query.prepare(qstr);
-+ query.bindValue(":DIFF_HOSTNAME1" , diff_hostname1);
-+ query.bindValue(":DIFF_HOSTNAME2" , diff_hostname2);
-+
-+ if (query.exec() && query.isActive() && query.size() > 0)
-+ {
-+ while (query.next())
-+ {
-+ tempString="";
-+ //value
-+ tempItem = query.value(0).toString();
-+ tempString.append(tempItem);
-+ tempString.append("|");
-+
-+ //hostname_1
-+ tempItem = query.value(1).toString();
-+ if (tempItem.isEmpty())
-+ tempItem=diff_hostname1;
-+ tempString.append(tempItem);
-+ tempString.append("|");
-+
-+ //data
-+ tempItem = query.value(2).toString();
-+ if (tempItem.isEmpty())
-+ tempItem="NULL";
-+ tempString.append(tempItem);
-+ tempString.append("|");
-+
-+ //hostname_2
-+ tempItem = query.value(3).toString();
-+ if (tempItem.isEmpty())
-+ tempItem=diff_hostname2;
-+ tempString.append(tempItem);
-+ tempString.append("|");
-+
-+ //data
-+ tempItem = query.value(4).toString();
-+ if (tempItem.isEmpty())
-+ tempItem="NULL";
-+ tempString.append(tempItem);
-+
-+ settings_list.append(tempString);
-+ }
-+ return_list["Settings"] = settings_list;
-+ }
-+ }
-+ else if ( table == "keybindings")
-+ {
-+
-+ qstr="SELECT distinct keybindings.context, keybindings.action, :DIFF_HOSTNAME1 AS `hostname`, keybindings_a.keylist, :DIFF_HOSTNAME2 AS `hostname`, keybindings_b.keylist FROM keybindings "
-+ " LEFT JOIN keybindings AS keybindings_a ON keybindings_a.context = keybindings.context AND keybindings_a.action = keybindings.action "
-+ " AND keybindings_a.hostname = :DIFF_HOSTNAME1 "
-+ " LEFT JOIN keybindings AS keybindings_b ON keybindings_b.context = keybindings.context "
-+ " AND keybindings_b.action = keybindings.action AND keybindings_b.hostname = :DIFF_HOSTNAME2 "
-+ " WHERE keybindings_a.keylist != keybindings_b.keylist OR "
-+ " (keybindings_a.keylist IS NULL AND keybindings_b.keylist IS NOT NULL) OR (keybindings_a.keylist IS NOT NULL AND keybindings_b.keylist IS NULL);";
-+ query.prepare(qstr);
-+ query.bindValue(":DIFF_HOSTNAME1" , diff_hostname1);
-+ query.bindValue(":DIFF_HOSTNAME2" , diff_hostname2);
-+
-+ if (query.exec() && query.isActive() && query.size() > 0)
-+ {
-+ while (query.next())
-+ {
-+ tempString="";
-+ //context
-+ tempItem = query.value(0).toString();
-+ tempString.append(tempItem);
-+ tempString.append("|");
-+
-+ //action
-+ tempItem = query.value(1).toString();
-+ tempString.append(tempItem);
-+ tempString.append("|");
-+
-+ //hostname
-+ tempItem = query.value(2).toString();
-+ if (tempItem.isEmpty())
-+ tempItem=diff_hostname1;
-+ tempString.append(tempItem);
-+ tempString.append("|");
-+
-+ //keylist
-+ tempItem = query.value(3).toString();
-+ if (tempItem.isEmpty())
-+ tempItem="NULL";
-+ tempString.append(tempItem);
-+ tempString.append("|");
-+
-+ //hostname
-+ tempItem = query.value(4).toString();
-+ if (tempItem.isEmpty())
-+ tempItem=diff_hostname2;
-+ tempString.append(tempItem);
-+ tempString.append("|");
-+
-+ //keylist
-+ tempItem = query.value(5).toString();
-+ if (tempItem.isEmpty())
-+ tempItem="NULL";
-+ tempString.append(tempItem);
-+ keybinding_list.append(tempString);
-+ }
-+ return_list["Keybindings"] = keybinding_list;
-+ }
-+ }
-+
-+ }
-+ return return_list;
-+}; //end diff_settingsgroupname
-+
-+void MythDB::clonesettings(QString src_hostname,
-+ QString saved_settingsgroupname,
-+ QStringList table_list,
-+ bool is_full_clone, QString dest_hostname)
-+{
-+ LOG(VB_GENERAL, LOG_ERR, QString("Using src hostname of : %1")
-+ .arg(src_hostname));
-+ LOG(VB_GENERAL, LOG_ERR, QString("Using dest hostname of : %1")
-+ .arg(dest_hostname));
-+ LOG(VB_GENERAL, LOG_ERR, QString("Cloning setting group: %1")
-+ .arg(saved_settingsgroupname));
-+ LOG(VB_GENERAL, LOG_ERR, QString("Full Copy : %1")
-+ .arg(is_full_clone));
-+
-+ MSqlQuery query(MSqlQuery::InitCon());
-+ QStringList::Iterator it;
-+ QString current_table;
-+ QString dest_tablename;
-+ QString temptable;
-+
-+ if ( table_list.isEmpty() )
-+ {
-+ table_list.append("settings");
-+ table_list.append("keybindings");
-+ table_list.append("jumppoints");
-+ }
-+
-+ for ( it = table_list.begin(); it != table_list.end(); ++it )
-+ {
-+ current_table = *it ;
-+ dest_tablename = find_group_table_name(current_table,
-+ saved_settingsgroupname);
-+
-+ if ( does_table_exist(dest_tablename))
-+ {
-+ // create temp table for merging settings
-+ temptable="temp_table_" + dest_tablename;
-+ create_temp_table(temptable, current_table );
-+
-+ // copy in stored settings
-+ QString query_string = QString("REPLACE INTO %1 "
-+ "(SELECT * from %2 where hostname = :HOSTNAME)")
-+ .arg(temptable)
-+ .arg(dest_tablename);
-+
-+ query.prepare(query_string);
-+ query.bindValue(":HOSTNAME",src_hostname );
-+ query.exec();
-+
-+ // update hostname for dest_hostname
-+ query_string = QString("UPDATE %1 set hostname = :HOSTNAME")
-+ .arg(temptable);
-+
-+ query.prepare(query_string);
-+ query.bindValue(":HOSTNAME" , dest_hostname );
-+ query.exec();
-+
-+ //if not full clone remove HOST% settings from temp table;
-+ if ( current_table == "settings" && !is_full_clone)
-+ {
-+ query_string = QString("DELETE FROM %1 WHERE "
-+ "hostname=:HOSTNAME and value like 'HOST%' " )
-+ .arg(temptable);
-+
-+ query.prepare(query_string);
-+ query.bindValue( ":HOSTNAME" , dest_hostname );
-+ query.exec();
-+ }
-+
-+ //remove current settings from dest table,
-+ //if not full clone, then leave HOST%
-+ //Need to remove because the old table allows for duplicates
-+
-+ if ( current_table == "settings" && !is_full_clone)
-+ query_string = QString ("DELETE FROM %1 WHERE "
-+ "hostname = :HOSTNAME "
-+ "and value not like 'HOST%'")
-+ .arg(dest_tablename);
-+
-+ else
-+ query_string = QString ("DELETE FROM %1 WHERE "
-+ "hostname = :HOSTNAME ")
-+ .arg(dest_tablename);
-+
-+ query.prepare(query_string);
-+ query.bindValue(":HOSTNAME",dest_hostname);
-+ query.exec();
-+
-+ // copy new settings from temp to current
-+ query_string = QString("REPLACE INTO %1 "
-+ "(SELECT * from %2)")
-+ .arg(dest_tablename)
-+ .arg(temptable);
-+
-+ query.prepare(query_string);
-+ query.exec();
-+
-+ // drop temptable
-+ drop_temp_table(temptable);
-+ }
-+ else
-+ LOG(VB_GENERAL, LOG_NOTICE, QString("Couldn't find table: %1")
-+ .arg(dest_tablename));
-+ }
-+}; //end clonesettings
-+
-+void MythDB::restoresettings (QString dest_hostname,
-+ QString saved_settingsgroupname,
-+ QStringList table_list )
-+{
-+ LOG(VB_GENERAL, LOG_NOTICE, QString("Restoring Settings:"));
-+ LOG(VB_GENERAL, LOG_NOTICE, QString(" src: %1")
-+ .arg(saved_settingsgroupname));
-+ LOG(VB_GENERAL, LOG_NOTICE, QString(" dest:%1")
-+ .arg(dest_hostname));
-+
-+ QString hostname_clause;
-+ if ( dest_hostname == "GLOBAL" )
-+ hostname_clause = "hostname IS NULL";
-+ else
-+ hostname_clause ="hostname = :HOSTNAME";
-+
-+ bool table_check;
-+ if ( saved_settingsgroupname == "distro_default" )
-+ table_check = settings_check ( "distro_default" , saved_settingsgroupname );
-+ else
-+ table_check = settings_check ( dest_hostname , saved_settingsgroupname );
-+
-+
-+ if ( table_check == TRUE )
-+ {
-+ MSqlQuery query(MSqlQuery::InitCon());
-+ QStringList::Iterator it;
-+ QString current_table;
-+ if ( table_list.isEmpty() )
-+ {
-+ table_list.append("settings");
-+ table_list.append("keybindings");
-+ table_list.append("jumppoints");
-+ }
-+
-+ for ( it = table_list.begin(); it != table_list.end(); ++it )
-+ {
-+ current_table = *it ;
-+ //find tablenames to use
-+ QString src_tablename = find_group_table_name(current_table,
-+ saved_settingsgroupname);
-+
-+ QString temptable="temp_table_" + src_tablename;
-+ if ( ! does_table_exist(src_tablename))
-+ {
-+ LOG(VB_GENERAL, LOG_NOTICE, QString("table does not exist: %1")
-+ .arg(src_tablename));
-+ continue;
-+ }
-+ // create temp table for merging settings
-+ create_temp_table(temptable, current_table );
-+
-+ //could copy in current settings here to account for new stuff
-+
-+
-+
-+ // copy in stored settings
-+ QString query_string;
-+ if ( saved_settingsgroupname == "distro_default" )
-+ { //special case for restoring default settings
-+ query_string = QString("REPLACE INTO %1 "
-+ "(SELECT * from %2 WHERE %3)")
-+ .arg(temptable)
-+ .arg(src_tablename)
-+ .arg(hostname_clause);
-+
-+ query.prepare(query_string);
-+ query.bindValue(":HOSTNAME", "distro_default" );
-+ query.exec();
-+
-+ // update hostname in temp table from distro_default
-+ query_string = QString("UPDATE %1 set hostname = :HOSTNAME")
-+ .arg(temptable);
-+
-+ query.prepare(query_string);
-+ query.bindValue(":HOSTNAME" , dest_hostname );
-+ query.exec();
-+
-+ }
-+ else
-+ { //normal use case
-+ query_string = QString("REPLACE INTO %1 "
-+ "(SELECT * from %2 WHERE %3)")
-+ .arg(temptable)
-+ .arg(src_tablename)
-+ .arg(hostname_clause);
-+
-+ query.prepare(query_string);
-+ query.bindValue(":HOSTNAME",dest_hostname );
-+ query.exec();
-+ }
-+
-+ //Remove current settings.
-+ //Need to remove because the old table allows for duplicates
-+ query_string = QString("DELETE FROM %1 WHERE "
-+ "%2")
-+ .arg(current_table)
-+ .arg(hostname_clause);
-+
-+ query.prepare(query_string);
-+ query.bindValue(":HOSTNAME",dest_hostname);
-+ query.exec();
-+
-+ // copy new settings from temp to current
-+ query_string = QString("REPLACE INTO %1 "
-+ "(SELECT * from %2)")
-+ .arg(current_table)
-+ .arg(temptable);
-+
-+ query.prepare(query_string);
-+ query.exec();
-+ // drop temptable
-+ drop_temp_table(temptable);
-+ }
-+ }
-+}; //end restore settings
-+
-+void MythDB::change_hostname (QString old_hostname, QString new_hostname)
-+{
-+ LOG(VB_GENERAL, LOG_NOTICE, QString("Changing hostname from %1 -> %2")
-+ .arg(old_hostname)
-+ .arg(new_hostname));
-+
-+ MSqlQuery query(MSqlQuery::InitCon());
-+ MSqlQuery sub_query(MSqlQuery::InitCon());
-+ query.prepare( "SHOW TABLES" );
-+
-+ if (query.exec() && query.isActive() && query.size() > 0)
-+ {
-+ while (query.next())
-+ {
-+ QString table_name = query.value(0).toString();
-+ LOG(VB_GENERAL, LOG_NOTICE, QString("Scanning %1")
-+ .arg(table_name));
-+
-+ // LOOP OVER TABLES, CHECK IF IT HAS A HOSTNAME FIELD
-+ QString query_string=QString("SHOW COLUMNS from %1 "
-+ "where field='hostname'")
-+ .arg(table_name);
-+ sub_query.prepare(query_string);
-+
-+ if (sub_query.exec() && sub_query.size() > 0)
-+ { //update hostname
-+ LOG(VB_GENERAL, LOG_NOTICE, QString(" Updating hostname in: %1")
-+ .arg(table_name));
-+ query_string = QString("UPDATE %1 SET hostname = :NEW_HOSTNAME "
-+ "WHERE hostname = :OLD_HOSTNAME")
-+ .arg(table_name);
-+ sub_query.prepare(query_string);
-+ sub_query.bindValue(":NEW_HOSTNAME" , new_hostname);
-+ sub_query.bindValue(":OLD_HOSTNAME" , old_hostname);
-+ sub_query.exec();
-+ }
-+ }
-+ }
-+
-+
-+
-+
-+
-+
-+}
-+
-+bool MythDB::settings_check(QString src_hostname,
-+ QString saved_settingsgroupname)
-+{
-+ int tempItem;
-+ bool returncode = FALSE ;
-+ QString table="settings";
-+
-+ QString tablename = find_group_table_name(table, saved_settingsgroupname);
-+ QString hostname_clause;
-+ if ( src_hostname == "GLOBAL" )
-+ hostname_clause = "hostname IS NULL";
-+ else
-+ hostname_clause ="hostname = :HOSTNAME";
-+
-+ if (does_table_exist (tablename))
-+ {
-+ MSqlQuery query(MSqlQuery::InitCon());
-+ QString query_string = QString("SELECT COUNT(data) from %1 "
-+ "WHERE %2")
-+ .arg(tablename)
-+ .arg(hostname_clause);
-+
-+ query.prepare(query_string);
-+ query.bindValue(":HOSTNAME" , src_hostname );
-+
-+ if (query.exec() && query.isActive() && query.size() > 0 )
-+ {
-+ while (query.next())
-+ {
-+ tempItem = query.value(0).toInt();
-+ if ( tempItem >= 1 )
-+ returncode = TRUE;
-+ else
-+ {
-+ LOG(VB_GENERAL, LOG_NOTICE,
-+ QString("Group %1 does not contain"
-+ " valid settings")
-+ .arg(saved_settingsgroupname));
-+ }
-+ }
-+ }
-+ }
-+ else
-+ LOG(VB_GENERAL, LOG_NOTICE, QString("Couldn't find table: %1")
-+ .arg(tablename));
-+ return returncode;
-+}; // end settings_check
-+
-+void MythDB::import_settings(QMap<QString,QString> vp_map,
-+ QString table)
-+{
-+ MSqlQuery query(MSqlQuery::InitCon());
-+
-+ //IMPORT SETTINGS TABLE
-+ if (table.startsWith("settings"))
-+ {
-+ if ( table != "settings" )
-+ create_new_table(table,"settings");
-+ QString hostname = vp_map.value("hostname");
-+ QString value = vp_map.value("value");
-+ QString data = vp_map.value("data");
-+
-+ QString hostname_clause;
-+ QVariant import_hostname = QVariant(QVariant::String);
-+
-+ if ( hostname.isEmpty())
-+ hostname_clause = "hostname IS NULL";
-+ else
-+ {
-+ hostname_clause ="hostname = :HOSTNAME";
-+ import_hostname = hostname;
-+ }
-+
-+ QString query_string=QString("SELECT value, data, hostname "
-+ "FROM %1 "
-+ "WHERE %2 AND value = :VALUE "
-+ "ORDER BY value")
-+ .arg(table)
-+ .arg(hostname_clause);
-+
-+ query.prepare(query_string);
-+ query.bindValue(":HOSTNAME", hostname);
-+ query.bindValue(":VALUE", value);
-+
-+ // if already exisiting records then update, otherwise insert
-+ if (query.exec() && query.isActive())
-+ {
-+ MSqlQuery sub_query(MSqlQuery::InitCon());
-+ if ( query.size() > 0 )
-+ {
-+ query_string = QString("UPDATE "
-+ "%1 "
-+ "set data = :DATA "
-+ "WHERE %2 AND "
-+ "value = :VALUE ")
-+ .arg(table)
-+ .arg(hostname_clause);
-+
-+ sub_query.prepare(query_string);
-+ sub_query.bindValue(":HOSTNAME", import_hostname);
-+ sub_query.bindValue(":VALUE", value);
-+ sub_query.bindValue(":DATA", data);
-+ sub_query.exec();
-+ }
-+ else
-+ {
-+ query_string = QString("INSERT INTO "
-+ " %1 "
-+ "(value,data,hostname) "
-+ "VALUES ( :VALUE , :DATA , :HOSTNAME)").arg(table);
-+
-+ sub_query.prepare(query_string);
-+ sub_query.bindValue(":HOSTNAME", import_hostname);
-+ sub_query.bindValue(":VALUE", value);
-+ sub_query.bindValue(":DATA", data);
-+ sub_query.exec();
-+ }
-+ }
-+ }
-+ //KEYBINDINGS TABLE
-+ else if (table.startsWith("keybindings"))
-+ {
-+ if ( table != "keybindings" )
-+ create_new_table(table,"keybindings");
-+ QString hostname = vp_map.value("hostname");
-+ QString context = vp_map.value("context");
-+ QString action = vp_map.value("action");
-+ QString description = vp_map.value("description");
-+ QString keylist = vp_map.value("keylist");
-+
-+ QString query_string=QString("SELECT context,action,hostname "
-+ "FROM %1 "
-+ "WHERE hostname = :HOSTNAME AND "
-+ "context = :CONTEXT "
-+ "AND action = :ACTION ").arg(table);
-+ query.prepare(query_string);
-+ query.bindValue(":HOSTNAME", hostname);
-+ query.bindValue(":CONTEXT", context);
-+ query.bindValue(":ACTION", action);
-+
-+ if (query.exec() && query.isActive())
-+ {
-+ MSqlQuery sub_query(MSqlQuery::InitCon());
-+ if ( query.size() > 0 )
-+ {
-+ query_string = QString("UPDATE "
-+ " %1 "
-+ "set keylist = :KEYLIST "
-+ "WHERE hostname = :HOSTNAME AND "
-+ "context = :CONTEXT "
-+ "AND action = :ACTION ").arg(table);
-+
-+ sub_query.prepare(query_string);
-+ sub_query.bindValue(":HOSTNAME", hostname);
-+ sub_query.bindValue(":KEYLIST", keylist);
-+ sub_query.bindValue(":CONTEXT", context);
-+ sub_query.bindValue(":ACTION", action);
-+ sub_query.exec();
-+ }
-+ else
-+ {
-+ query_string = QString("INSERT INTO "
-+ " %1 "
-+ " (context , action , description , keylist , hostname) "
-+ " VALUES( "
-+ " :CONTEXT ,"
-+ " :ACTION , "
-+ " :DESCRIPTION , "
-+ " :KEYLIST , "
-+ " :HOSTNAME)").arg(table) ;
-+
-+ sub_query.prepare(query_string);
-+ sub_query.bindValue(":HOSTNAME", hostname);
-+ sub_query.bindValue(":KEYLIST", keylist);
-+ sub_query.bindValue(":CONTEXT", context);
-+ sub_query.bindValue(":ACTION", action);
-+ sub_query.bindValue(":DESCRIPTION", description);
-+ sub_query.exec();
-+ }
-+ }
-+ }
-+ //JUMP POINTS
-+ else if (table.startsWith("jumppoints"))
-+ {
-+ if ( table != "jumppoints" )
-+ create_new_table(table,"jumppoints");
-+ QString hostname = vp_map.value("hostname");
-+ QString description = vp_map.value("description");
-+ QString destination = vp_map.value("destination");
-+ QString keylist = vp_map.value("keylist");
-+
-+ QString query_string=QString("SELECT destination, keylist "
-+ "FROM %1 "
-+ "WHERE hostname = :HOSTNAME AND "
-+ "destination = :DESTINATION "
-+ "AND keylist = :KEYLIST ").arg(table);
-+ query.prepare(query_string);
-+ query.bindValue(":HOSTNAME", hostname);
-+ query.bindValue(":DESTINATION", destination);
-+ query.bindValue(":KEYLIST", keylist);
-+
-+ if (query.exec() && query.isActive())
-+ {
-+ MSqlQuery sub_query(MSqlQuery::InitCon());
-+ if ( query.size() > 0 )
-+ {
-+ query_string = QString("UPDATE "
-+ " %1 "
-+ "set keylist = :KEYLIST "
-+ "WHERE hostname = :HOSTNAME AND "
-+ "destination = :DESTINATION ").arg(table);
-+
-+ sub_query.prepare(query_string);
-+ sub_query.bindValue(":HOSTNAME", hostname);
-+ sub_query.bindValue(":KEYLIST", keylist);
-+ sub_query.bindValue(":DESTINATION", destination);
-+ sub_query.exec();
-+ }
-+ else
-+ {
-+ query_string = QString("INSERT INTO "
-+ " %1 "
-+ " (description , destination, keylist , hostname) "
-+ " VALUES( "
-+ " :DESCRIPTION ,"
-+ " :DESTINATION , "
-+ " :KEYLIST , "
-+ " :HOSTNAME)").arg(table) ;
-+
-+ sub_query.prepare(query_string);
-+ sub_query.bindValue(":HOSTNAME", hostname);
-+ sub_query.bindValue(":KEYLIST", keylist);
-+ sub_query.bindValue(":DESTINATION", destination);
-+ sub_query.bindValue(":DESCRIPTION", description);
-+ sub_query.exec();
-+ }
-+ }
-+ }
-+}; //end import_settings
-+
-+QMap<QString, QMap<QString,QString> >
-+ MythDB::export_settings(QString src_hostname,
-+ QString saved_settingsgroupname,
-+ QStringList table_list, bool skip_host )
-+{
-+ QMap<QString, QMap<QString,QString> > result_set;
-+ QStringList::Iterator it;
-+ QString current_table;
-+ int record_count = 0;
-+
-+ if ( table_list.isEmpty() )
-+ {
-+ table_list.append("settings");
-+ table_list.append("keybindings");
-+ table_list.append("jumppoints");
-+ }
-+
-+ MSqlQuery query(MSqlQuery::InitCon());
-+ QString query_string;
-+
-+ //loop over tablelist
-+ for ( it = table_list.begin(); it != table_list.end(); ++it )
-+ {
-+ current_table = *it ;
-+ QString sub_sql;
-+ QStringList fields;
-+ QString field_query;
-+
-+ QString table_name = find_group_table_name(current_table,
-+ saved_settingsgroupname);
-+
-+ QString hostname_clause;
-+ if ( src_hostname == "GLOBAL" )
-+ hostname_clause = "hostname IS NULL";
-+ else
-+ hostname_clause ="hostname = :HOSTNAME";
-+
-+ // find field names
-+ query_string = QString("SHOW COLUMNS from %1").arg(table_name);
-+ query.prepare(query_string);
-+
-+ //build up field name vars
-+ if (query.exec() && query.isActive() && query.size() > 0)
-+ {
-+ while (query.next())
-+ {
-+ if (! field_query.isEmpty())
-+ field_query +=',';
-+ QString tempItem = query.value(0).toString();
-+ fields.append(tempItem);
-+ field_query += tempItem;
-+ }
-+ }
-+ // when working with settings table skip HOST if skip_host is true
-+ if ( current_table == "settings" && skip_host == TRUE )
-+ {
-+ QString skip_host_clause;
-+ skip_host_clause = " VALUE not like 'HOST%' AND DATA not like 'HardwareProfile%UUID'" ;
-+ query_string = QString("SELECT %1 FROM %2 WHERE %3 AND %4")
-+ .arg(field_query)
-+ .arg(table_name)
-+ .arg(hostname_clause)
-+ .arg(skip_host_clause);
-+
-+ }
-+ else
-+ {
-+ query_string = QString("SELECT %1 FROM %2 WHERE %3")
-+ .arg(field_query)
-+ .arg(table_name)
-+ .arg(hostname_clause);
-+ }
-+ query.prepare(query_string);
-+ query.bindValue(":HOSTNAME" , src_hostname);
-+
-+ //looping over each record in the table query
-+ if (query.exec() && query.isActive() && query.size() > 0)
-+ {
-+ while (query.next())
-+ {
-+ //construct qmap of elements
-+ //add table name
-+ QMap<QString,QString> value_pair;
-+ value_pair["table"]=table_name;
-+
-+ for ( int i=0 ; i < fields.size();i++ )
-+ {
-+ QString tempvalue = fields[i];
-+ QString tempItem = query.value(i).toString();
-+ value_pair[tempvalue]=tempItem;
-+ }
-+ result_set[QString(record_count)] = value_pair;
-+ record_count++;
-+ }
-+ }
-+
-+ } // end table loop
-+ return result_set;
-+}; //end export_settings
-+
-+
-+void MythDB::create_new_table (QString create_table_name,QString like_name)
-+{
-+ if ( ! does_table_exist(create_table_name))
-+ {
-+ MSqlQuery query(MSqlQuery::InitCon());
-+ QString query_string = QString("CREATE TABLE %1 like %2")
-+ .arg(create_table_name)
-+ .arg(like_name);
-+
-+ query.prepare(query_string);
-+ query.exec();
-+ }
-+ else
-+ LOG(VB_GENERAL, LOG_NOTICE, QString("Table is already present,"
-+ "will not create it: %1")
-+ .arg(create_table_name));
-+};
-+
-+
-+void MythDB::drop_temp_table (QString table_name)
-+{
-+ MSqlQuery query(MSqlQuery::InitCon());
-+ if (table_name == "settings" | table_name == "keybindings" | table_name == "jumppoints")
-+ return;
-+ QString query_string = QString("DROP TABLE %1").arg(table_name);
-+ query.prepare(query_string);
-+ query.exec();
-+ return;
-+}
-+
-+void MythDB::create_temp_table (QString create_table_name,QString like_name)
-+{
-+ MSqlQuery query(MSqlQuery::InitCon());
-+ create_new_table(create_table_name,like_name);
-+ QString query_string;
-+ if ( like_name == "settings")
-+ {
-+ query_string = QString ("ALTER TABLE %1 ADD UNIQUE( value)")
-+ .arg(create_table_name);
-+ query.prepare(query_string);
-+ query.exec();
-+ }
-+
-+ query_string = QString("TRUNCATE %1").arg(create_table_name);
-+ query.prepare(query_string);
-+ query.exec();
-+ return;
-+}
-+
-+bool MythDB::does_table_exist(QString table_name)
-+{
-+ bool table_exist = FALSE;
-+ QString full_table_name;
-+ MSqlQuery query(MSqlQuery::InitCon());
-+
-+ query.prepare( "SHOW TABLES" );
-+ if (query.exec() && query.isActive() && query.size() > 0)
-+ {
-+ while (query.next())
-+ {
-+ full_table_name = query.value(0).toString();
-+ if (table_name == full_table_name)
-+ {
-+ table_exist = TRUE;
-+ break;
-+ }
-+ }
-+ }
-+ return table_exist;
-+};
-+
-+
-+QString MythDB::find_group_table_name(QString current_table,
-+ QString saved_settingsgroupname)
-+{
-+ QString table_name;
-+ if ( saved_settingsgroupname.toLower() == "current" )
-+ table_name = current_table ;
-+ else
-+ table_name = current_table + "_" + saved_settingsgroupname ;
-+
-+ return table_name;
-+};
-+//END JM ADDED
-+
- /**
- * \brief Set a flag indicating we have successfully connected to the database
- */
-diff --git a/mythtv/libs/libmythbase/mythdb.h b/mythtv/libs/libmythbase/mythdb.h
-index 79abe56..fd6044e 100644
---- a/mythtv/libs/libmythbase/mythdb.h
-+++ b/mythtv/libs/libmythbase/mythdb.h
-@@ -75,6 +75,49 @@ class MBASE_PUBLIC MythDB
-
- void WriteDelayedSettings(void);
-
-+ //JM ADDED
-+ void savesettings_togroup(QString src_hostname,
-+ QString saved_settingsgroupname );
-+ void deletesettings(QString delete_hostname,
-+ QString saved_settingsgroupname);
-+
-+ QMap<QString,QStringList> list_settingsgroupname();
-+
-+ QMap<QString,QStringList> diff_settingsgroupname(QString diff_hostname1,
-+ QString diff_hostname2,
-+ QStringList table_list);
-+
-+ void clonesettings(QString src_hostname,
-+ QString saved_settingsgroupname,
-+ QStringList table_list,
-+ bool is_full_clone=TRUE,
-+ QString dest_hostname="");
-+
-+ void restoresettings (QString dest_hostname,
-+ QString saved_settingsgroupname,
-+ QStringList table_list);
-+
-+ void change_hostname (QString old_hostname, QString new_hostname);
-+ bool settings_check (QString src_hostname, QString saved_settingsgroupname);
-+ void import_settings(QMap<QString,QString> vp_map, QString table);
-+
-+
-+ QMap<QString,QMap <QString,QString> > export_settings(
-+ QString src_hostname,
-+ QString saved_settingsgroupname,
-+ QStringList table_list,
-+ bool skip_host = FALSE);
-+
-+ void create_new_table (QString create_table_name,QString like_name);
-+ void drop_temp_table (QString table_name);
-+ void create_temp_table (QString create_table_name,QString like_name);
-+ bool does_table_exist(QString table_name);
-+ QString find_group_table_name(QString current_table,
-+ QString saved_settingsgroupname);
-+ //END JM ADDED
-+
-+
-+
- void SetHaveDBConnection(bool connected);
- void SetHaveSchema(bool schema);
- bool HaveSchema(void) const;
-diff --git a/mythtv/programs/mythutil/commandlineparser.cpp b/mythtv/programs/mythutil/commandlineparser.cpp
-index f4a6035..fdeeb8e 100644
---- a/mythtv/programs/mythutil/commandlineparser.cpp
-+++ b/mythtv/programs/mythutil/commandlineparser.cpp
-@@ -118,6 +118,37 @@ void MythUtilCommandLineParser::LoadArguments(void)
- << add("--print-template", "printtemplate", false,
- "Print the template to be sent to the frontend", "")
- ->SetGroup("Messaging")
-+
-+ //settingsutil.cpp
-+ << add("--save-settings", "savesettings", false,
-+ "Save current settings", "")
-+ ->SetGroup("Settings")
-+ << add("--delete-settings", "deletesettings", false,
-+ "Delete current settings", "")
-+ ->SetGroup("Settings")
-+ << add("--restore-settings", "restoresettings", false,
-+ "Restore settings from previous backup", "")
-+ ->SetGroup("Settings")
-+ << add("--list-groups", "listgroups", false,
-+ "List hosts and groups of settings", "")
-+ ->SetGroup("Settings")
-+ << add("--copy-settings", "copysettings", false,
-+ "Copy or Clone settings from one host to another", "")
-+ ->SetGroup("Settings")
-+ << add("--diff-settings", "diffsettings", false,
-+ "Show settings that are different between two hosts", "")
-+ ->SetGroup("Settings")
-+ << add("--change-hostname", "changehostname", false,
-+ "Change the hostname", "")
-+ ->SetGroup("Settings")
-+ << add("--import-settings", "importsettings", false,
-+ "import settings", "")
-+ ->SetRequiredChild("infile")
-+
-+ << add("--export-settings", "exportsettings", false,
-+ "export settings", "")
-+ ->SetRequiredChild("outfile")
-+
- );
-
- // mpegutils.cpp
-@@ -140,6 +171,59 @@ void MythUtilCommandLineParser::LoadArguments(void)
- add("--bcastaddr", "bcastaddr", "127.0.0.1", "(optional) IP address to send to", "")
- ->SetChildOf("message");
-
-+ //settingsutils.cpp
-+ add("--groupname", "groupname", "", "Group of settings name", "")
-+ ->SetRequiredChildOf("savesettings")
-+ ->SetRequiredChildOf("restoresettings")
-+ ->SetRequiredChildOf("deletesettings")
-+ ->SetChildOf("copysettings");
-+
-+ add("--hostname", "hostname", "", "System name to save/restore settings", "")
-+ ->SetChildOf("savesettings")
-+ ->SetChildOf("restoresettings")
-+ ->SetChildOf("copysettings")
-+ ->SetChildOf("deletesettings")
-+ ->SetChildOf("exportsettings")
-+ ->SetChildOf("importsettings");
-+
-+ add("--host_1", "host_1", "", "First host in compare list", "")
-+ ->SetRequiredChildOf("diffsettings");
-+
-+ add("--host_2", "host_2", "", "Second host in compare list", "")
-+ ->SetRequiredChildOf("diffsettings");
-+
-+
-+ add("--tablelist", "table_list", "", "List of tables to operate on "
-+ "[keybindings,settings]", "")
-+ ->SetChildOf("diffsettings")
-+ ->SetChildOf("restoresettings")
-+ ->SetChildOf("copysettings")
-+ ->SetChildOf("exportsettings");
-+
-+ add("--clone", "fullclone", false, "Enable copy of all settings, "
-+ "including those that are unique to each system.", "")
-+ ->SetChildOf("copysettings");
-+
-+
-+ add("--old-host", "oldhost", "", "Hostname to change", "")
-+ ->SetRequiredChildOf("changehostname");
-+
-+ add("--new-host", "newhost", "", "New hostname", "")
-+ ->SetRequiredChildOf("changehostname")
-+ ->SetRequiredChildOf("copysettings");
-+
-+ add("--format", "format", false, "Format output of differences", "")
-+ ->SetChildOf("diffsettings");
-+ add("--distro-default", "distro-default", false, "Export settings for"
-+ "import into the default table", "")
-+ ->SetChildOf("exportsettings");
-+ add("--generic", "generic", false, "export settings without saving "
-+ "the hostname", "")
-+ ->SetChildOf("exportsettings");
-+
-+
-+
-+
- // Generic Options used by more than one utility
- addRecording();
- addInFile(true);
-diff --git a/mythtv/programs/mythutil/main.cpp b/mythtv/programs/mythutil/main.cpp
-index 418ea01..bd4a1f4 100644
---- a/mythtv/programs/mythutil/main.cpp
-+++ b/mythtv/programs/mythutil/main.cpp
-@@ -20,7 +20,7 @@
- #include "jobutils.h"
- #include "markuputils.h"
- #include "messageutils.h"
--
-+#include "settingsutils.h"
-
- int main(int argc, char *argv[])
- {
-@@ -92,6 +92,7 @@ int main(int argc, char *argv[])
- registerJobUtils(utilMap);
- registerMarkupUtils(utilMap);
- registerMessageUtils(utilMap);
-+ registerSettingsUtils(utilMap);
-
- bool cmdFound = false;
- int cmdResult = GENERIC_EXIT_OK;
-diff --git a/mythtv/programs/mythutil/mythutil.pro b/mythtv/programs/mythutil/mythutil.pro
-index 066e618..87d7952 100644
---- a/mythtv/programs/mythutil/mythutil.pro
-+++ b/mythtv/programs/mythutil/mythutil.pro
-@@ -10,7 +10,7 @@ TARGET = mythutil
- target.path = $${PREFIX}/bin
- INSTALLS = target
-
--LIBS += $$EXTRA_LIBS
-+LIBS += $$EXTRA_LIBS
- INCLUDEPATH += ../../libs/libmythbase
-
- QMAKE_CLEAN += $(TARGET)
-@@ -19,8 +19,10 @@ QMAKE_CLEAN += $(TARGET)
- HEADERS += mythutil.h commandlineparser.h
- HEADERS += backendutils.h fileutils.h jobutils.h markuputils.h
- HEADERS += messageutils.h mpegutils.h
-+HEADERS += settingsutils.h
-+
- SOURCES += main.cpp mythutil.cpp commandlineparser.cpp
- SOURCES += backendutils.cpp fileutils.cpp jobutils.cpp markuputils.cpp
- SOURCES += messageutils.cpp mpegutils.cpp
--
-+SOURCES += settingsutils.cpp
- mingw: LIBS += -lwinmm -lws2_32
-diff --git a/mythtv/programs/mythutil/settingsutils.cpp b/mythtv/programs/mythutil/settingsutils.cpp
-new file mode 100644
-index 0000000..8fc7b0e
---- /dev/null
-+++ b/mythtv/programs/mythutil/settingsutils.cpp
-@@ -0,0 +1,586 @@
-+// C++ includes
-+#include <iostream>
-+
-+//QT includes
-+#include <qdom.h>
-+#include <QFile>
-+#include <QDomElement>
-+
-+// libmyth* includes
-+#include "compat.h"
-+#include "exitcodes.h"
-+#include "mythlogging.h"
-+#include "mythcontext.h"
-+
-+
-+#include "settingsutils.h"
-+
-+
-+static int SaveSettings(const MythUtilCommandLineParser &cmdline)
-+{
-+ QString src_hostname;
-+ QString groupname;
-+
-+ if (cmdline.toBool("groupname"))
-+ groupname = cmdline.toString("groupname");
-+
-+ if (cmdline.toBool("hostname"))
-+ src_hostname = cmdline.toString("hostname");
-+ else
-+ src_hostname = gCoreContext->GetHostName();
-+
-+ gCoreContext->savesettings_togroup(src_hostname,groupname);
-+ return GENERIC_EXIT_OK;
-+}
-+
-+static int DeleteSettings(const MythUtilCommandLineParser &cmdline)
-+{
-+
-+ QString delete_hostname;
-+ QString groupname;
-+
-+ if (cmdline.toBool("groupname"))
-+ groupname = cmdline.toString("groupname");
-+
-+ if (cmdline.toBool("hostname"))
-+ delete_hostname = cmdline.toString("hostname");
-+ else
-+ delete_hostname = gCoreContext->GetHostName();
-+
-+
-+ gCoreContext->deletesettings(delete_hostname,groupname);
-+
-+ return GENERIC_EXIT_OK;
-+}
-+
-+
-+static int RestoreSettings(const MythUtilCommandLineParser &cmdline)
-+{
-+ QString dest_hostname;
-+ QString groupname;
-+ QString tablestring;
-+ QStringList table_list;
-+
-+ if (cmdline.toBool("groupname"))
-+ groupname = cmdline.toString("groupname");
-+
-+
-+ if (cmdline.toBool("hostname"))
-+ dest_hostname = cmdline.toString("hostname");
-+ else
-+ dest_hostname = gCoreContext->GetHostName();
-+
-+ if (cmdline.toBool("table_list"))
-+ {
-+ tablestring = QString(cmdline.toString("table_list"));
-+ table_list = tablestring.split(",", QString::SkipEmptyParts);
-+ }
-+
-+ gCoreContext->restoresettings(dest_hostname,
-+ groupname,
-+ table_list);
-+
-+ return GENERIC_EXIT_OK;
-+}
-+
-+
-+static int CopySettings(const MythUtilCommandLineParser &cmdline)
-+{
-+ QString src_hostname;
-+ QString groupname;
-+ QString tablestring;
-+ QStringList table_list;
-+ bool is_full_clone;
-+ QString dest_hostname;
-+
-+ if (cmdline.toBool("groupname"))
-+ groupname = cmdline.toString("groupname");
-+ else
-+ groupname = "Current";
-+
-+ if (cmdline.toBool("hostname"))
-+ src_hostname = cmdline.toString("hostname");
-+ else
-+ src_hostname = gCoreContext->GetHostName();
-+
-+ if (cmdline.toBool("newhost"))
-+ dest_hostname = cmdline.toString("newhost");
-+
-+ if (cmdline.toBool("table_list"))
-+ {
-+ tablestring = QString(cmdline.toString("table_list"));
-+ table_list = tablestring.split(",", QString::SkipEmptyParts);
-+ }
-+
-+ if (cmdline.toBool("fullclone"))
-+ is_full_clone = TRUE;
-+ else
-+ is_full_clone = FALSE;
-+
-+ gCoreContext->clonesettings(src_hostname,
-+ groupname,
-+ table_list,
-+ is_full_clone,
-+ dest_hostname);
-+
-+ return GENERIC_EXIT_OK;
-+}
-+
-+void print_out_diff_formated(QMap<QString, QStringList> resultset)
-+{
-+ QString settings_header;
-+ QString keybindings_header;
-+ QString tempString;
-+ QString tempItem;
-+ QString dashline_settings;
-+ QString dashline_key;
-+ QStringList tempList;
-+
-+ QString host_1;
-+ QString host_2;
-+ QString data_1;
-+ QString data_2;
-+ QString value;
-+ QString context;
-+ QString action;
-+
-+ int value_width = 35;
-+ int data_width = 40;
-+
-+ int context_width = 22;
-+ int action_width = 22;
-+ int key_width = 35;
-+
-+ dashline_key = (tempString.fill('-', 133));
-+ dashline_settings = (tempString.fill('-', 130));
-+
-+ QMap<QString, QStringList>::iterator i;
-+
-+
-+ for (i = resultset.begin(); i != resultset.end(); ++i)
-+ {
-+ cout << endl<<i.key().toLocal8Bit().constData() << ": \t" << endl;;
-+ //construct the headers
-+ if (i.key() == "Settings")
-+ {
-+ //settings header
-+ tempList = (i.value().at(0)).split("|", QString::SkipEmptyParts);
-+ host_1 = tempList.at(1);
-+ host_2 = tempList.at(3);
-+ tempString="|";
-+ tempItem = "Value";
-+ tempString.append(tempItem.leftJustified(value_width));
-+ tempString.append("|");
-+ tempItem = host_1; //hostname 1
-+ tempString.append(tempItem.leftJustified(data_width));
-+ tempString.append("|");
-+ tempItem = host_2; //hostname 2
-+ tempString.append(tempItem.leftJustified(data_width));
-+ tempString.append("|");
-+ settings_header = tempString;
-+
-+ cout << settings_header.toLocal8Bit().constData() << endl;;
-+ cout << dashline_settings.toLocal8Bit().constData() << endl;
-+ }
-+
-+ if (i.key() == "Keybindings")
-+ {
-+ //keybindings_header
-+ tempList = (i.value().at(0)).split("|", QString::SkipEmptyParts);
-+ host_1 = tempList.at(2);
-+ host_2 = tempList.at(4);
-+ tempString="|";
-+ tempItem = "Context";
-+ tempString.append(tempItem.leftJustified(context_width));
-+ tempString.append("|");
-+ tempItem = "Action";
-+ tempString.append(tempItem.leftJustified(action_width));
-+ tempString.append("|");
-+ tempItem = host_1;
-+ tempString.append(tempItem.leftJustified(key_width));
-+ tempString.append("|");
-+ tempItem = host_2;
-+ tempString.append(tempItem.leftJustified(key_width));
-+ tempString.append("|");
-+ keybindings_header = tempString;
-+
-+ cout << keybindings_header.toLocal8Bit().constData() << endl;;
-+ cout << dashline_key.toLocal8Bit().constData() << endl;
-+
-+ }
-+ // format each line
-+ for (int y = 0; y < i.value().size(); ++y)
-+ {
-+ if (i.key() == "Settings")
-+ {
-+ tempList = (i.value().at(y)).split("|",
-+ QString::SkipEmptyParts);
-+ data_1 = tempList.at(2);
-+ data_2 = tempList.at(4);
-+ value = tempList.at(0);
-+ tempString="|";
-+ tempItem = value;
-+ tempString.append(tempItem.leftJustified(value_width));
-+ tempString.append("|");
-+ tempItem = data_1;
-+ tempString.append(tempItem.leftJustified(data_width));
-+ tempString.append("|");
-+ tempItem = data_2;
-+ tempString.append(tempItem.leftJustified(data_width));
-+ tempString.append("|");
-+ }
-+ if (i.key() == "Keybindings")
-+ {
-+ tempList = (i.value().at(y)).split("|",
-+ QString::SkipEmptyParts);
-+ data_1 = tempList.at(3);
-+ data_2 = tempList.at(5);
-+ context = tempList.at(0);
-+ action = tempList.at(1);
-+
-+ tempString="|";
-+ tempItem = context;
-+ tempString.append(tempItem.leftJustified(context_width));
-+ tempString.append("|");
-+ tempItem = action;
-+ tempString.append(tempItem.leftJustified(action_width));
-+ tempString.append("|");
-+ tempItem = data_1;
-+ tempString.append(tempItem.leftJustified(key_width));
-+ tempString.append("|");
-+ tempItem = data_2;
-+ tempString.append(tempItem.leftJustified(key_width));
-+ tempString.append("|");
-+ }
-+
-+ cout << tempString.toLocal8Bit().constData()<<endl;
-+ }
-+ }
-+};
-+
-+static int DiffSettings(const MythUtilCommandLineParser &cmdline)
-+{
-+ QMap<QString, QStringList> resultset;
-+ QString diff_hostname1;
-+ QString diff_hostname2;
-+ QStringList table_list;
-+ bool format_results = FALSE;
-+ QMap<QString, QStringList>::iterator i;
-+
-+ if (cmdline.toBool("host_1"))
-+ diff_hostname1 = cmdline.toString("host_1");
-+ if (cmdline.toBool("host_2"))
-+ diff_hostname2 = cmdline.toString("host_2");
-+
-+ if (cmdline.toBool("table_list"))
-+ {
-+ QString tablestring = QString(cmdline.toString("table_list"));
-+ table_list = tablestring.split(",", QString::SkipEmptyParts);
-+ }
-+
-+ if (cmdline.toBool("format"))
-+ format_results = TRUE;
-+
-+ resultset = gCoreContext->diff_settingsgroupname(diff_hostname1,
-+ diff_hostname2,
-+ table_list);
-+ if (resultset.isEmpty())
-+ cout << "No differences found" << endl;
-+ else
-+ {
-+ if (format_results)
-+ print_out_diff_formated(resultset);
-+ else
-+ {
-+ for (i = resultset.begin(); i != resultset.end(); ++i)
-+ {
-+ cout << i.key().toLocal8Bit().constData() << " : \t" << endl;;
-+ for (int y = 0; y < i.value().size(); ++y)
-+ cout << i.value().at(y).toLocal8Bit().constData()<<endl;
-+ cout << endl;
-+ }
-+ }
-+ }
-+ return GENERIC_EXIT_OK;
-+};// DiffSettings
-+
-+static int ListGroups(const MythUtilCommandLineParser &cmdline)
-+{
-+ QMap<QString, QStringList> resultset;
-+ resultset = gCoreContext->list_settingsgroupname();
-+ QMap<QString, QStringList>::iterator i;
-+ cout << endl;
-+ for (i = resultset.begin(); i != resultset.end(); ++i)
-+ {
-+ cout << i.key().toLocal8Bit().constData() << " : \t";
-+ for (int y = 0; y < i.value().size(); ++y)
-+ cout << i.value().at(y).toLocal8Bit().constData()<<" " ;
-+ cout << endl;
-+ }
-+ return GENERIC_EXIT_OK;
-+};
-+
-+static int ImportSettings(const MythUtilCommandLineParser &cmdline)
-+{
-+
-+ if (cmdline.toString("infile").isEmpty())
-+ {
-+ LOG(VB_STDIO|VB_FLUSH, LOG_ERR, "Missing --infile option\n");
-+ return GENERIC_EXIT_INVALID_CMDLINE;
-+ }
-+ QString import_hostname;
-+ bool change_name = FALSE;
-+ if (cmdline.toBool("hostname"))
-+ {
-+ change_name = TRUE;
-+ import_hostname = cmdline.toString("hostname");
-+ }
-+ QString import_filename = cmdline.toString("infile");
-+ QFile myFile(import_filename);
-+
-+ QDomDocument doc( "exported_xml" );
-+ doc.setContent( &myFile );
-+
-+ QDomElement docElement = doc.documentElement();
-+ QDomElement record_element;
-+
-+ if ( docElement.nodeName() != "exported_xml" )
-+ {
-+ cout << "not a valid exported xml file" << endl;
-+ return 1;
-+ }
-+
-+ QString out_string = "Importing records, please be patient";
-+ cout << out_string.toLocal8Bit().constData() << endl;
-+ //Gives list of records in the file + count
-+ QDomNodeList nodeList = docElement.childNodes();
-+ int total_records = nodeList.count();
-+ out_string = QString("\nFound %1 records \n").arg(total_records);
-+ cout << out_string.toLocal8Bit().constData() << endl;
-+ LOG(VB_STDIO|VB_FLUSH, LOG_ERR, out_string);
-+
-+ for(QDomNode n = docElement.firstChild(); !n.isNull(); n = n.nextSibling())
-+ {
-+ QString table_name=QString();
-+ QMap<QString,QString> value_pair_map ;
-+
-+ //find table name for this record
-+ QDomNode tablenode=n.namedItem("table");
-+ record_element = tablenode.toElement();
-+ table_name = record_element.text();
-+
-+ //loop over childern of n and convert to element
-+ for(QDomNode subn = n.firstChild();
-+ !subn.isNull();
-+ subn = subn.nextSibling())
-+ {
-+ record_element = subn.toElement();
-+ if ( record_element.nodeName() == "table" )
-+ continue;
-+ if ( change_name && record_element.nodeName() == "hostname" )
-+ value_pair_map[record_element.nodeName()] = import_hostname;
-+ else
-+ value_pair_map[record_element.nodeName()] = record_element.text();
-+ }
-+ if (import_filename.endsWith("syssettings.xml"))
-+ {
-+ if ( value_pair_map["value"] == "BackendServerIP")
-+ {
-+ out_string = "sysettings, ignoring backendserver ip record";
-+ cout << out_string.toLocal8Bit().constData() << endl;
-+ }
-+ else
-+ gCoreContext->import_settings(value_pair_map,table_name);
-+ }
-+ else
-+ //perform insert
-+ gCoreContext->import_settings(value_pair_map,table_name);
-+ }
-+ return GENERIC_EXIT_OK;
-+}; //end ImportSettings
-+
-+
-+static int ExportSettings(const MythUtilCommandLineParser &cmdline)
-+{
-+ QMap<QString, QMap<QString,QString> > records;
-+ QString src_hostname;
-+ QString groupname;
-+ QStringList table_list;
-+ QString tablestring;
-+ bool distro_default = FALSE;
-+ bool generic = FALSE;
-+ bool skip_host = FALSE;
-+
-+
-+
-+ QDomDocument doc("mythutils_exported_settings");
-+
-+ if (cmdline.toBool("groupname"))
-+ groupname = cmdline.toString("groupname");
-+ else
-+ groupname = "current";
-+
-+ if (cmdline.toBool("hostname"))
-+ src_hostname = cmdline.toString("hostname");
-+ else
-+ src_hostname = gCoreContext->GetHostName();
-+
-+ if (cmdline.toBool("distro-default"))
-+ {
-+ distro_default = TRUE;
-+ skip_host = TRUE;
-+ }
-+ if (cmdline.toBool("generic"))
-+ {
-+ generic = TRUE;
-+ //skip_host = TRUE;
-+ }
-+ if (cmdline.toBool("table_list"))
-+ {
-+ tablestring = QString(cmdline.toString("table_list"));
-+ table_list = tablestring.split(",", QString::SkipEmptyParts);
-+ }
-+ else
-+ table_list << "settings" <<"keybindings" <<"jumppoints" ;
-+
-+ if (cmdline.toString("outfile").isEmpty())
-+ {
-+ LOG(VB_STDIO|VB_FLUSH, LOG_ERR, "Missing --outfile option\n");
-+ return GENERIC_EXIT_INVALID_CMDLINE;
-+ }
-+
-+ QString export_filename = cmdline.toString("outfile");
-+
-+ records = gCoreContext->export_settings(src_hostname,groupname,
-+ table_list, skip_host);
-+
-+ QDomElement exported_xml = doc.createElement("exported_xml");
-+ doc.appendChild(exported_xml);
-+
-+ QMap<QString,int> record_count;
-+ QMap<QString,QMap<QString,QString> >::iterator i;
-+ for (i = records.begin(); i != records.end(); ++i )
-+ {
-+ QDomElement record = doc.createElement("record");
-+ exported_xml.appendChild(record);
-+
-+ //loop over all values in the record
-+ QMap<QString,QString> value_pair = i.value();
-+ QMap<QString, QString>::iterator y;
-+ //because we don't know the name of the key, we loop over it
-+ for (y = value_pair.begin(); y != value_pair.end(); ++y)
-+ {
-+ //add key/pair to xml document
-+ QDomElement tag = doc.createElement(y.key());
-+ record.appendChild(tag);
-+ QDomText t;
-+ if ( distro_default == TRUE )
-+ { // If exporting distro_default then change hostname + table
-+ if ( y.key() == "hostname" )
-+ { //check for global values here, empty value means global
-+ if ( y.value().isEmpty() )
-+ t = doc.createTextNode(y.value());
-+ else
-+ t = doc.createTextNode("distro_default");
-+ }
-+ else if ( y.key() == "table")
-+ t = doc.createTextNode(y.value()+"_distro_default");
-+ else
-+ t = doc.createTextNode(y.value());
-+ }
-+
-+ else if ( generic == TRUE )
-+ { // If exporting generic then change hostname
-+ if ( y.key() == "hostname" )
-+ { //check for global values here, empty value means global
-+ if ( y.value().isEmpty() )
-+ t = doc.createTextNode(y.value());
-+ else
-+ t = doc.createTextNode("REPLACE_ME");
-+ }
-+ else
-+ t = doc.createTextNode(y.value());
-+ }
-+ else
-+ t = doc.createTextNode(y.value());
-+
-+ tag.appendChild(t);
-+ //create record counts
-+ if ( y.key() == "table" )
-+ {
-+ if ( record_count.contains( y.value()) )
-+ {
-+ int record_num = record_count[y.value()];
-+ record_count[y.value()] = ++record_num;
-+ }
-+ else
-+ record_count[y.value()] = 1;
-+ }
-+ }
-+ }
-+ QFile file( export_filename );
-+
-+ if( !file.open(QIODevice::WriteOnly) )
-+ return -1;
-+
-+ QTextStream ts( &file );
-+ ts << doc.toString();
-+ file.close();
-+ QMap<QString, int >::iterator rc_it;
-+ for ( rc_it = record_count.begin(); rc_it != record_count.end(); ++rc_it)
-+ {
-+ QString table = rc_it.key();
-+ int rc_count = rc_it.value();
-+ QString out_string = QString ("Exported table %1: %2 records")
-+ .arg(table)
-+ .arg(rc_count);
-+ cout << out_string.toLocal8Bit().constData() << endl;
-+ }
-+ return GENERIC_EXIT_OK;
-+}; // end export_settings
-+
-+
-+static int ChangeHostname(const MythUtilCommandLineParser &cmdline)
-+{
-+
-+ QString old_hostname;
-+ QString new_hostname;
-+
-+
-+ if (cmdline.toBool("oldhost"))
-+ old_hostname = cmdline.toString("oldhost");
-+
-+ if (cmdline.toBool("newhost"))
-+ new_hostname = cmdline.toString("newhost");
-+
-+ if (old_hostname.isEmpty())
-+ {
-+ LOG(VB_STDIO|VB_FLUSH, LOG_ERR, "Missing or empty --old-host option\n");
-+ return GENERIC_EXIT_INVALID_CMDLINE;
-+ }
-+
-+ if (new_hostname.isEmpty())
-+ {
-+ LOG(VB_STDIO|VB_FLUSH, LOG_ERR, "Missing or empty --new-host option\n");
-+ return GENERIC_EXIT_INVALID_CMDLINE;
-+ }
-+
-+ gCoreContext->change_hostname(old_hostname, new_hostname);
-+
-+ return GENERIC_EXIT_OK;
-+}; //end ChangeHostname
-+
-+void registerSettingsUtils(UtilMap &utilMap)
-+{
-+ utilMap["savesettings"] = &SaveSettings;
-+ utilMap["deletesettings"] = &DeleteSettings;
-+ utilMap["restoresettings"] = &RestoreSettings;
-+ utilMap["copysettings"] = &CopySettings;
-+ utilMap["diffsettings"] = &DiffSettings;
-+ utilMap["listgroups"] = &ListGroups;
-+ utilMap["importsettings"] = &ImportSettings;
-+ utilMap["exportsettings"] = &ExportSettings;
-+ utilMap["changehostname"] = &ChangeHostname;
-+}
-+
-+/* vim: set expandtab tabstop=4 shiftwidth=4: */
-\ No newline at end of file
-diff --git a/mythtv/programs/mythutil/settingsutils.h b/mythtv/programs/mythutil/settingsutils.h
-new file mode 100644
-index 0000000..413496c
---- /dev/null
-+++ b/mythtv/programs/mythutil/settingsutils.h
-@@ -0,0 +1,3 @@
-+#include "mythutil.h"
-+
-+void registerSettingsUtils(UtilMap &utilMap);
diff --git a/abs/core/mythtv/stable-0.25/mythtv/mythbackend b/abs/core/mythtv/stable-0.25/mythtv/mythbackend
deleted file mode 100644
index 93773a2..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/mythbackend
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/bin/bash
-
-. /etc/rc.conf
-. /etc/rc.d/functions
-
-PID=`pidof -o %PPID /usr/bin/mythbackend`
-case "$1" in
- start)
- stat_busy "Starting MythTV Backend"
- [ ! -e /var/run/mysqld.pid ] && echo -n "mysqld not started" && stat_fail && exit
- [ -z "$PID" ] && /usr/bin/mythbackend -d -l /var/log/mythbackend.log -v important
- if [ $? -gt 0 ]; then
- stat_fail
- else
- echo $PID > /var/run/mythbackend.pid
- add_daemon mythbackend
- stat_done
- fi
- ;;
- stop)
- stat_busy "Stopping MythTV Backend"
- [ ! -z "$PID" ] && kill $PID &>/dev/null
- if [ $? -gt 0 ]; then
- stat_fail
- else
- rm_daemon mythbackend
- stat_done
- fi
- ;;
- restart)
- $0 stop
- sleep 1s
- $0 start
- ;;
- *)
- echo "usage: $0 {start|stop|restart}"
-esac
-exit 0
diff --git a/abs/core/mythtv/stable-0.25/mythtv/mythbackend.lr b/abs/core/mythtv/stable-0.25/mythtv/mythbackend.lr
deleted file mode 100644
index 4f218bc..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/mythbackend.lr
+++ /dev/null
@@ -1,9 +0,0 @@
-/var/log/mythtv/mythbackend.log {
- copytruncate
- daily
- size 10M
- missingok
- rotate 7
- compress
- notifempty
-}
diff --git a/abs/core/mythtv/stable-0.25/mythtv/mythbackend.sh b/abs/core/mythtv/stable-0.25/mythtv/mythbackend.sh
deleted file mode 100644
index e7a7b70..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/mythbackend.sh
+++ /dev/null
@@ -1,117 +0,0 @@
-#!/bin/bash
-#
-# /etc/rc.d/init.d/mythbackend
-#
-# Starts the mythbackend as a daemon
-#
-# chkconfig: 345 90 10
-# description: Starts the mythbackend process as a daemon after the XWindows \
-# system is started, in runlevel 5. This allows scheduled \
-# recordings to occur without manual intervention.
-# processname: mythbackend
-
-# Copyright (c) by Michael Thomson <linux at m-thomson dot net>
-# With thanks to Stu Tomlinson <stu at nosnilmot dot com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-# Default values to use if none are supplied in the config file.
-# User who should start the mythbackend processes
-MBE_USER="root"
-# Directory holding the mythbackend binary
-MBE_LOCATION="/usr/local/bin/"
-# Name of mythbackend binary
-MBE_PROG="mythbackend"
-# Full path to mythbackend log file
-MBE_LOGFILE="/var/log/mythtv/mythbackend.log"
-
-# Source function library.
-. /etc/init.d/functions
-
-# Source config file if available
-if [ -f "/etc/sysconfig/mythbackend" ]; then
- . /etc/sysconfig/mythbackend
-fi
-
-test -x ${MBE_LOCATION}${MBE_PROG} || exit 0
-
-RETVAL=0
-
-#
-# See how we were called.
-#
-
-start() {
- # Check if mythbackend is already running
- if [ ! -f /var/lock/subsys/${MBE_PROG} ]; then
- echo -n "Starting ${MBE_PROG}: "
- # /usr/local/bin/mythbackend -d -l /some/log/file
- #daemon --user ${MBE_USER} ${MBE_LOCATION}${MBE_PROG} -d -l ${MBE_LOGFILE}
- ${MBE_LOCATION}${MBE_PROG} -d -l ${MBE_LOGFILE}
- RETVAL=$?
- [ $RETVAL -eq 0 ] && touch /var/lock/subsys/${MBE_PROG}
- echo
- fi
- return $RETVAL
-}
-
-stop() {
- echo -n "Stopping ${MBE_PROG}: "
- killproc ${MBE_LOCATION}${MBE_PROG}
- RETVAL=$?
- [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/${MBE_PROG}
- echo
- return $RETVAL
-}
-
-
-restart() {
- stop
- start
-}
-
-reload() {
- restart
-}
-
-status_at() {
- status ${MBE_LOCATION}${MBE_PROG}
-}
-
-case "$1" in
-start)
- start
- ;;
-stop)
- stop
- ;;
-reload|restart)
- restart
- ;;
-condrestart)
- if [ -f /var/lock/subsys/${MBE_PROG} ]; then
- restart
- fi
- ;;
-status)
- status_at
- ;;
-*)
- echo "Usage: $0 {start|stop|restart|condrestart|status}"
- exit 1
-esac
-
-exit $?
-exit $RETVAL
diff --git a/abs/core/mythtv/stable-0.25/mythtv/mythfrontend.lr b/abs/core/mythtv/stable-0.25/mythtv/mythfrontend.lr
deleted file mode 100644
index 1580533..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/mythfrontend.lr
+++ /dev/null
@@ -1,9 +0,0 @@
-/var/log/mythtv/mythfrontend.log {
- copytruncate
- daily
- size 10M
- missingok
- rotate 7
- compress
- notifempty
-}
diff --git a/abs/core/mythtv/stable-0.25/mythtv/mythtv.install b/abs/core/mythtv/stable-0.25/mythtv/mythtv.install
deleted file mode 100644
index 5d4614d..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/mythtv.install
+++ /dev/null
@@ -1,25 +0,0 @@
-# arg 1: the new package version
-post_install() {
- gen_is_xml.py
- gen_lib_xml.py
-}
-
-pre_upgrade() {
- /bin/true
-}
-
-post_upgrade() {
- post_install
- /usr/share/mythtv/metadata/Movie/tmdb3_db_update.py
-}
-
-
-# arg 1: the old package version
-post_remove() {
- /bin/true
-
-}
-
-op=$1
-shift
-$op $*
diff --git a/abs/core/mythtv/stable-0.25/mythtv/pretty b/abs/core/mythtv/stable-0.25/mythtv/pretty
deleted file mode 100644
index 7e0ab21..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/pretty
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/bash
-if [ -f /usr/share/mythtv/contrib/user_jobs/mythlink.pl ]
-then
- su - mythtv -c "perl /usr/share/mythtv/contrib/user_jobs/mythlink.pl --link /myth/pretty"
-elif [ -f /usr/share/mythtv/contrib/user_jobs/mythrename.pl ]
-then
- su - mythtv -c "perl /usr/share/mythtv/contrib/user_jobs/mythrename.pl --link /myth/pretty"
-fi
-
diff --git a/abs/core/mythtv/stable-0.25/mythtv/smolt_jump.patch b/abs/core/mythtv/stable-0.25/mythtv/smolt_jump.patch
deleted file mode 100644
index 76f884c..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/smolt_jump.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- programs/mythfrontend/networkcontrol.cpp.orig 2010-11-08 23:07:04.000000000 +0000
-+++ programs/mythfrontend/networkcontrol.cpp 2010-11-08 23:08:06.000000000 +0000
-@@ -88,6 +88,7 @@
- jumpMap["zoneminderliveview"] = "ZoneMinder Live View";
- jumpMap["zoneminderevents"] = "ZoneMinder Events";
- jumpMap["snapshot"] = "ScreenShot";
-+ jumpMap["mythsmolt"] = "MythSmolt";
-
- jumpMap["channelrecpriority"] = "Channel Recording Priorities";
- jumpMap["viewscheduled"] = "Manage Recordings / Fix Conflicts";
diff --git a/abs/core/mythtv/stable-0.25/mythtv/tmdb3.py b/abs/core/mythtv/stable-0.25/mythtv/tmdb3.py
deleted file mode 100755
index 829f744..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/tmdb3.py
+++ /dev/null
@@ -1,278 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: UTF-8 -*-
-# ----------------------
-# Name: tmdb3.py
-# Python Script
-# Author: Raymond Wagner
-# Purpose: This python script is intended to translate lookups between the
-# TheMovieDB.org V3 API and MythTV's internal metadata format.
-# http://www.mythtv.org/wiki/MythVideo_Grabber_Script_Format
-# http://help.themoviedb.org/kb/api/about-3
-#-----------------------
-__title__ = "TheMovieDB.org V3"
-__author__ = "Raymond Wagner"
-__version__ = "0.3.6"
-# 0.1.0 Initial version
-# 0.2.0 Add language support, move cache to home directory
-# 0.3.0 Enable version detection to allow use in MythTV
-# 0.3.1 Add --test parameter for proper compatibility with mythmetadatalookup
-# 0.3.2 Add --area parameter to allow country selection for release date and
-# parental ratings
-# 0.3.3 Use translated title if available
-# 0.3.4 Add support for finding by IMDB under -D (simulate previous version)
-# 0.3.5 Add debugging mode
-# 0.3.6 Add handling for TMDB site and library returning null results in
-# search. This should only need to be a temporary fix, and should be
-# resolved upstream.
-
-from optparse import OptionParser
-import sys
-
-def buildSingle(inetref, opts):
- from MythTV.tmdb3 import Movie
- from MythTV import VideoMetadata
- from lxml import etree
-
- import re
- if re.match('^0[0-9]{6}$', inetref):
- movie = Movie.fromIMDB(inetref)
- else:
- movie = Movie(inetref)
-
- tree = etree.XML(u'<metadata></metadata>')
- mapping = [['runtime', 'runtime'], ['title', 'originaltitle'],
- ['releasedate', 'releasedate'], ['tagline', 'tagline'],
- ['description', 'overview'], ['homepage', 'homepage'],
- ['userrating', 'userrating'], ['popularity', 'popularity'],
- ['budget', 'budget'], ['revenue', 'revenue']]
- m = VideoMetadata()
- for i,j in mapping:
- if getattr(movie, j):
- setattr(m, i, getattr(movie, j))
-
- if movie.title:
- m.title = movie.title
-
- releases = movie.releases.items()
-
- if opts.country:
- try:
- # resort releases with selected country at top to ensure it
- # is selected by the metadata libraries
- index = zip(*releases)[0].index(opts.country)
- releases.insert(0, releases.pop(index))
- except ValueError:
- pass
- else:
- m.releasedate = releases[0][1].releasedate
-
- m.inetref = str(movie.id)
- if movie.collection:
- m.collectionref = str(movie.collection.id)
- if movie.releasedate:
- m.year = movie.releasedate.year
- for country, release in releases:
- if release.certification:
- m.certifications[country] = release.certification
- for genre in movie.genres:
- m.categories.append(genre.name)
- for studio in movie.studios:
- m.studios.append(studio.name)
- for country in movie.countries:
- m.countries.append(country.name)
- for cast in movie.cast:
- d = {'name':cast.name, 'character':cast.character, 'department':'Actors',
- 'job':'Actor', 'url':'http://www.themoviedb.org/people/{0}'.format(cast.id)}
- if cast.profile: d['thumb'] = cast.profile.geturl()
- m.people.append(d)
- for crew in movie.crew:
- d = {'name':crew.name, 'job':crew.job, 'department':crew.department,
- 'url':'http://www.themoviedb.org/people/{0}'.format(crew.id)}
- if crew.profile: d['thumb'] = crew.profile.geturl()
- m.people.append(d)
- for backdrop in movie.backdrops:
- m.images.append({'type':'fanart', 'url':backdrop.geturl(),
- 'thumb':backdrop.geturl(backdrop.sizes()[0])})
- for poster in movie.posters:
- m.images.append({'type':'coverart', 'url':poster.geturl(),
- 'thumb':poster.geturl(poster.sizes()[0])})
- tree.append(m.toXML())
- sys.stdout.write(etree.tostring(tree, encoding='UTF-8', pretty_print=True,
- xml_declaration=True))
- sys.exit()
-
-def buildList(query, opts):
- # TEMPORARY FIX:
- # replace all dashes from queries to work around search behavior
- # as negative to all text that comes afterwards
- query = query.replace('-',' ')
-
- from MythTV.tmdb3 import searchMovie
- from MythTV import VideoMetadata
- from lxml import etree
- results = searchMovie(query)
- tree = etree.XML(u'<metadata></metadata>')
- mapping = [['runtime', 'runtime'], ['title', 'originaltitle'],
- ['releasedate', 'releasedate'], ['tagline', 'tagline'],
- ['description', 'overview'], ['homepage', 'homepage'],
- ['userrating', 'userrating'], ['popularity', 'popularity']]
-
- count = 0
- for res in results:
- if res is None:
- continue
-
- m = VideoMetadata()
- for i,j in mapping:
- if getattr(res, j):
- setattr(m, i, getattr(res, j))
- m.inetref = str(res.id)
-
- if res.title:
- m.title = res.title
-
- #TODO:
- # should releasedate and year be pulled from the country-specific data
- # or should it be left to the default information to cut down on
- # traffic from searches
- if res.releasedate:
- m.year = res.releasedate.year
- if res.backdrop:
- b = res.backdrop
- m.images.append({'type':'fanart', 'url':b.geturl(),
- 'thumb':b.geturl(b.sizes()[0])})
- if res.poster:
- p = res.poster
- m.images.append({'type':'coverart', 'url':p.geturl(),
- 'thumb':p.geturl(p.sizes()[0])})
- tree.append(m.toXML())
- count += 1
- if count >= 60:
- # page limiter, dont want to overload the server
- break
-
- sys.stdout.write(etree.tostring(tree, encoding='UTF-8', pretty_print=True,
- xml_declaration=True))
- sys.exit(0)
-
-def buildCollection(inetref, opts):
- from MythTV.tmdb3 import Collection
- from MythTV import VideoMetadata
- from lxml import etree
- collection = Collection(inetref)
- tree = etree.XML(u'<metadata></metadata>')
- m = VideoMetadata()
- m.collectionref = str(collection.id)
- m.title = collection.name
- if collection.backdrop:
- b = collection.backdrop
- m.images.append({'type':'fanart', 'url':b.geturl(),
- 'thumb':b.geturl(b.sizes()[0])})
- if collection.poster:
- p = collection.poster
- m.images.append({'type':'coverart', 'url':p.geturl(),
- 'thumb':p.geturl(p.sizes()[0])})
- tree.append(m.toXML())
- sys.stdout.write(etree.tostring(tree, encoding='UTF-8', pretty_print=True,
- xml_declaration=True))
- sys.exit()
-
-def buildVersion():
- from lxml import etree
- version = etree.XML(u'<grabber></grabber>')
- etree.SubElement(version, "name").text = __title__
- etree.SubElement(version, "author").text = __author__
- etree.SubElement(version, "thumbnail").text = 'tmdb.png'
- etree.SubElement(version, "command").text = 'tmdb3.py'
- etree.SubElement(version, "type").text = 'movie'
- etree.SubElement(version, "description").text = \
- 'Search and metadata downloads for themoviedb.org'
- etree.SubElement(version, "version").text = __version__
- sys.stdout.write(etree.tostring(version, encoding='UTF-8', pretty_print=True,
- xml_declaration=True))
- sys.exit(0)
-
-def performSelfTest():
- err = 0
- try:
- import MythTV
- except:
- err = 1
- print ("Failed to import MythTV bindings. Check your `configure` output "
- "to make sure installation was not disabled due to external "
- "dependencies")
- try:
- import MythTV.tmdb3
- except:
- err = 1
- print ("Failed to import PyTMDB3 library. This should have been included "
- "with the python MythTV bindings.")
- try:
- import lxml
- except:
- err = 1
- print "Failed to import python lxml library."
-
- if not err:
- print "Everything appears in order."
- sys.exit(err)
-
-def main():
- parser = OptionParser()
-
- parser.add_option('-v', "--version", action="store_true", default=False,
- dest="version", help="Display version and author")
- parser.add_option('-t', "--test", action="store_true", default=False,
- dest="test", help="Perform self-test for dependencies.")
- parser.add_option('-M', "--movielist", action="store_true", default=False,
- dest="movielist", help="Get Movies matching search.")
- parser.add_option('-D', "--moviedata", action="store_true", default=False,
- dest="moviedata", help="Get Movie data.")
- parser.add_option('-C', "--collection", action="store_true", default=False,
- dest="collectiondata", help="Get Collection data.")
- parser.add_option('-l', "--language", metavar="LANGUAGE", default=u'en',
- dest="language", help="Specify language for filtering.")
- parser.add_option('-a', "--area", metavar="COUNTRY", default=u'US',
- dest="country", help="Specify country for custom data.")
- parser.add_option('--debug', action="store_true", default=False,
- dest="debug", help=("Disable caching and enable raw "
- "data output."))
-
- opts, args = parser.parse_args()
-
- if opts.version:
- buildVersion()
-
- if opts.test:
- performSelfTest()
-
- from MythTV.tmdb3 import set_key, set_cache, set_locale
- set_key('c27cb71cff5bd76e1a7a009380562c62')
-
- if opts.debug:
- import MythTV.tmdb3
- MythTV.tmdb3.request.DEBUG = True
- set_cache(engine='null')
- else:
- set_cache(engine='file', filename='~/.mythtv/pytmdb3.cache')
-
- if opts.language:
- set_locale(language=opts.language, fallthrough=True)
- if opts.country:
- set_locale(country=opts.country, fallthrough=True)
-
- if (len(args) != 1) or (args[0] == ''):
- sys.stdout.write('ERROR: tmdb3.py requires exactly one non-empty argument')
- sys.exit(1)
-
- if opts.movielist:
- buildList(args[0], opts)
-
- if opts.moviedata:
- buildSingle(args[0], opts)
-
- if opts.collectiondata:
- buildCollection(args[0], opts)
-
-if __name__ == '__main__':
- main()
diff --git a/abs/core/mythtv/stable-0.25/mythtv/tmdb3_db_update.py b/abs/core/mythtv/stable-0.25/mythtv/tmdb3_db_update.py
deleted file mode 100755
index 22fc635..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/tmdb3_db_update.py
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/env python2
-
-# This script will configure the myth db to use tmdb3.py
-
-from socket import gethostname
-from MythTV import MythDB
-mythdb = MythDB()
-localhostname = gethostname()
-import sys, os
-
-# Function to set db setting. This setting is set in mythtv-setup.
-def dbSettingChange():
- if mythdb.settings.NULL.MovieGrabber == u'metadata/Movie/tmdb3.py':
- print 'The MythTV database setting MovieGrabber is already set to tmdb3.py.'
- else:
- mythdb.settings.NULL.MovieGrabber = u'metadata/Movie/tmdb3.py'
- print 'The MythTV database setting MovieGrabber has been updated to tmdb3.py'
- try:
- os.remove("/home/mythtv/.mythtv/pytmdb3.cache")
- print 'tmdb3 cache at /home/mythtv/.mythtv/pytmdb3.cache removed.'
- except OSError:
- print "tmdb3 cache at /home/mythtv/.mythtv/pytmdb3.cache doesn't exist."
- pass
- return
-
-#taken from systemconfig.py
-#this is how you populate the dict
-systemconfig = {}
-file_name = "/etc/systemconfig"
-try:
- config_file = open(file_name)
-except:
- print file_name + ' could not be opened'
- sys.exit(1)
-
-for line in config_file:
- line = line.strip()
- if line and line[0] is not "#" and line[-1] is not "=":
- var, val = line.rsplit("=", 1)
- val = val.strip('"')
- systemconfig[var.strip()] = val.strip()
-
-#this is how you reference a value from mv_hostype.py
-if (systemconfig.get("SystemType") == "Standalone"):
- dbSettingChange()
-elif systemconfig.get("SystemType") == "Master_backend":
- dbSettingChange()
diff --git a/abs/core/mythtv/stable-0.25/mythweb/PKGBUILD b/abs/core/mythtv/stable-0.25/mythweb/PKGBUILD
deleted file mode 100644
index 9882ad8..0000000
--- a/abs/core/mythtv/stable-0.25/mythweb/PKGBUILD
+++ /dev/null
@@ -1,77 +0,0 @@
-pkgname=mythweb
-pkgver=0.25
-pkgrel=9
-
-commit_hash=`cat ../git_src/git_hash_web`
-
-pkgdesc="Web interface for MythTV's backend, $commit_hash"
-url="http://www.mythtv.org"
-license="GPL"
-arch=('i686' 'x86_64')
-
-depends=('mythtv>=0.25' 'lighttpd' 'php' 'supplemental-web')
-groups=('mythtv-extras')
-install=mythweb.install
-#http://code.mythtv.org/trac/ticket/10504
-#patches=(schedules.php.patch sorting.php.patch tv-schedules.php.patch)
-patches=(schedules.php.patch tv-schedules.php.patch)
-source=(`echo ${patches[@]:0}` mythweb.include mythweb_gen_light.conf)
-
-build() {
-
- if [ -e ${srcdir}/mythweb ]
- then
- rm -rf ${srcdir}/mythweb
- fi
-
- cd ${startdir}
- msg "copy in myth web src"
- cp -rp ../git_src/mythweb $srcdir
- cd ${srcdir}/${pkgbase}
-
-
-
- msg "The local files are updated."
-
-
- cd $srcdir/mythweb
-
-
-
- echo "--------------------------applying patches----------------------------------------------------"
- for i in `echo ${patches[@]:0} `
- do
- echo applying $i
- echo "-----------------------------"
- patch -Np0 -i ${srcdir}/$i || return 1
- done
- echo "--------------------------done applying patches-----------------------------------------------"
-
- [ "$CARCH" = "i686" ] && ARCH="i686"
- [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
-}
-
-package() {
- DOCROOT=/data/srv/httpd/mythweb
- mkdir -p $pkgdir/$DOCROOT/{image_cache,php_sessions,data}
- rsync -arp --exclude .git --delete-excluded $srcdir/mythweb/* $pkgdir/$DOCROOT
- rm $pkgdir/$DOCROOT/README
- chown -R http:http $pkgdir/$DOCROOT
- chmod g+rw $pkgdir/$DOCROOT/{image_cache,php_sessions,data}
-
- # mythweb modules_path fix for 0.24
- # http://code.mythtv.org/trac/ticket/9255
- cd ${pkgdir}/${DOCROOT}
- ln -s modules modules_path
-
- #install conf files for lighttpd
- mkdir -p $pkgdir/etc/lighttpd
- install -D -m 644 $srcdir/mythweb.include $pkgdir/etc/lighttpd/
- #gen_light_conf
- install -D -m0744 ${srcdir}/mythweb_gen_light.conf ${pkgdir}/etc/gen_light_conf.d/mythweb.conf
-
-}
-md5sums=('392e570594859c026ac12194920246d8'
- '515e29fda503c199888a91553e1815a0'
- '7645a6399434cbba35639713ac5d88e0'
- 'df190116b3aba35720fb6631885f973f')
diff --git a/abs/core/mythtv/stable-0.25/mythweb/mythweb.include b/abs/core/mythtv/stable-0.25/mythweb/mythweb.include
deleted file mode 100644
index 18e9be1..0000000
--- a/abs/core/mythtv/stable-0.25/mythweb/mythweb.include
+++ /dev/null
@@ -1,8 +0,0 @@
-alias.url += ( "/mythweb" => "/data/srv/httpd/mythweb/")
-
-url.rewrite-once = (
-"^/{1,2}mythweb/(css|data|images|js|themes|skins|[a-z_]+\.(php|pl)).*" => "$0",
-"^/{1,2}mythweb/(pl(/.*)?)$" => "/mythweb/mythweb.pl/$1",
-"^/{1,2}mythweb/(.+)$" => "/mythweb/mythweb.php/$1",
-"^/{1,2}mythweb/(.*)$" => "/mythweb/mythweb.php"
-) \ No newline at end of file
diff --git a/abs/core/mythtv/stable-0.25/mythweb/mythweb.install b/abs/core/mythtv/stable-0.25/mythweb/mythweb.install
deleted file mode 100644
index 0073499..0000000
--- a/abs/core/mythtv/stable-0.25/mythweb/mythweb.install
+++ /dev/null
@@ -1,18 +0,0 @@
-post_install() {
- gen_light_include.py
- /sbin/sv hup /service/lighttpd
-}
-post_upgrade() {
- post_install
-
-}
-
-post_remove() {
- gen_light_include.py
- echo
- echo "==> Forcing a re-read of lighttpd's configuration file."
- echo ""
- /sbin/sv hup /service/lighttpd
-#--
-
-}
diff --git a/abs/core/mythtv/stable-0.25/mythweb/mythweb_gen_light.conf b/abs/core/mythtv/stable-0.25/mythweb/mythweb_gen_light.conf
deleted file mode 100644
index ddf0d2f..0000000
--- a/abs/core/mythtv/stable-0.25/mythweb/mythweb_gen_light.conf
+++ /dev/null
@@ -1 +0,0 @@
-include "/etc/lighttpd/mythweb.include"
diff --git a/abs/core/mythtv/stable-0.25/mythweb/schedules.php.patch b/abs/core/mythtv/stable-0.25/mythweb/schedules.php.patch
deleted file mode 100644
index 1d41711..0000000
--- a/abs/core/mythtv/stable-0.25/mythweb/schedules.php.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-*** modules/tv/tmpl/default/schedules.php.old 2011-04-03 06:05:31.000000000 -0500
---- modules/tv/tmpl/default/schedules.php 2012-03-27 05:37:40.000000000 -0500
-***************
-*** 90,95 ****
---- 90,100 ----
- </tr>
- </thead>
- <?php
-+ // Hack: Disable warnings about "Creating default
-+ // object from empty value" from below line
-+ // "$schedule->channel->name = '[ '.t('Any').' ]';"
-+ ini_set('error_reporting', E_ERROR);
-+
- $prev_group = '';
- $cur_group = '';
- foreach ($the_schedules as $schedule) {
diff --git a/abs/core/mythtv/stable-0.25/mythweb/sorting.php.patch b/abs/core/mythtv/stable-0.25/mythweb/sorting.php.patch
deleted file mode 100644
index 2f76216..0000000
--- a/abs/core/mythtv/stable-0.25/mythweb/sorting.php.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-*** includes/sorting.php.old 2011-04-03 06:05:31.000000000 -0500
---- includes/sorting.php 2012-03-27 05:05:51.000000000 -0500
-***************
-*** 123,129 ****
- function by_user_choice(&$a, &$b) {
- foreach ($GLOBALS['user_sort_choice'] as $sort) {
- $function = 'by_'.$sort['field'];
-! $response = $function(&$a, &$b);
- // Identical response, go on to the next sort choice
- if (!$response)
- continue;
---- 123,129 ----
- function by_user_choice(&$a, &$b) {
- foreach ($GLOBALS['user_sort_choice'] as $sort) {
- $function = 'by_'.$sort['field'];
-! $response = $function($a, $b);
- // Identical response, go on to the next sort choice
- if (!$response)
- continue;
diff --git a/abs/core/mythtv/stable-0.25/mythweb/tv-schedules.php.patch b/abs/core/mythtv/stable-0.25/mythweb/tv-schedules.php.patch
deleted file mode 100644
index 29e4ccb..0000000
--- a/abs/core/mythtv/stable-0.25/mythweb/tv-schedules.php.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-*** modules/tv/schedules.php.orig 2012-06-05 09:05:32.935946957 +0200
---- modules/tv/schedules.php 2012-06-05 09:05:36.633022229 +0200
-***************
-*** 47,52 ****
---- 47,56 ----
- if (count($the_schedules))
- sort_programs($the_schedules, 'schedules_sortby');
-
-+ // Hack: Disable warnings about "Creating default
-+ // object from empty value" from below line
-+ // "$schedule->channel->name = '[ '.t('Any').' ]';"
-+ ini_set('error_reporting', E_ERROR);
- // Load the class for this page
- require_once tmpl_dir.'schedules.php';
-