diff --git a/var/mongoose/cgi-bin/browse.jim b/var/mongoose/cgi-bin/browse.jim
index 6ae5e2a..9253a43 100755
--- a/var/mongoose/cgi-bin/browse.jim
+++ b/var/mongoose/cgi-bin/browse.jim
@@ -2,6 +2,7 @@
package require cgi
source /mod/var/mongoose/lib/ts.class
+source /mod/var/mongoose/lib/pretty_size
puts "Content-Type: text/html"
puts ""
@@ -19,7 +20,9 @@ proc directory {file bfile} {
puts "
$bfile
+ style=\"padding:$pad\">
+ $bfile
"
+ # Size
+ puts "
($sz) "
+
# Icons
set locked 0
@@ -108,26 +118,65 @@ puts {
Delete
Toggle Lock
Rename
-
Change Title
Download
+
+
-
}
+puts "
$dir"
+
# Breadcrumb path
-puts "
"
+puts "
+
"
+puts ""
source /mod/var/mongoose/html/lib/footer.jim
diff --git a/var/mongoose/cgi-bin/browse/browse.js b/var/mongoose/cgi-bin/browse/browse.js
index d21f8a0..a1d4b34 100755
--- a/var/mongoose/cgi-bin/browse/browse.js
+++ b/var/mongoose/cgi-bin/browse/browse.js
@@ -1,4 +1,35 @@
+function epginfo_callback(data, status, xhr)
+{
+ var width = 85;
+
+ if (status != 'success')
+ return;
+
+ //console.log(status);
+ //console.dir(data);
+
+ $('#titleorig').val(data.title);
+ $('#renametitle').val(data.title);
+ if (data.synopsis.length > width)
+ data.synopsis = data.synopsis.substring(0, width) + '...';
+ $('#synopsis').html(data.synopsis);
+ $('tr.tstype').show('slow');
+}
+
+function insert_folder_size(folder, size)
+{
+ folder = folder.replace(/ /g, '');
+ //console.log("Folder: (%s) = (%s)", folder, size);
+ $('#' + folder).text(' (' + size + 'iB)');
+}
+
+function folder_size_callback(data, status, xhr)
+{
+ //console.log("Status: %s", status);
+ $.each(data, insert_folder_size);
+}
+
function delete_callback(file, type, id)
{
var el = 'div.bf#' + id;
@@ -24,6 +55,12 @@ function lock_callback(file, type, id)
});
}
+function rename_submit()
+{
+ var s = $('#renameform_form').serialize();
+ alert(s);
+}
+
var $confirm; // Populated after DOM is loaded.
function confirm_action(action, callback, file, type, id)
@@ -46,6 +83,7 @@ function preparemenu(el, menu)
{
if (el.attr('type') == 'ts')
{
+ $('#optmenu').enableContextMenuItems('#lock');
if (el.attr('locked') == 1)
{
$(menu).changeContextMenuItem('#lock', 'Unlock');
@@ -64,15 +102,21 @@ function preparemenu(el, menu)
}
}
-function menuclick(action, el, pos)
+
+$(document).ready(function() {
+
+var menuclick = function(action, el, pos)
{
var file = $(el).parent().prevAll('a.bf').last().attr('file');
+ var bfile = file.replace(/.*\/|\.[^.]*$/g, '');
+ bfile = bfile.replace(/[\x00-\x1f]+/g, '');
var type = $(el).attr('type');
var id = $(el).attr('did');
switch (action)
{
case 'delete':
- confirm_action('delete', delete_callback, file, type, id);
+ confirm_action('delete', delete_callback, file,
+ type, id);
break;
case 'lock':
@@ -80,6 +124,24 @@ function menuclick(action, el, pos)
file, type, id);
break;
+ case 'rename':
+ $('#rename').val(bfile);
+ $('#renameorig').val(file);
+
+ $('#titleorig').val('');
+ $('#renametitle').val('');
+ $('#synopsis').val('');
+ $('tr.tstype').css('display', 'none');
+
+ if (type == 'ts')
+ {
+ $.getJSON('/cgi-bin/browse/epgtitle.jim?file=' +
+ encodeURIComponent(file), epginfo_callback);
+ }
+
+ $('#renameform').dialog('open');
+ break;
+
case 'download':
window.location.href = file;
break;
@@ -88,9 +150,7 @@ function menuclick(action, el, pos)
alert('Unhandled action: ' + action);
break;
}
-}
-
-$(document).ready(function() {
+};
// Bind context menu to opt+ image
$('img.opt').contextMenu(
@@ -103,7 +163,7 @@ $(document).ready(function() {
);
// Disable items which are not yet implemented.
- $('#optmenu').disableContextMenuItems('#rename,#title');
+ $('#optmenu').disableContextMenuItems('#title');
// Create reusable dialogue.
var $dialog = $('#dialogue').dialog({
@@ -132,6 +192,19 @@ $(document).ready(function() {
$dialog.dialog('open');
});
+ $('#renameform').dialog({
+ autoOpen: false,
+ height: 'auto', width: 'auto',
+ modal: true,
+ buttons: {
+ "Update": rename_submit,
+ "Close": function() {
+ $(this).dialog('close');
+ }
+ },
+ close: function() { $('#rename').val(''); }
+ });
+
// Create re-usable confirmation dialogue.
$confirm = $('#confirm').dialog({
modal: true, autoOpen: false,
@@ -139,7 +212,11 @@ $(document).ready(function() {
show: 'fade', hide: 'fade',
draggable: false, resizable: false
});
+
+ var dir = $('#dir').text();
+
+ // Load folder sizes
+ $.getJSON('/cgi-bin/browse/sizes.jim?dir=' + encodeURIComponent(dir),
+ folder_size_callback);
});
-
-
diff --git a/var/mongoose/cgi-bin/browse/epgtitle.jim b/var/mongoose/cgi-bin/browse/epgtitle.jim
new file mode 100755
index 0000000..7aae0a0
--- /dev/null
+++ b/var/mongoose/cgi-bin/browse/epgtitle.jim
@@ -0,0 +1,22 @@
+#!/mod/bin/jimsh
+
+package require cgi
+source /mod/var/mongoose/lib/ts.class
+
+puts "Content-Type: application/json"
+puts ""
+
+cgi_input
+#cgi_dump
+#set _cgi(file) "/media/My Video/Doctor Who/6.13._The_Almost_People.ts"
+
+if {![dict exists $_cgi file]} { exit }
+
+set file [dict get $_cgi file]
+set ts [ts fetch $file]
+
+puts "{"
+puts "\"title\" : \"[$ts get title]\","
+puts "\"synopsis\" : \"[$ts get synopsis]\""
+puts "}"
+
diff --git a/var/mongoose/cgi-bin/browse/sizes.jim b/var/mongoose/cgi-bin/browse/sizes.jim
new file mode 100755
index 0000000..0313ec7
--- /dev/null
+++ b/var/mongoose/cgi-bin/browse/sizes.jim
@@ -0,0 +1,26 @@
+#!/mod/bin/jimsh
+
+package require cgi
+
+puts "Content-Type: application/json"
+puts ""
+
+cgi_input
+#cgi_dump
+
+set _cgi(dir) "/media/My Video"
+
+set dir [dict get $_cgi dir]
+
+#9.4G /media/My Video/Archive
+#1.4G /media/My Video/CSI_ Crime Scene Investigation
+puts "{"
+foreach line [split [exec /mod/bin/busybox/du -h "$dir/"] "\n"] {
+ set fields [split $line "\t"]
+ set size [lindex $fields 0]
+ set node [lindex [split [lindex $fields 1] '/'] end]
+ puts "\"$node\" : \"$size\","
+}
+puts "\"dummy\" : \"\""
+puts "}"
+
diff --git a/var/mongoose/cgi-bin/epg_search.jim b/var/mongoose/cgi-bin/epg_search.jim
index d7e66bc..cecec39 100755
--- a/var/mongoose/cgi-bin/epg_search.jim
+++ b/var/mongoose/cgi-bin/epg_search.jim
@@ -32,13 +32,27 @@ catch { set scrid [dict get $_cgi scrid] }
puts "
"
if {$ct > 0 } {
diff --git a/var/mongoose/cgi-bin/settings.jim b/var/mongoose/cgi-bin/settings.jim
index 4a148f6..d12b330 100755
--- a/var/mongoose/cgi-bin/settings.jim
+++ b/var/mongoose/cgi-bin/settings.jim
@@ -54,10 +54,12 @@ source /mod/var/mongoose/html/lib/header.jim
puts {}
puts {
+
+
diff --git a/var/mongoose/html/img/channels/ADULT PARTY.png b/var/mongoose/html/img/channels/ADULT PARTY.png
deleted file mode 100644
index 31caa28..0000000
--- a/var/mongoose/html/img/channels/ADULT PARTY.png
+++ /dev/null
@@ -1 +0,0 @@
-ADULT PARTY.png -
diff --git a/var/mongoose/lib/epg.class b/var/mongoose/lib/epg.class
index 1e1333d..f2c3f1a 100644
--- a/var/mongoose/lib/epg.class
+++ b/var/mongoose/lib/epg.class
@@ -216,7 +216,7 @@ proc {epg cleanup} {} {
proc {epg exec} {mode args} {
set raw 0
- set cmd [list /mod/bin/epg -f $epgpath]
+ set cmd [list /mod/bin/epg -f $::epgpath]
set extra ""
foreach arg $args {
if {[string first "-" $arg] == 0} {
diff --git a/var/mongoose/lib/ts.class b/var/mongoose/lib/ts.class
index a208703..fae134e 100644
--- a/var/mongoose/lib/ts.class
+++ b/var/mongoose/lib/ts.class
@@ -75,7 +75,14 @@ proc {ts exec} {file} {
return [exec {*}$cmd]
}
-proc {ts fetch} {file} {
+proc {ts fetch} {file {checked 0}} {
+ # Check that this is a .ts file which has at least one sidecar
+ # file (.nts)
+ if {!$checked} {
+ if {[file extension $file] ne ".ts"} { return 0 }
+ if {![file exists "[file rootname $file].nts"]} { return 0 }
+ }
+
return [ts parse $file [ts exec $file]]
}