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