Skip to content

Instantly share code, notes, and snippets.

@nkpro2000
Last active June 22, 2022 18:06
Show Gist options
  • Save nkpro2000/0e64ffea807c3b18c99862204141ff77 to your computer and use it in GitHub Desktop.
Save nkpro2000/0e64ffea807c3b18c99862204141ff77 to your computer and use it in GitHub Desktop.
Script for KODI IPTV related functions
#!/usr/bin/sh
# Kodi script for IPTV related functions
install () {
sudo pacman -S kodi
echo set these env vars in build function at PKGBUILD
echo 'CFLAGS="$CFLAGS -Wp,-U_GLIBCXX_ASSERTIONS"'
echo 'CXXFLAGS="$CXXFLAGS -Wp,-U_GLIBCXX_ASSERTIONS"'
pacaur -Se kodi-addon-pvr-iptvsimple
sudo pacman -S kodi-addon-inputstream-adaptive kodi-addon-inputstream-rtmp
pacaur -Se kodi-addon-inputstream-ffmpegdirect
echo 'Now open kodi,'
echo 'enable installed addons (by popup) also turn off m3uCache in pvr-iptvsimple addon configure,'
echo 'install inputstream-helper (Settings>Addons>Search) and then install widevine from inputstream-helper addon configure.'
}
uninstall () {
sudo pacman -Rs kodi kodi-addon-pvr-iptvsimple\
$(pacman -Qs kodi-addon-inputstream | grep -Po 'local/\K.*?(?= )')
}
clean () {
rm -rf $(find ~/.kodi -maxdepth 1 -mindepth 1 -type d -not -path '*/.kodi/.*')
}
m3uUrl=()
change_m3u_url () {
if [[ -n "$(grep '<setting id="m3uUrl" default="true" />' ~/.kodi/userdata/addon_data/pvr.iptvsimple/settings.xml)" ]]; then
sed -i 's/<setting id="m3uUrl" default="true" \/>/<setting id="m3uUrl">'"$(echo "${m3uUrl[$1]}"|sed 's/\//\\\//g')"'<\/setting>/g' \
~/.kodi/userdata/addon_data/pvr.iptvsimple/settings.xml
else
sed -i 's/<setting id="m3uUrl">.*<\/setting>/<setting id="m3uUrl">'"$(echo "${m3uUrl[$1]}"|sed 's/\//\\\//g')"'<\/setting>/g' \
~/.kodi/userdata/addon_data/pvr.iptvsimple/settings.xml
fi
# restart pvr.iptvsimple addon
enable_addon false
sleep 1
enable_addon true
}
enable_addon () {
curl -X POST -H "content-type:application/json" http://localhost:9147/jsonrpc -u kodiRPC\
-d '{"jsonrpc":"2.0","id":1,"method":"Addons.SetAddonEnabled","params":{"addonid":"pvr.iptvsimple","enabled":'"$1"'}}'
}
show_diff () {
echo DIFF: ~/.kodi/userdata/addon_data/pvr.iptvsimple/settings.xml
curl -s 'https://gist.githubusercontent.com/nkpro2000/0e64ffea807c3b18c99862204141ff77/raw/udad_pvr_iptvsimple_settings.xml'|\
diff --color -u - ~/.kodi/userdata/addon_data/pvr.iptvsimple/settings.xml
echo DIFF: ~/.kodi/userdata/guisettings.xml
curl -s 'https://gist.githubusercontent.com/nkpro2000/0e64ffea807c3b18c99862204141ff77/raw/ud_guisettings_WS&ES.xml'|\
diff --color -u - <(cat ~/.kodi/userdata/guisettings.xml|grep -E ' <setting id="services.(web|es)')
curl -s 'https://gist.githubusercontent.com/nkpro2000/0e64ffea807c3b18c99862204141ff77/raw/ud_guisettings_PVR.xml'|\
diff --color -u - <(cat ~/.kodi/userdata/guisettings.xml|grep -E ' <setting id="(pvr|epg)')
}
setup () {
sed -i 's/<setting id="services.webserver".*<\/setting>/<setting id="services.webserver">true<\/setting>/g'\
~/.kodi/userdata/guisettings.xml
sed -i 's/<setting id="services.webserverport".*<\/setting>/<setting id="services.webserverport">9147<\/setting>/g'\
~/.kodi/userdata/guisettings.xml
sed -i 's/<setting id="services.webserverusername".*<\/setting>/<setting id="services.webserverusername">kodiRPC<\/setting>/g'\
~/.kodi/userdata/guisettings.xml
echo -n 'Enter password jsonRCP via webserver :'
read -s passwd
echo
sed -i 's/<setting id="services.webserverpassword".*\/.*>/<setting id="services.webserverpassword">'"$passwd"'<\/setting>/g'\
~/.kodi/userdata/guisettings.xml
sed -i 's/<setting id="services.esenabled".*<\/setting>/<setting id="services.esenabled">false<\/setting>/g'\
~/.kodi/userdata/guisettings.xml
}
setup_dir () {
mkdir -p ~/.kodi/.s/local_playlists/
wget -qO ~/.kodi/.s/kodi.png 'https://user-images.githubusercontent.com/45198561/174828377-00882fab-e25a-47ef-a2fe-390c229a4c46.png'
if [[ ! -f ~/.kodi/.directory ]]; then
echo -e '[Desktop Entry]'"\n"'Icon='"$(echo ~/.kodi/.s/kodi.png)""\n\n" > ~/.kodi/.directory
fi
}
arg1="$1"
case "$arg1" in
-i) install
;;
-u) uninstall
;;
-c) clean
;;
-uc|-cu)
uninstall
clean
;;
-d) show_diff || [[ true ]]
;;
-s)
setup
setup_dir
;;
-h)
echo '<no_arg> to show all m3u url for IPTV'
echo '<\d> to set the url (zero and negative indexing possible)'
echo '-i install kodi and iptv addons'
echo '-u uninstall kodi and iptv addons'
echo '-c clean ~/.kodi dir (only visible directories)'
echo '-uc uninstall, then clean'
echo '-d show changes in settings (from saved in gist)'
echo '-s to set values in setting files for this script'
echo ' also setup directories for .kodi/ and .kodi/s (kodis)'
echo '-h show this help message'
;;
'') echo "${m3uUrl[@]}" | tr ' ' "\n" | nl -v0
;;
*) change_m3u_url "$arg1"
;;
esac
<setting id="pvrmanager.preselectplayingchannel" default="true">false</setting>
<setting id="pvrmanager.syncchannelgroups" default="true">true</setting>
<setting id="pvrmanager.backendchannelorder" default="true">true</setting>
<setting id="pvrmanager.usebackendchannelnumbersalways" default="true">false</setting>
<setting id="pvrmanager.usebackendchannelnumbers" default="true">false</setting>
<setting id="pvrmanager.startgroupchannelnumbersfromone" default="true">false</setting>
<setting id="pvrmenu.displaychannelinfo" default="true">5</setting>
<setting id="pvrmenu.closechannelosdonswitch" default="true">true</setting>
<setting id="pvrmenu.iconpath" default="true" />
<setting id="epg.pastdaystodisplay" default="true">1</setting>
<setting id="epg.futuredaystodisplay" default="true">3</setting>
<setting id="epg.selectaction" default="true">2</setting>
<setting id="epg.hidenoinfoavailable" default="true">true</setting>
<setting id="epg.epgupdate" default="true">120</setting>
<setting id="epg.preventupdateswhileplayingtv" default="true">false</setting>
<setting id="pvrplayback.switchtofullscreenchanneltypes" default="true">3</setting>
<setting id="pvrplayback.signalquality" default="true">true</setting>
<setting id="pvrplayback.confirmchannelswitch" default="true">true</setting>
<setting id="pvrplayback.channelentrytimeout" default="true">0</setting>
<setting id="pvrplayback.delaymarklastwatched" default="true">0</setting>
<setting id="pvrplayback.fps" default="true">0</setting>
<setting id="pvrplayback.enableradiords" default="true">true</setting>
<setting id="pvrplayback.trafficadvisory" default="true">false</setting>
<setting id="pvrplayback.trafficadvisoryvolume" default="true">10</setting>
<setting id="pvrrecord.instantrecordaction" default="true">0</setting>
<setting id="pvrrecord.instantrecordtime" default="true">120</setting>
<setting id="pvrrecord.marginstart" default="true">0</setting>
<setting id="pvrrecord.marginend" default="true">0</setting>
<setting id="pvrrecord.timernotifications" default="true">true</setting>
<setting id="pvrrecord.grouprecordings" default="true">true</setting>
<setting id="pvrreminders.autoclosedelay" default="true">10</setting>
<setting id="pvrreminders.autorecord" default="true">true</setting>
<setting id="pvrreminders.autoswitch" default="true">false</setting>
<setting id="pvrpowermanagement.enabled" default="true">false</setting>
<setting id="pvrpowermanagement.backendidletime" default="true">15</setting>
<setting id="pvrpowermanagement.setwakeupcmd" default="true" />
<setting id="pvrpowermanagement.prewakeup" default="true">15</setting>
<setting id="pvrpowermanagement.dailywakeup" default="true">false</setting>
<setting id="pvrpowermanagement.dailywakeuptime" default="true">00:00:00</setting>
<setting id="pvrparental.enabled" default="true">false</setting>
<setting id="pvrparental.pin" default="true" />
<setting id="pvrparental.duration" default="true">300</setting>
<setting id="pvrtimers.hidedisabledtimers" default="true">false</setting>
<setting id="services.webserver">true</setting>
<setting id="services.webserverport">9147</setting>
<setting id="services.webserverauthentication" default="true">true</setting>
<setting id="services.webserverusername">kodiRPC</setting>
<setting id="services.webserverpassword" default="true" />
<setting id="services.webserverssl" default="true">false</setting>
<setting id="services.webskin" default="true">webinterface.default</setting>
<setting id="services.esenabled">false</setting>
<setting id="services.esport" default="true">9777</setting>
<setting id="services.esportrange" default="true">10</setting>
<setting id="services.esmaxclients" default="true">20</setting>
<setting id="services.esallinterfaces" default="true">false</setting>
<setting id="services.esinitialdelay" default="true">750</setting>
<setting id="services.escontinuousdelay" default="true">25</setting>
<settings version="2">
<setting id="m3uPathType" default="true">1</setting>
<setting id="m3uPath" default="true" />
<setting id="m3uUrl" default="true" />
<setting id="m3uCache">false</setting>
<setting id="startNum" default="true">1</setting>
<setting id="numberByOrder" default="true">false</setting>
<setting id="m3uRefreshMode" default="true">0</setting>
<setting id="m3uRefreshIntervalMins" default="true">60</setting>
<setting id="m3uRefreshHour" default="true">4</setting>
<setting id="tvGroupMode" default="true">0</setting>
<setting id="numTvGroups" default="true">1</setting>
<setting id="oneTvGroup" default="true" />
<setting id="twoTvGroup" default="true" />
<setting id="threeTvGroup" default="true" />
<setting id="fourTvGroup" default="true" />
<setting id="fiveTvGroup" default="true" />
<setting id="customTvGroupsFile" default="true">special://userdata/addon_data/pvr.iptvsimple/channelGroups/customTVGroups-example.xml</setting>
<setting id="tvChannelGroupsOnly" default="true">false</setting>
<setting id="radioGroupMode" default="true">0</setting>
<setting id="numRadioGroups" default="true">1</setting>
<setting id="oneRadioGroup" default="true" />
<setting id="twoRadioGroup" default="true" />
<setting id="threeRadioGroup" default="true" />
<setting id="fourRadioGroup" default="true" />
<setting id="fiveRadioGroup" default="true" />
<setting id="customRadioGroupsFile" default="true">special://userdata/addon_data/pvr.iptvsimple/channelGroups/customRadioGroups-example.xml</setting>
<setting id="radioChannelGroupsOnly" default="true">false</setting>
<setting id="epgPathType" default="true">1</setting>
<setting id="epgPath" default="true" />
<setting id="epgUrl" default="true" />
<setting id="epgCache" default="true">true</setting>
<setting id="epgTimeShift" default="true">0</setting>
<setting id="epgTSOverride" default="true">false</setting>
<setting id="useEpgGenreText" default="true">false</setting>
<setting id="genresPathType" default="true">0</setting>
<setting id="genresPath" default="true">special://userdata/addon_data/pvr.iptvsimple/genres/genreTextMappings/genres.xml</setting>
<setting id="genresUrl" default="true" />
<setting id="logoPathType" default="true">1</setting>
<setting id="logoPath" default="true" />
<setting id="logoBaseUrl" default="true" />
<setting id="useLogosLocalPathOnly" default="true">false</setting>
<setting id="logoFromEpg" default="true">1</setting>
<setting id="timeshiftEnabled" default="true">false</setting>
<setting id="timeshiftEnabledAll" default="true">true</setting>
<setting id="timeshiftEnabledHttp" default="true">true</setting>
<setting id="timeshiftEnabledUdp" default="true">true</setting>
<setting id="timeshiftEnabledCustom" default="true">false</setting>
<setting id="catchupEnabled" default="true">false</setting>
<setting id="catchupQueryFormat" default="true" />
<setting id="catchupDays" default="true">5</setting>
<setting id="allChannelsCatchupMode" default="true">0</setting>
<setting id="catchupOverrideMode" default="true">0</setting>
<setting id="catchupCorrection" default="true">0</setting>
<setting id="catchupPlayEpgAsLive" default="true">false</setting>
<setting id="catchupWatchEpgBeginBufferMins" default="true">5</setting>
<setting id="catchupWatchEpgEndBufferMins" default="true">15</setting>
<setting id="catchupOnlyOnFinishedProgrammes" default="true">false</setting>
<setting id="transformMulticastStreamUrls" default="true">false</setting>
<setting id="udpxyHost" default="true">127.0.0.1</setting>
<setting id="udpxyPort" default="true">4022</setting>
<setting id="useFFmpegReconnect" default="true">true</setting>
<setting id="useInputstreamAdaptiveforHls" default="true">false</setting>
<setting id="defaultUserAgent" default="true" />
<setting id="defaultInputstream" default="true" />
<setting id="defaultMimeType" default="true" />
</settings>
@nkpro2000
Copy link
Author

kodi

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment