update tvdb support
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2494 2a923420-c742-0410-a762-8d5b09965624
This commit is contained in:
parent
e7ca1d7742
commit
6b8933634b
@ -1,7 +1,7 @@
|
|||||||
Package: webif
|
Package: webif
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Section: web
|
Section: web
|
||||||
Version: 1.2.5
|
Version: 1.2.5-1
|
||||||
Architecture: mipsel
|
Architecture: mipsel
|
||||||
Maintainer: af123@hummypkg.org.uk
|
Maintainer: af123@hummypkg.org.uk
|
||||||
Depends: webif-channelicons(>=1.1.18),lighttpd(>=1.4.35-2),jim(>=0.76),jim-oo,jim-sqlite3(>=0.76),jim-cgi(>=0.7),jim-binary(>=0.76),service-control(>=2.1),busybox(>=1.20.2-1),lsof(>=4.87),epg(>=1.2.0),hmt(>=2.0.7),ssmtp,anacron,trm(>=1.1),openssl-command,nicesplice,id3v2,file,rsvsync(>=1.0.2),webif-charts(>=1.2-1),stripts(>=1.2.5-3),smartmontools,tmenu(>=1.08),ffmpeg,id3v2,multienv(>=1.6),tcpping(>=1.1),e2fsprogs,wireless-tools(>=29-1),dbupdate,recmon(>=2.0.7)
|
Depends: webif-channelicons(>=1.1.18),lighttpd(>=1.4.35-2),jim(>=0.76),jim-oo,jim-sqlite3(>=0.76),jim-cgi(>=0.7),jim-binary(>=0.76),service-control(>=2.1),busybox(>=1.20.2-1),lsof(>=4.87),epg(>=1.2.0),hmt(>=2.0.7),ssmtp,anacron,trm(>=1.1),openssl-command,nicesplice,id3v2,file,rsvsync(>=1.0.2),webif-charts(>=1.2-1),stripts(>=1.2.5-3),smartmontools,tmenu(>=1.08),ffmpeg,id3v2,multienv(>=1.6),tcpping(>=1.1),e2fsprogs,wireless-tools(>=29-1),dbupdate,recmon(>=2.0.7)
|
||||||
|
@ -361,7 +361,9 @@ puts {
|
|||||||
<div id=dialogue>
|
<div id=dialogue>
|
||||||
<img src=/img/loading.gif>Retrieving data...
|
<img src=/img/loading.gif>Retrieving data...
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id=confirm title="Confirmation Required"></div>
|
<div id=confirm title="Confirmation Required"></div>
|
||||||
|
|
||||||
<div id=pwdialogue style="display: none">
|
<div id=pwdialogue style="display: none">
|
||||||
<center>
|
<center>
|
||||||
<img src=/img/loading.gif>
|
<img src=/img/loading.gif>
|
||||||
|
@ -49,17 +49,22 @@ if {$type eq "ts"} {
|
|||||||
</tr><tr>
|
</tr><tr>
|
||||||
"
|
"
|
||||||
if {[llength $sdata] && [llength $idata]} {
|
if {[llength $sdata] && [llength $idata]} {
|
||||||
puts "</tr><tr><th class=blood>DEBUG</th><td class=footnote>
|
puts "</tr><tr><th class=blood>TVDB</th><td class=footnote>
|
||||||
|
<img class=collapser id=xtvdb x=tvdb_extra class=va
|
||||||
|
src=/img/tree/plusonly.png>
|
||||||
Found using [$ts get tvdb_method]
|
Found using [$ts get tvdb_method]
|
||||||
<br>
|
<div id=tvdb_extra class=hidden>
|
||||||
$idata(overview)
|
$idata(overview)
|
||||||
<br>
|
</div>
|
||||||
[$sdata get _phrases]
|
</td></tr>"
|
||||||
<br>
|
|
||||||
[lrange [$sdata get _smatches] 0 8]
|
|
||||||
</td></tr>"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# $idata(overview)
|
||||||
|
# <br>
|
||||||
|
# [$sdata get _phrases]
|
||||||
|
# <br>
|
||||||
|
# [lrange [$sdata get _smatches] 0 8]
|
||||||
|
|
||||||
if {[$ts flag "Guidance"] > 0} {
|
if {[$ts flag "Guidance"] > 0} {
|
||||||
puts "
|
puts "
|
||||||
<th>Guidance</th>
|
<th>Guidance</th>
|
||||||
@ -139,7 +144,8 @@ puts "
|
|||||||
"
|
"
|
||||||
|
|
||||||
set fileset [$ts fileset]
|
set fileset [$ts fileset]
|
||||||
puts -nonewline "<img id=xfileset class=va src=/img/tree/plusonly.png>"
|
puts -nonewline "<img class=collapser x=fileset id=xfileset class=va
|
||||||
|
src=/img/tree/plusonly.png>"
|
||||||
puts -nonewline "[llength $fileset] file"
|
puts -nonewline "[llength $fileset] file"
|
||||||
if {[llength $fileset] != 1} { puts -nonewline "s" }
|
if {[llength $fileset] != 1} { puts -nonewline "s" }
|
||||||
puts -nonewline " in set."
|
puts -nonewline " in set."
|
||||||
@ -165,12 +171,15 @@ if {[$ts get bookmarks]} {
|
|||||||
puts "</table>"
|
puts "</table>"
|
||||||
puts {
|
puts {
|
||||||
<script type=text/javascript>
|
<script type=text/javascript>
|
||||||
$('#xfileset').click(function() {
|
$('.collapser').on('click', function() {
|
||||||
$('#fileset').slideToggle('slow', function() {
|
target = $(this).attr('x');
|
||||||
if ($('#fileset').is(':visible'))
|
var $icon = $(this);
|
||||||
$('#xfileset').attr('src', '/img/tree/minustop.png');
|
$('#' + target).slideToggle('slow', function() {
|
||||||
|
if ($(this).is(':visible'))
|
||||||
|
$icon.attr('src', '/img/tree/minustop.png');
|
||||||
else
|
else
|
||||||
$('#xfileset').attr('src', '/img/tree/plusonly.png');
|
$icon.attr('src', '/img/tree/plusonly.png');
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@ -3,14 +3,16 @@
|
|||||||
package require cgi
|
package require cgi
|
||||||
source /mod/webif/lib/setup
|
source /mod/webif/lib/setup
|
||||||
require ts.class pretty_size system.class settings.class escape browse.class \
|
require ts.class pretty_size system.class settings.class escape browse.class \
|
||||||
plugin epg.class
|
plugin epg.class classdump
|
||||||
|
|
||||||
set mroot [system mediaroot]
|
set mroot [system mediaroot]
|
||||||
set dir [cgi_get dir $mroot]
|
set dir [cgi_get dir $mroot]
|
||||||
|
|
||||||
jqplugin contextMenu bar enadis
|
jqplugin contextMenu bar enadis blockui
|
||||||
jscss script.js style.css
|
jscss script.js style.css
|
||||||
|
|
||||||
|
if {[system has tvdb]} { jscss tvdb/script.js tvdb/style.css }
|
||||||
|
|
||||||
set plugins { dmenu {} menu {} omenu {} buttons {} }
|
set plugins { dmenu {} menu {} omenu {} buttons {} }
|
||||||
eval_plugins browse
|
eval_plugins browse
|
||||||
|
|
||||||
@ -229,6 +231,7 @@ proc entry {file} {{i 0}} {
|
|||||||
# Render web page
|
# Render web page
|
||||||
|
|
||||||
source assets.jim
|
source assets.jim
|
||||||
|
if {[system has tvdb]} { source tvdb/assets.jim }
|
||||||
|
|
||||||
if {!$dlnaok && ![system instandby]} {
|
if {!$dlnaok && ![system instandby]} {
|
||||||
puts {
|
puts {
|
||||||
@ -255,6 +258,10 @@ foreach part [split $dir /] {
|
|||||||
puts "<span class=filesize id=dirsize></span>"
|
puts "<span class=filesize id=dirsize></span>"
|
||||||
puts "</legend>"
|
puts "</legend>"
|
||||||
|
|
||||||
|
if {[system has tvdb] && [string length $dir] > [string length $mroot]} {
|
||||||
|
source tvdb/banner.jim
|
||||||
|
}
|
||||||
|
|
||||||
# Parent directory
|
# Parent directory
|
||||||
set parent [join [lrange [split $dir /] 0 end-1] /]
|
set parent [join [lrange [split $dir /] 0 end-1] /]
|
||||||
if {$parent ne ""} {
|
if {$parent ne ""} {
|
||||||
|
@ -10,6 +10,15 @@ var plugins = {
|
|||||||
|
|
||||||
var dir;
|
var dir;
|
||||||
|
|
||||||
|
function blockpage(msg)
|
||||||
|
{
|
||||||
|
if (!msg)
|
||||||
|
msg = 'Refreshing page...';
|
||||||
|
$.blockUI({
|
||||||
|
message: '<h1><img src=/img/loading.gif> ' + msg + '</h1>'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function disableall()
|
function disableall()
|
||||||
{
|
{
|
||||||
$('button,a,input').disable();
|
$('button,a,input').disable();
|
||||||
@ -67,10 +76,12 @@ $('#paste').button()
|
|||||||
.click(function() {
|
.click(function() {
|
||||||
disableall();
|
disableall();
|
||||||
pastedialogue();
|
pastedialogue();
|
||||||
$('#pwfeedback').load(
|
$('#pwfeedback').load('/browse/clipboard.jim', {
|
||||||
'/browse/clipboard.jim?act=paste&dir='
|
act: 'paste',
|
||||||
+ encodeURIComponent(dir), function() {
|
dir: dir
|
||||||
|
}, function() {
|
||||||
$('#pwdialogue').dialog('close');
|
$('#pwdialogue').dialog('close');
|
||||||
|
blockpage();
|
||||||
window.location.reload(true);
|
window.location.reload(true);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -160,19 +171,19 @@ function delete_callback(file, dir, id)
|
|||||||
function lock_callback(file, type, id)
|
function lock_callback(file, type, id)
|
||||||
{
|
{
|
||||||
var url = '/browse/lock.jim?file=' + file;
|
var url = '/browse/lock.jim?file=' + file;
|
||||||
$.get(url, function() { window.location.reload(true); });
|
$.get(url, function() { blockpage(); window.location.reload(true); });
|
||||||
}
|
}
|
||||||
|
|
||||||
function enc_callback(file, type, id)
|
function enc_callback(file, type, id)
|
||||||
{
|
{
|
||||||
var url = '/browse/enc.jim?file=' + file;
|
var url = '/browse/enc.jim?file=' + file;
|
||||||
$.get(url, function() { window.location.reload(true); });
|
$.get(url, function() { blockpage(); window.location.reload(true); });
|
||||||
}
|
}
|
||||||
|
|
||||||
function new_callback(file, type, id)
|
function new_callback(file, type, id)
|
||||||
{
|
{
|
||||||
var url = '/browse/new.jim?file=' + file;
|
var url = '/browse/new.jim?file=' + file;
|
||||||
$.get(url, function() { window.location.reload(true); });
|
$.get(url, function() { blockpage(); window.location.reload(true); });
|
||||||
}
|
}
|
||||||
|
|
||||||
function thumbnail_callback(file, type, id)
|
function thumbnail_callback(file, type, id)
|
||||||
@ -193,14 +204,14 @@ function rename_submit()
|
|||||||
{
|
{
|
||||||
var s = $('#renameform_form').serialize();
|
var s = $('#renameform_form').serialize();
|
||||||
$.post('/browse/rename.jim', s,
|
$.post('/browse/rename.jim', s,
|
||||||
function() { window.location.reload(true); });
|
function() { blockpage(); window.location.reload(true); });
|
||||||
}
|
}
|
||||||
|
|
||||||
function drename_submit()
|
function drename_submit()
|
||||||
{
|
{
|
||||||
var s = $('#drenameform_form').serialize();
|
var s = $('#drenameform_form').serialize();
|
||||||
$.get('/browse/rename.jim?' + s,
|
$.get('/browse/rename.jim?' + s,
|
||||||
function() { window.location.reload(true); });
|
function() { blockpage(); window.location.reload(true); });
|
||||||
}
|
}
|
||||||
|
|
||||||
function aexpiry_submit()
|
function aexpiry_submit()
|
||||||
@ -208,7 +219,7 @@ function aexpiry_submit()
|
|||||||
$('#aexpiry_working').slideDown('slow');
|
$('#aexpiry_working').slideDown('slow');
|
||||||
var s = $('#aexpiry_form').serialize();
|
var s = $('#aexpiry_form').serialize();
|
||||||
$.get('/browse/aexpiry.jim?' + s,
|
$.get('/browse/aexpiry.jim?' + s,
|
||||||
function() { window.location.reload(true); });
|
function() { blockpage(); window.location.reload(true); });
|
||||||
}
|
}
|
||||||
|
|
||||||
function aexpiry_remove()
|
function aexpiry_remove()
|
||||||
@ -216,14 +227,14 @@ function aexpiry_remove()
|
|||||||
$('#aexpiry_working').slideDown('slow');
|
$('#aexpiry_working').slideDown('slow');
|
||||||
var s = $('#aexpiry_form').serialize();
|
var s = $('#aexpiry_form').serialize();
|
||||||
$.get('/browse/aexpiry.jim?act=remove&' + s,
|
$.get('/browse/aexpiry.jim?act=remove&' + s,
|
||||||
function() { window.location.reload(true); });
|
function() { blockpage(); window.location.reload(true); });
|
||||||
}
|
}
|
||||||
|
|
||||||
function newdir_submit()
|
function newdir_submit()
|
||||||
{
|
{
|
||||||
var s = $('#newdirform_form').serialize();
|
var s = $('#newdirform_form').serialize();
|
||||||
$.get('/browse/mknewdir.jim?' + s,
|
$.get('/browse/mknewdir.jim?' + s,
|
||||||
function() { window.location.reload(true); });
|
function() { blockpage(); window.location.reload(true); });
|
||||||
}
|
}
|
||||||
|
|
||||||
function savestream_submit()
|
function savestream_submit()
|
||||||
@ -235,6 +246,7 @@ function savestream_submit()
|
|||||||
$.get('/browse/savestream.jim?sfile=' +
|
$.get('/browse/savestream.jim?sfile=' +
|
||||||
encodeURIComponent(sf) + '&' + s,
|
encodeURIComponent(sf) + '&' + s,
|
||||||
function() {
|
function() {
|
||||||
|
blockpage();
|
||||||
window.location.reload(true);
|
window.location.reload(true);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -691,6 +703,7 @@ var dmenuclick = function(action, el, pos)
|
|||||||
|
|
||||||
case 'resetnew':
|
case 'resetnew':
|
||||||
var url = '/browse/resetnew.jim?dir=' + file;
|
var url = '/browse/resetnew.jim?dir=' + file;
|
||||||
|
blockpage();
|
||||||
$.get(url, function() { window.location.reload(true); });
|
$.get(url, function() { window.location.reload(true); });
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -877,12 +890,10 @@ var dmenuclick = function(action, el, pos)
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Load folder sizes
|
// Load folder sizes
|
||||||
$.getJSON('/browse/sizes.jim?dir=' + encodeURIComponent(dir),
|
$.getJSON('/browse/sizes.jim', {dir: dir}, folder_size_callback);
|
||||||
folder_size_callback);
|
|
||||||
|
|
||||||
// Flag folders with unwatched items
|
// Flag folders with unwatched items
|
||||||
$.getJSON('/browse/newdir.jim?dir=' + encodeURIComponent(dir),
|
$.getJSON('/browse/newdir.jim', {dir: dir}, new_folder_callback);
|
||||||
new_folder_callback);
|
|
||||||
|
|
||||||
// Load clipboard
|
// Load clipboard
|
||||||
reloadclipboard();
|
reloadclipboard();
|
||||||
@ -967,6 +978,7 @@ var dmenuclick = function(action, el, pos)
|
|||||||
'files': files
|
'files': files
|
||||||
}, function() {
|
}, function() {
|
||||||
$('#pwdialogue').dialog('close');
|
$('#pwdialogue').dialog('close');
|
||||||
|
blockpage();
|
||||||
window.location.reload(true);
|
window.location.reload(true);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
57
webif/html/browse/tvdb/assets.jim
Executable file
57
webif/html/browse/tvdb/assets.jim
Executable file
@ -0,0 +1,57 @@
|
|||||||
|
#!/mod/bin/jimsh
|
||||||
|
|
||||||
|
puts {
|
||||||
|
|
||||||
|
<div id=tvdbdialogue title="Select Series" class=hidden>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<label for="tvdbsearch">
|
||||||
|
<b>Search For</b>
|
||||||
|
</label>
|
||||||
|
</th>
|
||||||
|
<td>
|
||||||
|
<input type=text name="tvdbsearch" id="tvdbsearch"
|
||||||
|
value="" size=70 maxlength=255
|
||||||
|
class="text ui-widget-content ui-corner-all">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id=tvdbresults title="Choose Series" class=hidden>
|
||||||
|
<div class=tvdbresults id=tvdbresults_loading>
|
||||||
|
<img src=/img/loading.gif>
|
||||||
|
Searching theTVDB.com database, please wait...
|
||||||
|
</div>
|
||||||
|
<div class=tvdbresults id=tvdbresults_saving>
|
||||||
|
<img src=/img/loading.gif>
|
||||||
|
Retrieving episode details from theTVDB.com, please wait...
|
||||||
|
</div>
|
||||||
|
<div class=tvdbresults id=tvdbresults_force>
|
||||||
|
You can optionally force a particular series number for this folder.<br>
|
||||||
|
This is useful when the broadcasters do not set good synopses or<br>
|
||||||
|
if episode names are re-used across series. Leave it set to zero<br>
|
||||||
|
if you do not wish to do this.<br>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Force series number:<br>
|
||||||
|
<span class=footnote>(Optional)</span>
|
||||||
|
</th>
|
||||||
|
<td>
|
||||||
|
<input id=tvdb_forceseries type=number value="" min=0>
|
||||||
|
</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
<button id=tvdbresults_forcesave>Save</button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class=tvdbresults id=tvdbresults_inner></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
}
|
||||||
|
|
35
webif/html/browse/tvdb/banner.jim
Normal file
35
webif/html/browse/tvdb/banner.jim
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
#!/mod/bin/jimsh
|
||||||
|
|
||||||
|
require classdump
|
||||||
|
|
||||||
|
if {[file exists "$dir/.tvdbseriesid"]} {
|
||||||
|
set seriesid [string trim [file read "$dir/.tvdbseriesid"]]
|
||||||
|
set tvdb_series [set v [tvdb series [file tail $dir] $seriesid]]
|
||||||
|
puts "<div>"
|
||||||
|
if {[set banner [$v get banner]] ne ""} {
|
||||||
|
puts "
|
||||||
|
<img class=tvdbbannertop src=\"[tvdb bannerurl $banner]\">
|
||||||
|
"
|
||||||
|
}
|
||||||
|
puts "
|
||||||
|
<span id=tvdbseriesname title=\"Series ID: $seriesid\">
|
||||||
|
<a target=_blank href=\"/db/?db=$seriesid.db\">
|
||||||
|
[cgi_quote_html [$v get name]]
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
"
|
||||||
|
if {[file exists "$dir/.tvdbseries"]} {
|
||||||
|
set n [string trim [file read "$dir/.tvdbseries"]]
|
||||||
|
puts "(S$n)"
|
||||||
|
}
|
||||||
|
puts "<button id=tvdbsetseries>Change</button>"
|
||||||
|
puts "</div>"
|
||||||
|
} else {
|
||||||
|
puts {
|
||||||
|
<span id=tvdbinfo class="va right">
|
||||||
|
<img class=tvdblogo src=/img/tvdb.png>
|
||||||
|
<button id=tvdbsetseries>Select Series</button>
|
||||||
|
</span>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
112
webif/html/browse/tvdb/script.js
Normal file
112
webif/html/browse/tvdb/script.js
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
|
||||||
|
$(function() {
|
||||||
|
|
||||||
|
function select_episode()
|
||||||
|
{
|
||||||
|
var sid = $(this).attr('sid');
|
||||||
|
|
||||||
|
$('.tvdbresults').hide();
|
||||||
|
$('#tvdbresults_saving').show();
|
||||||
|
$('#tvdbresults').dialog('option', 'position', {
|
||||||
|
my: "center", at: "center", of: window });
|
||||||
|
|
||||||
|
$.get('tvdb/store.jim', { dir: dir, sid: sid }, function(data) {
|
||||||
|
if (data <= 0)
|
||||||
|
{
|
||||||
|
window.location.reload(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$('.tvdbresults').hide();
|
||||||
|
$('#tvdbresults_force').show();
|
||||||
|
$('#tvdb_forceseries').attr('max', data).val(0);
|
||||||
|
$('#tvdbresults_forcesave')
|
||||||
|
.button()
|
||||||
|
.on('click', function() {
|
||||||
|
$('.tvdbresults').hide();
|
||||||
|
$('#tvdbresults_saving').show();
|
||||||
|
$('#tvdbresults').dialog('option', 'position', {
|
||||||
|
my: "center", at: "center", of: window });
|
||||||
|
$.get('tvdb/store.jim', {
|
||||||
|
dir: dir,
|
||||||
|
sid: sid,
|
||||||
|
series: $('#tvdb_forceseries').val()
|
||||||
|
}, function() {
|
||||||
|
window.location.reload(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#tvdbsetseries').button().on('click', function() {
|
||||||
|
val = $('#tvdbseriesname').text();
|
||||||
|
if (!val)
|
||||||
|
val = dir.split(/[\\/]/).pop();
|
||||||
|
val = val.trim();
|
||||||
|
$('#tvdbsearch').val(val);
|
||||||
|
$('#tvdbdialogue').dialog({
|
||||||
|
modal: true, autoOpen: true,
|
||||||
|
height: 'auto', width: 'auto',
|
||||||
|
show: 'scale', hide: 'fade',
|
||||||
|
draggable: true, resizable: true,
|
||||||
|
closeOnEscape: true,
|
||||||
|
buttons: [
|
||||||
|
{
|
||||||
|
text: "Search",
|
||||||
|
icons: { primary: "ui-icon-search" },
|
||||||
|
click: function() {
|
||||||
|
$(this).dialog('close');
|
||||||
|
$('.tvdbresults').hide();
|
||||||
|
$('#tvdbresults_loading').show();
|
||||||
|
$('#tvdbresults_inner').empty();
|
||||||
|
$('#tvdbresults').dialog({
|
||||||
|
modal: true, autoOpen: true,
|
||||||
|
height: 'auto', width: 'auto',
|
||||||
|
show: 'scale', hide: 'fade',
|
||||||
|
draggable: true, resizable: true,
|
||||||
|
closeOnEscape: true,
|
||||||
|
buttons: {
|
||||||
|
"Cancel": function() {
|
||||||
|
$(this).dialog('close');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$('#tvdbresults_inner').load('tvdb/search.jim',
|
||||||
|
{ term: $('#tvdbsearch').val() }, function() {
|
||||||
|
$('#tvdbresults_inner')
|
||||||
|
.find('.tvdbselect')
|
||||||
|
.button()
|
||||||
|
.on('click', select_episode);
|
||||||
|
$('#tvdbresults_loading').slideUp('slow');
|
||||||
|
$('#tvdbresults_inner').show();
|
||||||
|
$('#tvdbresults').dialog('option',
|
||||||
|
'position', {
|
||||||
|
my: "center", at: "center", of: window });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Clear Series Information",
|
||||||
|
'class': 'red',
|
||||||
|
click: function() {
|
||||||
|
if (!confirm('Clear series information for ' +
|
||||||
|
'this folder?'))
|
||||||
|
return;
|
||||||
|
blockpage('Clearing Series Information...');
|
||||||
|
$.get('tvdb/store.jim', {dir: dir, sid: 0},
|
||||||
|
function() {
|
||||||
|
window.location.reload(true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Close",
|
||||||
|
click: function() {
|
||||||
|
$(this).dialog('close');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
30
webif/html/browse/tvdb/search.jim
Executable file
30
webif/html/browse/tvdb/search.jim
Executable file
@ -0,0 +1,30 @@
|
|||||||
|
#!/mod/bin/jimsh
|
||||||
|
|
||||||
|
package require cgi
|
||||||
|
source /mod/webif/lib/setup
|
||||||
|
require tvdb.class
|
||||||
|
|
||||||
|
set term [cgi_get term -]
|
||||||
|
if {$term eq "-"} exit
|
||||||
|
|
||||||
|
httpheader
|
||||||
|
|
||||||
|
foreach series [[tvdb] searchseries $term] {
|
||||||
|
puts "
|
||||||
|
<div>
|
||||||
|
<div class=tvdbseries>
|
||||||
|
<img class=tvdbbanner src=\"[tvdb bannerurl $series(banner)]\">
|
||||||
|
<span title=\"Series ID: $series(seriesid)\">
|
||||||
|
$series(seriesname)
|
||||||
|
</span>
|
||||||
|
<button class=tvdbselect sid=\"$series(seriesid)\">
|
||||||
|
Select
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class=tvdbsynopsis>
|
||||||
|
$series(overview)
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
"
|
||||||
|
}
|
||||||
|
|
33
webif/html/browse/tvdb/store.jim
Executable file
33
webif/html/browse/tvdb/store.jim
Executable file
@ -0,0 +1,33 @@
|
|||||||
|
#!/mod/bin/jimsh
|
||||||
|
|
||||||
|
package require cgi
|
||||||
|
source /mod/webif/lib/setup
|
||||||
|
require tvdb.class classdump
|
||||||
|
|
||||||
|
set dir [cgi_get dir -]
|
||||||
|
set sid [cgi_get sid -]
|
||||||
|
set series [cgi_get series 0]
|
||||||
|
|
||||||
|
httpheader
|
||||||
|
|
||||||
|
if {$dir eq "-" || $sid eq "-"} exit
|
||||||
|
|
||||||
|
if {$sid == 0} {
|
||||||
|
file delete "$dir/.tvdbseriesid"
|
||||||
|
file delete "$dir/.tvdbseries"
|
||||||
|
puts -nonewline 0
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
set v [tvdb series "" $sid]
|
||||||
|
if {[$v get seriesid] == 0} exit
|
||||||
|
|
||||||
|
file write "$dir/.tvdbseriesid" $sid
|
||||||
|
if {$series > 0} {
|
||||||
|
file write "$dir/.tvdbseries" $series
|
||||||
|
} else {
|
||||||
|
file delete "$dir/.tvdbseries"
|
||||||
|
}
|
||||||
|
|
||||||
|
puts -nonewline [$v series_count]
|
||||||
|
|
32
webif/html/browse/tvdb/style.css
Normal file
32
webif/html/browse/tvdb/style.css
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
|
||||||
|
div.tvdbseries
|
||||||
|
{
|
||||||
|
border-top: 1px solid;
|
||||||
|
padding-top: 4px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.tvdbsynopsis
|
||||||
|
{
|
||||||
|
font-style: italic;
|
||||||
|
margin: 0 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.tvdbbanner
|
||||||
|
{
|
||||||
|
height: 30px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.tvdbbannertop
|
||||||
|
{
|
||||||
|
height: 60px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.tvdblogo
|
||||||
|
{
|
||||||
|
vertical-align: middle;
|
||||||
|
height: 25px;
|
||||||
|
}
|
||||||
|
|
@ -453,21 +453,21 @@ span.toolbarcell
|
|||||||
|
|
||||||
button.blue
|
button.blue
|
||||||
{
|
{
|
||||||
background: url(/img/gloss_wave_blue.png) repeat-x center;
|
background: url(/img/gloss_wave_blue.png) repeat-x center !important;
|
||||||
border: 1px solid blue;
|
border: 1px solid blue;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
button.green
|
button.green
|
||||||
{
|
{
|
||||||
background: url(/img/gloss_wave_green.png) repeat-x center;
|
background: url(/img/gloss_wave_green.png) repeat-x center !important;
|
||||||
border: 1px solid green;
|
border: 1px solid green;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
button.red
|
button.red
|
||||||
{
|
{
|
||||||
background: url(/img/gloss_wave_red.png) repeat-x center;
|
background: url(/img/gloss_wave_red.png) repeat-x center !important;
|
||||||
border: 1px solid green;
|
border: 1px solid green;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,6 @@ jscss script.js
|
|||||||
set databases [glob /var/lib/humaxtv/*.db]
|
set databases [glob /var/lib/humaxtv/*.db]
|
||||||
lappend databases {*}[glob /mod/etc/*.db]
|
lappend databases {*}[glob /mod/etc/*.db]
|
||||||
lappend databases "/mnt/hd2/dms_cds.db"
|
lappend databases "/mnt/hd2/dms_cds.db"
|
||||||
lappend databases "/mod/tmp/tvdb/series.db"
|
|
||||||
lappend databases {*}[glob /mod/var/tvdb/*.db]
|
lappend databases {*}[glob /mod/var/tvdb/*.db]
|
||||||
|
|
||||||
header
|
header
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#!/mod/bin/jimsh
|
#!/mod/bin/jimsh
|
||||||
|
|
||||||
source /mod/webif/lib/setup
|
source /mod/webif/lib/setup
|
||||||
require ts.class
|
require ts.class settings.class
|
||||||
|
|
||||||
source /mod/webif/html/dedup/normalise.jim
|
source /mod/webif/html/dedup/normalise.jim
|
||||||
source /mod/webif/html/dedup/process.jim
|
source /mod/webif/html/dedup/process.jim
|
||||||
|
@ -20,9 +20,21 @@ proc dedupprocess {file} {{seen {}}} {
|
|||||||
|
|
||||||
set dir [file dirname $file]
|
set dir [file dirname $file]
|
||||||
set base [file tail [file rootname $file]]
|
set base [file tail [file rootname $file]]
|
||||||
set syn [dedupnormalise [$ts get synopsis] [$ts get title]]
|
|
||||||
# set epname [$ts episode_name]
|
set syn ""
|
||||||
# set syn "[$ts epstr] - $epname"
|
if {[system has tvdb]} {
|
||||||
|
set epname [$ts episode_name]
|
||||||
|
|
||||||
|
if {[$ts get tvdb_method] ne "" && [$ts get episodenum] > 0} {
|
||||||
|
set syn "[$ts epstr] - $epname"
|
||||||
|
} else {
|
||||||
|
set syn $epname
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if {$syn eq ""} {
|
||||||
|
set syn [dedupnormalise [$ts get synopsis] [$ts get title]]
|
||||||
|
}
|
||||||
|
|
||||||
# Escape special characters to create the filename.
|
# Escape special characters to create the filename.
|
||||||
set fn [system filename $syn]
|
set fn [system filename $syn]
|
||||||
|
|
||||||
@ -32,7 +44,8 @@ proc dedupprocess {file} {{seen {}}} {
|
|||||||
} elseif {$fn in $seen} {
|
} elseif {$fn in $seen} {
|
||||||
set stat dup
|
set stat dup
|
||||||
} elseif {[string length $syn] > 40} {
|
} elseif {[string length $syn] > 40} {
|
||||||
set stat error
|
set syn [string range $syn 0 39]
|
||||||
|
#set stat error
|
||||||
} elseif {$base eq $fn} {
|
} elseif {$base eq $fn} {
|
||||||
set stat nothing
|
set stat nothing
|
||||||
$ts set_deduped
|
$ts set_deduped
|
||||||
|
BIN
webif/html/img/tvdb.png
Normal file
BIN
webif/html/img/tvdb.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.1 KiB |
@ -27,6 +27,7 @@ puts "
|
|||||||
</tr>
|
</tr>
|
||||||
"
|
"
|
||||||
|
|
||||||
|
setting_toggle "theTVDB.com integration?" "tvdb" $($tvdb)
|
||||||
setting_toggle "Slide-down toolbar?" "notoolbar" $(!$notoolbar) 1
|
setting_toggle "Slide-down toolbar?" "notoolbar" $(!$notoolbar) 1
|
||||||
setting_toggle "Mobile link on main page?" "nomobile" $(!$nomobile) 1
|
setting_toggle "Mobile link on main page?" "nomobile" $(!$nomobile) 1
|
||||||
setting_toggle "Help links on main page?" "nohelplinks" $(!$nohelplinks) 1
|
setting_toggle "Help links on main page?" "nohelplinks" $(!$nohelplinks) 1
|
||||||
|
@ -38,6 +38,7 @@ set channel_group [$settings channel_group]
|
|||||||
set epg_style [$settings epg_style]
|
set epg_style [$settings epg_style]
|
||||||
set service_style [$settings service_style]
|
set service_style [$settings service_style]
|
||||||
set notoolbar [$settings notoolbar]
|
set notoolbar [$settings notoolbar]
|
||||||
|
set tvdb [$settings tvdb]
|
||||||
set nomobile [$settings nomobile]
|
set nomobile [$settings nomobile]
|
||||||
set nohelplinks [$settings nohelplinks]
|
set nohelplinks [$settings nohelplinks]
|
||||||
set notwitfeed [$settings notwitfeed]
|
set notwitfeed [$settings notwitfeed]
|
||||||
@ -92,6 +93,7 @@ handle_int_update pkgdev $pkgdev "Development Package Display"
|
|||||||
handle_int_update logsize $logsize "Log rotation size"
|
handle_int_update logsize $logsize "Log rotation size"
|
||||||
handle_int_update logkeep $logkeep "Logs to keep"
|
handle_int_update logkeep $logkeep "Logs to keep"
|
||||||
handle_int_update notoolbar $notoolbar "Disable toolbar"
|
handle_int_update notoolbar $notoolbar "Disable toolbar"
|
||||||
|
handle_int_update tvdb $tvdb "Enable tvdb"
|
||||||
handle_int_update nomobile $nomobile "Disable mobile link"
|
handle_int_update nomobile $nomobile "Disable mobile link"
|
||||||
handle_int_update nohelplinks $nohelplinks "Disable help links"
|
handle_int_update nohelplinks $nohelplinks "Disable help links"
|
||||||
handle_int_update notwitfeed $notwitfeed "Disable twitter feed ticker"
|
handle_int_update notwitfeed $notwitfeed "Disable twitter feed ticker"
|
||||||
|
Binary file not shown.
@ -80,6 +80,15 @@ proc {file read} {target {bytes 0}} {
|
|||||||
error "Cannot read $target"
|
error "Cannot read $target"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proc {file write} {target content} {
|
||||||
|
if {[catch {set fd [open $target w]} msg]} {
|
||||||
|
error "Open failed, $msg"
|
||||||
|
} else {
|
||||||
|
$fd puts -nonewline $content
|
||||||
|
$fd close
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
local proc file {cmd args} {
|
local proc file {cmd args} {
|
||||||
switch $cmd {
|
switch $cmd {
|
||||||
rename { tailcall {file rename} {*}$args }
|
rename { tailcall {file rename} {*}$args }
|
||||||
@ -87,6 +96,7 @@ local proc file {cmd args} {
|
|||||||
touch { tailcall {file touch} {*}$args }
|
touch { tailcall {file touch} {*}$args }
|
||||||
tdelete { tailcall {file tdelete} {*}$args }
|
tdelete { tailcall {file tdelete} {*}$args }
|
||||||
read { tailcall {file read} {*}$args }
|
read { tailcall {file read} {*}$args }
|
||||||
|
write { tailcall {file write} {*}$args }
|
||||||
default { tailcall upcall file $cmd {*}$args }
|
default { tailcall upcall file $cmd {*}$args }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,7 @@ class settings {
|
|||||||
smtp_server ""
|
smtp_server ""
|
||||||
pkgdev 0
|
pkgdev 0
|
||||||
notoolbar 0
|
notoolbar 0
|
||||||
|
tvdb 0
|
||||||
nomobile 0
|
nomobile 0
|
||||||
nohelplinks 0
|
nohelplinks 0
|
||||||
notwitfeed 0
|
notwitfeed 0
|
||||||
@ -168,6 +169,10 @@ settings method notoolbar {{val -1}} {
|
|||||||
return [$self _nval_setting notoolbar $val]
|
return [$self _nval_setting notoolbar $val]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
settings method tvdb {{val -1}} {
|
||||||
|
return [$self _nval_setting tvdb $val]
|
||||||
|
}
|
||||||
|
|
||||||
settings method genrededup {{val -1}} {
|
settings method genrededup {{val -1}} {
|
||||||
return [$self _nval_setting genrededup $val]
|
return [$self _nval_setting genrededup $val]
|
||||||
}
|
}
|
||||||
|
@ -640,7 +640,8 @@ proc {system has} {comp} {
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
tvdb {
|
tvdb {
|
||||||
return [file exists /mod/webif/.tvdb]
|
require settings.class
|
||||||
|
return [[settings] _nval_setting tvdb]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
|
@ -511,36 +511,57 @@ set ::ts::episode_prefixes {
|
|||||||
{^t4: *}
|
{^t4: *}
|
||||||
{^brand new series *[-:]* *}
|
{^brand new series *[-:]* *}
|
||||||
{^\.+}
|
{^\.+}
|
||||||
|
{ *\(Part [0-9] of [0-9]\) *}
|
||||||
|
{, Part [0-9]}
|
||||||
}
|
}
|
||||||
|
|
||||||
ts method tvdb_resolve {} {
|
ts method tvdb_resolve {} {
|
||||||
# See if we can find a TVDB series for this recording.
|
# See if we can find a TVDB series for this recording.
|
||||||
|
|
||||||
set tvdb_series [set v [tvdb series [$self series_name]]]
|
set dir [file dirname $file]
|
||||||
|
|
||||||
|
set seriesid 0
|
||||||
|
if {[file exists "$dir/.tvdbseriesid"]} {
|
||||||
|
set seriesid [string trim [file read "$dir/.tvdbseriesid"]]
|
||||||
|
} else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if {!$seriesnum && [file exists "$dir/.tvdbseries"]} {
|
||||||
|
set seriesnum [string trim [file read "$dir/.tvdbseries"]]
|
||||||
|
}
|
||||||
|
|
||||||
|
set tvdb_series [set v [tvdb series [$self series_name] $seriesid]]
|
||||||
if {[$v get seriesid] == 0} { return }
|
if {[$v get seriesid] == 0} { return }
|
||||||
|
|
||||||
# Got one.
|
# Got one.
|
||||||
|
|
||||||
|
# Easiest case - we can explicitly request the episode.
|
||||||
if {$seriesnum && $episodenum} {
|
if {$seriesnum && $episodenum} {
|
||||||
# Easiest case - we can explicitly request the episode.
|
|
||||||
set tvdb_method "series and episode number"
|
set tvdb_method "series and episode number"
|
||||||
return [$v episodebynum $seriesnum $episodenum]
|
return [$v episodebynum $seriesnum $episodenum]
|
||||||
}
|
}
|
||||||
|
|
||||||
# Now try to find the episode using the current episode name
|
# Now try to find the episode using the current episode name
|
||||||
set k [$v episodebyname $episodename]
|
# (using series or episode number if available)
|
||||||
|
set k [$v episodebyname $episodename $seriesnum $episodenum]
|
||||||
if {[llength $k]} {
|
if {[llength $k]} {
|
||||||
set tvdb_method "episode name ($episodename)"
|
set tvdb_method "episode name ($episodename)"
|
||||||
return $k
|
return $k
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# More problematic but can at least narrow the list of candidates
|
||||||
|
# using the episode or series numbers if we have them.
|
||||||
|
|
||||||
if {$episodenum} {
|
if {$episodenum} {
|
||||||
# More problematic but can at least narrow the list of
|
|
||||||
# candidates.
|
|
||||||
set tvdb_method "episode number"
|
set tvdb_method "episode number"
|
||||||
return [$v episodebyepnum $episodenum $synopsis]
|
return [$v episodebyepnum $episodenum $synopsis]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if {$seriesnum} {
|
||||||
|
set tvdb_method "series and synopsis"
|
||||||
|
return [$v episodebyseries $seriesnum $synopsis]
|
||||||
|
}
|
||||||
|
|
||||||
# Most difficult - try and match based on synopsis alone
|
# Most difficult - try and match based on synopsis alone
|
||||||
set tvdb_method "synopsis text"
|
set tvdb_method "synopsis text"
|
||||||
return [$v episodebysynopsis $synopsis]
|
return [$v episodebysynopsis $synopsis]
|
||||||
|
@ -28,6 +28,7 @@ class tvdb {
|
|||||||
name ""
|
name ""
|
||||||
overview ""
|
overview ""
|
||||||
dat ""
|
dat ""
|
||||||
|
banner ""
|
||||||
|
|
||||||
_matches {}
|
_matches {}
|
||||||
_smatches {}
|
_smatches {}
|
||||||
@ -40,6 +41,10 @@ proc ::tvdb::dlog {msg} {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tvdb method setseries {sid} {
|
||||||
|
set seriesid $sid
|
||||||
|
}
|
||||||
|
|
||||||
tvdb method _fetch {url} {
|
tvdb method _fetch {url} {
|
||||||
set f [socket stream $::tvdb::mirror:80]
|
set f [socket stream $::tvdb::mirror:80]
|
||||||
$f puts -nonewline "GET /api/$url HTTP/1.0\r\n"
|
$f puts -nonewline "GET /api/$url HTTP/1.0\r\n"
|
||||||
@ -83,6 +88,97 @@ tvdb method _parse {xml vars {end "XXX"}} {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#<Series>
|
||||||
|
#<seriesid>261451</seriesid>
|
||||||
|
#<language>en</language>
|
||||||
|
#<SeriesName>Teenage Mutant Ninja Turtles (2012)</SeriesName>
|
||||||
|
#<banner>graphical/261451-g2.jpg</banner>
|
||||||
|
#<Overview>Four ninja turtles, mutated by a mysterious alien substance, must rise up out of the sewers and defend their city against evil forces from both the past and present.</Overview>
|
||||||
|
#<FirstAired>2012-09-29</FirstAired>
|
||||||
|
#<Network>Nickelodeon</Network>
|
||||||
|
#<id>261451</id>
|
||||||
|
#</Series>
|
||||||
|
|
||||||
|
tvdb method _extract {xml end vars} {
|
||||||
|
set x [xml init $xml]
|
||||||
|
set cattr 0
|
||||||
|
set ret {}
|
||||||
|
set attrs {}
|
||||||
|
while {1} {
|
||||||
|
lassign [$x next] type val attr etype
|
||||||
|
if {$type == "EOF"} break
|
||||||
|
switch $etype {
|
||||||
|
START {
|
||||||
|
set cattr $val
|
||||||
|
}
|
||||||
|
END {
|
||||||
|
if {$val == $end} {
|
||||||
|
lappend ret $attrs
|
||||||
|
set attrs {}
|
||||||
|
}
|
||||||
|
set cattr 0
|
||||||
|
}
|
||||||
|
default {
|
||||||
|
if {$type == "TXT"} {
|
||||||
|
if {$cattr in $vars} {
|
||||||
|
set attrs([\
|
||||||
|
string tolower $cattr]) $val
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $ret
|
||||||
|
}
|
||||||
|
|
||||||
|
tvdb method fetchseries {} {
|
||||||
|
if {!$seriesid} return
|
||||||
|
set base "$::tvdb::cache/$seriesid"
|
||||||
|
# Expire old files
|
||||||
|
if {[file exists "$base.xml"]} {
|
||||||
|
set age $([clock seconds] - [file mtime "$base.xml"])
|
||||||
|
::tvdb::dlog "$base.xml age $age"
|
||||||
|
if {$age > $::tvdb::cacheage} {
|
||||||
|
file delete "$base.xml"
|
||||||
|
::tvdb::dlog "Expiring $base.xml"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if {![file exists "$base.xml"]} {
|
||||||
|
::tvdb::dlog "Downloading"
|
||||||
|
# Download the series info
|
||||||
|
set f [open "$base.zip" w]
|
||||||
|
puts $f [$self _fetch \
|
||||||
|
"$::tvdb::apikey/series/$seriesid/all/en.zip"]
|
||||||
|
$f close
|
||||||
|
catch {exec unzip -o -q "$base.zip" en.xml -d $::tvdb::cache}
|
||||||
|
if {[file exists "$::tvdb::cache/en.xml"]} {
|
||||||
|
file rename "$::tvdb::cache/en.xml" $base.xml
|
||||||
|
# Extract episode info
|
||||||
|
puts [exec /mod/webif/lib/bin/tvdb "$base.xml"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tvdb method loadseries {} {
|
||||||
|
if {!$seriesid} return
|
||||||
|
set ret [$::tvdb::indexdb query {
|
||||||
|
select * from series where series_id = %s} $seriesid]
|
||||||
|
if {[llength $ret] == 1} {
|
||||||
|
foreach {k v} [lindex $ret 0] {
|
||||||
|
set $k $v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tvdb method searchseries {series} {
|
||||||
|
::tvdb::dlog "Searching TVDB for $series"
|
||||||
|
set seriesxml [$self _fetch \
|
||||||
|
"/GetSeries.php?seriesname=[cgi_quote_url $series]"]
|
||||||
|
return [$self _extract $seriesxml Series \
|
||||||
|
{seriesid SeriesName banner Overview}]
|
||||||
|
}
|
||||||
|
|
||||||
tvdb method findseries {series} {
|
tvdb method findseries {series} {
|
||||||
set ret ""
|
set ret ""
|
||||||
catch {
|
catch {
|
||||||
@ -103,50 +199,11 @@ tvdb method findseries {series} {
|
|||||||
$self _parse $seriesxml {seriesid} Series
|
$self _parse $seriesxml {seriesid} Series
|
||||||
}
|
}
|
||||||
|
|
||||||
#puts "SERIESID: ($seriesid)"
|
|
||||||
|
|
||||||
if {!$seriesid} {
|
if {!$seriesid} {
|
||||||
# Negative caching
|
# Negative caching
|
||||||
$::tvdb::indexdb query {
|
$::tvdb::indexdb query {
|
||||||
replace into nseries values('%s')
|
replace into nseries values('%s')
|
||||||
} $series
|
} $series
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Found a series
|
|
||||||
|
|
||||||
set base "$::tvdb::cache/$seriesid"
|
|
||||||
# Expire old files
|
|
||||||
if {[file exists "$base.xml"]} {
|
|
||||||
set age $([clock seconds] - [file mtime "$base.xml"])
|
|
||||||
::tvdb::dlog "$base.xml age $age"
|
|
||||||
if {$age > $::tvdb::cacheage} {
|
|
||||||
file delete "$base.xml"
|
|
||||||
::tvdb::dlog "Expiring $base.xml"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if {![file exists "$base.xml"]} {
|
|
||||||
::tvdb::dlog "Downloading"
|
|
||||||
# Download the series info
|
|
||||||
set f [open "$base.zip" w]
|
|
||||||
puts $f [$self _fetch \
|
|
||||||
"$::tvdb::apikey/series/$seriesid/all/en.zip"]
|
|
||||||
$f close
|
|
||||||
exec unzip -o -q "$base.zip" en.xml -d $::tvdb::cache
|
|
||||||
if {[file exists "$::tvdb::cache/en.xml"]} {
|
|
||||||
file rename "$::tvdb::cache/en.xml" $base.xml
|
|
||||||
# Extract episode info
|
|
||||||
puts [exec /mod/webif/lib/bin/tvdb "$base.xml"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
set ret [$::tvdb::indexdb query {
|
|
||||||
select * from series where series_id = %s} $seriesid]
|
|
||||||
if {[llength $ret] == 1} {
|
|
||||||
foreach {k v} [lindex $ret 0] {
|
|
||||||
set $k $v
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,12 +229,13 @@ tvdb method episodebynum {series episode} {
|
|||||||
return {}
|
return {}
|
||||||
}
|
}
|
||||||
|
|
||||||
tvdb method episodebyname {str} {
|
tvdb method episodebyname {str {series 0} {episode 0}} {
|
||||||
if {![llength [set db [$self dbhandle]]]} return {}
|
if {![llength [set db [$self dbhandle]]]} return {}
|
||||||
set ret [$db query {
|
set q "select * from episode where name like '%s'"
|
||||||
select * from episode where name like '%s'
|
if {$series} { append q " and series = $series" }
|
||||||
order by length(name)
|
if {$episode} { append q " and episode = $episode" }
|
||||||
} [tvdb tolike $str]]
|
append q " order by length(name)"
|
||||||
|
set ret [$db query $q [tvdb tolike $str]]
|
||||||
if {[llength $ret]} { return [lindex $ret 0] }
|
if {[llength $ret]} { return [lindex $ret 0] }
|
||||||
return {}
|
return {}
|
||||||
}
|
}
|
||||||
@ -239,14 +297,46 @@ tvdb method episodebyepnum {episode synopsis} {
|
|||||||
return [$self seek $synopsis "and episode = $episode"]
|
return [$self seek $synopsis "and episode = $episode"]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tvdb method episodebyseries {series synopsis} {
|
||||||
|
return [$self seek $synopsis "and series = $series"]
|
||||||
|
}
|
||||||
|
|
||||||
tvdb method episodebysynopsis {synopsis} {
|
tvdb method episodebysynopsis {synopsis} {
|
||||||
return [$self seek $synopsis]
|
return [$self seek $synopsis]
|
||||||
}
|
}
|
||||||
|
|
||||||
proc {tvdb series} {series} {
|
tvdb method series_count {} {
|
||||||
|
if {![llength [set db [$self dbhandle]]]} { return 0 }
|
||||||
|
|
||||||
|
set ret [$db query {
|
||||||
|
select max(series) from episode
|
||||||
|
}]
|
||||||
|
set num 0
|
||||||
|
if {[llength $ret]} {
|
||||||
|
lassign [lindex $ret 0] x num
|
||||||
|
}
|
||||||
|
return $num
|
||||||
|
}
|
||||||
|
|
||||||
|
proc {tvdb series} {series {sid 0}} {
|
||||||
set t [tvdb]
|
set t [tvdb]
|
||||||
|
|
||||||
$t findseries $series
|
if {$sid} {
|
||||||
|
$t setseries $sid
|
||||||
|
} else {
|
||||||
|
$t findseries $series
|
||||||
|
}
|
||||||
|
if {[$t get seriesid] ne "0"} {
|
||||||
|
$t fetchseries
|
||||||
|
$t loadseries
|
||||||
|
if {[$t get name] eq ""} {
|
||||||
|
$t setseries 0
|
||||||
|
}
|
||||||
|
}
|
||||||
return $t
|
return $t
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proc {tvdb bannerurl} {banner} {
|
||||||
|
return "http://$::tvdb::mirror/banners/$banner"
|
||||||
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user