summaryrefslogtreecommitdiffstats
path: root/abs/core/mythtv/stable-0.25
diff options
context:
space:
mode:
Diffstat (limited to 'abs/core/mythtv/stable-0.25')
-rw-r--r--abs/core/mythtv/stable-0.25/git_src/git_hash2
-rw-r--r--abs/core/mythtv/stable-0.25/git_src/git_hash_web2
-rw-r--r--abs/core/mythtv/stable-0.25/mythplugins/PKGBUILD16
-rw-r--r--abs/core/mythtv/stable-0.25/mythplugins/__changelog1
-rw-r--r--abs/core/mythtv/stable-0.25/mythplugins/mythburn.py.patch288
-rw-r--r--abs/core/mythtv/stable-0.25/mythplugins/mythplugins-mythzoneminder.install10
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/0001-protect-metadata-loads-from-multiple-threads.patch52
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/0004-restore-fe-netcontrol-play-resume-functionality.patch27
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/MythBase.php.patch19
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/PKGBUILD44
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/bonjour-correction.patch32
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/HOST_SETTINGS.xml126
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/dvd_backup.xml39
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/info_menu.xml76
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/library.xml.patch2
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/linhes.xml1
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/mainmenu.xml.patch10
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/mythbackup.xml6
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/mythrestore.xml5
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/optical_menu.xml.patch13
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/menu-xml/setup.xml111
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/myth_settings.patch234
-rw-r--r--abs/core/mythtv/stable-0.25/mythtv/mythtv.install50
-rw-r--r--abs/core/mythtv/stable-0.25/mythweb/PKGBUILD34
-rw-r--r--abs/core/mythtv/stable-0.25/mythweb/mythweb.include8
-rw-r--r--abs/core/mythtv/stable-0.25/mythweb/mythweb.install18
-rw-r--r--abs/core/mythtv/stable-0.25/mythweb/mythweb.php.patch11
-rw-r--r--abs/core/mythtv/stable-0.25/mythweb/mythweb_gen_light.conf1
-rw-r--r--abs/core/mythtv/stable-0.25/mythweb/schedules.php.patch16
-rw-r--r--abs/core/mythtv/stable-0.25/mythweb/sorting.php.patch19
-rw-r--r--abs/core/mythtv/stable-0.25/mythweb/tv-schedules.php.patch15
31 files changed, 815 insertions, 473 deletions
diff --git a/abs/core/mythtv/stable-0.25/git_src/git_hash b/abs/core/mythtv/stable-0.25/git_src/git_hash
index ae0574c..e29adf1 100644
--- a/abs/core/mythtv/stable-0.25/git_src/git_hash
+++ b/abs/core/mythtv/stable-0.25/git_src/git_hash
@@ -1 +1 @@
-f0e2ad85dbdd6dd4041a8b1e7d8b17e7b8746b63
+79a24c90efd3308895880cbad4a4e550986aedda
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
index 814e09b..bf76f69 100644
--- a/abs/core/mythtv/stable-0.25/git_src/git_hash_web
+++ b/abs/core/mythtv/stable-0.25/git_src/git_hash_web
@@ -1 +1 @@
-8c43d8da31d738c75ec6abc9daff2772b16310c8
+89a347c85284c5cf3ca3ad7250f21c7e698af858
diff --git a/abs/core/mythtv/stable-0.25/mythplugins/PKGBUILD b/abs/core/mythtv/stable-0.25/mythplugins/PKGBUILD
index 2ebe525..e5dea15 100644
--- a/abs/core/mythtv/stable-0.25/mythplugins/PKGBUILD
+++ b/abs/core/mythtv/stable-0.25/mythplugins/PKGBUILD
@@ -12,7 +12,7 @@ pkgname=('mytharchive'
'mythweather'
'mythzoneminder')
pkgver=0.25
-pkgrel=4
+pkgrel=17
arch=('i686' 'x86_64')
url="http://www.mythtv.org"
@@ -49,7 +49,7 @@ build() {
#find . -name '*.py' -type f | xargs sed -i 's@^#!.*python$@#!/usr/bin/python2@'
cd ${srcdir}/${pkgbase}
./configure --prefix=/usr \
- --enable-all
+ --enable-all --python=/usr/bin/python2
qmake mythplugins.pro || return 1
make || return 1
@@ -57,11 +57,11 @@ build() {
package_mytharchive() {
pkgdesc="MythTV plugin that lets you create DVDs from or archive your recorded shows"
- depends=("mythtv>=${pkgver}" 'libxmu' 'pil' 'dvdauthor' 'm2vrequantiser')
+ 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
+ patch mythburn/scripts/mythburn.py < $srcdir/mythburn.py.patch || return 1
make INSTALL_ROOT="${pkgdir}" install || return 1
}
@@ -99,9 +99,7 @@ package_mythmusic() {
package_mythnetvision() {
pkgdesc="MythNetvision plugin for MythTV"
-
-
- depends=("mythtv>=${pkgver}" 'python-pycurl' 'python-oauth' 'python-lxml' )
+ depends=("mythtv>=${pkgver}" 'python-pycurl' 'python-oauth' 'python2-lxml' 'python2' )
# replaces=('mythnetvision')
cd "${srcdir}/${_gitname}/${pkgbase}/mythnetvision"
make INSTALL_ROOT="${pkgdir}" install || return 1
@@ -127,11 +125,11 @@ package_mythweather() {
package_mythzoneminder() {
pkgdesc="Allows for viewing of CCTV cameras through zoneminder"
- depends=("mythtv>=${pkgver}" zoneminder)
+ depends=("mythtv>=${pkgver}")
# replaces=('mythzoneminder')
# install=mythplugins-mythzoneminder.install
cd "${srcdir}/${_gitname}/${pkgbase}/mythzoneminder"
make INSTALL_ROOT="${pkgdir}" install || return 1
}
-md5sums=('cc7e6887acda167fcc5336af33f29411')
+md5sums=('19446f65722769926bafad220bbc6551')
diff --git a/abs/core/mythtv/stable-0.25/mythplugins/__changelog b/abs/core/mythtv/stable-0.25/mythplugins/__changelog
new file mode 100644
index 0000000..48cdce8
--- /dev/null
+++ b/abs/core/mythtv/stable-0.25/mythplugins/__changelog
@@ -0,0 +1 @@
+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
index abac7df..380385b 100644
--- a/abs/core/mythtv/stable-0.25/mythplugins/mythburn.py.patch
+++ b/abs/core/mythtv/stable-0.25/mythplugins/mythburn.py.patch
@@ -1,23 +1,32 @@
---- mythburn.py.orig 2011-09-16 13:41:43.000000000 -0500
-+++ mythburn.py 2011-09-17 10:51:36.000000000 -0500
-@@ -38,7 +38,7 @@
- #******************************************************************************
+--- 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.20101206-1"
-+VERSION="0.1.20110821-1"
+-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
-@@ -75,6 +75,7 @@
+@@ -93,6 +93,7 @@
from fcntl import ioctl
import CDROM
from shutil import copy
+from subprocess import Popen, PIPE
- # media types (should match the enum in mytharchivewizard.h)
- DVD_SL = 0
-@@ -606,7 +607,7 @@
+ 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):
@@ -26,7 +35,7 @@
#open the XML containing information about this file
infoDOM = xml.dom.minidom.parse(os.path.join(folder, 'streaminfo.xml'))
-@@ -642,14 +643,14 @@
+@@ -651,14 +652,14 @@
# Gets the aspect ratio of a video file from its stream info file
def getAspectRatioOfVideo(index):
@@ -44,65 +53,85 @@
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)
-@@ -1762,6 +1763,37 @@
+@@ -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 the local video path
-+# or Storage Group
++# Finds the path of a video file from a Storage Group
+
+def getVideoPath(filename):
-+ # connect
-+ db = getDatabaseConnection()
-+ # create a cursor
-+ cursor = db.cursor()
-+ # execute SQL statement
-+ cursor.execute("""SELECT dirname
-+ FROM storagegroup
-+ WHERE groupname='Videos'""")
-+ # get the resultset as a tuple
-+ result = cursor.fetchall()
-+ # make result a list and add local video path if exists
-+ result = [videopath] + list(result)
-+
-+ # iterate through result set
-+ for sg in result:
-+ if doesFileExist(os.path.join("".join(sg), filename)) == True:
-+ filepath = "".join(sg)
-+ write("Video Path: %s" % filepath)
-+ return (filepath)
-+ break
-+
-+ db.close()
-+ del db
-+ del cursor
++
++ 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):
-@@ -1775,11 +1807,11 @@
- #3. Extract a single frame from the video to use as a thumbnail and resolution check
- mediafile=""
-
-- if file.attributes["type"].value == "recording":
-+ if file.attributes["type"].value=="recording":
+@@ -1501,7 +1540,7 @@
+ if file.attributes["type"].value == "recording":
mediafile = file.attributes["filename"].value
-- elif file.attributes["type"].value == "video":
+ elif file.attributes["type"].value == "video":
- mediafile = os.path.join(videopath, file.attributes["filename"].value)
-- elif file.attributes["type"].value == "file":
-+ elif file.attributes["type"].value=="video":
+ mediafile = os.path.join(getVideoPath(file.attributes["filename"].value), file.attributes["filename"].value)
-+ elif file.attributes["type"].value=="file":
+ elif file.attributes["type"].value == "file":
mediafile = file.attributes["filename"].value
else:
- fatalError("Unknown type of video file it must be 'recording', 'video' or 'file'.")
-@@ -1935,9 +1967,39 @@
+@@ -1661,6 +1700,37 @@
+ fatalError("Failed while running mytharchivehelper to get stream information.\n"
+ "Result: %d, Command was %s" % (result, command))
- if result <> 0:
- fatalError("Failed while running mytharchivehelper to get stream information from %s" % filename)
-+
+ #open the XML containing information about this file
+ infoDOM = xml.dom.minidom.parse(xmlFilename)
+
@@ -114,7 +143,7 @@
+ video = infoDOM.getElementsByTagName("file")[0].getElementsByTagName("streams")[0].getElementsByTagName("video")[0]
+
+ #use ffmpeg to get display aspect ratio (DAR) of video
-+ cmd = path_ffmpeg[0] + " -i " + quoteFilename(file.attributes["filename"].value) + " 2>&1"
++ 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
@@ -133,74 +162,66 @@
+ 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("streaminfo.xml :-\n" + infoDOM.toprettyxml(" ", ""), False)
+ infoDOM = xml.dom.minidom.parse(xmlFilename)
+ write(xmlFilename + ":-\n" + infoDOM.toprettyxml(" ", ""), False)
+@@ -1707,7 +1777,7 @@
+ write("Using cutlist: %s" % cutlist_s)
- #############################################################
-@@ -2322,7 +2384,7 @@
+ 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 ffmpeg"""
+ """Encodes an unknown video source file eg. AVI to MPEG2 video and AC3 audio, use mythffmpeg"""
profileNode = findEncodingProfile(profile)
-@@ -2347,6 +2409,18 @@
- value = quoteFilename(destvideofile)
+@@ -1998,7 +2068,36 @@
+ value = quoteCmdArg(destvideofile)
if value == "%aspect":
value = aspectratio
+ if value == "720x480" or value == "720x576":
-+ #add padding to correct for aspects > than 1.9:1
+ 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":
-+ videoheight = 480
++ videoModeHeight = 480
+ else:
-+ videoheight = 576
-+
-+ croppixels = videoheight - (720 / float(videoAR))
-+ write("CropPixels Total: %s" % croppixels)
-+ value = "720x%d -vf pad=720:%d:0:%d:black" % (videoheight - croppixels, videoheight, croppixels / 2)
++ 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":
-@@ -2383,12 +2457,12 @@
- command += " -newaudio"
-
- #make sure we get the correct stream(s) that we want
-- command += " -map 0:%d -map 0:%d " % (video[VIDEO_INDEX], audio1[AUDIO_INDEX])
-+ command += " -map 0:%d -map 0:%d" % (video[VIDEO_INDEX], audio1[AUDIO_INDEX])
- if audio2[AUDIO_ID] != -1:
- command += "-map 0:%d" % (audio2[AUDIO_INDEX])
-
- if passes == 1:
-- write(command)
-+ write("Running ffmpeg: %s" % command)
- result = runCommand(command)
- if result!=0:
- fatalError("Failed while running ffmpeg to re-encode video.\n"
-@@ -2399,7 +2473,7 @@
-
- pass1 = string.replace(command, "%passno","1")
- pass1 = string.replace(pass1, "%passlogfile", passLog)
-- write("Pass 1 - " + pass1)
-+ write("Running ffmpeg Pass 1: %s" % pass1)
- result = runCommand(pass1)
-
- if result!=0:
-@@ -2411,7 +2485,7 @@
-
- pass2 = string.replace(command, "%passno","2")
- pass2 = string.replace(pass2, "%passlogfile", passLog)
-- write("Pass 2 - " + pass2)
-+ write("Running ffmpeg Pass 2: %s" % pass2)
- result = runCommand(pass2)
-
- if result!=0:
-@@ -2443,10 +2517,6 @@
+ if name == "-acodec":
+@@ -2094,10 +2193,6 @@
outaudiosamplerate = 48000
outaudiocodec = "ac3"
deinterlace = 0
@@ -211,7 +232,7 @@
qmin = 5
qmax = 31
qdiff = 31
-@@ -2470,14 +2540,6 @@
+@@ -2121,14 +2216,6 @@
outvideores = value
if name == "-deinterlace":
deinterlace = 1
@@ -226,78 +247,39 @@
if name == "-qmin":
qmin = value
if name == "-qmax":
-@@ -2526,7 +2588,6 @@
- command += "-aspect %s -r %s " % (aspectratio, fps)
- if (deinterlace == 1):
- command += "-deinterlace "
-- command += "-croptop %s -cropright %s -cropbottom %s -cropleft %s " % (croptop, cropright, cropbottom, cropleft)
- command += "-s %s -b %s -vcodec mpeg2video " % (outvideores, outvideobitrate)
- command += "-qmin %s -qmax %s -qdiff %s " % (qmin, qmax, qdiff)
- command += "-ab %s -ar %s -acodec %s " % (outaudiobitrate, outaudiosamplerate, outaudiocodec)
-@@ -2543,7 +2604,7 @@
- if (not(doesFileExist(os.path.join(folder, "audout")) and doesFileExist(os.path.join(folder, "vidout")))):
- fatalError("Waited too long for mythtranscode to create the fifos - giving up!!")
-
-- write("Running ffmpeg")
-+ write("Running ffmpeg: %s" % command)
- result = runCommand(command)
- if result != 0:
- os.kill(PID, signal.SIGKILL)
-@@ -4724,7 +4785,7 @@
+@@ -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)
++ 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:
-@@ -4834,8 +4895,7 @@
- starttime = -1
- usecutlist = -1
-
-- encodeNuvToMPEG2(chanid, starttime, mediafile, os.path.join(folder, "newfile2.mpg"), folder,
-- profile, usecutlist)
-+ encodeNuvToMPEG2(chanid, starttime, mediafile, os.path.join(folder, "newfile2.mpg"), folder, profile, usecutlist)
- mediafile = os.path.join(folder, 'newfile2.mpg')
- else:
- #we need to re-encode the file, make sure we get the right video/audio streams
-@@ -4861,8 +4921,7 @@
- profile = defaultEncodingProfile
+@@ -4547,7 +4634,7 @@
#do the re-encode
-- encodeVideoToMPEG2(mediafile, os.path.join(folder, "newfile2.mpg"), video,
+ encodeVideoToMPEG2(mediafile, os.path.join(folder, "newfile2.mpg"), video,
- audio1, audio2, aspectratio, profile)
-+ encodeVideoToMPEG2(mediafile, os.path.join(folder, "newfile2.mpg"), video, folder, 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
-@@ -4936,7 +4995,7 @@
+@@ -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)
++ 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:
-@@ -4988,8 +5047,7 @@
- starttime = -1
- usecutlist = -1
-
-- encodeNuvToMPEG2(chanid, starttime, mediafile, os.path.join(folder, "newfile2.mpg"), folder,
-- profile, usecutlist)
-+ encodeNuvToMPEG2(chanid, starttime, mediafile, os.path.join(folder, "newfile2.mpg"), folder, profile, usecutlist)
- mediafile = os.path.join(folder, 'newfile2.mpg')
- else:
- #we need to re-encode the file, make sure we get the right video/audio streams
-@@ -5015,8 +5073,7 @@
- profile = defaultEncodingProfile
+@@ -4701,7 +4788,7 @@
#do the re-encode
-- encodeVideoToMPEG2(mediafile, os.path.join(folder, "newfile2.mpg"), video,
+ encodeVideoToMPEG2(mediafile, os.path.join(folder, "newfile2.mpg"), video,
- audio1, audio2, aspectratio, profile)
-+ encodeVideoToMPEG2(mediafile, os.path.join(folder, "newfile2.mpg"), video, folder, 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
index 142212b..a4e0c0d 100644
--- a/abs/core/mythtv/stable-0.25/mythplugins/mythplugins-mythzoneminder.install
+++ b/abs/core/mythtv/stable-0.25/mythplugins/mythplugins-mythzoneminder.install
@@ -1,3 +1,11 @@
post_install() {
- echo "If you want to use this plugin, install zoneminder from AUR."
+ . /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
new file mode 100644
index 0000000..d8f4a0c
--- /dev/null
+++ b/abs/core/mythtv/stable-0.25/mythtv/0001-protect-metadata-loads-from-multiple-threads.patch
@@ -0,0 +1,52 @@
+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
new file mode 100644
index 0000000..440a37a
--- /dev/null
+++ b/abs/core/mythtv/stable-0.25/mythtv/0004-restore-fe-netcontrol-play-resume-functionality.patch
@@ -0,0 +1,27 @@
+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
new file mode 100644
index 0000000..ff1f4b6
--- /dev/null
+++ b/abs/core/mythtv/stable-0.25/mythtv/MythBase.php.patch
@@ -0,0 +1,19 @@
+*** 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
index 0d5f979..3da2079 100644
--- a/abs/core/mythtv/stable-0.25/mythtv/PKGBUILD
+++ b/abs/core/mythtv/stable-0.25/mythtv/PKGBUILD
@@ -6,30 +6,31 @@
pkgname=mythtv
pkgver=0.25
-pkgrel=9
+pkgrel=25
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'
+depends=('mysql-clients'
'qt'
+ 'qtwebkit'
'lame'
'lirc-utils'
- 'ffmpeg-svn'
+ 'ffmpeg'
'fribidi'
'perl-soap-lite'
- 'perl-date-manip'
+ 'perl-date-manip'
'perl-xml-sax'
'perl-math-round'
'perl-net-upnp'
'perl-dbd-mysql'
'perl-time-hires'
- 'libavc1394'
- 'wget'
+ 'libavc1394'
+ 'wget'
'libiec61883'
'mysql-python'
- 'python-lxml'
+ 'python2-lxml'
'mesa'
'libxinerama'
'libxrandr'
@@ -43,7 +44,10 @@ depends=('mysql-clients'
'perl-io-socket-inet6'
'glew'
'openssl'
- 'libxml2')
+ 'libxml2'
+ 'lsdvd'
+ 'dvdbackup'
+ 'x264')
#glew for gpu commerical flagging
#openssl for roap
@@ -57,7 +61,16 @@ groups=('pvr')
#options=(!strip)
#MAKEFLAGS="-j6"
install='mythtv.install'
-patchs=('myth_settings.patch')
+
+#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'
+ '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')
@@ -90,6 +103,9 @@ build() {
#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
+
ARCH=${CARCH/_/-}
./configure --prefix=/usr --cpu=${ARCH} \
--disable-audio-jack \
@@ -100,6 +116,8 @@ build() {
--enable-vdpau \
--enable-crystalhd \
--dvb-path=/usr/include \
+ --enable-libmp3lame \
+ --enable-libx264 \
--with-bindings=perl,python --python=python2 || return 1
make all || return 1
@@ -123,7 +141,7 @@ package() {
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
+ #patch -p0 < ${startdir}/menu-xml/util_menu.xml.patch || return 1
# make log dir
mkdir -p ${pkgdir}/var/log/mythtv
@@ -136,7 +154,11 @@ package() {
md5sums=('7ef6de58240e7aad389a0b13d91b1cf6'
'2babd4b8e146a7538d18dcd55695b0be'
- 'c4db7784c5107ae846fd795a4dabe0bc'
+ '322f48528b350f0e6aebfff6eab4c4ee'
+ '9ec33d6956464283636c1f9a781dd4fd'
+ '8e2a055bb3beae04c88a8e603e080422'
+ '67f7316c750fba17fa578d10840b9dbd'
+ 'ae23e6a8cffbe335fa37bf59978bf7a2'
'f735805a80b0d1180dee01f9df1b7004'
'f407d6af23e74a49540755420f84fa58'
'5469d9921b726db750b991c87d226158')
diff --git a/abs/core/mythtv/stable-0.25/mythtv/bonjour-correction.patch b/abs/core/mythtv/stable-0.25/mythtv/bonjour-correction.patch
new file mode 100644
index 0000000..9456809
--- /dev/null
+++ b/abs/core/mythtv/stable-0.25/mythtv/bonjour-correction.patch
@@ -0,0 +1,32 @@
+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/menu-xml/HOST_SETTINGS.xml b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/HOST_SETTINGS.xml
index c436423..b1fa6b5 100644
--- 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
@@ -1,96 +1,98 @@
<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_NETWORK_SETUP_MENU</type>
- <text>Network Settings</text>
- <action>EXEC mythinstall -s network </action>
+ <type>MV_FILESHARES_MENU</type>
+ <text>File Shares</text>
+ <action>EXEC mythinstall -s fileshare</action>
</button>
<button>
- <type>MV_NETWORK_SETUP_MENU</type>
- <text>DDNS Settings</text>
- <action>EXEC mythinstall -s ddns </action>
- </button>
- <button>
- <type>MV_SYSTEM_SETUP_MENU</type>
- <text>System Type</text>
- <action>EXEC mythinstall -s hostype </action>
+ <type>MV_MISC_SETUP_MENU</type>
+ <text>Miscellanous</text>
+ <action>EXEC mythinstall -s misc </action>
</button>
<button>
- <type>MV_SCREENSAVER_SETUP_MENU</type>
- <text>Screensaver Settings</text>
- <action>EXEC mythinstall -s screensaver </action>
+ <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>
+ <type>MV_IR_SETUP_MENU</type>
+ <text>Remotes</text>
<action>EXEC mythinstall -s ir </action>
</button>
<button>
- <type>MV_MISC_SETUP_MENU</type>
- <text>Miscellanous Settings</text>
- <action>EXEC mythinstall -s misc </action>
- </button>
-
- <button>
- <type>MV_SOFTWARE_MENU</type>
- <text>Software</text>
- <action>EXEC mythinstall -s plugins,software </action>
- </button>
-
-
-
- <button>
- <type>MV_SHUTDOWN_SETUP_MENU</type>
- <text>Shutdown Settings</text>
- <action>EXEC mythinstall -s sleep </action>
- </button>
-
- <button>
- <type>MV_ADVANCED_X_SETUP_MENU</type>
- <text>Display Settings</text>
- <action>EXEC mythinstall -s advancedX</action>
- </button>
-
- <button>
- <type>MV_ADVANCED_SETUP_MENU</type>
- <text>Advanced Settings</text>
- <action>EXEC mythinstall -s advanced</action>
+ <type>MV_SCREENSAVER_SETUP_MENU</type>
+ <text>Screensaver</text>
+ <action>EXEC mythinstall -s screensaver </action>
</button>
<button>
- <type>MV_AUDIO_SETUP_MENU</type>
- <text>Audio Settings</text>
- <action>EXEC mythinstall -s sound </action>
+ <type>MV_SHUTDOWN_SETUP_MENU</type>
+ <text>Shutdown Settings</text>
+ <action>EXEC mythinstall -s sleep </action>
</button>
<button>
- <type>MV_ACCESS_SETUP_MENU</type>
- <text>Access Control</text>
- <action>EXEC mythinstall -s accesscontrol </action>
+ <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>
+ <type>MV_USER_SETUP_MENU</type>
+ <text>User Accounts</text>
+ <action>EXEC mythinstall -s user </action>
</button>
<button>
- <type>MV_WEBACCESS_SETUP_MENU</type>
- <text>Web Security</text>
- <action>EXEC mythinstall -s webuser </action>
+ <type>MV_VNC_SETUP_MENU</type>
+ <text>VNC Service</text>
+ <action>EXEC mythinstall -s vnc </action>
</button>
- <!--
<button>
- <type>SETUP_MENU</type>
- <text>Settings Profile Manager</text>
- <action>EXEC mythinstall -t </action>
+ <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
new file mode 100644
index 0000000..2647d81
--- /dev/null
+++ b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/dvd_backup.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<mythmenu name="OPTICAL_DISK">
+
+ <button>
+ <type>DVD_RIP</type>
+ <text>Mirror DVD</text>
+ <description>Creates a mirror of your DVD</description>
+ <action>EXEC /usr/LH/bin/ripD_eject.sh m &amp;</action>
+ </button>
+
+ <button>
+ <type>DVD_RIP</type>
+ <text>ISO of DVD</text>
+ <description>Creates an ISO of your DVD</description>
+ <action>EXEC /usr/LH/bin/ripD_eject.sh i &amp;</action>
+ </button>
+
+ <button>
+ <type>DVD_RIP</type>
+ <text>High Quality</text>
+ <description>Creates a high quality MPEG4 of your DVD</description>
+ <action>EXEC /usr/LH/bin/ripD_eject.sh h &amp;</action>
+ </button>
+
+ <button>
+ <type>DVD_RIP</type>
+ <text>Normal Quality</text>
+ <description>Creates a normal quality MPEG4 of your DVD</description>
+ <action>EXEC /usr/LH/bin/ripD_eject.sh n &amp;</action>
+ </button>
+
+ <button>
+ <type>DVD_RIP</type>
+ <text>Low Quality</text>
+ <description>Creates a low quality MPEG4 of your DVD</description>
+ <action>EXEC /usr/LH/bin/ripD_eject.sh l &amp;</action>
+ </button>
+
+</mythmenu>
diff --git a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/info_menu.xml b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/info_menu.xml
new file mode 100644
index 0000000..017f90b
--- /dev/null
+++ b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/info_menu.xml
@@ -0,0 +1,76 @@
+<?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/library.xml.patch b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/library.xml.patch
index fb695f0..8c36a62 100644
--- 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
@@ -7,7 +7,7 @@
+ <type>STREAM</type>
+ <text>Play Online Streams</text>
+ <description></description>
-+ <action>MENU is.xml</action>
++ <action>MENU gen_is.xml</action>
+ </button>
+
+ <button>
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
index 01b6ffa..342766d 100644
--- a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/linhes.xml
+++ b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/linhes.xml
@@ -34,6 +34,7 @@
<button>
<type>LINHES_SETUP</type>
<text>LinHES Configuration</text>
+ <description>Configure LinHES</description>
<action>MENU HOST_SETTINGS.xml</action>
</button>
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
index 9b083ac..73a8940 100644
--- 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
@@ -1,5 +1,5 @@
---- themes/defaultmenu/mainmenu.xml.orig 2012-04-21 17:33:52.176349680 +0000
-+++ themes/defaultmenu/mainmenu.xml 2012-04-21 17:35:03.369680109 +0000
+--- 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">
@@ -12,7 +12,7 @@
<button>
<type>MENU_MEDIA_LIBRARY</type>
-@@ -30,17 +36,10 @@
+@@ -30,18 +36,11 @@
</button>
<button>
@@ -27,9 +27,11 @@
- <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>
++ <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
index 5914b33..7890d88 100644
--- a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/mythbackup.xml
+++ b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/mythbackup.xml
@@ -1,17 +1,17 @@
<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/mythbackup</action>
+ <action>EXEC sudo /usr/LH/bin/lh_system_backup &amp;</action>
</button>
-
+
<button>
<type>BACKUP</type>
<text>No</text>
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
index 8f5c285..161f13f 100644
--- a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/mythrestore.xml
+++ b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/mythrestore.xml
@@ -3,15 +3,16 @@
<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/mythrestore</action>
+ <action>EXEC sudo /usr/LH/bin/lh_system_restore &amp;</action>
</button>
-
+
<button>
<type>BACKUP</type>
<text>No</text>
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
index 143424f..1ff2db2 100644
--- 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
@@ -1,10 +1,17 @@
---- themes/defaultmenu/optical_menu.xml.orig 2010-11-06 00:39:43.000000000 +0000
-+++ themes/defaultmenu/optical_menu.xml 2010-11-06 00:42:59.000000000 +0000
-@@ -26,6 +26,13 @@
+--- 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 video files from DVD</text>
+ <description>Import video files from a data DVD</description>
+ <action>EXEC /usr/LH/bin/importfiles.sh</action>
diff --git a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/setup.xml b/abs/core/mythtv/stable-0.25/mythtv/menu-xml/setup.xml
deleted file mode 100644
index f56bb6f..0000000
--- a/abs/core/mythtv/stable-0.25/mythtv/menu-xml/setup.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<mythmenu name="MAIN">
-
- <button>
- <type>SETUP_GENERAL</type>
- <text>1. General</text>
- <text lang="IT">1. Generale</text>
- <text lang="PT">1. Geral</text>
- <text lang="SV">1. Generellt</text>
- <text lang="JA">1. 一般</text>
- <text lang="DE">1. Allgemeines</text>
- <text lang="FI">1. Yleiset</text>
- <text lang="FR">1. Général</text>
- <text lang="SI">1. Splošno</text>
- <text lang="ET">1. Üldine</text>
- <text lang="NB">1 Generelt</text>
- <text lang="DK">1. Generelt</text>
- <text lang="ES">1. General</text>
- <text lang="CZ">1. Obecný</text>
- <text lang="RU">1. Общие</text>
- <action>GENERAL</action>
- </button>
-
- <button>
- <type>SETUP_CAPTURE_CARDS</type>
- <text>2. Capture cards</text>
- <text lang="IT">2. Schede di Acquisizione</text>
- <text lang="PT">2. Placas de Captura</text>
- <text lang="SV">2. TV-kort</text>
- <text lang="JA">2. キャプチャカード</text>
- <text lang="DE">2. TV-Karten</text>
- <text lang="FI">2. TV-kortit</text>
- <text lang="FR">2. Cartes d'acquisition</text>
- <text lang="SI">2. Kartice za zajem</text>
- <text lang="ET">2. TV-kaardid</text>
- <text lang="NB">2 TV-kort</text>
- <text lang="DK">2. TV-kort</text>
- <text lang="ES">2. Capturadoras</text>
- <text lang="CZ">2. Zachytávací karty</text>
- <text lang="RU">2. Карты захвата</text>
- <action>CAPTURE CARDS</action>
- </button>
-
- <button>
- <type>SETUP_VIDEO_SOURCES</type>
- <text>3. Video sources</text>
- <text lang="IT">3. Fonte Video</text>
- <text lang="PT">3. Fontes de Vídeo</text>
- <text lang="SV">3. Videokällor</text>
- <text lang="JA">3. ビデオソース</text>
- <text lang="DE">3. Videoquellen</text>
- <text lang="FI">3. Kuvanlähteet</text>
- <text lang="FR">3. Sources vidéo</text>
- <text lang="SI">3. Video viri</text>
- <text lang="ET">3. Videosisendid</text>
- <text lang="NB">3 Videokilder</text>
- <text lang="DK">3. Videokilder</text>
- <text lang="ES">3. Fuentes de Vídeo</text>
- <text lang="CZ">3. Zdroje obrazu</text>
- <text lang="RU">3. Видео источники</text>
- <action>VIDEO SOURCES</action>
- </button>
-
- <button>
- <type>SETUP_INPUT_CONNECTIONS</type>
- <text>4. Input connections</text>
- <text lang="IT">4. Connessioni di Ingresso</text>
- <text lang="PT">4. Ligações de Entrada</text>
- <text lang="SV">4. Anslutningar</text>
- <text lang="JA">4. 入力とソースの接続</text>
- <text lang="DE">4. Verknüpfungen</text>
- <text lang="FI">4. Sisääntuloasetukset</text>
- <text lang="FR">4. Entrées Vidéos</text>
- <text lang="SI">4. Vhodne povezave</text>
- <text lang="ET">4. Sisendite ühendused</text>
- <text lang="NB">4 Inndata</text>
- <text lang="DK">4. Indgange</text>
- <text lang="ES">4. Conexiones</text>
- <text lang="CZ">4. Připojení vstupů</text>
- <text lang="RU">4. Соединение входов</text>
- <action>CARD INPUTS</action>
- </button>
-
- <button>
- <type>SETUP_CHANNEL_EDITOR</type>
- <text>5. Channel Editor</text>
- <text lang="IT">5. Modifica Canali</text>
- <text lang="SV">5. Kanaleditor</text>
- <text lang="JA">5. チャンネル設定</text>
- <text lang="DE">5. Sender bearbeiten</text>
- <text lang="FI">5. Kanavanviritys</text>
- <text lang="FR">5. Editeur de chaînes</text>
- <text lang="SI">5. Urejanje kanalov</text>
- <text lang="ET">5. Kanaliredaktor</text>
- <text lang="NB">5 Kanalredigerer</text>
- <text lang="DK">5. Kanal opsætning</text>
- <text lang="ES">5. Editor Canales</text>
- <text lang="CZ">5. Editor kanálů</text>
- <text lang="RU">5. Редактор каналов</text>
- <action>CHANNEL EDITOR</action>
- </button>
-
- <button>
- <type>SETUP_STORAGE_GROUPS</type>
- <text>6. Storage Directories</text>
- <text lang="IT">6. Cartelle</text>
- <text lang="FI">Tallennusryhmät</text>
- <text lang="SV">Lagringsgrupper</text>
- <action>STORAGE GROUPS</action>
- </button>
-
-</mythmenu>
diff --git a/abs/core/mythtv/stable-0.25/mythtv/myth_settings.patch b/abs/core/mythtv/stable-0.25/mythtv/myth_settings.patch
index ebc6264..a96051b 100644
--- a/abs/core/mythtv/stable-0.25/mythtv/myth_settings.patch
+++ b/abs/core/mythtv/stable-0.25/mythtv/myth_settings.patch
@@ -1,5 +1,13 @@
+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 ad58f59..809d662 100644
+index 84cb01a..6e3c54a 100644
--- a/mythtv/libs/libmythbase/mythcorecontext.cpp
+++ b/mythtv/libs/libmythbase/mythcorecontext.cpp
@@ -1260,6 +1260,90 @@ void MythCoreContext::ResetLanguage(void)
@@ -80,11 +88,11 @@ index ad58f59..809d662 100644
+QMap<QString, QMap<QString,QString> > MythCoreContext::export_settings(
+ QString src_hostname,
+ QString saved_settingsgroupname,
-+ QStringList table_list)
++ QStringList table_list, bool skip_host )
+{
+ return d->m_database->export_settings(src_hostname,
+ saved_settingsgroupname,
-+ table_list);
++ table_list , skip_host );
+}
+
+//END JM ADDED
@@ -94,10 +102,10 @@ index ad58f59..809d662 100644
{
if (!d->m_locale)
diff --git a/mythtv/libs/libmythbase/mythcorecontext.h b/mythtv/libs/libmythbase/mythcorecontext.h
-index 0917313..db3bbb9 100644
+index 0917313..3f6d5f8 100644
--- a/mythtv/libs/libmythbase/mythcorecontext.h
+++ b/mythtv/libs/libmythbase/mythcorecontext.h
-@@ -168,6 +168,39 @@ class MBASE_PUBLIC MythCoreContext : public MythObservable, public MythSocketCBs
+@@ -168,6 +168,40 @@ class MBASE_PUBLIC MythCoreContext : public MythObservable, public MythSocketCBs
QString GetLanguageAndVariant(void);
void ResetLanguage(void);
@@ -131,14 +139,15 @@ index 0917313..db3bbb9 100644
+ QMap<QString,QMap <QString,QString> > export_settings(
+ QString src_hostname,
+ QString saved_settingsgroupname,
-+ QStringList table_list);
++ 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..730fc3e 100644
+index ea30783..e4c1781 100644
--- a/mythtv/libs/libmythbase/mythdb.cpp
+++ b/mythtv/libs/libmythbase/mythdb.cpp
@@ -774,7 +774,7 @@ void MythDB::OverrideSettingForSession(
@@ -150,7 +159,7 @@ index ea30783..730fc3e 100644
QString("ERROR: Refusing to allow override for '%1'.").arg(key));
return;
}
-@@ -1055,6 +1055,901 @@ void MythDB::WriteDelayedSettings(void)
+@@ -1055,6 +1055,1015 @@ void MythDB::WriteDelayedSettings(void)
}
}
@@ -168,6 +177,7 @@ index ea30783..730fc3e 100644
+ 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
@@ -228,6 +238,7 @@ index ea30783..730fc3e 100644
+
+ table_list.append("settings");
+ table_list.append("keybindings");
++ table_list.append("jumppoints");
+ QString hostname_clause;
+ if ( delete_hostname == "GLOBAL" )
+ hostname_clause = "hostname IS NULL";
@@ -490,6 +501,7 @@ index ea30783..730fc3e 100644
+ {
+ table_list.append("settings");
+ table_list.append("keybindings");
++ table_list.append("jumppoints");
+ }
+
+ for ( it = table_list.begin(); it != table_list.end(); ++it )
@@ -587,7 +599,14 @@ index ea30783..730fc3e 100644
+ else
+ hostname_clause ="hostname = :HOSTNAME";
+
-+ if ( settings_check ( dest_hostname , saved_settingsgroupname ) )
++ 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;
@@ -596,6 +615,7 @@ index ea30783..730fc3e 100644
+ {
+ table_list.append("settings");
+ table_list.append("keybindings");
++ table_list.append("jumppoints");
+ }
+
+ for ( it = table_list.begin(); it != table_list.end(); ++it )
@@ -606,22 +626,54 @@ index ea30783..730fc3e 100644
+ 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 = QString("REPLACE INTO %1 "
-+ "(SELECT * from %2 WHERE %3)")
-+ .arg(temptable)
-+ .arg(src_tablename)
-+ .arg(hostname_clause);
++ 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",dest_hostname );
-+ query.exec();
++ 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
@@ -875,13 +927,69 @@ index ea30783..730fc3e 100644
+ }
+ }
+ }
++ //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)
++ QStringList table_list, bool skip_host )
+{
+ QMap<QString, QMap<QString,QString> > result_set;
+ QStringList::Iterator it;
@@ -892,6 +1000,7 @@ index ea30783..730fc3e 100644
+ {
+ table_list.append("settings");
+ table_list.append("keybindings");
++ table_list.append("jumppoints");
+ }
+
+ MSqlQuery query(MSqlQuery::InitCon());
@@ -909,10 +1018,11 @@ index ea30783..730fc3e 100644
+ saved_settingsgroupname);
+
+ QString hostname_clause;
-+ if ( src_hostname == "GLOBAL" )
-+ hostname_clause = "hostname IS NULL";
-+ else
-+ hostname_clause ="hostname = :HOSTNAME";
++ 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);
@@ -929,12 +1039,25 @@ index ea30783..730fc3e 100644
+ 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);
+
-+ query_string = QString("SELECT %1 FROM %2 WHERE %3")
-+ .arg(field_query)
-+ .arg(table_name)
-+ .arg(hostname_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);
+
@@ -986,7 +1109,7 @@ index ea30783..730fc3e 100644
+void MythDB::drop_temp_table (QString table_name)
+{
+ MSqlQuery query(MSqlQuery::InitCon());
-+ if (table_name == "settings" | table_name == "keybindings")
++ 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);
@@ -1053,10 +1176,10 @@ index ea30783..730fc3e 100644
* \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..fe3c91c 100644
+index 79abe56..fd6044e 100644
--- a/mythtv/libs/libmythbase/mythdb.h
+++ b/mythtv/libs/libmythbase/mythdb.h
-@@ -75,6 +75,48 @@ class MBASE_PUBLIC MythDB
+@@ -75,6 +75,49 @@ class MBASE_PUBLIC MythDB
void WriteDelayedSettings(void);
@@ -1090,7 +1213,8 @@ index 79abe56..fe3c91c 100644
+ QMap<QString,QMap <QString,QString> > export_settings(
+ QString src_hostname,
+ QString saved_settingsgroupname,
-+ QStringList table_list);
++ 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);
@@ -1106,10 +1230,10 @@ index 79abe56..fe3c91c 100644
void SetHaveSchema(bool schema);
bool HaveSchema(void) const;
diff --git a/mythtv/programs/mythutil/commandlineparser.cpp b/mythtv/programs/mythutil/commandlineparser.cpp
-index 7f00e50..6fb2fc2 100644
+index f4a6035..fdeeb8e 100644
--- a/mythtv/programs/mythutil/commandlineparser.cpp
+++ b/mythtv/programs/mythutil/commandlineparser.cpp
-@@ -114,6 +114,37 @@ void MythUtilCommandLineParser::LoadArguments(void)
+@@ -118,6 +118,37 @@ void MythUtilCommandLineParser::LoadArguments(void)
<< add("--print-template", "printtemplate", false,
"Print the template to be sent to the frontend", "")
->SetGroup("Messaging")
@@ -1147,7 +1271,7 @@ index 7f00e50..6fb2fc2 100644
);
// mpegutils.cpp
-@@ -136,6 +167,59 @@ void MythUtilCommandLineParser::LoadArguments(void)
+@@ -140,6 +171,59 @@ void MythUtilCommandLineParser::LoadArguments(void)
add("--bcastaddr", "bcastaddr", "127.0.0.1", "(optional) IP address to send to", "")
->SetChildOf("message");
@@ -1229,10 +1353,10 @@ index 418ea01..bd4a1f4 100644
bool cmdFound = false;
int cmdResult = GENERIC_EXIT_OK;
diff --git a/mythtv/programs/mythutil/mythutil.pro b/mythtv/programs/mythutil/mythutil.pro
-index 774528f..5be3ec7 100644
+index 066e618..87d7952 100644
--- a/mythtv/programs/mythutil/mythutil.pro
+++ b/mythtv/programs/mythutil/mythutil.pro
-@@ -10,7 +11,7 @@ TARGET = mythutil
+@@ -10,7 +10,7 @@ TARGET = mythutil
target.path = $${PREFIX}/bin
INSTALLS = target
@@ -1241,7 +1365,7 @@ index 774528f..5be3ec7 100644
INCLUDEPATH += ../../libs/libmythbase
QMAKE_CLEAN += $(TARGET)
-@@ -19,8 +20,10 @@ 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
@@ -1255,10 +1379,10 @@ index 774528f..5be3ec7 100644
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..ff7e509
+index 0000000..8fc7b0e
--- /dev/null
+++ b/mythtv/programs/mythutil/settingsutils.cpp
-@@ -0,0 +1,566 @@
+@@ -0,0 +1,586 @@
+// C++ includes
+#include <iostream>
+
@@ -1643,6 +1767,17 @@ index 0000000..ff7e509
+ 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);
+ }
@@ -1659,6 +1794,10 @@ index 0000000..ff7e509
+ QString tablestring;
+ bool distro_default = FALSE;
+ bool generic = FALSE;
++ bool skip_host = FALSE;
++
++
++
+ QDomDocument doc("mythutils_exported_settings");
+
+ if (cmdline.toBool("groupname"))
@@ -1672,18 +1811,22 @@ index 0000000..ff7e509
+ 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" ;
++ table_list << "settings" <<"keybindings" <<"jumppoints" ;
+
+ if (cmdline.toString("outfile").isEmpty())
+ {
@@ -1693,7 +1836,8 @@ index 0000000..ff7e509
+
+ QString export_filename = cmdline.toString("outfile");
+
-+ records = gCoreContext->export_settings(src_hostname,groupname,table_list);
++ records = gCoreContext->export_settings(src_hostname,groupname,
++ table_list, skip_host);
+
+ QDomElement exported_xml = doc.createElement("exported_xml");
+ doc.appendChild(exported_xml);
@@ -1715,7 +1859,6 @@ index 0000000..ff7e509
+ 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" )
@@ -1761,6 +1904,7 @@ index 0000000..ff7e509
+ }
+ }
+ QFile file( export_filename );
++
+ if( !file.open(QIODevice::WriteOnly) )
+ return -1;
+
diff --git a/abs/core/mythtv/stable-0.25/mythtv/mythtv.install b/abs/core/mythtv/stable-0.25/mythtv/mythtv.install
index 3f2e304..3b44668 100644
--- a/abs/core/mythtv/stable-0.25/mythtv/mythtv.install
+++ b/abs/core/mythtv/stable-0.25/mythtv/mythtv.install
@@ -1,60 +1,22 @@
# arg 1: the new package version
post_install() {
- if [ ! -d /var/log/mythtv ]
- then
- mkdir -p /var/log/mythv
- chown -R mythtv /var/log/mythtv
- echo "---" > /var/log/mythtv/mythbackend.log
- chown mythtv /var/log/mythtv/mythbackend.log
- fi
- ln -s /usr/share/mythtv/themes/defaultmenu/is.xml /usr/share/mythtv/is.xml
+ gen_is_xml.py
+ gen_lib_xml.py
}
pre_upgrade() {
- if [ ! -L /usr/share/mythtv/is.xml ]
- then
- mv /usr/share/mythtv/is.xml /usr/share/mythtv/is.xml.pre
- else
- mv /usr/share/mythtv/themes/defaultmenu/is.xml /usr/share/mythtv/themes/defaultmenu/is.xml.pre
- fi
+ /bin/true
}
post_upgrade() {
- if [ ! -d /var/log/mythtv ]
- then
- mkdir -p /var/log/mythv
- chown -R mythtv /var/log/mythtv
- fi
- if [ -e /usr/share/mythtv/is.xml.pre ]
- then
- rm -fr /usr/share/mythtv/themes/defaultmenu/is.xml
- mv /usr/share/mythtv/is.xml.pre /usr/share/mythtv/themes/defaultmenu/is.xml
- ln -s /usr/share/mythtv/themes/defaultmenu/is.xml /usr/share/mythtv/is.xml
- else
- mv /usr/share/mythtv/themes/defaultmenu/is.xml.pre /usr/share/mythtv/themes/defaultmenu/is.xml
- fi
- pacxmbc=`pacman -Q xbmc`
- if [ -z "$pacxbmc" ]
- then
- mv /usr/share/mythtv/themes/defaultmenu/library.xml /tmp
- grep -v -e /mythmenu /tmp/library.xml > /tmp/library.xml.tmp
- echo "<!--#XBMC-->" >> /tmp/library.xml.tmp
- echo " <button>" >> /tmp/library.xml.tmp
- echo " <type>MENU_XBMC</type>" >> /tmp/library.xml.tmp
- echo " <text>Launch XBMC</text>" >> /tmp/library.xml.tmp
- echo " <action>EXEC /usr/bin/xbmc</action>" >> /tmp/library.xml.tmp
- echo " </button>" >> /tmp/library.xml.tmp
- echo "<!--#XBMC-->" >> /tmp/library.xml.tmp
- echo "" >> /tmp/library.xml.tmp
- echo "</mythmenu>" >> /tmp/library.xml.tmp
- mv /tmp/library.xml.tmp /usr/share/mythtv/themes/defaultmenu/library.xml
- fi
+ gen_is_xml.py
+ gen_lib_xml.py
}
# arg 1: the old package version
post_remove() {
- /bin/true
+ /bin/true
}
diff --git a/abs/core/mythtv/stable-0.25/mythweb/PKGBUILD b/abs/core/mythtv/stable-0.25/mythweb/PKGBUILD
index 6ec3453..5e1c853 100644
--- a/abs/core/mythtv/stable-0.25/mythweb/PKGBUILD
+++ b/abs/core/mythtv/stable-0.25/mythweb/PKGBUILD
@@ -1,6 +1,6 @@
pkgname=mythweb
pkgver=0.25
-pkgrel=3
+pkgrel=6
commit_hash=`cat ../git_src/git_hash_web`
@@ -11,25 +11,26 @@ arch=('i686' 'x86_64')
depends=('mythtv>=0.25' 'lighttpd' 'php' 'local-website')
groups=('mythtv-extras')
+install=mythweb.install
+#http://code.mythtv.org/trac/ticket/10504
+patches=(schedules.php.patch sorting.php.patch tv-schedules.php.patch)
+source=(`echo ${patches[@]:0}` mythweb.include mythweb_gen_light.conf)
-patches=()
-source=(`echo ${patches[@]:0}`)
-
-DOCROOT=/data/srv/httpd/htdocs/mythweb
+DOCROOT=/data/srv/httpd/mythweb
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."
@@ -45,7 +46,7 @@ build() {
patch -Np0 -i ${srcdir}/$i || return 1
done
echo "--------------------------done applying patches-----------------------------------------------"
-
+
[ "$CARCH" = "i686" ] && ARCH="i686"
[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
@@ -59,5 +60,16 @@ build() {
# 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=('45703fa3899c4ee84d1b087bfcc6654e')
+md5sums=('392e570594859c026ac12194920246d8'
+ '53cc59d6a8bf144027b25d5dcbfffc66'
+ '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
new file mode 100644
index 0000000..18e9be1
--- /dev/null
+++ b/abs/core/mythtv/stable-0.25/mythweb/mythweb.include
@@ -0,0 +1,8 @@
+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
new file mode 100644
index 0000000..0073499
--- /dev/null
+++ b/abs/core/mythtv/stable-0.25/mythweb/mythweb.install
@@ -0,0 +1,18 @@
+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.php.patch b/abs/core/mythtv/stable-0.25/mythweb/mythweb.php.patch
deleted file mode 100644
index 4525e68..0000000
--- a/abs/core/mythtv/stable-0.25/mythweb/mythweb.php.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- mythweb.php.orig 2011-02-01 03:33:56.000000000 +0000
-+++ mythweb.php 2011-02-01 03:34:20.000000000 +0000
-@@ -30,7 +30,7 @@
- if (Modules::getModule($Path[0])) {
- // Add the current module directory to our search path, so modules can
- // define includes, etc.
-- ini_set('include_path', ini_get('include_path').':'.modules_path.'/'.$Path[0]);
-+ ini_set('include_path', ini_get('include_path').':'.modules.'/'.$Path[0]);
- // Load the module handler
- require_once 'handler.php';
- }
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
new file mode 100644
index 0000000..ddf0d2f
--- /dev/null
+++ b/abs/core/mythtv/stable-0.25/mythweb/mythweb_gen_light.conf
@@ -0,0 +1 @@
+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
new file mode 100644
index 0000000..1d41711
--- /dev/null
+++ b/abs/core/mythtv/stable-0.25/mythweb/schedules.php.patch
@@ -0,0 +1,16 @@
+*** 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
new file mode 100644
index 0000000..2f76216
--- /dev/null
+++ b/abs/core/mythtv/stable-0.25/mythweb/sorting.php.patch
@@ -0,0 +1,19 @@
+*** 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
new file mode 100644
index 0000000..29e4ccb
--- /dev/null
+++ b/abs/core/mythtv/stable-0.25/mythweb/tv-schedules.php.patch
@@ -0,0 +1,15 @@
+*** 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';
+