diff --git a/acinclude.m4 b/acinclude.m4
index 0f67ee152..4df1f9754 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -210,14 +210,22 @@ dnl automake <= 1.6 needs this specifications
AC_SUBST(CONFIGDIR)
AC_SUBST(DATADIR)
AC_SUBST(FONTDIR)
+AC_SUBST(FONTDIR_VAR)
AC_SUBST(GAMESDIR)
AC_SUBST(LIBDIR)
AC_SUBST(MNTDIR)
AC_SUBST(PLUGINDIR)
+AC_SUBST(PLUGINDIR_VAR)
+AC_SUBST(WEBTVDIR)
+AC_SUBST(WEBTVDIR_VAR)
+AC_SUBST(PLUGINDIR_MNT)
AC_SUBST(LUAPLUGINDIR)
AC_SUBST(LOCALEDIR)
+AC_SUBST(LOCALEDIR_VAR)
AC_SUBST(THEMESDIR)
+AC_SUBST(THEMESDIR_VAR)
AC_SUBST(ICONSDIR)
+AC_SUBST(ICONSDIR_VAR)
AC_SUBST(PRIVATE_HTTPDDIR)
AC_SUBST(PUBLIC_HTTPDDIR)
AC_SUBST(HOSTED_HTTPDDIR)
diff --git a/configure.ac b/configure.ac
index 1ceb93bdd..9c7f9173c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -367,6 +367,7 @@ data/pictures/backgrounds/Makefile
data/pictures/screensaver/Makefile
data/scripts/Makefile
data/themes/Makefile
+data/webtv/Makefile
data/y-web/Makefile
data/y-web/images/Makefile
data/y-web/info/Makefile
diff --git a/data/Makefile.am b/data/Makefile.am
index 6c1c0e1cd..5c1b89d24 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -10,6 +10,7 @@ SUBDIRS = \
pictures \
scripts \
themes \
+ webtv \
y-web
if BOXTYPE_TRIPLE
diff --git a/data/icons/locale/Makefile.am b/data/icons/locale/Makefile.am
index 386924c4c..4b66f961e 100644
--- a/data/icons/locale/Makefile.am
+++ b/data/icons/locale/Makefile.am
@@ -2,11 +2,11 @@ installdir = $(ICONSDIR)
install_DATA = \
deutsch.png \
- english.png \
- nederlands.png \
- slovak.png
+ english.png
unmaintained = \
+ nederlands.png \
+ slovak.png \
unmaintained/bayrisch.png \
unmaintained/bosanski.png \
unmaintained/ch-baslerdeutsch.png \
@@ -20,4 +20,4 @@ unmaintained = \
unmaintained/suomi.png \
unmaintained/svenska.png
-install_DATA += $(unmaintained)
+#install_DATA += $(unmaintained)
diff --git a/data/icons/status/ca/Makefile.am b/data/icons/status/ca/Makefile.am
index 2da5da09e..d7db8b6bf 100644
--- a/data/icons/status/ca/Makefile.am
+++ b/data/icons/status/ca/Makefile.am
@@ -4,6 +4,8 @@ install_DATA = \
biss_green.png \
biss_white.png \
biss_yellow.png \
+ ci+_green.png \
+ ci+_grey.png \
conax_green.png \
conax_white.png \
conax_yellow.png \
@@ -13,21 +15,34 @@ install_DATA = \
d_green.png \
d_white.png \
d_yellow.png \
+ dec_card.png \
+ dec_fta.png \
+ dec_int.png \
+ dec_na.png \
+ dec_net.png \
+ doscam_green.png \
+ doscam_yellow.png \
+ gbox_green.png \
ird_green.png \
ird_white.png \
ird_yellow.png \
+ mgcamd_green.png \
nagra_green.png \
nagra_white.png \
nagra_yellow.png \
nds_green.png \
nds_white.png \
nds_yellow.png \
+ newcs_green.png \
+ oscam_green.png \
+ osemu_green.png \
powervu_green.png \
powervu_white.png \
powervu_yellow.png \
seca_green.png \
seca_white.png \
seca_yellow.png \
+ srv_green.png \
via_green.png \
via_white.png \
via_yellow.png \
diff --git a/data/icons/status/ca/ci+_green.png b/data/icons/status/ca/ci+_green.png
new file mode 100644
index 000000000..06e50001e
Binary files /dev/null and b/data/icons/status/ca/ci+_green.png differ
diff --git a/data/icons/status/ca/ci+_grey.png b/data/icons/status/ca/ci+_grey.png
new file mode 100644
index 000000000..f31756c16
Binary files /dev/null and b/data/icons/status/ca/ci+_grey.png differ
diff --git a/data/icons/status/ca/dec_card.png b/data/icons/status/ca/dec_card.png
new file mode 100644
index 000000000..3bd0741a4
Binary files /dev/null and b/data/icons/status/ca/dec_card.png differ
diff --git a/data/icons/status/ca/dec_fta.png b/data/icons/status/ca/dec_fta.png
new file mode 100644
index 000000000..002ea7e5d
Binary files /dev/null and b/data/icons/status/ca/dec_fta.png differ
diff --git a/data/icons/status/ca/dec_int.png b/data/icons/status/ca/dec_int.png
new file mode 100644
index 000000000..af1f61ce9
Binary files /dev/null and b/data/icons/status/ca/dec_int.png differ
diff --git a/data/icons/status/ca/dec_na.png b/data/icons/status/ca/dec_na.png
new file mode 100644
index 000000000..b412b671f
Binary files /dev/null and b/data/icons/status/ca/dec_na.png differ
diff --git a/data/icons/status/ca/dec_net.png b/data/icons/status/ca/dec_net.png
new file mode 100644
index 000000000..e82ac479a
Binary files /dev/null and b/data/icons/status/ca/dec_net.png differ
diff --git a/data/icons/status/ca/doscam_green.png b/data/icons/status/ca/doscam_green.png
new file mode 100644
index 000000000..38837ca70
Binary files /dev/null and b/data/icons/status/ca/doscam_green.png differ
diff --git a/data/icons/status/ca/doscam_yellow.png b/data/icons/status/ca/doscam_yellow.png
new file mode 100644
index 000000000..2ab2c586f
Binary files /dev/null and b/data/icons/status/ca/doscam_yellow.png differ
diff --git a/data/icons/status/ca/gbox_green.png b/data/icons/status/ca/gbox_green.png
new file mode 100644
index 000000000..2f8553160
Binary files /dev/null and b/data/icons/status/ca/gbox_green.png differ
diff --git a/data/icons/status/ca/mgcamd_green.png b/data/icons/status/ca/mgcamd_green.png
new file mode 100644
index 000000000..1df2f9a9a
Binary files /dev/null and b/data/icons/status/ca/mgcamd_green.png differ
diff --git a/data/icons/status/ca/newcs_green.png b/data/icons/status/ca/newcs_green.png
new file mode 100644
index 000000000..04705d7a5
Binary files /dev/null and b/data/icons/status/ca/newcs_green.png differ
diff --git a/data/icons/status/ca/oscam_green.png b/data/icons/status/ca/oscam_green.png
new file mode 100644
index 000000000..1a84219bf
Binary files /dev/null and b/data/icons/status/ca/oscam_green.png differ
diff --git a/data/icons/status/ca/osemu_green.png b/data/icons/status/ca/osemu_green.png
new file mode 100644
index 000000000..fe28db3ad
Binary files /dev/null and b/data/icons/status/ca/osemu_green.png differ
diff --git a/data/icons/status/ca/srv_green.png b/data/icons/status/ca/srv_green.png
new file mode 100644
index 000000000..c1486b15a
Binary files /dev/null and b/data/icons/status/ca/srv_green.png differ
diff --git a/data/icons/status/info/Makefile.am b/data/icons/status/info/Makefile.am
index 2753cb3d8..2f8451945 100644
--- a/data/icons/status/info/Makefile.am
+++ b/data/icons/status/info/Makefile.am
@@ -9,4 +9,6 @@ install_DATA = \
info2_off.png \
info2_on.png \
info3_off.png \
- info3_on.png
+ info3_on.png \
+ info4_off.png \
+ info4_on.png
diff --git a/data/icons/status/info/info4_off.png b/data/icons/status/info/info4_off.png
new file mode 100644
index 000000000..fe55f387e
Binary files /dev/null and b/data/icons/status/info/info4_off.png differ
diff --git a/data/icons/status/info/info4_on.png b/data/icons/status/info/info4_on.png
new file mode 100644
index 000000000..11df1a313
Binary files /dev/null and b/data/icons/status/info/info4_on.png differ
diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale
index 87b048c50..9fe918891 100644
--- a/data/locale/deutsch.locale
+++ b/data/locale/deutsch.locale
@@ -227,11 +227,11 @@ bouqueteditor.savingchanges Änderungen werden gespeichert. Bitte warten ...
bouqueteditor.switch Kanal aufnehmen/entfernen
bouqueteditor.switchmode TV/Radio
bouquetlist.head Bouquets
-bouquetname.hdtv HD Kanäle
+bouquetname.hdtv HD-Kanäle
bouquetname.new Neue Kanäle
bouquetname.other Unbekannter Provider
bouquetname.removed Gelöschte Kanäle
-bouquetname.webtv WebTV Kanäle
+bouquetname.webtv WebTV-Kanäle
buildinfo.compiled_on Build Host
buildinfo.compiled_with Compiler Version
buildinfo.compiler_flags Compiler Flags
@@ -504,8 +504,8 @@ extra.key_timeshift Timeshift
extra.key_unlock Entsperrtaste
extra.ladirection Breitengrad-Ausrichtung
extra.latitude Breitengrad
-extra.loadconfig Einstellungen: Laden von
-extra.loadkeys Lade Tastenbelegung von
+extra.loadconfig Einstellungen laden
+extra.loadkeys Tastenbelegungen laden
extra.lodirection Längengrad-Ausrichtung
extra.longitude Längengrad
extra.menu_left_exit "links" = Menü zurück
@@ -516,8 +516,8 @@ extra.rotor_swap Rotor dreht Ost/West
extra.rounded_corners Eckendarstellung
extra.rounded_corners_off eckig
extra.rounded_corners_on abgerundet
-extra.saveconfig Einstellungen: Sichern als
-extra.savekeys Speichere Tastenbelegung als
+extra.saveconfig Einstellungen sichern
+extra.savekeys Tastenbelegungen sichern
extra.scrambled_message Verschlüsselung melden
extra.show_mute_icon Mute-Icon bei Lautstärke 0
extra.sms_channel SMS-Modus bei Kanalsuche
@@ -647,7 +647,7 @@ filesystem.is.utf8.option.iso8859.1 ISO-8859-1
filesystem.is.utf8.option.utf8 UTF-8
flashupdate.actionreadflash lese Flash
flashupdate.apply_settings Sollen die aktuellen Einstellungen in das neue Image übernommen werden?
-flashupdate.autocheck Beim Start nach Updates suchen
+flashupdate.autocheck Regelmäßig nach Updates suchen
flashupdate.cantopenfile kann Datei nicht öffnen
flashupdate.cantopenmtd kann MTD nicht öffnen
flashupdate.checkupdate_internet Online-Update
@@ -945,8 +945,8 @@ keybindingmenu.cancel Kanalliste schließen
keybindingmenu.channeldown Kanal runter
keybindingmenu.channellist Kanalliste
keybindingmenu.channelup Kanal hoch
-keybindingmenu.edit Bearbeiten
-keybindingmenu.head Tasten-Belegungen bearbeiten
+keybindingmenu.edit Tastenbelegungen bearbeiten
+keybindingmenu.head Tastenbelegungen
keybindingmenu.lastchannel Letzter Kanal
keybindingmenu.longkeypress_duration Langer Tastendruck
keybindingmenu.misc Sonstige
@@ -1313,7 +1313,7 @@ menu.hint_key_record Konfigurieren Sie die Taste für den Aufnahmestart
menu.hint_key_repeatblock Die Verzögerung nach einem Tastendruck bis die Box reagieren soll
menu.hint_key_repeatblockgeneric Die Verzögerung zwischen den Tastewiederholungen bis die Box reagieren soll
menu.hint_key_right Wählen Sie die Funktion für die Tasten 'links' und 'rechts' im TV/Radio- und Movieplayer-Modus
-menu.hint_key_save Speichern Sie Ihre Tastenbelegungen in einer Datei ab
+menu.hint_key_save Speichern Sie Ihre Tastenbelegungen in einer Datei namens keys.conf ab
menu.hint_key_screenshot Weisen Sie eine Taste zu, um Menü- und/oder TV-Screenshots zu speichern
menu.hint_key_sort Weisen Sie eine Taste für das Sortieren in der Kanalliste zu
menu.hint_key_special_active Deaktivieren oder aktivieren einiger Sondertasten
@@ -1504,7 +1504,7 @@ menu.hint_restore Wiederherstellen von vorher erstellten Sicherungen
menu.hint_rotor_swap Tauschen der Rotordrehrichtung Ost/West in den Motor-Einstellungen
menu.hint_rounded_corners Aktiviert die Darstellung abgerundeter Ecken für die Menüs
menu.hint_save_settings Speichert ihre Einstellungen
-menu.hint_saveas Speichern der Einstellungen in eine Datei
+menu.hint_saveas Speichern der Einstellungen in einer Datei namens neutrino.conf
menu.hint_scan_auto Automatischer Suchlauf ausgewählter Anbieter
menu.hint_scan_autoall Automatischer Suchlauf aller ausgewählten Anbieter
menu.hint_scan_autoall_select Suchlauf nur in ausgewählten Satelliten
@@ -2533,7 +2533,7 @@ servicemenu.restart_tuner Tuner neu starten
servicemenu.restarting_tuner Tuner wird neu gestartet
servicemenu.scants Kanalsuche
servicemenu.update Software-Aktualisierung
-settings.backup NI-Backup: Sichern
+settings.backup NI-Backup sichern
settings.backup_failed Sicherung fehlgeschlagen!
settings.help Hilfe
settings.menu_hints Hinweise anzeigen
@@ -2550,7 +2550,7 @@ settings.pos_higher_center höher zentriert
settings.pos_top_center oben zentriert
settings.pos_top_left oben links
settings.pos_top_right oben rechts
-settings.restore NI-Backup: Wiederherstellen
+settings.restore NI-Backup wiederherstellen
settings.restore_warn Alle Settings werden ersetzt.\nDie Box wird neu gestartet.\nWeiter?
settings.teams Team-übergreifende Einstellungen
settings.teams.backup Sichern
diff --git a/data/locale/english.locale b/data/locale/english.locale
index 023fcede6..c582c5a41 100644
--- a/data/locale/english.locale
+++ b/data/locale/english.locale
@@ -504,8 +504,8 @@ extra.key_timeshift Timeshift
extra.key_unlock Unlock key
extra.ladirection LaDirection
extra.latitude Latitude
-extra.loadconfig Settings: Load from
-extra.loadkeys Load keys from
+extra.loadconfig Load settings
+extra.loadkeys Load keybindings
extra.lodirection LoDirection
extra.longitude Longitude
extra.menu_left_exit "Left" = menu back
@@ -516,8 +516,8 @@ extra.rotor_swap Swap rotor east/west
extra.rounded_corners Shape of corners
extra.rounded_corners_off angular
extra.rounded_corners_on rounded
-extra.saveconfig Settings: Save as
-extra.savekeys Save keys as
+extra.saveconfig Save settings
+extra.savekeys Save keybindings
extra.scrambled_message Scrambled Message
extra.show_mute_icon mute-icon at volume 0
extra.sms_channel SMS-mode channel
@@ -647,7 +647,7 @@ filesystem.is.utf8.option.iso8859.1 ISO-8859-1
filesystem.is.utf8.option.utf8 UTF-8
flashupdate.actionreadflash reading
flashupdate.apply_settings Import current settings into new image?
-flashupdate.autocheck Auto-check updates on boot
+flashupdate.autocheck Check updates periodically
flashupdate.cantopenfile can't open file
flashupdate.cantopenmtd can't open MTD
flashupdate.checkupdate_internet Online update
@@ -945,8 +945,8 @@ keybindingmenu.cancel close channellist
keybindingmenu.channeldown channel down
keybindingmenu.channellist Channellist
keybindingmenu.channelup channel up
-keybindingmenu.edit Edit
-keybindingmenu.head Edit Keybindings
+keybindingmenu.edit Edit keybindings
+keybindingmenu.head Keybindings
keybindingmenu.lastchannel Quick Zap
keybindingmenu.longkeypress_duration Long key-press
keybindingmenu.misc Misc
@@ -1313,7 +1313,7 @@ menu.hint_key_record Assign button to start a recording
menu.hint_key_repeatblock Delay after button press and before\nfirst key repeat
menu.hint_key_repeatblockgeneric Delay between key repeats\nwhile button pressed
menu.hint_key_right Select function for 'left' and 'right' keys in live TV/Radio mode and movieplayer mode
-menu.hint_key_save Save keybindings to file
+menu.hint_key_save Save keybindings to a file named keys.conf
menu.hint_key_screenshot Assign button to save GUI and/or TV screenshot
menu.hint_key_sort Assign button to change channel list sort order
menu.hint_key_special_active Disable or enable some special keys
@@ -1504,7 +1504,7 @@ menu.hint_restore Restore files from selected backup
menu.hint_rotor_swap Swap rotor east/west directions\nin motor control
menu.hint_rounded_corners Draw round or rectangular windows corners
menu.hint_save_settings Save all settings to flash
-menu.hint_saveas Save GUI settings to file
+menu.hint_saveas Save GUI settings to a file named neutrino.conf
menu.hint_scan_auto Auto-scan selected provider
menu.hint_scan_autoall Scan several selected providers at once
menu.hint_scan_autoall_select Add selected satellites to scan
@@ -2533,7 +2533,7 @@ servicemenu.restart_tuner Restart tuner
servicemenu.restarting_tuner Restarting tuner
servicemenu.scants Servicescan
servicemenu.update Software Update
-settings.backup NI-Backup: save
+settings.backup Save NI-Backup
settings.backup_failed Backup failed!
settings.help Help
settings.menu_hints Show menu hints
@@ -2550,7 +2550,7 @@ settings.pos_higher_center higher center
settings.pos_top_center top center
settings.pos_top_left top left
settings.pos_top_right top right
-settings.restore NI-Backup: restore
+settings.restore Load NI-Backup
settings.restore_warn This will replace all settings and reboot\nContinue ?
settings.teams Cross-Team Settings
settings.teams.backup Save
diff --git a/data/webtv/Makefile.am b/data/webtv/Makefile.am
new file mode 100644
index 000000000..f55df6a7c
--- /dev/null
+++ b/data/webtv/Makefile.am
@@ -0,0 +1,9 @@
+installdir = $(WEBTVDIR)
+
+install_DATA = \
+ filmon.lua \
+ filmon.xml \
+ hdporntv.lua \
+ hdporntv.xml \
+ yt_live.lua \
+ yt_live.xml
diff --git a/data/webtv/filmon.lua b/data/webtv/filmon.lua
new file mode 100644
index 000000000..61d118c7b
--- /dev/null
+++ b/data/webtv/filmon.lua
@@ -0,0 +1,73 @@
+local n = neutrino(0, 0, SCREEN.X_RES, SCREEN.Y_RES);
+n:checkVersion(1, 31);
+
+json = require "json"
+
+if #arg < 1 then return nil end
+local _url = arg[1]
+local ret = {}
+local Curl = nil
+
+function getdata(Url)
+ if Url == nil then return nil end
+ if Curl == nil then
+ Curl = curl.new()
+ end
+ local ret, data = Curl:download{ url=Url, A="Mozilla/5.0"}
+ if ret == CURL.OK then
+ return data
+ else
+ return nil
+ end
+end
+
+function getVideoData(url)
+ if url == nil then return 0 end
+ local data = getdata('http://www.filmon.com/tv/channel/info/' .. url)
+ if data == nil then return 0 end
+
+ local data = json:decode(data)
+ if data==nil then return 0 end
+ data = data['data']
+ if data==nil then return 0 end
+
+ local title=data['title']
+ if title==nil then name='nil' end
+ title=title .. ' - filmon'
+
+ data = data['streams']
+ if data==nil then return 0 end
+
+ local highurl=nil
+ local lowurl=nil
+ local quality=nil
+ local surl=nil
+ for i,stream in ipairs(data) do
+ quality=stream['quality']
+ surl=stream['url']
+ if (quality=='high')or(quality=='HD') then
+ if (stream['watch-timeout']>=3600)and(surl:find('mustbeasubscriber')==nil) then
+ highurl = surl
+ end
+ elseif (quality=='low')or(quality=='SD') then
+ lowurl = surl
+ end
+ end
+ local count=0
+ if highurl ~= nil then
+ --if lowurl ~= nil then highurl=lowurl:gsub('low.stream','high.stream') end
+ count = 1
+ ret[1]={ url = highurl, band = "1500000", name = title, res1 = "854", res2 = "480" }
+ end
+ if lowurl ~= nil then
+ count = count+1
+ ret[count]={ url = lowurl, band = "500000", name = title, res1 = "576", res2 = "322" }
+ end
+ return count
+end
+
+if (getVideoData(_url) > 0) then
+ return json:encode(ret)
+end
+
+return nil
diff --git a/data/webtv/filmon.xml b/data/webtv/filmon.xml
new file mode 100644
index 000000000..2098f1208
--- /dev/null
+++ b/data/webtv/filmon.xml
@@ -0,0 +1,1107 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/webtv/hdporntv.lua b/data/webtv/hdporntv.lua
new file mode 100644
index 000000000..f23ff397b
--- /dev/null
+++ b/data/webtv/hdporntv.lua
@@ -0,0 +1,66 @@
+
+local n = neutrino(0, 0, SCREEN.X_RES, SCREEN.Y_RES);
+M = misc.new(); M:checkVersion(1, 31)
+json = require "json"
+
+if #arg < 1 then return nil end
+local _url = arg[1]
+local ret = {}
+local Curl = nil
+
+function getdata(Url)
+ if Url == nil then return nil end
+ if Curl == nil then
+ Curl = curl.new()
+ end
+ local ret, data = Curl:download{ url=Url, ipv4=true, A="Mozilla/5.0 (Linux; Android 5.1.1; Nexus 4 Build/LMY48M)"}
+ if ret == CURL.OK then
+ return data
+ else
+ return nil
+ end
+end
+
+function getVideoData(url)
+ local data = getdata(url)
+ local count = 0
+ if data then
+ local title = data:match("
(.-)")
+ local newname = url:match('tv/(.-)%.html')
+ local url_m3u8 = data:match('stream":%s+[\'"](.-%.m3u8)[\'"]')
+ if url_m3u8 then
+ entry = {}
+ entry['url'] = url_m3u8
+ entry['band'] = "1"
+ entry['res1'] = "1"
+ entry['res2'] = "1"
+ entry['name'] = "xx"
+ local infodata = getdata(url_m3u8)
+ if infodata then
+ local band,res1,res2 = infodata:match('BANDWIDTH=(%d+),RESOLUTION=(%d+)x(%d+)')
+ if band and res1 and res2 then
+ entry['band'] = band
+ entry['res1'] = res1
+ entry['res2'] = res2
+ end
+ end
+ if newname then
+ entry['name'] = newname
+ end
+ if title then
+ entry['name'] = title
+ end
+ count = 1
+ ret[count] = {}
+ ret[count] = entry
+ end
+ return count
+ end
+ return 0
+end
+
+if (getVideoData(_url) > 0) then
+ return json:encode(ret)
+end
+
+return ""
diff --git a/data/webtv/hdporntv.xml b/data/webtv/hdporntv.xml
new file mode 100644
index 000000000..d2b12d5d8
--- /dev/null
+++ b/data/webtv/hdporntv.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/data/webtv/yt_live.lua b/data/webtv/yt_live.lua
new file mode 100644
index 000000000..74da6c7ff
--- /dev/null
+++ b/data/webtv/yt_live.lua
@@ -0,0 +1,61 @@
+
+json = require "json"
+
+if #arg < 1 then return nil end
+local _url = arg[1]
+local ret = {}
+local Curl = nil
+
+function getdata(Url)
+ if Url == nil then return nil end
+ if Curl == nil then
+ Curl = curl.new()
+ end
+ local ret, data = Curl:download{ url=Url, A="Mozilla/5.0"}
+ if ret == CURL.OK then
+ return data
+ else
+ return nil
+ end
+end
+
+function getVideoData(url)
+ if url == nil then return 0 end
+ local data = getdata(url)
+ if data then
+ local m3u_url = data:match('hlsvp.:.(https:\\.-m3u8)')
+ local newname = data:match('(.-)')
+ if m3u_url == nil then return 0 end
+ m3u_url = m3u_url:gsub("\\", "")
+ local videodata = getdata(m3u_url)
+ local url = ""
+ local band = ""
+ local res1 = ""
+ local res2 = ""
+ local count = 0
+ for band, res1, res2, url in videodata:gmatch('#EXT.X.STREAM.INF.BANDWIDTH=(%d+).-RESOLUTION=(%d+)x(%d+).-(http.-)\n') do
+ if url ~= nil then
+ entry = {}
+ entry['url'] = url
+ entry['band'] = band
+ entry['res1'] = res1
+ entry['res2'] = res2
+ entry['name'] = ""
+ if newname then
+ entry['name'] = newname
+ end
+ count = count + 1
+ ret[count] = {}
+ ret[count] = entry
+ end
+ end
+ return count
+ end
+ return 0
+end
+
+if (getVideoData(_url) > 0) then
+ return json:encode(ret)
+end
+
+return ""
diff --git a/data/webtv/yt_live.xml b/data/webtv/yt_live.xml
new file mode 100644
index 000000000..50184397e
--- /dev/null
+++ b/data/webtv/yt_live.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/y-web/Y_Settings_automount.yhtm b/data/y-web/Y_Settings_automount.yhtm
index d8cdbf827..8368de139 100644
--- a/data/y-web/Y_Settings_automount.yhtm
+++ b/data/y-web/Y_Settings_automount.yhtm
@@ -102,8 +102,8 @@ function do_save2()
var dir = document.f.dir.value;
if(dir.indexOf("/") == 0)
dir = dir.substr(1);
- mstr += ((mstr!="")?",":"")+"unc="+"//"+document.f.ip.value+"/"+dir;
- mstr += "%20//"+document.f.ip.value+"/"+dir;
+ //mstr += ((mstr!="")?",":"")+"unc="+"//"+document.f.ip.value+"/"+dir;
+ mstr += "%20://"+document.f.ip.value+"/"+dir;
}
show_waitbox(false);
mstr = mstr.replace(/=/gi,",,");
diff --git a/data/y-web/favicon.ico b/data/y-web/favicon.ico
index 5e17fbdcf..48c5e0d54 100644
Binary files a/data/y-web/favicon.ico and b/data/y-web/favicon.ico differ
diff --git a/data/y-web/index.html b/data/y-web/index.html
index 44623a6f7..383e5223f 100644
--- a/data/y-web/index.html
+++ b/data/y-web/index.html
@@ -4,6 +4,15 @@
yWeb
+