From 115cadecb464d5fd48af6ddb56774bae80cc4b59 Mon Sep 17 00:00:00 2001 From: Britney Fransen Date: Thu, 2 Oct 2014 13:19:45 +0000 Subject: mythtv: remove old stable-0.25 --- .../mythtv/stable-0.25/git_src/checkout_mythtv.sh | 40 - .../mythtv/stable-0.25/git_src/checkout_mythweb.sh | 38 - abs/core/mythtv/stable-0.25/git_src/git_hash | 1 - abs/core/mythtv/stable-0.25/git_src/git_hash_web | 1 - abs/core/mythtv/stable-0.25/mythplugins/PKGBUILD | 135 -- .../mythtv/stable-0.25/mythplugins/__changelog | 1 - .../stable-0.25/mythplugins/mythburn.py.patch | 285 --- .../mythplugins/mythplugins-mythzoneminder.install | 11 - ...tect-metadata-loads-from-multiple-threads.patch | 52 - ...e-fe-netcontrol-play-resume-functionality.patch | 27 - .../mythtv/stable-0.25/mythtv/MythBase.php.patch | 19 - abs/core/mythtv/stable-0.25/mythtv/PKGBUILD | 172 -- abs/core/mythtv/stable-0.25/mythtv/__changelog | 5 - .../stable-0.25/mythtv/bonjour-correction.patch | 32 - .../mythtv/stable-0.25/mythtv/git_version.patch | 13 - .../stable-0.25/mythtv/menu-xml/HOST_SETTINGS.xml | 98 - .../stable-0.25/mythtv/menu-xml/dvd_backup.xml | 39 - .../mythtv/stable-0.25/mythtv/menu-xml/game.xml | 12 - .../stable-0.25/mythtv/menu-xml/info_menu.xml | 76 - abs/core/mythtv/stable-0.25/mythtv/menu-xml/is.xml | 3 - .../stable-0.25/mythtv/menu-xml/library.xml.patch | 26 - .../mythtv/stable-0.25/mythtv/menu-xml/linhes.xml | 60 - .../stable-0.25/mythtv/menu-xml/mainmenu.xml.patch | 37 - .../stable-0.25/mythtv/menu-xml/mythbackup.xml | 20 - .../stable-0.25/mythtv/menu-xml/mythrestore.xml | 21 - .../mythtv/menu-xml/optical_menu.xml.patch | 23 - .../mythtv/menu-xml/original/create_patch.sh | 5 - .../stable-0.25/mythtv/menu-xml/siriusmenu.xml | 419 ----- .../mythtv/stable-0.25/mythtv/menu-xml/update.xml | 9 - .../mythtv/stable-0.25/mythtv/menu-xml/update2.xml | 20 - .../mythtv/menu-xml/util_menu.xml.patch | 16 - .../mythtv/stable-0.25/mythtv/menu-xml/xmmenu.xml | 574 ------ abs/core/mythtv/stable-0.25/mythtv/myth.sh | 4 - .../mythtv/stable-0.25/mythtv/myth_settings.patch | 1981 -------------------- abs/core/mythtv/stable-0.25/mythtv/mythbackend | 38 - abs/core/mythtv/stable-0.25/mythtv/mythbackend.lr | 9 - abs/core/mythtv/stable-0.25/mythtv/mythbackend.sh | 117 -- abs/core/mythtv/stable-0.25/mythtv/mythfrontend.lr | 9 - abs/core/mythtv/stable-0.25/mythtv/mythtv.install | 25 - abs/core/mythtv/stable-0.25/mythtv/pretty | 9 - .../mythtv/stable-0.25/mythtv/smolt_jump.patch | 10 - abs/core/mythtv/stable-0.25/mythtv/tmdb3.py | 278 --- .../mythtv/stable-0.25/mythtv/tmdb3_db_update.py | 47 - abs/core/mythtv/stable-0.25/mythweb/PKGBUILD | 77 - .../mythtv/stable-0.25/mythweb/mythweb.include | 8 - .../mythtv/stable-0.25/mythweb/mythweb.install | 18 - .../stable-0.25/mythweb/mythweb_gen_light.conf | 1 - .../mythtv/stable-0.25/mythweb/schedules.php.patch | 16 - .../mythtv/stable-0.25/mythweb/sorting.php.patch | 19 - .../stable-0.25/mythweb/tv-schedules.php.patch | 15 - 50 files changed, 4971 deletions(-) delete mode 100644 abs/core/mythtv/stable-0.25/git_src/checkout_mythtv.sh delete mode 100644 abs/core/mythtv/stable-0.25/git_src/checkout_mythweb.sh delete mode 100644 abs/core/mythtv/stable-0.25/git_src/git_hash delete mode 100644 abs/core/mythtv/stable-0.25/git_src/git_hash_web delete mode 100644 abs/core/mythtv/stable-0.25/mythplugins/PKGBUILD delete mode 100644 abs/core/mythtv/stable-0.25/mythplugins/__changelog delete mode 100644 abs/core/mythtv/stable-0.25/mythplugins/mythburn.py.patch delete mode 100644 abs/core/mythtv/stable-0.25/mythplugins/mythplugins-mythzoneminder.install delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/0001-protect-metadata-loads-from-multiple-threads.patch delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/0004-restore-fe-netcontrol-play-resume-functionality.patch delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/MythBase.php.patch delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/PKGBUILD delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/__changelog delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/bonjour-correction.patch delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/git_version.patch delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/menu-xml/HOST_SETTINGS.xml delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/menu-xml/dvd_backup.xml delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/menu-xml/game.xml delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/menu-xml/info_menu.xml delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/menu-xml/is.xml delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/menu-xml/library.xml.patch delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/menu-xml/linhes.xml delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/menu-xml/mainmenu.xml.patch delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/menu-xml/mythbackup.xml delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/menu-xml/mythrestore.xml delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/menu-xml/optical_menu.xml.patch delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/menu-xml/original/create_patch.sh delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/menu-xml/siriusmenu.xml delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/menu-xml/update.xml delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/menu-xml/update2.xml delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/menu-xml/util_menu.xml.patch delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/menu-xml/xmmenu.xml delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/myth.sh delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/myth_settings.patch delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/mythbackend delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/mythbackend.lr delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/mythbackend.sh delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/mythfrontend.lr delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/mythtv.install delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/pretty delete mode 100644 abs/core/mythtv/stable-0.25/mythtv/smolt_jump.patch delete mode 100755 abs/core/mythtv/stable-0.25/mythtv/tmdb3.py delete mode 100755 abs/core/mythtv/stable-0.25/mythtv/tmdb3_db_update.py delete mode 100644 abs/core/mythtv/stable-0.25/mythweb/PKGBUILD delete mode 100644 abs/core/mythtv/stable-0.25/mythweb/mythweb.include delete mode 100644 abs/core/mythtv/stable-0.25/mythweb/mythweb.install delete mode 100644 abs/core/mythtv/stable-0.25/mythweb/mythweb_gen_light.conf delete mode 100644 abs/core/mythtv/stable-0.25/mythweb/schedules.php.patch delete mode 100644 abs/core/mythtv/stable-0.25/mythweb/sorting.php.patch delete mode 100644 abs/core/mythtv/stable-0.25/mythweb/tv-schedules.php.patch 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 - -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 -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 -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 -# Contributor: Juergen Hoetzel -# Contributor: -# Contributor: dorphell - -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 -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 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 @@ - - - - - - - - - - - - - - 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 @@ - - - - - - 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 @@ - - - - - - - - - - - - - - - - - - - - - - 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 @@ - - - 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 @@ - - - -+ -+ - - 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 @@ - - - - - - - - - - - - - - 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 @@ - - -+ - - - - -- -- - - 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 @@ - - - - - - - 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 @@ - - - - - - - - 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 @@ - - - -+ -+ -+ -+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 @@ - - - - - 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 @@ - - - - - - - - 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 @@ - - - -+ -+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 -Date: Fri Sep 28 14:25:06 2012 -0500 - - new patch - - Signed-off-by: root - -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 MythCoreContext::list_settingsgroupname() -+{ -+ return d->m_database->list_settingsgroupname(); -+} -+ -+QMap 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 vp_map, -+ QString table) -+{ -+ return d->m_database->import_settings(vp_map, table); -+} -+ -+ -+QMap > 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 list_settingsgroupname(); -+ QMap 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 vp_map, QString table); -+ -+ QMap > 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 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 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 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 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 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 > -+ MythDB::export_settings(QString src_hostname, -+ QString saved_settingsgroupname, -+ QStringList table_list, bool skip_host ) -+{ -+ QMap > 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 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 list_settingsgroupname(); -+ -+ QMap 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 vp_map, QString table); -+ -+ -+ QMap > 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 -+ -+//QT includes -+#include -+#include -+#include -+ -+// 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 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::iterator i; -+ -+ -+ for (i = resultset.begin(); i != resultset.end(); ++i) -+ { -+ cout << endl< resultset; -+ QString diff_hostname1; -+ QString diff_hostname2; -+ QStringList table_list; -+ bool format_results = FALSE; -+ QMap::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()< resultset; -+ resultset = gCoreContext->list_settingsgroupname(); -+ QMap::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 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 > 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 record_count; -+ QMap >::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 value_pair = i.value(); -+ QMap::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::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 -# With thanks to Stu Tomlinson -# -# 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'') - 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'') - 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'') - 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'') - 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 ---- - - - 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'; - -- cgit v0.12