mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-28 13:16:41 +00:00
Merge branch 'master' of github.com:OpenELEC/OpenELEC.tv into openelec-settings
This commit is contained in:
commit
f697bb8259
@ -17,6 +17,9 @@
|
|||||||
<description>
|
<description>
|
||||||
@PKG_LONGDESC@
|
@PKG_LONGDESC@
|
||||||
</description>
|
</description>
|
||||||
|
<disclaimer>
|
||||||
|
@PKG_DISCLAIMER@
|
||||||
|
</disclaimer>
|
||||||
<platform>all</platform>
|
<platform>all</platform>
|
||||||
</extension>
|
</extension>
|
||||||
</addon>
|
</addon>
|
||||||
|
@ -24,3 +24,4 @@
|
|||||||
|
|
||||||
mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/config/
|
mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/config/
|
||||||
cp -P $PKG_DIR/config/* $ADDON_BUILD/$PKG_ADDON_ID/config/
|
cp -P $PKG_DIR/config/* $ADDON_BUILD/$PKG_ADDON_ID/config/
|
||||||
|
cp -P $PKG_DIR/settings-default.xml $ADDON_BUILD/$PKG_ADDON_ID/
|
||||||
|
@ -1,23 +1,20 @@
|
|||||||
|
3.0.3
|
||||||
|
improved python script for modifying tuners
|
||||||
3.0.2
|
3.0.2
|
||||||
- added addon settings for
|
added addon settings for
|
||||||
modifying tuner type (DVB-C, DVB-T, ATSC)
|
modifying tuner type (DVB-C, DVB-T, ATSC)
|
||||||
setting delays
|
setting delays
|
||||||
3.0.1
|
3.0.1
|
||||||
- bump addon version
|
bump addon version
|
||||||
- binary files are stored with OpenELEC image
|
binary files are stored with OpenELEC image
|
||||||
- addon is used to start userspace program
|
addon is used to start userspace program
|
||||||
|
|
||||||
2.1.3
|
2.1.3
|
||||||
- bump addon version for new kernel
|
bump addon version for new kernel
|
||||||
|
|
||||||
2.1.2
|
2.1.2
|
||||||
- dvbhdhomerun upgraded to 0.0.10
|
dvbhdhomerun upgraded to 0.0.10
|
||||||
|
|
||||||
2.1.1
|
2.1.1
|
||||||
- rebuild for addon version 2.1
|
rebuild for addon version 2.1
|
||||||
|
|
||||||
2.0.1
|
2.0.1
|
||||||
- starting userspace DVB drivers from Tvheadend/VDR
|
starting userspace DVB drivers from Tvheadend/VDR
|
||||||
|
|
||||||
2.0.0
|
2.0.0
|
||||||
- initial version of HDHomeRun driver
|
initial version of HDHomeRun driver
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
PKG_NAME="hdhomerun"
|
PKG_NAME="hdhomerun"
|
||||||
PKG_VERSION="3.0"
|
PKG_VERSION="3.0"
|
||||||
PKG_REV="2"
|
PKG_REV="3"
|
||||||
PKG_ARCH="any"
|
PKG_ARCH="any"
|
||||||
PKG_LICENSE="GPL"
|
PKG_LICENSE="GPL"
|
||||||
PKG_SITE="http://www.silicondust.com/products/hdhomerun/dvbt/"
|
PKG_SITE="http://www.silicondust.com/products/hdhomerun/dvbt/"
|
||||||
|
@ -1,125 +0,0 @@
|
|||||||
"""
|
|
||||||
################################################################################
|
|
||||||
# This file is part of OpenELEC - http://www.openelec.tv
|
|
||||||
# Copyright (C) 2009-2013 Stephan Raue (stephan@openelec.tv)
|
|
||||||
# Copyright (C) 2013 ultraman/vpeter
|
|
||||||
#
|
|
||||||
# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to
|
|
||||||
# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA.
|
|
||||||
# http://www.gnu.org/copyleft/gpl.html
|
|
||||||
################################################################################
|
|
||||||
"""
|
|
||||||
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import shutil
|
|
||||||
import xmlpp
|
|
||||||
import xbmcaddon
|
|
||||||
|
|
||||||
from xml.dom import minidom
|
|
||||||
from array import array
|
|
||||||
|
|
||||||
__settings__ = xbmcaddon.Addon(id='driver.dvb.hdhomerun')
|
|
||||||
__cwd__ = __settings__.getAddonInfo('path')
|
|
||||||
__settings_xml__ = xbmc.translatePath(os.path.join(__cwd__, 'resources', 'settings.xml'))
|
|
||||||
|
|
||||||
__hdhomerun_log__ = '/var/log/dvbhdhomerun.log'
|
|
||||||
|
|
||||||
# make backup settings only once
|
|
||||||
try:
|
|
||||||
with open(__settings_xml__ + '_orig') as f: pass
|
|
||||||
except IOError as e:
|
|
||||||
shutil.copyfile(__settings_xml__, __settings_xml__ + '_orig')
|
|
||||||
|
|
||||||
######################################################################################################
|
|
||||||
|
|
||||||
# get supported devices on a system (name)
|
|
||||||
tuners = []
|
|
||||||
try:
|
|
||||||
for line in open(__hdhomerun_log__, 'r'):
|
|
||||||
line = line.strip()
|
|
||||||
if line.startswith('Registered tuner'):
|
|
||||||
name = line.split(':');
|
|
||||||
name = name[2].strip()
|
|
||||||
tuners.append(name)
|
|
||||||
except IOError:
|
|
||||||
print 'Error reading log file ', __hdhomerun_log__
|
|
||||||
|
|
||||||
"""
|
|
||||||
root ~ # grep "Registered tuner" /var/log/dvbhdhomerun.log
|
|
||||||
Registered tuner, id from kernel: 0 name: 101ADD2B-0
|
|
||||||
Registered tuner, id from kernel: 1 name: 101ADD2B-1
|
|
||||||
Registered tuner, id from kernel: 2 name: 1031D75A-0
|
|
||||||
Registered tuner, id from kernel: 3 name: 1031D75A-1
|
|
||||||
"""
|
|
||||||
|
|
||||||
######################################################################################################
|
|
||||||
|
|
||||||
xmldoc = minidom.parse(__settings_xml__)
|
|
||||||
category = xmldoc.getElementsByTagName('category')
|
|
||||||
|
|
||||||
# remove all nodes with id started with ATTACHED_TUNER_
|
|
||||||
for node_cat in category:
|
|
||||||
setting = node_cat.getElementsByTagName('setting')
|
|
||||||
for node_set in setting :
|
|
||||||
if 'id' in node_set.attributes.keys() and not node_set.getAttribute('id').find('ATTACHED_TUNER_'):
|
|
||||||
node_set.parentNode.removeChild(node_set)
|
|
||||||
|
|
||||||
# add new ATTACHED_TUNER_ nodes for available tuners
|
|
||||||
for node_cat in category:
|
|
||||||
setting = node_cat.getElementsByTagName('setting')
|
|
||||||
for node_set in setting :
|
|
||||||
if 'label' in node_set.attributes.keys() and '9010' in node_set.getAttribute('label'):
|
|
||||||
for ix, tuner_name in enumerate(tuners):
|
|
||||||
tuner_name_var = tuner_name.replace('-', '_')
|
|
||||||
|
|
||||||
node1 = xmldoc.createElement("setting")
|
|
||||||
node1.setAttribute("id", 'ATTACHED_TUNER_' + tuner_name_var + '_DVBMODE')
|
|
||||||
node1.setAttribute("label", tuner_name)
|
|
||||||
node1.setAttribute("type", 'labelenum')
|
|
||||||
node1.setAttribute("default", 'auto')
|
|
||||||
node1.setAttribute("values", 'auto|ATSC|DVB-C|DVB-T')
|
|
||||||
node_cat.appendChild(node1)
|
|
||||||
|
|
||||||
node2 = xmldoc.createElement("setting")
|
|
||||||
node2.setAttribute("id", 'ATTACHED_TUNER_' + tuner_name_var + '_FULLNAME')
|
|
||||||
node2.setAttribute("label", '9020')
|
|
||||||
node2.setAttribute("type", 'bool')
|
|
||||||
node2.setAttribute("default", 'false')
|
|
||||||
node_cat.appendChild(node2)
|
|
||||||
|
|
||||||
node3 = xmldoc.createElement("setting")
|
|
||||||
node3.setAttribute("id", 'ATTACHED_TUNER_' + tuner_name_var + '_DISABLE')
|
|
||||||
node3.setAttribute("label", '9030')
|
|
||||||
node3.setAttribute("type", 'bool')
|
|
||||||
node3.setAttribute("default", 'false')
|
|
||||||
node_cat.appendChild(node3)
|
|
||||||
|
|
||||||
# for tuner
|
|
||||||
break
|
|
||||||
|
|
||||||
######################################################################################################
|
|
||||||
|
|
||||||
# save file back
|
|
||||||
try:
|
|
||||||
outputfile=open(__settings_xml__, 'w')
|
|
||||||
xmlpp.pprint(xmldoc.toxml(), output=outputfile, indent=2)
|
|
||||||
outputfile.close()
|
|
||||||
except IOError:
|
|
||||||
print 'Error writing file ', __settings_xml__
|
|
||||||
|
|
||||||
######################################################################################################
|
|
||||||
|
|
||||||
# dialog is closed already so just open settings again
|
|
||||||
xbmcaddon.Addon(id='driver.dvb.hdhomerun').openSettings()
|
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# This file is part of OpenELEC - http://www.openelec.tv
|
# This file is part of OpenELEC - http://www.openelec.tv
|
||||||
# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv)
|
# Copyright (C) 2009-2013 Stephan Raue (stephan@openelec.tv)
|
||||||
#
|
#
|
||||||
# This Program is free software; you can redistribute it and/or modify
|
# 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
|
# it under the terms of the GNU General Public License as published by
|
||||||
@ -67,7 +67,7 @@ if [ -z "$(pidof userhdhomerun)" ]; then
|
|||||||
mv ${DVBHDHOMERUN_CONF_TMP}-types $DVBHDHOMERUN_CONF_TMP
|
mv ${DVBHDHOMERUN_CONF_TMP}-types $DVBHDHOMERUN_CONF_TMP
|
||||||
echo "" >>$DVBHDHOMERUN_CONF_TMP
|
echo "" >>$DVBHDHOMERUN_CONF_TMP
|
||||||
# remove empty lines at the end of file
|
# remove empty lines at the end of file
|
||||||
sed -i '${/^$/d;}' $DVBHDHOMERUN_CONF_TMP
|
sed -i -e ':a' -e '/^\n*$/{$d;N;};/\n$/ba' $DVBHDHOMERUN_CONF_TMP
|
||||||
|
|
||||||
ADDNEW=true
|
ADDNEW=true
|
||||||
if [ -n "$DVBMODE" ]; then
|
if [ -n "$DVBMODE" ]; then
|
||||||
@ -86,6 +86,23 @@ if [ -z "$(pidof userhdhomerun)" ]; then
|
|||||||
echo "" >>$DVBHDHOMERUN_CONF_TMP
|
echo "" >>$DVBHDHOMERUN_CONF_TMP
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# remove logging from libhdhomerun library
|
||||||
|
awk -v val="[libhdhomerun]" '$0 == val {flag=1; next} /^enable=|^logfile=|^#|^$/{if (flag==1) next} /.*/{flag=0; print}' $DVBHDHOMERUN_CONF_TMP >${DVBHDHOMERUN_CONF_TMP}-log
|
||||||
|
mv ${DVBHDHOMERUN_CONF_TMP}-log $DVBHDHOMERUN_CONF_TMP
|
||||||
|
echo "" >>$DVBHDHOMERUN_CONF_TMP
|
||||||
|
# remove empty lines at the end of file
|
||||||
|
sed -i -e ':a' -e '/^\n*$/{$d;N;};/\n$/ba' $DVBHDHOMERUN_CONF_TMP
|
||||||
|
|
||||||
|
if [ "$LIBHDHOMERUN_LOG" = "true" ]; then
|
||||||
|
cat >>$DVBHDHOMERUN_CONF_TMP << EOF
|
||||||
|
|
||||||
|
[libhdhomerun]
|
||||||
|
enable=true
|
||||||
|
logfile=/var/log/dvbhdhomerun_libhdhomerun.log
|
||||||
|
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
md5_1=$(md5sum -b $DVBHDHOMERUN_CONF_TMP | awk '{print $1}')
|
md5_1=$(md5sum -b $DVBHDHOMERUN_CONF_TMP | awk '{print $1}')
|
||||||
md5_2=$(md5sum -b $ADDON_HOME/dvbhdhomerun.conf | awk '{print $1}')
|
md5_2=$(md5sum -b $ADDON_HOME/dvbhdhomerun.conf | awk '{print $1}')
|
||||||
if [ "$md5_1" != "$md5_2" ]; then
|
if [ "$md5_1" != "$md5_2" ]; then
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
################################################################################
|
################################################################################
|
||||||
# This file is part of OpenELEC - http://www.openelec.tv
|
# This file is part of OpenELEC - http://www.openelec.tv
|
||||||
# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv)
|
# Copyright (C) 2009-2013 Stephan Raue (stephan@openelec.tv)
|
||||||
#
|
#
|
||||||
# This Program is free software; you can redistribute it and/or modify
|
# 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
|
# it under the terms of the GNU General Public License as published by
|
||||||
@ -21,3 +21,16 @@
|
|||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import xbmcaddon
|
import xbmcaddon
|
||||||
|
|
||||||
|
__settings__ = xbmcaddon.Addon(id = 'driver.dvb.hdhomerun')
|
||||||
|
__cwd__ = __settings__.getAddonInfo('path')
|
||||||
|
__resources_lib__ = xbmc.translatePath(os.path.join(__cwd__, 'resources', 'lib'))
|
||||||
|
__settings_xml__ = xbmc.translatePath(os.path.join(__cwd__, 'resources', 'settings.xml'))
|
||||||
|
|
||||||
|
__hdhomerun_log__ = '/var/log/dvbhdhomerun.log'
|
||||||
|
|
||||||
|
if __name__ == "__main__" and len(sys.argv) == 2 and sys.argv[1] == 'refresh_tuners':
|
||||||
|
sys.path.append(__resources_lib__)
|
||||||
|
from functions import refresh_hdhomerun_tuners
|
||||||
|
refresh_hdhomerun_tuners(__settings_xml__, __hdhomerun_log__)
|
||||||
|
__settings__.openSettings()
|
||||||
|
@ -3,10 +3,11 @@
|
|||||||
<string id="1000">General</string>
|
<string id="1000">General</string>
|
||||||
<string id="1020">Pre wait time [sec]</string>
|
<string id="1020">Pre wait time [sec]</string>
|
||||||
<string id="1030">Post wait time [sec]</string>
|
<string id="1030">Post wait time [sec]</string>
|
||||||
|
<string id="1040">Enable libhdhomerun logging</string>
|
||||||
|
|
||||||
<string id="9000">Tuner settings</string>
|
<string id="9000">Tuner settings</string>
|
||||||
<string id="9005">Enable modifying settings</string>
|
<string id="9005">Enable modifying settings</string>
|
||||||
<string id="9010">Refresh...</string>
|
<string id="9010">Refresh tuners... (press me)</string>
|
||||||
<string id="9020"> use full name</string>
|
<string id="9020"> use full name</string>
|
||||||
<string id="9030"> disabled</string>
|
<string id="9030"> disabled</string>
|
||||||
</strings>
|
</strings>
|
||||||
|
@ -0,0 +1,272 @@
|
|||||||
|
################################################################################
|
||||||
|
# This file is part of OpenELEC - http://www.openelec.tv
|
||||||
|
# Copyright (C) 2009-2013 Stephan Raue (stephan@openelec.tv)
|
||||||
|
#
|
||||||
|
# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to
|
||||||
|
# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA.
|
||||||
|
# http://www.gnu.org/copyleft/gpl.html
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import shutil
|
||||||
|
import xmlpp
|
||||||
|
from xml.dom import minidom
|
||||||
|
|
||||||
|
__sundtek_userspace__ = '/storage/.xbmc/userdata/addon_data/driver.dvb.sundtek-mediatv/'
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
# backup setting.xml file only if backup doesn't exist
|
||||||
|
def settings_backup(settings_xml):
|
||||||
|
try:
|
||||||
|
with open(settings_xml + '_orig') as f: pass
|
||||||
|
except IOError as e:
|
||||||
|
shutil.copyfile(settings_xml, settings_xml + '_orig')
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
# restore setting.xml file from backup
|
||||||
|
def settings_restore(settings_xml):
|
||||||
|
try:
|
||||||
|
shutil.copyfile(settings_xml + '_orig', settings_xml)
|
||||||
|
except IOError as e:
|
||||||
|
print 'Error restoring file:', settings_xml
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
# get hdhomerun supported devices on a system (only name like 101ADD2B-0)
|
||||||
|
def get_devices_hdhomerun(hdhomerun_log):
|
||||||
|
tuners = []
|
||||||
|
try:
|
||||||
|
for line in open(hdhomerun_log, 'r'):
|
||||||
|
line = line.strip()
|
||||||
|
if line.startswith('Registered tuner'):
|
||||||
|
name = line.split(':');
|
||||||
|
name = name[2].strip()
|
||||||
|
tuners.append(name)
|
||||||
|
except IOError:
|
||||||
|
print 'Error reading hdhomerun log file', hdhomerun_log
|
||||||
|
return tuners
|
||||||
|
|
||||||
|
"""
|
||||||
|
root ~ # grep "Registered tuner" /var/log/dvbhdhomerun.log
|
||||||
|
Registered tuner, id from kernel: 0 name: 101ADD2B-0
|
||||||
|
Registered tuner, id from kernel: 1 name: 101ADD2B-1
|
||||||
|
Registered tuner, id from kernel: 2 name: 1031D75A-0
|
||||||
|
Registered tuner, id from kernel: 3 name: 1031D75A-1
|
||||||
|
"""
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
# get sundtek supported devices on a system (name, serial number, type)
|
||||||
|
def get_devices_sundtek(mediaclient_e):
|
||||||
|
tuners = []
|
||||||
|
try:
|
||||||
|
p = os.popen(mediaclient_e, "r")
|
||||||
|
while 1:
|
||||||
|
line = p.readline()
|
||||||
|
if not line:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
str = line.strip()
|
||||||
|
if str.startswith('device '):
|
||||||
|
name = str[str.find("[")+1:str.find("]")]
|
||||||
|
tuners.append([name, 0, 's'])
|
||||||
|
|
||||||
|
if str.startswith('[SERIAL]:'):
|
||||||
|
line = p.readline()
|
||||||
|
str = line.strip()
|
||||||
|
if str.startswith('ID:'):
|
||||||
|
id = str.split(':');
|
||||||
|
id = id[1].strip()
|
||||||
|
tuners[len(tuners)-1] = [name, id, 's']
|
||||||
|
|
||||||
|
if str.startswith('[DVB-C]:'):
|
||||||
|
tuners[len(tuners)-1] = [name, id, 'c']
|
||||||
|
elif str.startswith('[DVB-T]:'):
|
||||||
|
tuners[len(tuners)-1] = [name, id, 'c']
|
||||||
|
elif str.startswith('[DVB-T2]:'):
|
||||||
|
tuners[len(tuners)-1] = [name, id, 'c']
|
||||||
|
except IOError:
|
||||||
|
print 'Error getting sundtek tuners info'
|
||||||
|
return tuners
|
||||||
|
|
||||||
|
"""
|
||||||
|
root ~ # mediaclient -e
|
||||||
|
**** List of Media Hardware Devices ****
|
||||||
|
device 0: [Sundtek MediaTV Pro (USB 2.0)] DVB-C, DVB-T, ANALOG-TV, FM-RADIO, REMOTE-CONTROL, OSS-AUDIO, RDS
|
||||||
|
[BUS]:
|
||||||
|
ID: 1-7
|
||||||
|
[SERIAL]:
|
||||||
|
ID: U110763295205
|
||||||
|
[DVB-C]:
|
||||||
|
FRONTEND: /dev/dvb/adapter0/frontend0
|
||||||
|
DVR: /dev/dvb/adapter0/dvr0
|
||||||
|
DMX: /dev/dvb/adapter0/demux0
|
||||||
|
[DVB-T]:
|
||||||
|
FRONTEND: /dev/dvb/adapter0/frontend0
|
||||||
|
DVR: /dev/dvb/adapter0/dvr0
|
||||||
|
DMX: /dev/dvb/adapter0/demux0
|
||||||
|
[ANALOG-TV]:
|
||||||
|
VIDEO0: /dev/video0
|
||||||
|
VBI0: /dev/vbi0
|
||||||
|
[FM-RADIO]:
|
||||||
|
RADIO0: /dev/radio0
|
||||||
|
RDS: /dev/rds0
|
||||||
|
[REMOTECONTROL]:
|
||||||
|
INPUT0: /dev/mediainput0
|
||||||
|
[OSS]:
|
||||||
|
OSS0: /dev/dsp0
|
||||||
|
"""
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
# parse settings.xml file
|
||||||
|
def parse_settings(settings_xml):
|
||||||
|
try:
|
||||||
|
xmldoc = minidom.parse(settings_xml)
|
||||||
|
category = xmldoc.getElementsByTagName('category')
|
||||||
|
return xmldoc
|
||||||
|
except Exception as inst:
|
||||||
|
print 'Error parse settings file', settings_xml
|
||||||
|
return None
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
# remove all nodes with id started with ATTACHED_TUNER_
|
||||||
|
def remove_old_tuners(xmldoc):
|
||||||
|
category = xmldoc.getElementsByTagName('category')
|
||||||
|
for node_cat in category:
|
||||||
|
setting = node_cat.getElementsByTagName('setting')
|
||||||
|
for node_set in setting :
|
||||||
|
if 'id' in node_set.attributes.keys() and not node_set.getAttribute('id').find('ATTACHED_TUNER_'):
|
||||||
|
node_set.parentNode.removeChild(node_set)
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
# add new hdhomerun tuners
|
||||||
|
def add_hdhomerun(xmldoc, node_cat, tuners):
|
||||||
|
for ix, tuner in enumerate(tuners):
|
||||||
|
tuner_var = tuner.replace('-', '_')
|
||||||
|
|
||||||
|
node1 = xmldoc.createElement("setting")
|
||||||
|
node1.setAttribute("id", 'ATTACHED_TUNER_' + tuner_var + '_DVBMODE')
|
||||||
|
node1.setAttribute("label", tuner)
|
||||||
|
node1.setAttribute("type", 'labelenum')
|
||||||
|
node1.setAttribute("default", 'auto')
|
||||||
|
node1.setAttribute("values", 'auto|ATSC|DVB-C|DVB-T')
|
||||||
|
node_cat.appendChild(node1)
|
||||||
|
|
||||||
|
node2 = xmldoc.createElement("setting")
|
||||||
|
node2.setAttribute("id", 'ATTACHED_TUNER_' + tuner_var + '_FULLNAME')
|
||||||
|
node2.setAttribute("label", '9020')
|
||||||
|
node2.setAttribute("type", 'bool')
|
||||||
|
node2.setAttribute("default", 'false')
|
||||||
|
node_cat.appendChild(node2)
|
||||||
|
|
||||||
|
node3 = xmldoc.createElement("setting")
|
||||||
|
node3.setAttribute("id", 'ATTACHED_TUNER_' + tuner_var + '_DISABLE')
|
||||||
|
node3.setAttribute("label", '9030')
|
||||||
|
node3.setAttribute("type", 'bool')
|
||||||
|
node3.setAttribute("default", 'false')
|
||||||
|
node_cat.appendChild(node3)
|
||||||
|
|
||||||
|
# for tuner
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
# add new sundtek tuners
|
||||||
|
def add_sundtek(xmldoc, node_cat, tuners):
|
||||||
|
for ix, tuner in enumerate(tuners):
|
||||||
|
tuner_name = tuner[0]
|
||||||
|
tuner_serial = tuner[1]
|
||||||
|
tuner_type = tuner[2]
|
||||||
|
|
||||||
|
node1 = xmldoc.createElement("setting")
|
||||||
|
node1.setAttribute("id", 'ATTACHED_TUNER_' + tuner_serial + '_DVBMODE')
|
||||||
|
node1.setAttribute("label", tuner_name + ", " + tuner_serial)
|
||||||
|
node1.setAttribute("type", 'labelenum')
|
||||||
|
|
||||||
|
if (tuner_type == 's'):
|
||||||
|
node1.setAttribute("default", 'DVB-S')
|
||||||
|
node1.setAttribute("values", 'DVB-S')
|
||||||
|
else:
|
||||||
|
node1.setAttribute("default", 'DVB-C')
|
||||||
|
node1.setAttribute("values", 'DVB-C|DVB-T')
|
||||||
|
|
||||||
|
node_cat.appendChild(node1)
|
||||||
|
|
||||||
|
node2 = xmldoc.createElement("setting")
|
||||||
|
node2.setAttribute("id", 'ATTACHED_TUNER_' + tuner_serial + '_IRPROT')
|
||||||
|
node2.setAttribute("label", '9020')
|
||||||
|
node2.setAttribute("type", 'labelenum')
|
||||||
|
node2.setAttribute("default", 'auto')
|
||||||
|
node2.setAttribute("values", 'auto|RC5|NEC|RC6')
|
||||||
|
node_cat.appendChild(node2)
|
||||||
|
|
||||||
|
node3 = xmldoc.createElement("setting")
|
||||||
|
node3.setAttribute("id", 'ATTACHED_TUNER_' + tuner_serial + '_KEYMAP')
|
||||||
|
node3.setAttribute("label", '9030')
|
||||||
|
node3.setAttribute("type", 'file')
|
||||||
|
node3.setAttribute("mask", '*.map')
|
||||||
|
node3.setAttribute("default", __sundtek_userspace__)
|
||||||
|
node_cat.appendChild(node3)
|
||||||
|
|
||||||
|
# for tuner
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
# add new ATTACHED_TUNER_ nodes for available tuners
|
||||||
|
def add_new_tuners(xmldoc, tuners, which):
|
||||||
|
category = xmldoc.getElementsByTagName('category')
|
||||||
|
for node_cat in category:
|
||||||
|
setting = node_cat.getElementsByTagName('setting')
|
||||||
|
for node_set in setting :
|
||||||
|
if 'label' in node_set.attributes.keys() and '9010' in node_set.getAttribute('label'):
|
||||||
|
if which == 'hdhomerun':
|
||||||
|
add_hdhomerun(xmldoc, node_cat, tuners)
|
||||||
|
break
|
||||||
|
elif which == 'sundtek':
|
||||||
|
add_sundtek(xmldoc, node_cat, tuners)
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
# save settings.xml file back
|
||||||
|
def save_settings(settings_xml, xmldoc):
|
||||||
|
try:
|
||||||
|
outputfile = open(settings_xml, 'w')
|
||||||
|
xmlpp.pprint(xmldoc.toxml(), output = outputfile, indent=2)
|
||||||
|
outputfile.close()
|
||||||
|
except IOError:
|
||||||
|
print 'Error saving file:', settings_xml
|
||||||
|
settings_restore(settings_xml)
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
# refresh hdhomerun tuners in settings.xml file
|
||||||
|
def refresh_hdhomerun_tuners(settings_xml, hdhomerun_log):
|
||||||
|
settings_backup(settings_xml)
|
||||||
|
tuners = get_devices_hdhomerun(hdhomerun_log)
|
||||||
|
xmldoc = parse_settings(settings_xml)
|
||||||
|
if xmldoc == None:
|
||||||
|
print 'No hdhomerun tuners found'
|
||||||
|
else:
|
||||||
|
remove_old_tuners(xmldoc)
|
||||||
|
add_new_tuners(xmldoc, tuners, 'hdhomerun')
|
||||||
|
save_settings(settings_xml, xmldoc)
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
# refresh sundtek tuners in settings.xml file
|
||||||
|
def refresh_sundtek_tuners(settings_xml, mediaclient_e):
|
||||||
|
settings_backup(settings_xml)
|
||||||
|
tuners = get_devices_sundtek(mediaclient_e)
|
||||||
|
xmldoc = parse_settings(settings_xml)
|
||||||
|
if xmldoc == None:
|
||||||
|
print 'No sundtek tuners found'
|
||||||
|
else:
|
||||||
|
remove_old_tuners(xmldoc)
|
||||||
|
add_new_tuners(xmldoc, tuners, 'sundtek')
|
||||||
|
save_settings(settings_xml, xmldoc)
|
@ -4,10 +4,11 @@
|
|||||||
<setting type="sep" />
|
<setting type="sep" />
|
||||||
<setting id="PRE_WAIT" type="number" label="1020" default="2" />
|
<setting id="PRE_WAIT" type="number" label="1020" default="2" />
|
||||||
<setting id="POST_WAIT" type="number" label="1030" default="1" />
|
<setting id="POST_WAIT" type="number" label="1030" default="1" />
|
||||||
|
<setting id="LIBHDHOMERUN_LOG" type="bool" label="1040" default="false" />
|
||||||
</category>
|
</category>
|
||||||
<category label="9000">
|
<category label="9000">
|
||||||
<setting type="sep" />
|
<setting type="sep" />
|
||||||
<setting id="ENABLE_TUNER_TYPES" type="bool" label="9005" default="true" />
|
<setting id="ENABLE_TUNER_TYPES" type="bool" label="9005" default="true" />
|
||||||
<setting label="9010" option="close" type="action" action="RunScript(/storage/.xbmc/addons/driver.dvb.hdhomerun/bin/refresh-tuners.py, false)" />
|
<setting label="9010" option="close" type="action" action="RunScript($ID, refresh_tuners)" />
|
||||||
</category>
|
</category>
|
||||||
</settings>
|
</settings>
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
3.0.4
|
||||||
|
improved python script for modifying tuners
|
||||||
3.0.3
|
3.0.3
|
||||||
added addon settings for modifying tuner type (DVB-C, DVB-T)
|
added addon settings for modifying tuner type (DVB-C, DVB-T)
|
||||||
3.0.2
|
3.0.2
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
PKG_NAME="sundtek-mediatv"
|
PKG_NAME="sundtek-mediatv"
|
||||||
PKG_VERSION="3.0"
|
PKG_VERSION="3.0"
|
||||||
PKG_REV="3"
|
PKG_REV="4"
|
||||||
PKG_ARCH="any"
|
PKG_ARCH="any"
|
||||||
PKG_LICENSE="nonfree"
|
PKG_LICENSE="nonfree"
|
||||||
PKG_SITE="http://support.sundtek.com/"
|
PKG_SITE="http://support.sundtek.com/"
|
||||||
|
@ -1,172 +0,0 @@
|
|||||||
"""
|
|
||||||
################################################################################
|
|
||||||
# This file is part of OpenELEC - http://www.openelec.tv
|
|
||||||
# Copyright (C) 2009-2013 Stephan Raue (stephan@openelec.tv)
|
|
||||||
# Copyright (C) 2013 ultraman/vpeter
|
|
||||||
#
|
|
||||||
# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to
|
|
||||||
# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA.
|
|
||||||
# http://www.gnu.org/copyleft/gpl.html
|
|
||||||
################################################################################
|
|
||||||
"""
|
|
||||||
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import shutil
|
|
||||||
import xmlpp
|
|
||||||
import xbmcaddon
|
|
||||||
|
|
||||||
from xml.dom import minidom
|
|
||||||
from array import array
|
|
||||||
|
|
||||||
__settings__ = xbmcaddon.Addon(id='driver.dvb.sundtek-mediatv')
|
|
||||||
__cwd__ = __settings__.getAddonInfo('path')
|
|
||||||
__mediaclient__ = xbmc.translatePath(os.path.join(__cwd__, 'bin', 'mediaclient'))
|
|
||||||
__ld_preload__ = xbmc.translatePath(os.path.join(__cwd__, 'lib', 'libmediaclient.so'))
|
|
||||||
__settings_xml__ = xbmc.translatePath(os.path.join(__cwd__, 'resources', 'settings.xml'))
|
|
||||||
|
|
||||||
__mediaclient_e__ = 'LD_PRELOAD=' + __ld_preload__ + ' ' + __mediaclient__ + ' -e'
|
|
||||||
|
|
||||||
# make backup settings only once
|
|
||||||
try:
|
|
||||||
with open(__settings_xml__ + '_orig') as f: pass
|
|
||||||
except IOError as e:
|
|
||||||
shutil.copyfile(__settings_xml__, __settings_xml__ + '_orig')
|
|
||||||
|
|
||||||
######################################################################################################
|
|
||||||
|
|
||||||
# get supported devices on a system (name, serial number, type)
|
|
||||||
tuners = []
|
|
||||||
p = os.popen(__mediaclient_e__, "r")
|
|
||||||
while 1:
|
|
||||||
line = p.readline()
|
|
||||||
if not line:
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
str = line.strip()
|
|
||||||
if str.startswith('device '):
|
|
||||||
name = str[str.find("[")+1:str.find("]")]
|
|
||||||
tuners.append([name, 0, 's'])
|
|
||||||
|
|
||||||
if str.startswith('[SERIAL]:'):
|
|
||||||
line = p.readline()
|
|
||||||
str = line.strip()
|
|
||||||
if str.startswith('ID:'):
|
|
||||||
id = str.split(':');
|
|
||||||
id = id[1].strip()
|
|
||||||
tuners[len(tuners)-1] = [name, id, 's']
|
|
||||||
|
|
||||||
if str.startswith('[DVB-C]:'):
|
|
||||||
tuners[len(tuners)-1] = [name, id, 'c']
|
|
||||||
elif str.startswith('[DVB-T]:'):
|
|
||||||
tuners[len(tuners)-1] = [name, id, 'c']
|
|
||||||
elif str.startswith('[DVB-T2]:'):
|
|
||||||
tuners[len(tuners)-1] = [name, id, 'c']
|
|
||||||
|
|
||||||
"""
|
|
||||||
root ~ # mediaclient -e
|
|
||||||
**** List of Media Hardware Devices ****
|
|
||||||
device 0: [Sundtek MediaTV Pro (USB 2.0)] DVB-C, DVB-T, ANALOG-TV, FM-RADIO, REMOTE-CONTROL, OSS-AUDIO, RDS
|
|
||||||
[BUS]:
|
|
||||||
ID: 1-7
|
|
||||||
[SERIAL]:
|
|
||||||
ID: U110714145205
|
|
||||||
[DVB-C]:
|
|
||||||
FRONTEND: /dev/dvb/adapter0/frontend0
|
|
||||||
DVR: /dev/dvb/adapter0/dvr0
|
|
||||||
DMX: /dev/dvb/adapter0/demux0
|
|
||||||
[DVB-T]:
|
|
||||||
FRONTEND: /dev/dvb/adapter0/frontend0
|
|
||||||
DVR: /dev/dvb/adapter0/dvr0
|
|
||||||
DMX: /dev/dvb/adapter0/demux0
|
|
||||||
[ANALOG-TV]:
|
|
||||||
VIDEO0: /dev/video0
|
|
||||||
VBI0: /dev/vbi0
|
|
||||||
[FM-RADIO]:
|
|
||||||
RADIO0: /dev/radio0
|
|
||||||
RDS: /dev/rds0
|
|
||||||
[REMOTECONTROL]:
|
|
||||||
INPUT0: /dev/mediainput0
|
|
||||||
[OSS]:
|
|
||||||
OSS0: /dev/dsp0
|
|
||||||
"""
|
|
||||||
|
|
||||||
######################################################################################################
|
|
||||||
|
|
||||||
xmldoc = minidom.parse(__settings_xml__)
|
|
||||||
category = xmldoc.getElementsByTagName('category')
|
|
||||||
|
|
||||||
# remove all nodes with id started with ATTACHED_TUNER_
|
|
||||||
for node_cat in category:
|
|
||||||
setting = node_cat.getElementsByTagName('setting')
|
|
||||||
for node_set in setting :
|
|
||||||
if 'id' in node_set.attributes.keys() and not node_set.getAttribute('id').find('ATTACHED_TUNER_'):
|
|
||||||
node_set.parentNode.removeChild(node_set)
|
|
||||||
|
|
||||||
# add new ATTACHED_TUNER_ nodes for available tuners
|
|
||||||
for node_cat in category:
|
|
||||||
setting = node_cat.getElementsByTagName('setting')
|
|
||||||
for node_set in setting :
|
|
||||||
if 'label' in node_set.attributes.keys() and '9010' in node_set.getAttribute('label'):
|
|
||||||
for ix, tuner in enumerate(tuners):
|
|
||||||
tuner_name = tuner[0]
|
|
||||||
tuner_serial = tuner[1]
|
|
||||||
tuner_type = tuner[2]
|
|
||||||
|
|
||||||
node1 = xmldoc.createElement("setting")
|
|
||||||
node1.setAttribute("id", 'ATTACHED_TUNER_' + tuner_serial + '_DVBMODE')
|
|
||||||
node1.setAttribute("label", tuner_name + ", " + tuner_serial)
|
|
||||||
node1.setAttribute("type", 'labelenum')
|
|
||||||
|
|
||||||
if (tuner_type == 's'):
|
|
||||||
node1.setAttribute("default", 'DVB-S')
|
|
||||||
node1.setAttribute("values", 'DVB-S')
|
|
||||||
else:
|
|
||||||
node1.setAttribute("default", 'DVB-C')
|
|
||||||
node1.setAttribute("values", 'DVB-C|DVB-T')
|
|
||||||
|
|
||||||
node_cat.appendChild(node1)
|
|
||||||
|
|
||||||
node2 = xmldoc.createElement("setting")
|
|
||||||
node2.setAttribute("id", 'ATTACHED_TUNER_' + tuner_serial + '_IRPROT')
|
|
||||||
node2.setAttribute("label", '9020')
|
|
||||||
node2.setAttribute("type", 'labelenum')
|
|
||||||
node2.setAttribute("default", 'auto')
|
|
||||||
node2.setAttribute("values", 'auto|RC5|NEC|RC6')
|
|
||||||
node_cat.appendChild(node2)
|
|
||||||
|
|
||||||
node3 = xmldoc.createElement("setting")
|
|
||||||
node3.setAttribute("id", 'ATTACHED_TUNER_' + tuner_serial + '_KEYMAP')
|
|
||||||
node3.setAttribute("label", '9030')
|
|
||||||
node3.setAttribute("type", 'text')
|
|
||||||
node3.setAttribute("default", 'rc_key_ok')
|
|
||||||
node_cat.appendChild(node3)
|
|
||||||
|
|
||||||
# for tuner
|
|
||||||
break
|
|
||||||
|
|
||||||
######################################################################################################
|
|
||||||
|
|
||||||
# save file back
|
|
||||||
try:
|
|
||||||
outputfile=open(__settings_xml__, 'w')
|
|
||||||
xmlpp.pprint(xmldoc.toxml(), output=outputfile, indent=2)
|
|
||||||
outputfile.close()
|
|
||||||
except IOError:
|
|
||||||
print 'Error writing file ', __settings_xml__
|
|
||||||
|
|
||||||
######################################################################################################
|
|
||||||
|
|
||||||
# dialog is closed already so just open settings again
|
|
||||||
xbmcaddon.Addon(id='driver.dvb.sundtek-mediatv').openSettings()
|
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# This file is part of OpenELEC - http://www.openelec.tv
|
# This file is part of OpenELEC - http://www.openelec.tv
|
||||||
# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv)
|
# Copyright (C) 2009-2013 Stephan Raue (stephan@openelec.tv)
|
||||||
#
|
#
|
||||||
# This Program is free software; you can redistribute it and/or modify
|
# 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
|
# it under the terms of the GNU General Public License as published by
|
||||||
@ -56,6 +56,9 @@ if [ ! -f "$ADDON_SETTINGS" ]; then
|
|||||||
cp $ADDON_DIR/settings-default.xml $ADDON_SETTINGS
|
cp $ADDON_DIR/settings-default.xml $ADDON_SETTINGS
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
[ ! -f $ADDON_HOME/rc_key_enter.map ] && mv $ADDON_HOME/rc_key_enter $ADDON_HOME/rc_key_enter.map
|
||||||
|
[ ! -f $ADDON_HOME/rc_key_ok.map ] && mv $ADDON_HOME/rc_key_ok $ADDON_HOME/rc_key_ok.map
|
||||||
|
|
||||||
mkdir -p /var/config
|
mkdir -p /var/config
|
||||||
cat "$ADDON_SETTINGS" | awk -F\" '{print $2"=\""$4"\""}' | sed '/^=/d' > /var/config/sundtek-addon.conf
|
cat "$ADDON_SETTINGS" | awk -F\" '{print $2"=\""$4"\""}' | sed '/^=/d' > /var/config/sundtek-addon.conf
|
||||||
. /var/config/sundtek-addon.conf
|
. /var/config/sundtek-addon.conf
|
||||||
@ -131,7 +134,7 @@ if [ ! -f $ADDON_HOME/driver-version.txt ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# enable to install same addon package version again
|
# enable to install same addon package version again
|
||||||
rm -f /storage/.xbmc/addons/packages/driver.dvb.sundtek*
|
#rm -f /storage/.xbmc/addons/packages/driver.dvb.sundtek*
|
||||||
|
|
||||||
# add alias for /opt/bin/mediaclient
|
# add alias for /opt/bin/mediaclient
|
||||||
alias_set="$(grep libmediaclient.so /storage/.profile 2>/dev/null)"
|
alias_set="$(grep libmediaclient.so /storage/.profile 2>/dev/null)"
|
||||||
@ -213,7 +216,7 @@ if [ -z "$(pidof mediasrv)" ]; then
|
|||||||
mv ${SUNDTEK_CONF_TMP}-net $SUNDTEK_CONF_TMP
|
mv ${SUNDTEK_CONF_TMP}-net $SUNDTEK_CONF_TMP
|
||||||
echo "" >>$SUNDTEK_CONF_TMP
|
echo "" >>$SUNDTEK_CONF_TMP
|
||||||
# remove empty lines at the end of file
|
# remove empty lines at the end of file
|
||||||
sed -i '${/^$/d;}' $SUNDTEK_CONF_TMP
|
sed -i -e ':a' -e '/^\n*$/{$d;N;};/\n$/ba' $SUNDTEK_CONF_TMP
|
||||||
# add entries
|
# add entries
|
||||||
echo -e "\n[NETWORK]" >>$SUNDTEK_CONF_TMP
|
echo -e "\n[NETWORK]" >>$SUNDTEK_CONF_TMP
|
||||||
for dev in $(seq 0 $DEVICE1_NUM); do
|
for dev in $(seq 0 $DEVICE1_NUM); do
|
||||||
@ -245,7 +248,7 @@ if [ -z "$(pidof mediasrv)" ]; then
|
|||||||
mv ${SUNDTEK_CONF_TMP}-net $SUNDTEK_CONF_TMP
|
mv ${SUNDTEK_CONF_TMP}-net $SUNDTEK_CONF_TMP
|
||||||
echo "" >>$SUNDTEK_CONF_TMP
|
echo "" >>$SUNDTEK_CONF_TMP
|
||||||
# remove empty lines at the end of file
|
# remove empty lines at the end of file
|
||||||
sed -i '${/^$/d;}' $SUNDTEK_CONF_TMP
|
sed -i -e ':a' -e '/^\n*$/{$d;N;};/\n$/ba' $SUNDTEK_CONF_TMP
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$ENABLE_TUNER_TYPES" = "true" ]; then
|
if [ "$ENABLE_TUNER_TYPES" = "true" ]; then
|
||||||
@ -267,15 +270,14 @@ if [ -z "$(pidof mediasrv)" ]; then
|
|||||||
|
|
||||||
[ "$IRPROT" = "NEC" -o "$IRPROT" = "auto" ] && IRPROT=""
|
[ "$IRPROT" = "NEC" -o "$IRPROT" = "auto" ] && IRPROT=""
|
||||||
|
|
||||||
KEYMAP_FILE="$ADDON_HOME/$KEYMAP"
|
[ ! -f $KEYMAP ] && KEYMAP=""
|
||||||
[ ! -f $KEYMAP_FILE ] && KEYMAP_FILE=""
|
|
||||||
|
|
||||||
# remove setttings for this tuner
|
# remove setttings for this tuner
|
||||||
awk -v val="[$SERIAL]" '$0 == val {flag=1; next} /^ir_protocol=|^rcmap=|^initial_dvb_mode=|^#|^$/{if (flag==1) next} /.*/{flag=0; print}' $SUNDTEK_CONF_TMP >${SUNDTEK_CONF_TMP}-types
|
awk -v val="[$SERIAL]" '$0 == val {flag=1; next} /^ir_protocol=|^rcmap=|^initial_dvb_mode=|^#|^$/{if (flag==1) next} /.*/{flag=0; print}' $SUNDTEK_CONF_TMP >${SUNDTEK_CONF_TMP}-types
|
||||||
mv ${SUNDTEK_CONF_TMP}-types $SUNDTEK_CONF_TMP
|
mv ${SUNDTEK_CONF_TMP}-types $SUNDTEK_CONF_TMP
|
||||||
echo "" >>$SUNDTEK_CONF_TMP
|
echo "" >>$SUNDTEK_CONF_TMP
|
||||||
# remove empty lines at the end of file
|
# remove empty lines at the end of file
|
||||||
sed -i '${/^$/d;}' $SUNDTEK_CONF_TMP
|
sed -i -e ':a' -e '/^\n*$/{$d;N;};/\n$/ba' $SUNDTEK_CONF_TMP
|
||||||
|
|
||||||
ADDNEW=true
|
ADDNEW=true
|
||||||
if [ -n "$DVBMODE" ]; then
|
if [ -n "$DVBMODE" ]; then
|
||||||
@ -286,9 +288,9 @@ if [ -z "$(pidof mediasrv)" ]; then
|
|||||||
[ $ADDNEW = true ] && ADDNEW=false && echo -e "\n[$SERIAL]" >>$SUNDTEK_CONF_TMP
|
[ $ADDNEW = true ] && ADDNEW=false && echo -e "\n[$SERIAL]" >>$SUNDTEK_CONF_TMP
|
||||||
echo "ir_protocol=$IRPROT" >>$SUNDTEK_CONF_TMP
|
echo "ir_protocol=$IRPROT" >>$SUNDTEK_CONF_TMP
|
||||||
fi
|
fi
|
||||||
if [ -n "$KEYMAP_FILE" ]; then
|
if [ -n "$KEYMAP" ]; then
|
||||||
[ $ADDNEW = true ] && ADDNEW=false && echo -e "\n[$SERIAL]" >>$SUNDTEK_CONF_TMP
|
[ $ADDNEW = true ] && ADDNEW=false && echo -e "\n[$SERIAL]" >>$SUNDTEK_CONF_TMP
|
||||||
echo "rcmap=$KEYMAP_FILE" >>$SUNDTEK_CONF_TMP
|
echo "rcmap=$KEYMAP" >>$SUNDTEK_CONF_TMP
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "" >>$SUNDTEK_CONF_TMP
|
echo "" >>$SUNDTEK_CONF_TMP
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
################################################################################
|
################################################################################
|
||||||
# This file is part of OpenELEC - http://www.openelec.tv
|
# This file is part of OpenELEC - http://www.openelec.tv
|
||||||
# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv)
|
# Copyright (C) 2009-2013 Stephan Raue (stephan@openelec.tv)
|
||||||
#
|
#
|
||||||
# This Program is free software; you can redistribute it and/or modify
|
# 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
|
# it under the terms of the GNU General Public License as published by
|
||||||
@ -21,3 +21,18 @@
|
|||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import xbmcaddon
|
import xbmcaddon
|
||||||
|
|
||||||
|
__settings__ = xbmcaddon.Addon(id = 'driver.dvb.sundtek-mediatv')
|
||||||
|
__cwd__ = __settings__.getAddonInfo('path')
|
||||||
|
__resources_lib__ = xbmc.translatePath(os.path.join(__cwd__, 'resources', 'lib'))
|
||||||
|
__settings_xml__ = xbmc.translatePath(os.path.join(__cwd__, 'resources', 'settings.xml'))
|
||||||
|
|
||||||
|
__mediaclient__ = xbmc.translatePath(os.path.join(__cwd__, 'bin', 'mediaclient'))
|
||||||
|
__ld_preload__ = xbmc.translatePath(os.path.join(__cwd__, 'lib', 'libmediaclient.so'))
|
||||||
|
__mediaclient_e__ = 'LD_PRELOAD=' + __ld_preload__ + ' ' + __mediaclient__ + ' -e'
|
||||||
|
|
||||||
|
if __name__ == "__main__" and len(sys.argv) == 2 and sys.argv[1] == 'refresh_tuners':
|
||||||
|
sys.path.append(__resources_lib__)
|
||||||
|
from functions import refresh_sundtek_tuners
|
||||||
|
refresh_sundtek_tuners(__settings_xml__, __mediaclient_e__)
|
||||||
|
__settings__.openSettings()
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
<string id="9000">Tuner settings</string>
|
<string id="9000">Tuner settings</string>
|
||||||
<string id="9005">Enable modifying settings</string>
|
<string id="9005">Enable modifying settings</string>
|
||||||
<string id="9010">Refresh...</string>
|
<string id="9010">Refresh tuners... (press me)</string>
|
||||||
<string id="9020"> IR protocol</string>
|
<string id="9020"> IR protocol</string>
|
||||||
<string id="9030"> keymap filename</string>
|
<string id="9030"> keymap filename</string>
|
||||||
</strings>
|
</strings>
|
||||||
|
@ -0,0 +1,272 @@
|
|||||||
|
################################################################################
|
||||||
|
# This file is part of OpenELEC - http://www.openelec.tv
|
||||||
|
# Copyright (C) 2009-2013 Stephan Raue (stephan@openelec.tv)
|
||||||
|
#
|
||||||
|
# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to
|
||||||
|
# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA.
|
||||||
|
# http://www.gnu.org/copyleft/gpl.html
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import shutil
|
||||||
|
import xmlpp
|
||||||
|
from xml.dom import minidom
|
||||||
|
|
||||||
|
__sundtek_userspace__ = '/storage/.xbmc/userdata/addon_data/driver.dvb.sundtek-mediatv/'
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
# backup setting.xml file only if backup doesn't exist
|
||||||
|
def settings_backup(settings_xml):
|
||||||
|
try:
|
||||||
|
with open(settings_xml + '_orig') as f: pass
|
||||||
|
except IOError as e:
|
||||||
|
shutil.copyfile(settings_xml, settings_xml + '_orig')
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
# restore setting.xml file from backup
|
||||||
|
def settings_restore(settings_xml):
|
||||||
|
try:
|
||||||
|
shutil.copyfile(settings_xml + '_orig', settings_xml)
|
||||||
|
except IOError as e:
|
||||||
|
print 'Error restoring file:', settings_xml
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
# get hdhomerun supported devices on a system (only name like 101ADD2B-0)
|
||||||
|
def get_devices_hdhomerun(hdhomerun_log):
|
||||||
|
tuners = []
|
||||||
|
try:
|
||||||
|
for line in open(hdhomerun_log, 'r'):
|
||||||
|
line = line.strip()
|
||||||
|
if line.startswith('Registered tuner'):
|
||||||
|
name = line.split(':');
|
||||||
|
name = name[2].strip()
|
||||||
|
tuners.append(name)
|
||||||
|
except IOError:
|
||||||
|
print 'Error reading hdhomerun log file', hdhomerun_log
|
||||||
|
return tuners
|
||||||
|
|
||||||
|
"""
|
||||||
|
root ~ # grep "Registered tuner" /var/log/dvbhdhomerun.log
|
||||||
|
Registered tuner, id from kernel: 0 name: 101ADD2B-0
|
||||||
|
Registered tuner, id from kernel: 1 name: 101ADD2B-1
|
||||||
|
Registered tuner, id from kernel: 2 name: 1031D75A-0
|
||||||
|
Registered tuner, id from kernel: 3 name: 1031D75A-1
|
||||||
|
"""
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
# get sundtek supported devices on a system (name, serial number, type)
|
||||||
|
def get_devices_sundtek(mediaclient_e):
|
||||||
|
tuners = []
|
||||||
|
try:
|
||||||
|
p = os.popen(mediaclient_e, "r")
|
||||||
|
while 1:
|
||||||
|
line = p.readline()
|
||||||
|
if not line:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
str = line.strip()
|
||||||
|
if str.startswith('device '):
|
||||||
|
name = str[str.find("[")+1:str.find("]")]
|
||||||
|
tuners.append([name, 0, 's'])
|
||||||
|
|
||||||
|
if str.startswith('[SERIAL]:'):
|
||||||
|
line = p.readline()
|
||||||
|
str = line.strip()
|
||||||
|
if str.startswith('ID:'):
|
||||||
|
id = str.split(':');
|
||||||
|
id = id[1].strip()
|
||||||
|
tuners[len(tuners)-1] = [name, id, 's']
|
||||||
|
|
||||||
|
if str.startswith('[DVB-C]:'):
|
||||||
|
tuners[len(tuners)-1] = [name, id, 'c']
|
||||||
|
elif str.startswith('[DVB-T]:'):
|
||||||
|
tuners[len(tuners)-1] = [name, id, 'c']
|
||||||
|
elif str.startswith('[DVB-T2]:'):
|
||||||
|
tuners[len(tuners)-1] = [name, id, 'c']
|
||||||
|
except IOError:
|
||||||
|
print 'Error getting sundtek tuners info'
|
||||||
|
return tuners
|
||||||
|
|
||||||
|
"""
|
||||||
|
root ~ # mediaclient -e
|
||||||
|
**** List of Media Hardware Devices ****
|
||||||
|
device 0: [Sundtek MediaTV Pro (USB 2.0)] DVB-C, DVB-T, ANALOG-TV, FM-RADIO, REMOTE-CONTROL, OSS-AUDIO, RDS
|
||||||
|
[BUS]:
|
||||||
|
ID: 1-7
|
||||||
|
[SERIAL]:
|
||||||
|
ID: U110763295205
|
||||||
|
[DVB-C]:
|
||||||
|
FRONTEND: /dev/dvb/adapter0/frontend0
|
||||||
|
DVR: /dev/dvb/adapter0/dvr0
|
||||||
|
DMX: /dev/dvb/adapter0/demux0
|
||||||
|
[DVB-T]:
|
||||||
|
FRONTEND: /dev/dvb/adapter0/frontend0
|
||||||
|
DVR: /dev/dvb/adapter0/dvr0
|
||||||
|
DMX: /dev/dvb/adapter0/demux0
|
||||||
|
[ANALOG-TV]:
|
||||||
|
VIDEO0: /dev/video0
|
||||||
|
VBI0: /dev/vbi0
|
||||||
|
[FM-RADIO]:
|
||||||
|
RADIO0: /dev/radio0
|
||||||
|
RDS: /dev/rds0
|
||||||
|
[REMOTECONTROL]:
|
||||||
|
INPUT0: /dev/mediainput0
|
||||||
|
[OSS]:
|
||||||
|
OSS0: /dev/dsp0
|
||||||
|
"""
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
# parse settings.xml file
|
||||||
|
def parse_settings(settings_xml):
|
||||||
|
try:
|
||||||
|
xmldoc = minidom.parse(settings_xml)
|
||||||
|
category = xmldoc.getElementsByTagName('category')
|
||||||
|
return xmldoc
|
||||||
|
except Exception as inst:
|
||||||
|
print 'Error parse settings file', settings_xml
|
||||||
|
return None
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
# remove all nodes with id started with ATTACHED_TUNER_
|
||||||
|
def remove_old_tuners(xmldoc):
|
||||||
|
category = xmldoc.getElementsByTagName('category')
|
||||||
|
for node_cat in category:
|
||||||
|
setting = node_cat.getElementsByTagName('setting')
|
||||||
|
for node_set in setting :
|
||||||
|
if 'id' in node_set.attributes.keys() and not node_set.getAttribute('id').find('ATTACHED_TUNER_'):
|
||||||
|
node_set.parentNode.removeChild(node_set)
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
# add new hdhomerun tuners
|
||||||
|
def add_hdhomerun(xmldoc, node_cat, tuners):
|
||||||
|
for ix, tuner in enumerate(tuners):
|
||||||
|
tuner_var = tuner.replace('-', '_')
|
||||||
|
|
||||||
|
node1 = xmldoc.createElement("setting")
|
||||||
|
node1.setAttribute("id", 'ATTACHED_TUNER_' + tuner_var + '_DVBMODE')
|
||||||
|
node1.setAttribute("label", tuner)
|
||||||
|
node1.setAttribute("type", 'labelenum')
|
||||||
|
node1.setAttribute("default", 'auto')
|
||||||
|
node1.setAttribute("values", 'auto|ATSC|DVB-C|DVB-T')
|
||||||
|
node_cat.appendChild(node1)
|
||||||
|
|
||||||
|
node2 = xmldoc.createElement("setting")
|
||||||
|
node2.setAttribute("id", 'ATTACHED_TUNER_' + tuner_var + '_FULLNAME')
|
||||||
|
node2.setAttribute("label", '9020')
|
||||||
|
node2.setAttribute("type", 'bool')
|
||||||
|
node2.setAttribute("default", 'false')
|
||||||
|
node_cat.appendChild(node2)
|
||||||
|
|
||||||
|
node3 = xmldoc.createElement("setting")
|
||||||
|
node3.setAttribute("id", 'ATTACHED_TUNER_' + tuner_var + '_DISABLE')
|
||||||
|
node3.setAttribute("label", '9030')
|
||||||
|
node3.setAttribute("type", 'bool')
|
||||||
|
node3.setAttribute("default", 'false')
|
||||||
|
node_cat.appendChild(node3)
|
||||||
|
|
||||||
|
# for tuner
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
# add new sundtek tuners
|
||||||
|
def add_sundtek(xmldoc, node_cat, tuners):
|
||||||
|
for ix, tuner in enumerate(tuners):
|
||||||
|
tuner_name = tuner[0]
|
||||||
|
tuner_serial = tuner[1]
|
||||||
|
tuner_type = tuner[2]
|
||||||
|
|
||||||
|
node1 = xmldoc.createElement("setting")
|
||||||
|
node1.setAttribute("id", 'ATTACHED_TUNER_' + tuner_serial + '_DVBMODE')
|
||||||
|
node1.setAttribute("label", tuner_name + ", " + tuner_serial)
|
||||||
|
node1.setAttribute("type", 'labelenum')
|
||||||
|
|
||||||
|
if (tuner_type == 's'):
|
||||||
|
node1.setAttribute("default", 'DVB-S')
|
||||||
|
node1.setAttribute("values", 'DVB-S')
|
||||||
|
else:
|
||||||
|
node1.setAttribute("default", 'DVB-C')
|
||||||
|
node1.setAttribute("values", 'DVB-C|DVB-T')
|
||||||
|
|
||||||
|
node_cat.appendChild(node1)
|
||||||
|
|
||||||
|
node2 = xmldoc.createElement("setting")
|
||||||
|
node2.setAttribute("id", 'ATTACHED_TUNER_' + tuner_serial + '_IRPROT')
|
||||||
|
node2.setAttribute("label", '9020')
|
||||||
|
node2.setAttribute("type", 'labelenum')
|
||||||
|
node2.setAttribute("default", 'auto')
|
||||||
|
node2.setAttribute("values", 'auto|RC5|NEC|RC6')
|
||||||
|
node_cat.appendChild(node2)
|
||||||
|
|
||||||
|
node3 = xmldoc.createElement("setting")
|
||||||
|
node3.setAttribute("id", 'ATTACHED_TUNER_' + tuner_serial + '_KEYMAP')
|
||||||
|
node3.setAttribute("label", '9030')
|
||||||
|
node3.setAttribute("type", 'file')
|
||||||
|
node3.setAttribute("mask", '*.map')
|
||||||
|
node3.setAttribute("default", __sundtek_userspace__)
|
||||||
|
node_cat.appendChild(node3)
|
||||||
|
|
||||||
|
# for tuner
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
# add new ATTACHED_TUNER_ nodes for available tuners
|
||||||
|
def add_new_tuners(xmldoc, tuners, which):
|
||||||
|
category = xmldoc.getElementsByTagName('category')
|
||||||
|
for node_cat in category:
|
||||||
|
setting = node_cat.getElementsByTagName('setting')
|
||||||
|
for node_set in setting :
|
||||||
|
if 'label' in node_set.attributes.keys() and '9010' in node_set.getAttribute('label'):
|
||||||
|
if which == 'hdhomerun':
|
||||||
|
add_hdhomerun(xmldoc, node_cat, tuners)
|
||||||
|
break
|
||||||
|
elif which == 'sundtek':
|
||||||
|
add_sundtek(xmldoc, node_cat, tuners)
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
# save settings.xml file back
|
||||||
|
def save_settings(settings_xml, xmldoc):
|
||||||
|
try:
|
||||||
|
outputfile = open(settings_xml, 'w')
|
||||||
|
xmlpp.pprint(xmldoc.toxml(), output = outputfile, indent=2)
|
||||||
|
outputfile.close()
|
||||||
|
except IOError:
|
||||||
|
print 'Error saving file:', settings_xml
|
||||||
|
settings_restore(settings_xml)
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
# refresh hdhomerun tuners in settings.xml file
|
||||||
|
def refresh_hdhomerun_tuners(settings_xml, hdhomerun_log):
|
||||||
|
settings_backup(settings_xml)
|
||||||
|
tuners = get_devices_hdhomerun(hdhomerun_log)
|
||||||
|
xmldoc = parse_settings(settings_xml)
|
||||||
|
if xmldoc == None:
|
||||||
|
print 'No hdhomerun tuners found'
|
||||||
|
else:
|
||||||
|
remove_old_tuners(xmldoc)
|
||||||
|
add_new_tuners(xmldoc, tuners, 'hdhomerun')
|
||||||
|
save_settings(settings_xml, xmldoc)
|
||||||
|
|
||||||
|
######################################################################################################
|
||||||
|
# refresh sundtek tuners in settings.xml file
|
||||||
|
def refresh_sundtek_tuners(settings_xml, mediaclient_e):
|
||||||
|
settings_backup(settings_xml)
|
||||||
|
tuners = get_devices_sundtek(mediaclient_e)
|
||||||
|
xmldoc = parse_settings(settings_xml)
|
||||||
|
if xmldoc == None:
|
||||||
|
print 'No sundtek tuners found'
|
||||||
|
else:
|
||||||
|
remove_old_tuners(xmldoc)
|
||||||
|
add_new_tuners(xmldoc, tuners, 'sundtek')
|
||||||
|
save_settings(settings_xml, xmldoc)
|
@ -28,6 +28,6 @@
|
|||||||
<category label="9000">
|
<category label="9000">
|
||||||
<setting type="sep" />
|
<setting type="sep" />
|
||||||
<setting id="ENABLE_TUNER_TYPES" type="bool" label="9005" default="true" />
|
<setting id="ENABLE_TUNER_TYPES" type="bool" label="9005" default="true" />
|
||||||
<setting label="9010" option="close" type="action" action="RunScript(/storage/.xbmc/addons/driver.dvb.sundtek-mediatv/bin/refresh-tuners.py, false)" />
|
<setting label="9010" option="close" type="action" action="RunScript($ID, refresh_tuners)" />
|
||||||
</category>
|
</category>
|
||||||
</settings>
|
</settings>
|
||||||
|
@ -36,6 +36,7 @@ cmake -DCMAKE_TOOLCHAIN_FILE=$CMAKE_CONF \
|
|||||||
-DWEBIF=1 \
|
-DWEBIF=1 \
|
||||||
-DWITH_DEBUG=0 \
|
-DWITH_DEBUG=0 \
|
||||||
-DOPTIONAL_INCLUDE_DIR=$SYSROOT_PREFIX/usr/include \
|
-DOPTIONAL_INCLUDE_DIR=$SYSROOT_PREFIX/usr/include \
|
||||||
|
-DSTATIC_LIBUSB=1 \
|
||||||
..
|
..
|
||||||
|
|
||||||
make
|
make
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
3.0.9
|
||||||
|
- update to oscam-8568
|
||||||
|
|
||||||
3.0.8
|
3.0.8
|
||||||
- update to oscam-8469
|
- update to oscam-8469
|
||||||
- update to pcsc-lite-1.8.8
|
- update to pcsc-lite-1.8.8
|
||||||
|
@ -20,8 +20,8 @@
|
|||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
PKG_NAME="oscam"
|
PKG_NAME="oscam"
|
||||||
PKG_VERSION="8469"
|
PKG_VERSION="8568"
|
||||||
PKG_REV="8"
|
PKG_REV="9"
|
||||||
PKG_ARCH="any"
|
PKG_ARCH="any"
|
||||||
PKG_LICENSE="GPL"
|
PKG_LICENSE="GPL"
|
||||||
PKG_SITE="http://www.streamboard.tv/oscam/wiki"
|
PKG_SITE="http://www.streamboard.tv/oscam/wiki"
|
||||||
@ -32,6 +32,7 @@ PKG_PRIORITY="optional"
|
|||||||
PKG_SECTION="service/softcam"
|
PKG_SECTION="service/softcam"
|
||||||
PKG_SHORTDESC="oscam: OSCam is Open Source Conditional Access Modul."
|
PKG_SHORTDESC="oscam: OSCam is Open Source Conditional Access Modul."
|
||||||
PKG_LONGDESC="OSCam is Open Source Conditional Access Modul."
|
PKG_LONGDESC="OSCam is Open Source Conditional Access Modul."
|
||||||
|
PKG_DISCLAIMER="using oscam may be illegal in your country. if in doubt, do not install"
|
||||||
|
|
||||||
PKG_IS_ADDON="yes"
|
PKG_IS_ADDON="yes"
|
||||||
PKG_ADDON_TYPE="xbmc.service"
|
PKG_ADDON_TYPE="xbmc.service"
|
||||||
|
25
packages/mediacenter/xbmc/patches/xbmc-990.13-PR2488.patch
Normal file
25
packages/mediacenter/xbmc/patches/xbmc-990.13-PR2488.patch
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
From befdcfad8d2b14c9d935c3662a56853d617f884d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Voyager1 <voyager@xbmc.org>
|
||||||
|
Date: Sat, 23 Mar 2013 07:19:46 +0100
|
||||||
|
Subject: [PATCH] [dvdplayer] fix deadlock when trying to go to disc menu
|
||||||
|
|
||||||
|
---
|
||||||
|
xbmc/cores/dvdplayer/DVDPlayer.cpp | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp
|
||||||
|
index 3d2ca03..22c89dc 100644
|
||||||
|
--- a/xbmc/cores/dvdplayer/DVDPlayer.cpp
|
||||||
|
+++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp
|
||||||
|
@@ -3511,7 +3511,7 @@ bool CDVDPlayer::OnAction(const CAction &action)
|
||||||
|
pMenus->OnMenu();
|
||||||
|
// send a message to everyone that we've gone to the menu
|
||||||
|
CGUIMessage msg(GUI_MSG_VIDEO_MENU_STARTED, 0, 0);
|
||||||
|
- g_windowManager.SendMessage(msg);
|
||||||
|
+ g_windowManager.SendThreadMessage(msg);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
--
|
||||||
|
1.8.1.5
|
||||||
|
|
@ -0,0 +1,76 @@
|
|||||||
|
From e1374217a66d1324f3482f6567448f0bc7ef2946 Mon Sep 17 00:00:00 2001
|
||||||
|
From: spiff <spiff@xbmc.org>
|
||||||
|
Date: Thu, 21 Mar 2013 14:40:52 +0100
|
||||||
|
Subject: [PATCH] fixed: prevent infinite loop in add-on dependency checks
|
||||||
|
|
||||||
|
---
|
||||||
|
xbmc/addons/AddonInstaller.cpp | 21 ++++++++++++++-------
|
||||||
|
xbmc/addons/AddonInstaller.h | 10 ++++++++++
|
||||||
|
2 files changed, 24 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/xbmc/addons/AddonInstaller.cpp b/xbmc/addons/AddonInstaller.cpp
|
||||||
|
index b5ba7a0..3e655bb 100644
|
||||||
|
--- a/xbmc/addons/AddonInstaller.cpp
|
||||||
|
+++ b/xbmc/addons/AddonInstaller.cpp
|
||||||
|
@@ -313,6 +313,14 @@ void CAddonInstaller::InstallFromXBMCRepo(const set<CStdString> &addonIDs)
|
||||||
|
|
||||||
|
bool CAddonInstaller::CheckDependencies(const AddonPtr &addon)
|
||||||
|
{
|
||||||
|
+ std::vector<std::string> preDeps;
|
||||||
|
+ preDeps.push_back(addon->ID());
|
||||||
|
+ return CheckDependencies(addon, preDeps);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+bool CAddonInstaller::CheckDependencies(const AddonPtr &addon,
|
||||||
|
+ std::vector<std::string>& preDeps)
|
||||||
|
+{
|
||||||
|
if (!addon.get())
|
||||||
|
return true; // a NULL addon has no dependencies
|
||||||
|
ADDONDEPS deps = addon->GetDeps();
|
||||||
|
@@ -333,16 +341,15 @@ bool CAddonInstaller::CheckDependencies(const AddonPtr &addon)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- // prevent infinite loops
|
||||||
|
- if (dep && dep->ID() == addon->ID())
|
||||||
|
- {
|
||||||
|
- CLog::Log(LOGERROR, "Addon %s depends on itself, ignoring", addon->ID().c_str());
|
||||||
|
- return false;
|
||||||
|
- }
|
||||||
|
// at this point we have our dep, or the dep is optional (and we don't have it) so check that it's OK as well
|
||||||
|
// TODO: should we assume that installed deps are OK?
|
||||||
|
- if (dep && !CheckDependencies(dep))
|
||||||
|
+ if (dep &&
|
||||||
|
+ std::find(preDeps.begin(), preDeps.end(), dep->ID()) == preDeps.end() &&
|
||||||
|
+ !CheckDependencies(dep, preDeps))
|
||||||
|
+ {
|
||||||
|
return false;
|
||||||
|
+ }
|
||||||
|
+ preDeps.push_back(dep->ID());
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
diff --git a/xbmc/addons/AddonInstaller.h b/xbmc/addons/AddonInstaller.h
|
||||||
|
index b0ff2bd..5df69fb 100644
|
||||||
|
--- a/xbmc/addons/AddonInstaller.h
|
||||||
|
+++ b/xbmc/addons/AddonInstaller.h
|
||||||
|
@@ -122,6 +122,16 @@ class CAddonInstaller : public IJobCallback
|
||||||
|
*/
|
||||||
|
bool DoInstall(const ADDON::AddonPtr &addon, const CStdString &hash = "", bool update = false, const CStdString &referer = "", bool background = true);
|
||||||
|
|
||||||
|
+ /*! \brief Check whether dependencies of an addon exist or are installable.
|
||||||
|
+ Iterates through the addon's dependencies, checking they're installed or installable.
|
||||||
|
+ Each dependency must also satisfies CheckDependencies in turn.
|
||||||
|
+ \param addon the addon to check
|
||||||
|
+ \param preDeps previous dependencies encountered during recursion. aids in avoiding infinite recursion
|
||||||
|
+ \return true if dependencies are available, false otherwise.
|
||||||
|
+ */
|
||||||
|
+ bool CheckDependencies(const ADDON::AddonPtr &addon,
|
||||||
|
+ std::vector<std::string>& preDeps);
|
||||||
|
+
|
||||||
|
void PrunePackageCache();
|
||||||
|
int64_t EnumeratePackageFolder(std::map<CStdString,CFileItemList*>& result);
|
||||||
|
|
||||||
|
--
|
||||||
|
1.8.1.5
|
||||||
|
|
@ -0,0 +1,37 @@
|
|||||||
|
From b5458130ba00c15ef468d6180a21994bff3daf42 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Voyager1 <voyager@xbmc.org>
|
||||||
|
Date: Sat, 23 Mar 2013 07:32:09 +0100
|
||||||
|
Subject: [PATCH] fixed: addoninstaller unguarded null pointer after
|
||||||
|
b0825b1a212849e52fca27409ea87e81591f7cf4
|
||||||
|
|
||||||
|
---
|
||||||
|
xbmc/addons/AddonInstaller.cpp | 11 ++++++-----
|
||||||
|
1 file changed, 6 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/xbmc/addons/AddonInstaller.cpp b/xbmc/addons/AddonInstaller.cpp
|
||||||
|
index 3e655bb..276467a 100644
|
||||||
|
--- a/xbmc/addons/AddonInstaller.cpp
|
||||||
|
+++ b/xbmc/addons/AddonInstaller.cpp
|
||||||
|
@@ -343,13 +343,14 @@ bool CAddonInstaller::CheckDependencies(const AddonPtr &addon,
|
||||||
|
}
|
||||||
|
// at this point we have our dep, or the dep is optional (and we don't have it) so check that it's OK as well
|
||||||
|
// TODO: should we assume that installed deps are OK?
|
||||||
|
- if (dep &&
|
||||||
|
- std::find(preDeps.begin(), preDeps.end(), dep->ID()) == preDeps.end() &&
|
||||||
|
- !CheckDependencies(dep, preDeps))
|
||||||
|
+ if (dep)
|
||||||
|
{
|
||||||
|
- return false;
|
||||||
|
+ if (std::find(preDeps.begin(), preDeps.end(), dep->ID()) == preDeps.end() &&
|
||||||
|
+ !CheckDependencies(dep, preDeps))
|
||||||
|
+ return false;
|
||||||
|
+ else
|
||||||
|
+ preDeps.push_back(dep->ID());
|
||||||
|
}
|
||||||
|
- preDeps.push_back(dep->ID());
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
1.8.1.5
|
||||||
|
|
@ -0,0 +1,33 @@
|
|||||||
|
From cc39b66b38657787e99bf6369a77c993cd601c23 Mon Sep 17 00:00:00 2001
|
||||||
|
From: ulion <ulion2002@gmail.com>
|
||||||
|
Date: Sun, 24 Mar 2013 08:05:04 +0800
|
||||||
|
Subject: [PATCH] Only add to preDeps when it's not in there.
|
||||||
|
|
||||||
|
---
|
||||||
|
xbmc/addons/AddonInstaller.cpp | 8 +++-----
|
||||||
|
1 file changed, 3 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/xbmc/addons/AddonInstaller.cpp b/xbmc/addons/AddonInstaller.cpp
|
||||||
|
index 276467a..631a01c 100644
|
||||||
|
--- a/xbmc/addons/AddonInstaller.cpp
|
||||||
|
+++ b/xbmc/addons/AddonInstaller.cpp
|
||||||
|
@@ -343,13 +343,11 @@ bool CAddonInstaller::CheckDependencies(const AddonPtr &addon,
|
||||||
|
}
|
||||||
|
// at this point we have our dep, or the dep is optional (and we don't have it) so check that it's OK as well
|
||||||
|
// TODO: should we assume that installed deps are OK?
|
||||||
|
- if (dep)
|
||||||
|
+ if (dep && std::find(preDeps.begin(), preDeps.end(), dep->ID()) == preDeps.end())
|
||||||
|
{
|
||||||
|
- if (std::find(preDeps.begin(), preDeps.end(), dep->ID()) == preDeps.end() &&
|
||||||
|
- !CheckDependencies(dep, preDeps))
|
||||||
|
+ if (!CheckDependencies(dep, preDeps))
|
||||||
|
return false;
|
||||||
|
- else
|
||||||
|
- preDeps.push_back(dep->ID());
|
||||||
|
+ preDeps.push_back(dep->ID());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
--
|
||||||
|
1.8.1.5
|
||||||
|
|
@ -19,7 +19,7 @@
|
|||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
PKG_NAME="openssh"
|
PKG_NAME="openssh"
|
||||||
PKG_VERSION="6.1p1"
|
PKG_VERSION="6.2p1"
|
||||||
PKG_REV="1"
|
PKG_REV="1"
|
||||||
PKG_ARCH="any"
|
PKG_ARCH="any"
|
||||||
PKG_LICENSE="OSS"
|
PKG_LICENSE="OSS"
|
||||||
|
@ -0,0 +1,14 @@
|
|||||||
|
diff --git a/sshconnect2.c b/sshconnect2.c
|
||||||
|
index d6af0b9..22c0aa6 100644
|
||||||
|
--- a/sshconnect2.c
|
||||||
|
+++ b/sshconnect2.c
|
||||||
|
@@ -1320,8 +1320,7 @@ load_identity_file(char *filename, int userprovided)
|
||||||
|
struct stat st;
|
||||||
|
|
||||||
|
if (stat(filename, &st) < 0) {
|
||||||
|
- (userprovided ? logit : debug3)("no such identity: %s: %s",
|
||||||
|
- filename, strerror(errno));
|
||||||
|
+ debug3("no such identity: %s", filename);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
private = key_load_private_type(KEY_UNSPEC, filename, "", NULL, &perm_ok);
|
@ -4,6 +4,8 @@
|
|||||||
# Enables use of MCE Remote, Apple MacMini and XBOX remote.
|
# Enables use of MCE Remote, Apple MacMini and XBOX remote.
|
||||||
# Should work with any generic receiver
|
# Should work with any generic receiver
|
||||||
#
|
#
|
||||||
|
# contributed by jenkins101
|
||||||
|
#
|
||||||
########
|
########
|
||||||
#
|
#
|
||||||
# brand: HP/Philips/Microsoft/Other
|
# brand: HP/Philips/Microsoft/Other
|
||||||
@ -281,3 +283,160 @@ begin remote
|
|||||||
|
|
||||||
end remote
|
end remote
|
||||||
|
|
||||||
|
# Please make this file available to others
|
||||||
|
# by sending it to <lirc@bartelmus.de>
|
||||||
|
#
|
||||||
|
# this config file was automatically generated
|
||||||
|
# using lirc-0.9.0-pre1(default) on Sat Feb 23 12:47:57 2013
|
||||||
|
#
|
||||||
|
# contributed by DynaMight
|
||||||
|
#
|
||||||
|
# brand: Xbox 360 remote
|
||||||
|
# model no. of remote control:
|
||||||
|
# devices being controlled by this remote:
|
||||||
|
#
|
||||||
|
|
||||||
|
begin remote
|
||||||
|
|
||||||
|
name Xbox 360 Remote
|
||||||
|
bits 13
|
||||||
|
flags RC6|CONST_LENGTH
|
||||||
|
eps 30
|
||||||
|
aeps 100
|
||||||
|
|
||||||
|
header 2685 886
|
||||||
|
one 457 433
|
||||||
|
zero 457 433
|
||||||
|
pre_data_bits 24
|
||||||
|
pre_data 0x1BFF80
|
||||||
|
gap 107197
|
||||||
|
min_repeat 4
|
||||||
|
suppress_repeat 4
|
||||||
|
# uncomment to suppress unwanted repeats
|
||||||
|
toggle_bit_mask 0x8000
|
||||||
|
rc6_mask 0x100000000
|
||||||
|
|
||||||
|
begin codes
|
||||||
|
KEY_STOP 0x0BE6
|
||||||
|
KEY_PLAY 0x0BE9
|
||||||
|
KEY_VOLUMEDOWN 0x0BEE
|
||||||
|
KEY_VOLUMEUP 0x0BEF
|
||||||
|
KEY_MUTE 0x0BF1
|
||||||
|
KEY_0 0x0BFF
|
||||||
|
KEY_1 0x0BFE
|
||||||
|
KEY_2 0x0BFD
|
||||||
|
KEY_3 0x0BFC
|
||||||
|
KEY_4 0x0BFB
|
||||||
|
KEY_5 0x0BFA
|
||||||
|
KEY_6 0x0BF9
|
||||||
|
KEY_7 0x0BF8
|
||||||
|
KEY_8 0x0BF7
|
||||||
|
KEY_9 0x0BF6
|
||||||
|
KEY_MENU 0x0BDB
|
||||||
|
KEY_YELLOW 0x0BD9
|
||||||
|
KEY_BLUE 0x0B97
|
||||||
|
KEY_GREEN 0x0B99
|
||||||
|
KEY_RED 0x0BDA
|
||||||
|
KEY_REWIND 0x0BEA
|
||||||
|
KEY_PLAYPAUSE 0x0BE9
|
||||||
|
KEY_FASTFORWARD 0x0BEB
|
||||||
|
KEY_BACK 0x0BDC
|
||||||
|
KEY_TITLE 0x0BAE
|
||||||
|
KEY_STOP 0x0BE6
|
||||||
|
KEY_INFO 0x0BF0
|
||||||
|
KEY_UP 0x0BE1
|
||||||
|
KEY_DOWN 0x0BE0
|
||||||
|
KEY_LEFT 0x0BDF
|
||||||
|
KEY_RIGHT 0x0BDE
|
||||||
|
KEY_OK 0x0BDD
|
||||||
|
KEY_POWER 0x0BF3
|
||||||
|
KEY_PAGEUP 0x0B93
|
||||||
|
KEY_PAGEDOWN 0x0B92
|
||||||
|
KEY_ENTER 0x0BF4
|
||||||
|
KEY_RECORD 0x0BE8
|
||||||
|
KEY_CLEAR 0x0BF5
|
||||||
|
KEY_NEXTSONG 0x0BE5
|
||||||
|
KEY_PREVIOUSSONG 0x0BE4
|
||||||
|
KEY_DISPLAYTOGGLE 0x0BB0
|
||||||
|
KEY_PAUSE 0x037FF00BE7
|
||||||
|
end codes
|
||||||
|
|
||||||
|
end remote
|
||||||
|
|
||||||
|
# this config file was manually generated
|
||||||
|
# using WinLIRC 0.6.5 (LIRC 0.6.1pre3) on Wed Feb 28 11:27:58 2007
|
||||||
|
#
|
||||||
|
# contributed by Luca Cristoforetti
|
||||||
|
#
|
||||||
|
# brand: Dream Multimedia Dreambox 7025
|
||||||
|
# model: URC-39930RJ0-03
|
||||||
|
# devices being controlled by this remote:
|
||||||
|
# This is a remote with an option of a universal
|
||||||
|
# TV. Use TV CODE: 0680
|
||||||
|
#
|
||||||
|
# (press TV, hold down shift until you got
|
||||||
|
# 2 blinks, enter the code and you get 2
|
||||||
|
# flashes for confirmation)
|
||||||
|
#
|
||||||
|
|
||||||
|
begin remote
|
||||||
|
|
||||||
|
name Dream_Multimedia_URC-39930
|
||||||
|
bits 24
|
||||||
|
flags SPACE_ENC
|
||||||
|
eps 25
|
||||||
|
aeps 100
|
||||||
|
|
||||||
|
header 3488 1710
|
||||||
|
one 426 415
|
||||||
|
zero 426 1287
|
||||||
|
ptrail 426
|
||||||
|
pre_data_bits 24
|
||||||
|
pre_data 0xBFFBFE
|
||||||
|
gap 73939
|
||||||
|
min_repeat 4
|
||||||
|
suppress_repeat 4
|
||||||
|
# uncomment to suppress unwanted repeats
|
||||||
|
toggle_bit 0
|
||||||
|
|
||||||
|
|
||||||
|
begin codes
|
||||||
|
KEY_POWER 0x0000000000FF4342
|
||||||
|
KEY_1 0x0000000000FFF7F6
|
||||||
|
KEY_2 0x0000000000FF7776
|
||||||
|
KEY_3 0x0000000000FFB7B6
|
||||||
|
KEY_4 0x0000000000FF3736
|
||||||
|
KEY_5 0x0000000000FFD7D6
|
||||||
|
KEY_6 0x0000000000FF5756
|
||||||
|
KEY_7 0x0000000000FF9796
|
||||||
|
KEY_8 0x0000000000FF1716
|
||||||
|
KEY_9 0x0000000000FFE7E6
|
||||||
|
KEY_0 0x0000000000FF6766
|
||||||
|
< 0x0000000000FF5F5E
|
||||||
|
> 0x0000000000FF2322
|
||||||
|
KEY_VOLUMEUP 0x0000000000FFFBFA
|
||||||
|
KEY_VOLUMEDOWN 0x0000000000FF7B7A
|
||||||
|
KEY_MUTE 0x0000000000FFB3B2
|
||||||
|
KEY_EXIT 0x0000000000DF84A5
|
||||||
|
KEY_CHANNELUP 0x0000000000FFD3D2
|
||||||
|
KEY_CHANNELDOWN 0x0000000000FF5352
|
||||||
|
KEY_INFO 0x0000000000FF6362
|
||||||
|
KEY_UP 0x0000000000FFADAC
|
||||||
|
KEY_LEFT 0x0000000000FF8D8C
|
||||||
|
KEY_RIGHT 0x0000000000FF0D0C
|
||||||
|
KEY_DOWN 0x0000000000FF2D2C
|
||||||
|
KEY_OK 0x0000000000FF6D6C
|
||||||
|
KEY_MENU 0x0000000000FF1E1F
|
||||||
|
KEY_AUDIO 0x0000000000FF3435
|
||||||
|
KEY_VIDEO 0x0000000000FF1312
|
||||||
|
KEY_BACKSPACE 0x0000000000FFF1F0
|
||||||
|
KEY_PLAY 0x0000000000FF7170
|
||||||
|
KEY_PAUSE 0x0000000000FFB1B0
|
||||||
|
KEY_FORWARD 0x0000000000FF3130
|
||||||
|
KEY_STOP 0x00000000007F6FEE
|
||||||
|
KEY_RADIO 0x0000000000FFB5B4
|
||||||
|
KEY_TEXT 0x00000000007F3FBE
|
||||||
|
KEY_TITLE 0x00000000007FBF3E
|
||||||
|
end codes
|
||||||
|
|
||||||
|
end remote
|
||||||
|
@ -60,4 +60,80 @@ begin remote
|
|||||||
|
|
||||||
end remote
|
end remote
|
||||||
|
|
||||||
|
# Please make this file available to others
|
||||||
|
# by sending it to <lirc@bartelmus.de>
|
||||||
|
#
|
||||||
|
# this config file was automatically generated
|
||||||
|
# using lirc-0.9.0-pre1(default) on Sat Feb 23 12:47:57 2013
|
||||||
|
#
|
||||||
|
# contributed by DynaMight
|
||||||
|
#
|
||||||
|
# brand: Xbox 360 remote (White) /home/pi/lircd.conf
|
||||||
|
# model no. of remote control:
|
||||||
|
# devices being controlled by this remote:
|
||||||
|
#
|
||||||
|
|
||||||
|
begin remote
|
||||||
|
|
||||||
|
name Xbox 360 Remote
|
||||||
|
bits 13
|
||||||
|
flags RC6|CONST_LENGTH
|
||||||
|
eps 30
|
||||||
|
aeps 100
|
||||||
|
|
||||||
|
header 2685 886
|
||||||
|
one 457 433
|
||||||
|
zero 457 433
|
||||||
|
pre_data_bits 24
|
||||||
|
pre_data 0x1BFF80
|
||||||
|
gap 107197
|
||||||
|
toggle_bit_mask 0x8000
|
||||||
|
rc6_mask 0x100000000
|
||||||
|
|
||||||
|
begin codes
|
||||||
|
KEY_STOP 0x0BE6
|
||||||
|
KEY_PLAY 0x0BE9
|
||||||
|
KEY_VOLUMEDOWN 0x0BEE
|
||||||
|
KEY_VOLUMEUP 0x0BEF
|
||||||
|
KEY_MUTE 0x0BF1
|
||||||
|
KEY_0 0x0BFF
|
||||||
|
KEY_1 0x0BFE
|
||||||
|
KEY_2 0x0BFD
|
||||||
|
KEY_3 0x0BFC
|
||||||
|
KEY_4 0x0BFB
|
||||||
|
KEY_5 0x0BFA
|
||||||
|
KEY_6 0x0BF9
|
||||||
|
KEY_7 0x0BF8
|
||||||
|
KEY_8 0x0BF7
|
||||||
|
KEY_9 0x0BF6
|
||||||
|
KEY_MENU 0x0BDB
|
||||||
|
KEY_YELLOW 0x0BD9
|
||||||
|
KEY_BLUE 0x0B97
|
||||||
|
KEY_GREEN 0x0B99
|
||||||
|
KEY_RED 0x0BDA
|
||||||
|
KEY_REWIND 0x0BEA
|
||||||
|
KEY_PLAYPAUSE 0x0BE9
|
||||||
|
KEY_FASTFORWARD 0x0BEB
|
||||||
|
KEY_BACK 0x0BDC
|
||||||
|
KEY_TITLE 0x0BAE
|
||||||
|
KEY_STOP 0x0BE6
|
||||||
|
KEY_INFO 0x0BF0
|
||||||
|
KEY_UP 0x0BE1
|
||||||
|
KEY_DOWN 0x0BE0
|
||||||
|
KEY_LEFT 0x0BDF
|
||||||
|
KEY_RIGHT 0x0BDE
|
||||||
|
KEY_OK 0x0BDD
|
||||||
|
KEY_POWER 0x0BF3
|
||||||
|
KEY_PAGEUP 0x0B93
|
||||||
|
KEY_PAGEDOWN 0x0B92
|
||||||
|
KEY_ENTER 0x0BF4
|
||||||
|
KEY_RECORD 0x0BE8
|
||||||
|
KEY_CLEAR 0x0BF5
|
||||||
|
KEY_NEXTSONG 0x0BE5
|
||||||
|
KEY_PREVIOUSSONG 0x0BE4
|
||||||
|
KEY_DISPLAYTOGGLE 0x0BB0
|
||||||
|
KEY_PAUSE 0x037FF00BE7
|
||||||
|
end codes
|
||||||
|
|
||||||
|
end remote
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -63,6 +63,7 @@ if [ -f $PKG_DIR/addon ]; then
|
|||||||
-e "s|@PKG_SHORTDESC@|$PKG_SHORTDESC|g" \
|
-e "s|@PKG_SHORTDESC@|$PKG_SHORTDESC|g" \
|
||||||
-e "s|@OS_VERSION@|$OS_VERSION|g" \
|
-e "s|@OS_VERSION@|$OS_VERSION|g" \
|
||||||
-e "s|@PKG_LONGDESC@|$PKG_LONGDESC|g" \
|
-e "s|@PKG_LONGDESC@|$PKG_LONGDESC|g" \
|
||||||
|
-e "s|@PKG_DISCLAIMER@|$PKG_DISCLAIMER|g" \
|
||||||
-i $ADDON_BUILD/$PKG_ADDON_ID/addon.xml
|
-i $ADDON_BUILD/$PKG_ADDON_ID/addon.xml
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user