Compare commits

...

624 Commits

Author SHA1 Message Date
c60ac50c43 Simplify string format 2023-07-13 13:15:46 +01:00
275dc62d26 Update to 1.5.2 2023-07-13 12:32:25 +01:00
d22735af68 Protect log rotation operations by lock 2023-07-12 02:25:51 +01:00
fb9fb6ca85 Use manage_logs to rotate log file 2023-07-12 02:11:13 +01:00
1d243c989b Correctly display minute/minutes 2023-07-02 10:37:26 +01:00
44c52143a7 Fix divide by 0 error 2023-07-02 10:27:43 +01:00
7bd5bbc3c0 Log unschedule operation correctly 2023-07-01 22:14:33 +01:00
9c5b1a5641 Sanity check Recording start/end fields 2023-07-01 12:36:52 +01:00
90b69d0d21 Remove mux database 2023-07-01 00:02:48 +01:00
8713ea9495 Fix URL encoding for CRIDs containing IMIs 2023-06-28 02:12:46 +01:00
7c3021e320 Fix JSON formatting 2023-06-28 02:11:55 +01:00
0108d87c1c Update to 1.5.1-5 2023-06-13 10:54:15 +01:00
9b5c9553f0 Fix reverse sorts to keep folders first 2023-06-13 10:53:47 +01:00
2ea56fd045 Add Type (Extension) sort and tidy selection options 2023-06-13 01:37:00 +01:00
ac13c730a8 Add front panel software reboot reason 2023-06-07 00:33:52 +01:00
3de96080c2 Update to 1.5.1-4 2023-06-06 01:49:30 +01:00
1def3cc520 Overwrite files from previous shrink failure 2023-06-06 01:48:53 +01:00
d3f83f6f42 Update to 1.5.1-3 2023-06-05 13:47:04 +01:00
0711f9b226 Fix syntax error 2023-06-05 13:46:51 +01:00
a7b7e589e1 Update to 1.5.1-2 2023-06-04 21:30:59 +01:00
0a5f9a95c4 Revert bafa8fcfd3 2023-06-04 20:58:52 +01:00
a1adcb7033 Add front panel software reboot reason 2023-06-04 16:13:16 +01:00
32a32d2ad3 Widen window 2023-06-03 01:56:31 +01:00
7bac247e48 Remove white space before testing length 2023-05-30 00:40:08 +01:00
bafa8fcfd3 Stop epg jumping when page load has finished 2023-05-28 20:06:04 +01:00
39d18b4ff0 Fix missing pathname when scanning for .ts files
Don't abort on safe_delete error
2023-05-28 19:24:53 +01:00
c9100acf66 Don't overwrite instance variable defaults if .hmt file corrupt 2023-05-28 19:22:03 +01:00
0ab8fb125d Don't crash if file doesn't exist 2023-05-28 19:21:06 +01:00
b24ade080f Don't alert with null string 2023-05-19 01:43:15 +01:00
62d63b2f84 Fix visual schedule off by 1 day 2023-03-26 17:45:01 +01:00
f5b43f7ea1 Update to 1.5.1 2023-03-10 00:19:37 +00:00
640e81bda0 Add alternative a7.31 loader detection 2023-03-10 00:18:35 +00:00
7a00ea84ed Correct status when copying between local drives. 2023-02-17 20:37:50 +00:00
d3d1755e98 Expire lone .hmt files from failed recordings 2023-01-23 14:18:09 +00:00
b63a268dac Revert ce9e32977d - large can of worms. 2023-01-04 19:40:34 +00:00
ce9e32977d Rename class variables to match change from 12 years ago! 2023-01-04 00:59:54 +00:00
29e560b11b Reverse sign of duration calculation 2022-12-30 19:26:43 +00:00
30a006b971 Add "system isrestartpending" 2022-12-27 17:02:23 +00:00
aa24f100fa Allow application/xml* as editable types.
Tidy error messages.
2022-12-05 15:11:34 +00:00
f9825002eb Update to 1.5.0-9 2022-10-27 11:56:43 +01:00
47f413b55d Fix off by 1 hour 2022-10-27 11:56:00 +01:00
b0ba26918a Update to 1.5.0-8 2022-10-27 11:27:23 +01:00
3f756a78f4 Fix double Sunday display around DST change 2022-10-27 11:26:43 +01:00
80464c8342 Update to 1.5.0-7 2022-10-16 15:28:40 +01:00
a587278586 Delay refresh on UI interaction 2022-10-16 15:27:33 +01:00
00e8a342c0 Ignore TSR buffer size when disabled 2022-10-15 22:07:34 +01:00
203430c224 Update to 1.5.0-6 2022-09-25 17:01:24 +01:00
8c2a33b54d More fixes for expr weirdness 2022-09-25 16:59:39 +01:00
3f1832387a Revert expr modification 2022-09-25 02:08:56 +01:00
cb78e4bc1d Update to 1.5.0-4 2022-09-22 02:04:01 +01:00
f17adb764b Update expr commands to remove deprecated syntax 2022-09-22 02:02:32 +01:00
c73a940bae Ignore errors from invalid directories 2022-09-15 01:39:13 +01:00
805b9ba2dc Check for null last boot reason 2022-09-14 11:03:49 +01:00
66bd753689 Update to 1.5.0-3 2022-09-13 01:16:19 +01:00
c1358ef72f Update to 1.5.0-2 2022-09-10 15:33:33 +01:00
25bb62f622 Improve lock handling of /var/lib/humaxtv/setup.db 2022-09-10 15:31:33 +01:00
aab63aa8cc Fix filename escaping in file editor 2022-09-10 14:24:10 +01:00
5e941b889c Update to 1.5.0-1 2022-04-24 17:39:03 +01:00
b6c0ff80b6 Don't error on null SMART status 2022-04-24 17:37:13 +01:00
97b24da0ed Allow HD to collect disk stats. 2022-04-24 17:36:35 +01:00
a34a951a33 Handle errors from Smartctl 2022-04-24 17:33:49 +01:00
12ecc32e44 Update version and dependencies 2022-04-21 18:59:25 +01:00
b44f5c3678 Fix clipboard paste for .ts files without sidecars 2022-04-21 18:00:39 +01:00
bdfae19796 Add error check 2022-04-21 18:00:04 +01:00
5cb9bdd6dd Remove redundant calls 2022-04-21 17:58:44 +01:00
9b8e6763af Handle SMART error counters more intelligently 2022-04-20 12:17:06 +01:00
1e53bc1b37 Update version and dependencies 2022-04-15 14:57:22 +01:00
cfa77051e5 Change loglevel 2022-04-15 14:56:15 +01:00
08de047d91 Add prefix to logging 2022-04-15 14:55:07 +01:00
da24fc6b20 (Re-)Create settings table if missing. 2022-04-11 01:00:40 +01:00
f4357b87db Update to 1.4.9-8 2022-03-28 00:00:50 +01:00
9fb761a38e Revert 567d142613 2022-03-27 23:59:32 +01:00
a79addc543 Remove redundant rename/comments 2022-03-25 23:46:52 +00:00
5edd63b2af Fix for "system dlnaurl" reversion 2022-03-25 23:43:51 +00:00
7f1d68bf3a Remove .orig files 2022-03-25 23:40:03 +00:00
0d7ba4744f Revert e79e85af81 2022-03-25 23:34:40 +00:00
c5c4091cf6 Update to 1.4.9-7 2022-03-25 23:17:12 +00:00
778c328a79 Improve disk check functionality and layout 2022-03-25 23:07:58 +00:00
99f22c6a28 Use 24h clock when adding manual scheduled event 2022-03-25 23:06:02 +00:00
51719420ba Add Power cycle reason 2022-03-25 23:04:06 +00:00
e5a8f12a15 Join files with names containing ampersand 2022-03-25 23:02:14 +00:00
3dc3404327 Merge pull request 'Play file in browser or with external helper application' (#34) from df/webif:df-playmedia-patch into master
Reviewed-on: #34
2022-03-25 22:58:12 +00:00
67fe7e655c Merge pull request 'Improve processing and display of custom encryption key' (#48) from df/webif:df-cryptokey-patch into master
Reviewed-on: #48
2022-03-25 22:57:51 +00:00
4f55ea1b9f Merge pull request 'Fixes and improvements for bookmark viewer' (#47) from df/webif:df-bookmarkviewer-patch into master
Reviewed-on: #47
2022-03-25 22:57:15 +00:00
4f5ba6f14f Merge pull request 'Fix incorrectly constructed query list, restore purging completed entries' (#46) from df/webif:df-queue-safer-patchv2 into master
Reviewed-on: #46
2022-03-25 22:54:02 +00:00
df
a7a4067a7f Improve processing and display of custom encryption key 2021-10-07 21:11:56 +01:00
df
4d9fa6b961 Don't show Generate Thumbnails for ODEncrypted file 2021-06-03 00:38:46 +01:00
df
55ea14864c Merge branch 'master' of https://git.hpkg.tv/hummypkg/webif into df-bookmarkviewer-patch 2021-05-30 12:57:17 +01:00
df
de1b690f36 Rework scripting for bookmark page; move presentation to CSS 2021-05-30 11:50:04 +01:00
df
caafde56c8 Correctly end the HTML page with closing tags etc 2021-05-28 15:26:48 +01:00
df
cb549b4995 Name ad-hoc attributes with data- prefix 2021-05-28 15:26:48 +01:00
HummyPkg
d04c094543 Update to 1.4.9-6 2021-05-28 15:26:48 +01:00
HummyPkg
2b51358c63 Update to 1.4.9-5 2021-05-28 15:26:48 +01:00
df
033eff6fcc Ensure , is escaped in ::js::escape 2021-05-28 15:26:47 +01:00
df
d5b34ed2c3 Fix unquoted string; add genre check; errors to stderr 2021-05-28 15:26:47 +01:00
HummyPkg
541318fbba Update to 1.4.9-4 2021-05-28 15:26:46 +01:00
df
eab635cab6 Improve error trapping, actually make it work 2021-05-28 15:26:46 +01:00
df
e4aa241351 Make use of unique element IDs for img consistent 2021-05-28 15:26:45 +01:00
HummyPkg
760f6db560 Revert "Work around uclibc getaddrinfo()"
This reverts commit f206766191.
2021-05-28 15:26:45 +01:00
HummyPkg
d5fd97a83a Fix bookmark script.js 2021-05-28 15:26:44 +01:00
HummyPkg
d4fbdd149e Update version 2021-05-28 15:26:43 +01:00
HummyPkg
3a1d398874 Add option to automatically remove unused dependency packages 2021-05-28 15:26:43 +01:00
4b925199e5 Add Failed and Pending select buttons, reorder buttons 2021-05-28 15:26:43 +01:00
599bb9b5bc Move favicon.ico to prevent errors during install 2021-05-28 15:26:42 +01:00
cdeea09dab Work around uclibc getaddrinfo() 2021-05-28 15:26:42 +01:00
710162a654 Fix crash when genre is null 2021-05-28 15:26:42 +01:00
8347713f55 Fix overflowing conflict warning 2021-05-28 15:26:41 +01:00
df
afee47b6bc Improve status, adding more possible outputs
- check for copying vs playing: the same file.ext is open twice
 - check for playing DLNA: localhost:n->host:9000
 - on HDR, distinguish Playing a show vs streaming it over DLNA
 - distinguish between Watching, Watching (delayed) (timeshift),
   and Not Watching (eg Portal).
2021-05-28 15:26:41 +01:00
df
318d088fff Support setting the seriesnum, episodenum, episodetot attributes in "rename" 2021-05-28 15:26:41 +01:00
df
08ec7643f7 Add thumbnail viewer to Manage Bookmarks 2021-05-28 15:26:34 +01:00
HummyPkg
0e66340b42 Fix problems pointed out by tclCheck and frink 2021-05-28 15:20:51 +01:00
6c3c1f3423 Restrict matching epsiodes search to same channel 2021-05-28 15:20:51 +01:00
df
a748870195 Add test for matching key for DLNA; fallback to direct; fail if no key matches 2021-05-28 15:20:51 +01:00
df
5c8a573382 Correct the maximum length enforced for guidance text (74 vs 48) 2021-05-28 15:20:51 +01:00
df
db477e5d42 Add missing $ for certain variable references
Missing $s invalidated attempts to check the length of title, synopsis, guidance.
2021-05-28 15:20:50 +01:00
df
7c4d359aec Reduce (or apply) maximum lengths for title and synopsis, allowing for character set prefix byte 2021-05-28 15:20:50 +01:00
df
88d3274241 Error protect database access; re-create corrupt queue DB. 2021-05-28 15:20:49 +01:00
df
00689a2036 Make 127.0.0.1 the default host for system dlnahelper
In all the cases where `system dlnahelper` is called, no host/IP part is specified, and those cases are creating a URL that only needs to be accessible from the same machine, where the loopback address should be the default.

Should fix eg https://hummy.tv/forum/threads/detectads-not-always-succesful.9936/post-147241.
2021-05-28 15:20:49 +01:00
df
39dae95f28 Set maximum width for File column
Add title attribute to display possibly truncated File as tooltip.

Will this work well for mobile/touchscreen use?
2021-05-28 15:20:49 +01:00
df
0c1bb71520 exists -proc -> exists -command
`exists -command` subsumes `exists -proc`

This test is generally checking whether the command exists, rather than some proc that is overriding it.

Currently `class` is a proc but this may not always be so.
2021-05-28 15:20:48 +01:00
df
763abda557 Remove unwanted padding before programme divs in EPG to avoid cumulative positioning error. 2021-05-28 15:20:48 +01:00
df
3f75333542 Display raw programme times, not clipped to the display period. 2021-05-28 15:20:48 +01:00
df
11cfa40d78 Fix typo and < vs <= in dbfetch -trange option: avoids missing channels in EPG. 2021-05-28 15:20:47 +01:00
df
e884a2ebad Also use non-breaking spaces in file name display 2021-05-28 15:20:47 +01:00
df
fac0dee693 Fix quoting of replacement text, avoiding "unmatched ]" 2021-05-28 15:20:47 +01:00
df
2f28b0a66e Improve listing of directories with special characters, especially spaces. 2021-05-28 15:20:47 +01:00
df
ad9b48b0d2 Remove unnecessary exec
Jim supports the pwd command since at least 6461e8bf6d, so no need to exec it.
2021-05-28 15:20:46 +01:00
df
0e6a67d24a Ensure cut plan segments are aligned left 2021-05-28 15:20:46 +01:00
df
eb7f9667ba Avoid negative CSS widths 2021-05-28 15:20:46 +01:00
df
b8964c8017 Check that bookmark save succeeded
If not, enable the old "Save new bookmarks" button.

Also
* add icons for buttons
* simplify invert URL handling.
2021-05-28 15:20:46 +01:00
df
1a08892868 Allow minimum width for cut plan
Also
* add ID for estimated time row
* make the <label> for the Save Bookmarks checkbox actually be its label.
2021-05-28 15:20:45 +01:00
HummyPkg
42619e6555 Add to episode parsing tests 2021-05-28 15:20:45 +01:00
HummyPkg
eac4849326 Update version 2021-05-28 15:20:45 +01:00
HummyPkg
0d99a7b24d Update tvdb XML parsing utility 2021-05-28 15:20:44 +01:00
df
6d0b1deebe Banish extraneous ) 2021-05-28 15:20:44 +01:00
df
959aa9f8e6 Avoid displaying negative free space 2021-05-28 15:20:43 +01:00
df
6814880b40 Understand Part/Pt. as a synonym for episode 2021-05-28 15:20:43 +01:00
HummyPkg
569bff9d60 Release 1.4.8-11 2021-05-28 15:20:43 +01:00
df
b9787a0a9f Retry access in case the settings database is locked 2021-05-28 15:20:42 +01:00
df
42d03e25c6 Change to 0.5s, doubling for 4 tries 2021-05-28 15:20:42 +01:00
df
13f3b1ccce Raise the "database locked" error from caller context 2021-05-28 15:20:42 +01:00
df
3981bbd37e Retry access in case the settings database is locked 2021-05-28 15:20:41 +01:00
df
67e71691eb Retry access in case the settings database is locked
Create `settings::_safer_query` class proc to allow 5 tries with 1s delay; use it for `_nval_setting` and `_tval_setting` methods
2021-05-28 15:20:41 +01:00
567d142613 Prevent raw utf8 display
https://hummy.tv/forum/threads/webif-web-interface-1-4-x.7712/post-135917
2021-05-28 15:20:41 +01:00
1b11be6827 Fix the ****ing formatting in this stupid editor 2021-05-28 15:20:41 +01:00
519f771859 Fix thumbnail generation 2021-05-28 15:20:40 +01:00
df
49a7e430cf Fix incorrectly constructed query list to restore purging completed entries
A constant list included an item that needed to be evaluated.
2021-05-19 13:06:28 +01:00
df
da7d07a891 Add Download button 2021-04-17 14:13:04 +00:00
df
bf838ed5e4 Add Download button 2021-04-17 13:42:50 +00:00
df
8b795a0a7d Fix quoting and escaping of JS fragments 2021-04-17 12:09:25 +00:00
df
243dfdd595 Fix quoting and escaping of JS fragments
NB jQuery $('#id') in a string looks like an [expr ...] to Jim!
2021-04-17 01:55:33 +00:00
df
8bbc28d3c2 Add Download button 2021-04-16 10:32:20 +00:00
df
c8f51adfaa Add Download button 2021-04-16 10:29:27 +00:00
df
4845a4b0cf Add Download button 2021-04-13 12:58:20 +00:00
HummyPkg
ee4c121a54 Update to 1.4.9-6 2021-04-10 09:53:33 +01:00
HummyPkg
8f340c9a3b Update to 1.4.9-5 2021-04-10 09:53:13 +01:00
67504198ec Merge pull request 'Ensure , is escaped in ::js::escape' (#45) from df/webif:df-listdirs-patch-v2 into master
Reviewed-on: #45
2021-04-10 08:52:31 +00:00
df
ba0f505e34 Ensure , is escaped in ::js::escape 2021-04-10 01:05:19 +01:00
33e2f705c3 Merge pull request 'df-seriesnum-patchv2' (#44) from df/webif:df-seriesnum-patch into master
Reviewed-on: #44
2021-03-22 21:57:07 +00:00
df
a26526b047 Fix unquoted string; add genre check; errors to stderr 2021-03-21 00:14:35 +00:00
HummyPkg
04e4fd1083 Update to 1.4.9-4 2021-03-20 19:33:27 +00:00
6e3b5114be Merge pull request 'df-decryptq-testkey-patchv2' (#43) from df/webif:df-decryptq-testkey-patch into master
Reviewed-on: #43
2021-03-20 19:31:28 +00:00
df
6c40da165d Improve error trapping, actually make it work 2021-03-20 01:22:48 +00:00
df
7964145677 Don't play HTML5 media in the WebIf Browse Files window 2021-03-15 17:26:36 +00:00
df
f032f8b469 Play file in browser or with external helper application
Create a new `play.jim` in html/browse. The `/play` subtree is now obsolete and can be removed.

Fix DLNA playback on HDR

`urlbase` is the host name

Remove typos (missing }s, $)

Make new file 'play.jim' executable
2021-03-15 17:26:27 +00:00
df
e79e85af81 Make {system dlnaurl} handle any valid pathname for a file 2021-03-15 16:08:47 +00:00
df
68d9d7f5b5 Add webm to displayed file types
Also handle files with no "definition" as not ts.
2021-03-15 16:08:47 +00:00
df
3454302a98 Use dicts for httpheader 2021-03-15 16:08:46 +00:00
df
75b32ad3e0 Make 127.0.0.1 the default host for DLNA functions (pt 2) 2021-03-15 16:08:46 +00:00
df
20c035873e Remove invalid use of video/ts MIME type 2021-03-15 16:08:46 +00:00
df
346ed469c8 Make use of unique element IDs for img consistent 2021-03-04 19:31:09 +00:00
HummyPkg
029b115628 Revert "Work around uclibc getaddrinfo()"
This reverts commit f206766191.
2021-02-26 23:04:57 +00:00
HummyPkg
c7a91766af Fix bookmark script.js 2021-02-24 18:39:52 +00:00
HummyPkg
d00f925e58 Update version 2021-02-24 18:14:44 +00:00
HummyPkg
fc3b28e978 Add option to automatically remove unused dependency packages 2021-02-24 18:14:44 +00:00
c4afa7ac60 Add Failed and Pending select buttons, reorder buttons 2021-02-24 15:13:35 +00:00
3c3b0af49f Move favicon.ico to prevent errors during install 2021-02-24 14:54:59 +00:00
f206766191 Work around uclibc getaddrinfo() 2021-02-24 14:47:11 +00:00
67afb37f27 Fix crash when genre is null 2021-02-24 14:46:37 +00:00
ad150143a8 Fix overflowing conflict warning 2021-02-24 14:44:55 +00:00
df
5d3b046c70 Improve status, adding more possible outputs
- check for copying vs playing: the same file.ext is open twice
 - check for playing DLNA: localhost:n->host:9000
 - on HDR, distinguish Playing a show vs streaming it over DLNA
 - distinguish between Watching, Watching (delayed) (timeshift),
   and Not Watching (eg Portal).
2021-02-24 13:58:46 +00:00
df
18bed926b3 Support setting the seriesnum, episodenum, episodetot attributes in "rename" 2021-02-24 13:39:35 +00:00
df
1c868ae201 Add thumbnail viewer to Manage Bookmarks 2021-02-24 13:33:35 +00:00
HummyPkg
4820ade1f5 Fix problems pointed out by tclCheck and frink 2021-02-24 13:21:19 +00:00
bc2e6c1a85 Restrict matching epsiodes search to same channel 2021-02-24 13:15:06 +00:00
df
6f45884f94 Add test for matching key for DLNA; fallback to direct; fail if no key matches 2021-02-24 13:13:01 +00:00
a1cf871a84 Merge pull request 'Correctly manage maximum lengths of certain HMT fields' (#30) from df/webif:df-hmtfieldlength-patch into master
Reviewed-on: #30
2021-02-24 13:04:14 +00:00
df
7834dae075 Error protect database access; re-create corrupt queue DB. 2021-02-24 12:55:52 +00:00
15cba14cc3 Merge pull request 'df-dlnahelper-patch' (#23) from df/webif:df-dlnahelper-patch into master
Reviewed-on: #23
2021-02-24 12:48:31 +00:00
3f74654ea2 Merge pull request 'df-queuetablewidth-patch' (#24) from df/webif:df-queuetablewidth-patch into master
Reviewed-on: #24
2021-02-24 12:46:50 +00:00
df
f16399ec2f exists -proc -> exists -command
`exists -command` subsumes `exists -proc`

This test is generally checking whether the command exists, rather than some proc that is overriding it.

Currently `class` is a proc but this may not always be so.
2021-02-24 12:45:30 +00:00
df
0060e47db5 Remove unwanted padding before programme divs in EPG to avoid cumulative positioning error. 2021-02-24 12:40:45 +00:00
df
8bdb1233e8 Display raw programme times, not clipped to the display period. 2021-02-24 12:40:45 +00:00
df
2642b190b0 Fix typo and < vs <= in dbfetch -trange option: avoids missing channels in EPG. 2021-02-24 12:40:44 +00:00
df
8975cbd71d Also use non-breaking spaces in file name display 2021-02-24 12:38:39 +00:00
df
32ac3c8421 Fix quoting of replacement text, avoiding "unmatched ]" 2021-02-24 12:38:39 +00:00
df
f5180dc144 Improve listing of directories with special characters, especially spaces. 2021-02-24 12:38:39 +00:00
df
dac3ea8698 Remove unnecessary exec
Jim supports the pwd command since at least 6461e8bf6d, so no need to exec it.
2021-02-24 12:38:38 +00:00
df
4ae8ea85f7 Ensure cut plan segments are aligned left 2021-02-24 12:24:33 +00:00
df
47495e7b8d Avoid negative CSS widths 2021-02-24 12:24:33 +00:00
df
73d25247f0 Check that bookmark save succeeded
If not, enable the old "Save new bookmarks" button.

Also
* add icons for buttons
* simplify invert URL handling.
2021-02-24 12:24:32 +00:00
df
f7c37e83ae Allow minimum width for cut plan
Also
* add ID for estimated time row
* make the <label> for the Save Bookmarks checkbox actually be its label.
2021-02-24 12:15:33 +00:00
df
cf407f9a80 Correct the maximum length enforced for guidance text (74 vs 48) 2021-02-22 19:31:20 +00:00
df
d98217b679 Merge branch 'master' into df-hmtfieldlength-patch 2021-02-22 16:35:49 +00:00
HummyPkg
269f844f43 Add to episode parsing tests 2021-01-18 23:10:16 +00:00
HummyPkg
488961c600 Update version 2021-01-18 23:00:37 +00:00
HummyPkg
a5f0734201 Update tvdb XML parsing utility 2021-01-18 22:59:58 +00:00
94849c51e7 Merge pull request 'Avoid displaying negative free space' (#28) from df/webif:df-freespace-patch into master
Reviewed-on: #28
2021-01-14 21:04:15 +00:00
907d9d8dcf Merge pull request 'Understand Part/Pt. as a synonym for episode' (#31) from df/webif:df-partasepisode-patch into master
Reviewed-on: #31
2021-01-14 21:03:22 +00:00
df
6641b6f458 Understand Part/Pt. as a synonym for episode 2021-01-01 22:33:14 +00:00
df
98ef6a876f Add missing $ for certain variable references
Missing $s invalidated attempts to check the length of title, synopsis, guidance.
2020-12-31 15:22:42 +00:00
df
d05f841bb4 Reduce (or apply) maximum lengths for title and synopsis, allowing for character set prefix byte 2020-12-31 15:18:03 +00:00
df
4da3bb0209 Banish extraneous ) 2020-12-31 12:13:52 +00:00
HummyPkg
2e471129b8 Release 1.4.8-11 2020-12-13 23:24:12 +00:00
df
0ad1491634 Avoid displaying negative free space 2020-12-11 11:18:58 +00:00
df
da32aa0a72 Set maximum width for File column
Add title attribute to display possibly truncated File as tooltip.

Will this work well for mobile/touchscreen use?
2020-11-14 13:31:08 +00:00
df
f6117a4ec0 Make 127.0.0.1 the default host for system dlnahelper
In all the cases where `system dlnahelper` is called, no host/IP part is specified, and those cases are creating a URL that only needs to be accessible from the same machine, where the loopback address should be the default.

Should fix eg https://hummy.tv/forum/threads/detectads-not-always-succesful.9936/post-147241.
2020-11-14 13:21:26 +00:00
df
580ecb8c75 Add thumbnail viewer to Manage Bookmarks
Finally eliminate end in favour of curval
2020-11-14 13:19:06 +00:00
df
3c8ea907de Add thumbnail viewer to Manage Bookmarks
Refactor script to handle UI interaction between Bookmarks, Slider and Thumbnail generation.
2020-11-14 13:19:06 +00:00
df
8e68fb10ad Add Crop shortcut button 2020-11-14 13:19:05 +00:00
df
c9d7299092 Add Crop shortcut button 2020-11-14 13:19:05 +00:00
df
0b6f6fccb1 Add tooltips to slider handles 2020-11-14 13:19:05 +00:00
df
6937f2b7fb Add thumbnail viewer to Manage Bookmarks 2020-11-14 13:19:05 +00:00
df
086814cafa Add thumbnail viewer to Manage Bookmarks 2020-11-14 13:19:05 +00:00
8021455a94 Merge pull request 'df-lockedsettings-patch' (#18) from df/webif:df-lockedsettings-patch into master
Reviewed-on: #18
2020-11-14 11:16:55 +00:00
c995f2232e Merge pull request 'prpr-patch-fix-thumbnail' (#25) from prpr/webif:prpr-patch-fix-thumbnail into master
Reviewed-on: #25
2020-11-14 11:12:14 +00:00
6dc47f2b96 Merge branch 'master' into prpr-patch-fix-thumbnail 2020-11-14 01:29:38 +00:00
af74503b99 Fix the ****ing formatting in this stupid editor 2020-11-14 01:25:46 +00:00
58ecd41952 Fix thumbnail generation 2020-11-14 01:17:07 +00:00
df
e579c8dd24 Merge branch 'master' into df-lockedsettings-patch 2020-10-23 11:45:30 +00:00
df
7c600be77e Retry access in case the settings database is locked 2020-10-20 18:34:19 +00:00
e3f7a2b738 Merge pull request 'prpr-patch-rename-utf8' (#20) from prpr/webif:prpr-patch-rename-utf8 into master
Reviewed-on: #20
2020-10-19 22:02:38 +00:00
a90f49b324 Prevent raw utf8 display
https://hummy.tv/forum/threads/webif-web-interface-1-4-x.7712/post-135917
2020-10-19 16:05:12 +00:00
df
3e9ecc8a7c Change to 0.5s, doubling for 4 tries 2020-10-19 11:44:53 +00:00
df
7bb66de5f2 Raise the "database locked" error from caller context 2020-10-18 19:19:26 +00:00
df
9b64128c92 Retry access in case the settings database is locked 2020-10-18 15:48:07 +00:00
df
6822c833be Retry access in case the settings database is locked
Create `settings::_safer_query` class proc to allow 5 tries with 1s delay; use it for `_nval_setting` and `_tval_setting` methods
2020-10-18 14:53:23 +00:00
df
cefe60c722 Merge pull request 'Resync master' (#5) from hummypkg/webif:master into master
Reviewed-on: df/webif#5
2020-10-18 14:06:40 +00:00
ee885a173c Merge pull request 'master' (#1) from hummypkg/webif:master into master
Reviewed-on: prpr/webif#1
2020-10-16 21:05:30 +00:00
HummyPkg
d7c15163e1 Update release version 2020-10-16 14:28:17 +01:00
879c458256 Merge pull request 'df-auto-deq-patch' (#14) from df/webif:df-auto-deq-patch into master
Reviewed-on: #14
2020-10-16 13:27:15 +00:00
df
1a25e2a3f1 Fix potential format error with queue item containing %
If an item is in the queue whose file name contains a %, the following error occurs, causing the item never to be dequeued:
```in procedure '::auto::dumpq' called at file "/mod/webif/lib/auto/deq", line 167
at file "/mod/webif/lib/auto/deq", line 118
/mod/webif/lib/auto/deq:118: Error: not enough arguments for all format specifiers```
The file name needs to be passed to `format` as a parameter with format `%s` rather than embedding it in the format string, or else ```log "[format ...][$q get file]"```
2020-10-16 14:26:30 +01:00
006a04683a Merge pull request 'df-autolast-future-patch' (#13) from df/webif:df-autolast-future-patch into master
Reviewed-on: #13
2020-10-16 13:25:41 +00:00
df
3623a26a08 Correct autolast in the future
Fixing issue in <https://hummy.tv/forum/threads/recursive-auto-shrink-auto-decrypt-no-longer-working.9399/post-134718>.
2020-10-16 14:25:15 +01:00
c428a367a1 Merge pull request 'Use service ids to map to mux names' (#12) from prpr/webif:master into master
Reviewed-on: #12
2020-10-16 13:18:00 +00:00
480108f3a2 Merge pull request 'Schedule all epsiodes of series' (#11) from MymsMan/webif:SeriesSched into master
Reviewed-on: #11
2020-10-16 13:16:25 +00:00
2884a82dbf Schedule all epsiodes of series 2020-10-16 14:16:15 +01:00
ac4b392db8 Merge pull request 'Rotate auto.log to auto_<timestamp>.log when it excedes settings logsize' (#16) from MymsMan/webif:Rotate_auto.log into master
Reviewed-on: #16
2020-10-16 13:14:11 +00:00
c3d360fa63 Rotate auto.log to auto_<timestamp>.log when it excedes settings logsize 2020-10-16 14:13:16 +01:00
df
2d06ec7811 Resync master from hummypkg/webif:master
Reviewed-on: df/webif#4
2020-07-14 11:49:50 +00:00
3f199f32ab Update 'webif/html/diag/mux.jim' 2020-07-14 00:29:02 +00:00
HummyPkg
1994d99294 Relocate sort_size.gif 2020-06-18 01:05:28 +01:00
HummyPkg
cbc62f4903 Update version 2020-06-18 00:58:55 +01:00
f40a82df57 Merge pull request 'df-browse-sizesort-patch' (#9) from df/webif:df-browse-sizesort-patch into master 2020-06-17 23:58:33 +00:00
HummyPkg
0ef47da7b6 Remove trailing whitespace, restore last blank line 2020-06-18 00:57:22 +01:00
df
42cf8bf238 Add tooltips for sort orders
Also generalise the file sort function to allow sorting by any quantity returned by `[file stat]`
2020-06-18 00:50:55 +01:00
df
9cf915e5f7 Avoid sort order build-up in sort URL parameter string
Fixes behaviour where each new sort added &order=n to the query string.
2020-06-18 00:50:55 +01:00
df
478d9db2e2 Add sort by size (icon) 2020-06-18 00:50:55 +01:00
df
b824882eb2 Add sort by size
Implementing https://hummy.tv/forum/threads/webif-web-interface-1-4-x.7712/post-142116.

The sort line is reorganised to allow for two more sort orders.
2020-06-18 00:50:55 +01:00
HummyPkg
4b3efc2e72 Fix missing continuation 2020-06-16 10:52:14 +01:00
HummyPkg
abf121bba4 Fix rsv::find_hsvc by channel 2020-06-14 14:31:25 +01:00
HummyPkg
c1bc10eca8 Fix schedule restore 2020-06-14 13:40:38 +01:00
df
0e09258bfa Merge pull request 'Fix extraneous $' (#2) from svc.class into master 2020-06-07 12:35:55 +00:00
HummyPkg
3b7a573600 Bump version 2020-06-06 22:23:11 +01:00
HummyPkg
c68b6a17db Merge branch 'master' of https://git.hpkg.tv/hummypkg/webif 2020-06-06 22:22:33 +01:00
e767f28a8f Merge pull request 'Fix extraneous $' (#8) from df/webif:svc.class into master 2020-06-06 21:22:22 +00:00
df
ddb163ab5c Fix extraneous $
Should fix `modinit.log` error report:
```in procedure 'rsv' called at file "/mod/sbin/autoschedule", line 22
at file "/mod/webif/lib/rsv.class", line 1374```
2020-06-05 16:44:29 +00:00
HummyPkg
4194bf627c Increase rsvsync dependency 2020-06-03 13:12:53 +01:00
HummyPkg
e3de677046 Bump version, require latest jim-cgi 2020-06-03 13:02:16 +01:00
d69ee1e97a Merge pull request 'TVDB char entity fix (Update 'webif/lib/xml.class')' (#2) from df/webif:tvdb-entity-decode into master 2020-06-03 11:01:13 +00:00
HummyPkg
3ddc898553 Whitespace and indentation cleanup 2020-06-03 12:00:43 +01:00
df
1dfb66c576 Update 'webif/lib/xml.class' 2020-06-03 12:00:43 +01:00
96e53bec56 Merge pull request 'df-progressbar-tooltip-patch' (#3) from df/webif:df-progressbar-tooltip-patch into master 2020-06-03 10:43:54 +00:00
df
18aee67607 Make percentage visible in progressbar image 2020-06-03 11:43:30 +01:00
c416e5f39d Merge pull request 'colourXepg' (#7) from MymsMan/webif:colourXepg into master 2020-06-03 10:39:29 +00:00
61df972bde colour code skipped and already recorded programmes in the extended epg view 2020-06-03 11:38:56 +01:00
a67f5a9b70 Merge pull request 'Updates to rsv.class and epg,class to support the new schedchk package' (#6) from MymsMan/webif:schedchk into master 2020-06-03 10:36:22 +00:00
HummyPkg
022e6459fc Adjust whitespace and indentation to match project 2020-06-03 11:35:27 +01:00
cd9e9924f6 add issplit method to rsv.class 2020-06-03 11:01:10 +01:00
e3da17ca6c use s-crid:e-crid as key for recorded programmes 2020-06-03 11:01:09 +01:00
b99327a562 Updates to rsv.class and epg.class to support schedchk package 2020-06-03 11:01:09 +01:00
1b5472a141 Merge pull request 'Change schedule list to use svc.class instead of get_channel_attr_byhsvc' (#4) from MymsMan/webif:schedlist into master 2020-06-03 09:59:31 +00:00
8586483474 Change scedule list to use svc.class instead of get_channel_attr_byhsvc 2020-06-03 10:57:50 +01:00
df
dd3e4cb358 Make percentage visible in progressbar image
Add title attribute for tooltip since % value isn't actually displayed otherwise.
2020-05-11 11:40:14 +00:00
HummyPkg
a3cb0a6693 Add svc.class 2020-04-19 12:00:49 +01:00
HummyPkg
7b53d0b549 Update version 2020-04-02 19:09:07 +01:00
79785362ae Merge pull request 'Add -nocase to epg dbfetch method to allow case insensitive searches' (#1) from MymsMan/webif:nocase into master 2020-04-02 18:08:08 +00:00
38cde695e4 add -nocase option to epg dpftech method 2020-04-02 19:06:07 +01:00
HummyPkg
3080f9786d Add CFW 3.14 kernel versions 2020-03-29 16:49:09 +01:00
xyz321
1363fd2f22 Fix problem with EPG v
iew shortly after midnight
2020-02-24 14:53:12 +00:00
HummyPkg
7cc8518779 Increase version number 2020-02-22 10:36:37 +00:00
MymsMan
487ff500ab Catch call to du to prevent errors if remote folder unreadable 2020-02-22 10:34:46 +00:00
MymsMan
d2e4e10919 Don't move files on other devices to Dustbin 2020-02-20 22:43:22 +00:00
HummyPkg
8994d016ef Add missing wget dependency 2020-02-07 13:46:40 +00:00
d14ccef3bf Catch errors from stat that might cause automatic processing to stall 2020-01-25 17:02:12 +00:00
f77d11f3fc Restore thetvdb functionality following site changes 2019-11-27 15:51:43 +00:00
38aca0d740 Crop is failing due to double URL encode 2019-11-17 16:08:16 +00:00
/df
249af1b4fa Make entire toolbar cell clickable 2019-11-17 16:07:56 +00:00
9fe8b3a067 bump version 2019-11-10 21:06:36 +00:00
0f55145586 Sort queue by date (after priority) 2019-11-10 21:06:14 +00:00
ede9ef3171 Upgrade jquery.scrollto to version 2.1.2 2019-11-10 21:05:44 +00:00
Matthew
dfde94c384 Automatic edit point bookmarks following crop 2019-11-10 21:04:11 +00:00
0c7dd2b31f Bump version 2019-05-08 14:20:22 +01:00
59bbcc09fb Better way of determining midnight (does not require jim patch) 2019-05-08 14:20:07 +01:00
789950858d Bump version, require updated jim 2019-05-08 14:03:30 +01:00
69d0e6597d Revert to using clock scan to determine midnight 2019-05-08 14:02:51 +01:00
prpr
9c80bb0601 Properly handle CRIDs containing / 2019-05-08 14:02:14 +01:00
92f9e5ca60 Use eSystem for DVB-T/T2 detection.
Transmission mode 1 has been seen in the wild.
2019-04-25 14:38:49 +01:00
917d47e1c6 bump version 2019-02-05 14:04:09 +00:00
b9bf4fc5d3 Fix calculation for midnight today 2019-02-05 14:03:36 +00:00
e595c6b17b Bump version 2019-02-04 19:54:26 +00:00
xyz321
6eb6f49fea Make {system usbmounts} more generic . 2019-02-04 19:52:42 +00:00
f5a205a2af Support flag file to disable nugget-recordings 2019-01-31 13:14:17 +00:00
773a33f960 Add new flag to failed image 2019-01-19 12:56:25 +00:00
03e1c7340e Add option to disable underscore indicator 2019-01-19 12:56:25 +00:00
db4655e29b Update nugget dependency 2019-01-19 12:56:25 +00:00
042f729006 Show icon for folders containing _ items 2019-01-19 12:56:24 +00:00
a68df32ac0 Increase rsvsync dependency 2019-01-18 10:19:36 +00:00
da865f3e85 Support automatically removing old log files after a number of days 2019-01-17 12:13:06 +00:00
06188094bf Clearing old logs should remove the file 2019-01-17 11:50:22 +00:00
a4fe3dcaed Bump version 2019-01-17 11:40:51 +00:00
22b6892b2d Favourite groups could appear in the wrong order 2019-01-17 11:26:16 +00:00
132afd3ca7 Fix favourite group selection 2019-01-17 11:15:45 +00:00
ba3db5eb59 Bump dependency version for channel icons 2019-01-06 23:45:18 +00:00
0f3ba2655a Use [nugget recordings] for status 2018-12-20 11:30:11 +00:00
ea4feec008 Keep legacy and current restore behaviour separate 2018-12-19 08:38:43 +00:00
9de13741c8 Allow favourites to be inserted manually into the sequence within a backup file 2018-12-09 21:59:05 +00:00
f3fc621de1 Updates for queued URIs 2018-10-10 22:18:55 +01:00
6745b88fb9 Allow generic files to be added to queue 2018-10-08 22:26:28 +01:00
da9f328316 Completing initial decryption key functions 2018-04-30 22:59:55 +01:00
5d03bedfac Enable decryption for HD model and in the absence of a DLNA server.
Support decryption via dropdown menu for files not yet indexed.
2018-04-26 22:26:14 +01:00
c15859ed30 Bump version 2018-04-18 18:04:36 +01:00
9fdf3017f0 Add {system encryptionkey} 2018-04-18 18:04:08 +01:00
89e61f669b Check for key in genrelist 2018-03-12 23:50:17 +00:00
83abd2a5cd De-couple mux database 2018-03-12 23:41:25 +00:00
db273a8502 bump version 2018-02-26 00:24:50 +00:00
93b32a7796 Handle split events with multi-character IMIs 2018-02-26 00:24:25 +00:00
4d3b134fe7 Do not attempt to display an icon for unclassified 2018-02-12 00:11:05 +00:00
7477fe1956 Fix notify log display (from prpr) 2018-02-11 13:46:00 +00:00
26150bda5a Fix {ts genrelist} 2018-01-31 00:09:02 +00:00
3193ca00ab re-instate {ts genrelist} 2018-01-30 01:10:46 +00:00
437fed841b bump version 2018-01-28 11:43:56 +00:00
165b1de49e Centralise genre table and use the same one for EPG & TS.
Add missing 'Drama' genre.
Show genre in recording-details popup.
2018-01-28 11:38:28 +00:00
df05e23415 tweak syntax highlighting 2018-01-28 10:44:00 +00:00
133a9ffd46 Version 1.4.2-8 2017-12-08 09:09:53 +00:00
ff846fb6d0 Add reverse sort by date 2017-12-08 09:09:46 +00:00
b6eceebc26 use static local variable for units 2017-09-03 22:02:14 +01:00
61582251c7 trap negative numbers 2017-08-31 21:11:10 +01:00
4ce3759902 Optimise pretty_size function using log() 2017-08-31 21:04:49 +01:00
ebf7d1312e require new stripts 2017-08-25 20:20:30 +01:00
07b16a4efb allow subclasses to use {rsv list} 2017-08-25 20:20:09 +01:00
0da04b5aed only use "at" if installed 2017-08-25 20:19:52 +01:00
87ff52dd03 Provide bi-directional dependency information and improve layout 2017-06-20 23:37:31 +01:00
641b43d8a0 experimenting with xhr 2017-06-20 23:37:00 +01:00
31f4b53f68 bump version 2017-06-14 20:38:56 +01:00
7e0de7889e If DLNA download fails completely, defer rather than error 2017-06-14 20:38:42 +01:00
87440918e0 remove delay in status when redring is installed 2017-06-14 20:38:36 +01:00
07a6f990bd bump version 2017-06-02 20:03:44 +01:00
5075d638e5 replace {system diskdev} with better version 2017-06-02 20:03:28 +01:00
909f9cad31 remove unecessary new lines 2017-06-02 20:02:15 +01:00
71dcd3960a Set specific page title for queue screen 2017-06-02 20:01:44 +01:00
0dda2fa11a Stop action losing args after first file 2017-06-02 20:01:13 +01:00
9a5fe4394b Update version 2017-05-05 23:40:41 +01:00
51311e74ba Tweak wording 2017-05-05 23:39:41 +01:00
63f9906526 Add support for backing up/restoring skiplists 2017-05-05 23:39:30 +01:00
0fa233afce Add xconv test 2017-05-05 23:39:15 +01:00
c79b890985 re-work skip behaviour 2017-05-03 23:38:40 +01:00
9529cd2071 make classdump binary-safe 2017-05-03 23:35:30 +01:00
ab1f04fe8e honour filters in schedule display 2017-05-02 22:20:05 +01:00
f28a048bd9 Add support for persistent episode skips 2017-05-02 20:17:47 +01:00
45d1cdd2d1 add kernel versions for 3.13 2017-04-26 20:24:22 +01:00
5dc2405068 defer decryption instead of failing it if DLNA helper is not immediately available (DLNA database may be locked) 2017-03-31 01:36:43 +01:00
37c6876e28 bump version 2017-03-24 19:20:07 +00:00
524a97ef0d add VFD images, release 1.4.1-4 2017-03-24 19:19:52 +00:00
10227c6928 Add true VFD colour (commented out) 2017-03-23 23:44:18 +00:00
e8d75bcb20 Add CFW 3.12 kernels 2017-03-23 23:44:00 +00:00
5ccd378fc0 bump version 2017-03-18 14:30:15 +00:00
eb0a23d82c Use new redring API for retrieving VFD text 2017-03-18 10:42:17 +00:00
2c9a386e25 Defer shrink operations if there is a pending decrypt 2017-03-18 10:41:49 +00:00
4bb5fd3a30 fix {queue check} default argument 2017-03-18 10:41:23 +00:00
4a840d89d8 bump version 2017-03-14 22:00:47 +00:00
7bfabc825a convert ISO6937 characters in recording synopses 2017-03-14 22:00:11 +00:00
73aa90c2db bump version 2017-03-13 18:18:17 +00:00
3cee225331 Deprecate {epg fetch} for {epg dbfetch} 2017-03-13 18:18:08 +00:00
98dc8bdfd1 Do not continually try to decrypt zero byte recordings 2017-03-13 18:17:13 +00:00
1725bce452 Prevent subst from processing commands or variables in filenames 2017-03-13 18:15:55 +00:00
d4a0117fab Add HTML5 charset tag 2017-03-13 18:15:25 +00:00
74b744aa02 update to version 1.4.1, require updated jim-sqlite3 package 2017-03-12 19:36:12 +00:00
03d526549c more UTF-8 fixes 2017-03-12 19:35:47 +00:00
be1b26378e Expand \x sequences from lsof to UTF-8 2017-03-12 17:34:14 +00:00
a5fa577099 Convert ISO6937 strings to UTF-8 whilst stripping prefix 2017-03-12 12:24:57 +00:00
76691eedd0 flag .class files as TCL 2017-03-09 22:13:24 +00:00
c447922233 revert modeline 2017-03-09 22:12:25 +00:00
hummypkg
13e561277c Update rsv.class 2017-03-09 22:11:21 +00:00
hummypkg
22dfc27130 Update .gitattributes 2017-03-09 22:09:06 +00:00
5f1745ef27 add .gitattributes 2017-03-09 22:06:31 +00:00
hummypkg
c02d776466 Create README.md 2017-03-09 21:51:32 +00:00
19a2eaf8db Centralise code for mp3 & mpg generation. Update to ffmpeg 2.8 2017-02-22 07:26:58 +00:00
40c54af482 Allow re-submission of completed jobs 2017-02-22 07:26:20 +00:00
55528cf3d1 Add .gitignore 2017-02-22 07:26:02 +00:00
403281e489 add empty directories 2017-03-09 21:26:30 +00:00
hummypkg
7b6866cdb0 auto fixes, webif queueactions can take parameters
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3886 2a923420-c742-0410-a762-8d5b09965624
2017-03-05 19:35:40 +00:00
hummypkg
20b4fe2f66 add nospecial to ts iterate, centralise is-specialdir logic
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3882 2a923420-c742-0410-a762-8d5b09965624
2017-03-05 10:21:58 +00:00
hummypkg
92a0cbd01b tweaking VFD
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3876 2a923420-c742-0410-a762-8d5b09965624
2017-03-02 23:43:18 +00:00
hummypkg
44814fb791 adding VFD
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3874 2a923420-c742-0410-a762-8d5b09965624
2017-03-01 20:54:28 +00:00
hummypkg
14f4eb0371 attempt to auto-fix package upgrade problem
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3864 2a923420-c742-0410-a762-8d5b09965624
2017-03-01 00:01:50 +00:00
hummypkg
9a874d65d2 add VFD to status
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3857 2a923420-c742-0410-a762-8d5b09965624
2017-02-28 20:39:45 +00:00
hummypkg
c8c2cc3c9c attempt to fix skip next episode in EPG which is also the last in EPG
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3827 2a923420-c742-0410-a762-8d5b09965624
2017-02-26 11:14:38 +00:00
hummypkg
e758b99f55 Add switchlabel/sliderlabel CSS classes to settings
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3823 2a923420-c742-0410-a762-8d5b09965624
2017-02-24 19:16:48 +00:00
hummypkg
e9fd4f4110 fix favourites restore
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3791 2a923420-c742-0410-a762-8d5b09965624
2017-02-20 21:32:02 +00:00
hummypkg
1b3aad52d1 add autoskipbin. Improve bin directory derivation
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3736 2a923420-c742-0410-a762-8d5b09965624
2017-02-12 14:48:46 +00:00
hummypkg
1f98b627d7 update tablesorter, improve queue.js, fix safe_delete
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3732 2a923420-c742-0410-a762-8d5b09965624
2017-02-11 00:51:10 +00:00
hummypkg
bd5bb64b13 remove chunked header from opkg. Fix chunking in Google Chrome. queue top refresh button
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3708 2a923420-c742-0410-a762-8d5b09965624
2017-02-04 22:33:55 +00:00
hummypkg
8e7d14efc4 fix htdigest generation
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3692 2a923420-c742-0410-a762-8d5b09965624
2017-02-02 22:29:57 +00:00
hummypkg
e71419b7e5 rename p_adv
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3675 2a923420-c742-0410-a762-8d5b09965624
2017-02-01 21:19:27 +00:00
hummypkg
3d979a292e remove debug lines
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3674 2a923420-c742-0410-a762-8d5b09965624
2017-02-01 17:43:33 +00:00
hummypkg
40a1a42433 package screen overhaul
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3673 2a923420-c742-0410-a762-8d5b09965624
2017-02-01 17:43:05 +00:00
hummypkg
f19dfe65eb allow removing non-repository packages
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3672 2a923420-c742-0410-a762-8d5b09965624
2017-01-31 23:31:19 +00:00
hummypkg
2bb88ac84d use .hmt as key file when loading .ts
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3670 2a923420-c742-0410-a762-8d5b09965624
2017-01-30 21:12:32 +00:00
hummypkg
d6129ebd28 1.4.0 beta 2
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3609 2a923420-c742-0410-a762-8d5b09965624
2017-01-23 22:49:50 +00:00
hummypkg
3fa95419ce 1.4.0
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3572 2a923420-c742-0410-a762-8d5b09965624
2017-01-17 22:34:02 +00:00
hummypkg
034e9c1598 more tweaks
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3568 2a923420-c742-0410-a762-8d5b09965624
2017-01-16 22:23:00 +00:00
hummypkg
fa013cec91 1.3.5-8
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3549 2a923420-c742-0410-a762-8d5b09965624
2017-01-15 15:27:16 +00:00
hummypkg
aa91b5a865 switch to new spinner filename
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3548 2a923420-c742-0410-a762-8d5b09965624
2017-01-15 15:27:02 +00:00
hummypkg
4ecb91a6b5 detect CFW 3.11 kernel
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3547 2a923420-c742-0410-a762-8d5b09965624
2017-01-15 15:26:46 +00:00
hummypkg
9a6e3ccc39 fix parsing of manually installed packages
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3546 2a923420-c742-0410-a762-8d5b09965624
2017-01-15 15:26:35 +00:00
hummypkg
8b021ec4b7 fix backup/restore of favourites, fix notify bug
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3521 2a923420-c742-0410-a762-8d5b09965624
2017-01-12 14:36:41 +00:00
hummypkg
5104dbd387 add catch to decrypt wget
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3516 2a923420-c742-0410-a762-8d5b09965624
2017-01-12 10:16:30 +00:00
hummypkg
c21504b43f updates
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3513 2a923420-c742-0410-a762-8d5b09965624
2017-01-11 17:18:24 +00:00
hummypkg
efd7544b8c fix queue
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3512 2a923420-c742-0410-a762-8d5b09965624
2017-01-10 22:56:51 +00:00
hummypkg
92a5c27401 1.3.5-3 + new scanner
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3510 2a923420-c742-0410-a762-8d5b09965624
2017-01-10 19:57:33 +00:00
hummypkg
caeabd15d0 1.3.5-2
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3507 2a923420-c742-0410-a762-8d5b09965624
2017-01-09 19:23:13 +00:00
hummypkg
26ceff2ad2 add next return field to defer response. Use more intelligent defer times for decrypt. Support mkdir.hook
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3503 2a923420-c742-0410-a762-8d5b09965624
2017-01-08 14:29:22 +00:00
hummypkg
53edb41250 remove in-use check from decrypt scan
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3483 2a923420-c742-0410-a762-8d5b09965624
2017-01-06 20:34:59 +00:00
hummypkg
e910472fa6 1.3.5 second draft
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3479 2a923420-c742-0410-a762-8d5b09965624
2017-01-06 20:28:13 +00:00
hummypkg
0dd9641e76 move plugins, fix cron, add queue upgrade
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3470 2a923420-c742-0410-a762-8d5b09965624
2017-01-05 22:58:05 +00:00
hummypkg
d58ebd684a 1.3.5
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3469 2a923420-c742-0410-a762-8d5b09965624
2017-01-05 22:36:00 +00:00
hummypkg
6516f47f56 fix some bugs
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3460 2a923420-c742-0410-a762-8d5b09965624
2017-01-04 19:13:44 +00:00
hummypkg
fce45667fc re-hash browse buttons
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3459 2a923420-c742-0410-a762-8d5b09965624
2017-01-03 19:04:58 +00:00
hummypkg
1c8a3d87da -12, fix pkgver
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3450 2a923420-c742-0410-a762-8d5b09965624
2016-12-30 12:20:24 +00:00
hummypkg
09dd487b60 -11
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3449 2a923420-c742-0410-a762-8d5b09965624
2016-12-30 11:55:29 +00:00
hummypkg
fadca6e8c5 release 1.3.4-10
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3447 2a923420-c742-0410-a762-8d5b09965624
2016-12-28 08:38:07 +00:00
hummypkg
4a9c5cda27 symlink json
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3445 2a923420-c742-0410-a762-8d5b09965624
2016-12-22 00:38:08 +00:00
hummypkg
daa312c162 remove escape from require list
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3444 2a923420-c742-0410-a762-8d5b09965624
2016-12-21 20:25:44 +00:00
hummypkg
ba0c2ca311 fix default autofreq
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3443 2a923420-c742-0410-a762-8d5b09965624
2016-12-21 18:12:23 +00:00
hummypkg
d0cb142952 auto now runs every minute, checking for time to run
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3442 2a923420-c742-0410-a762-8d5b09965624
2016-12-21 12:58:25 +00:00
hummypkg
88c7f8cef9 updates
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3440 2a923420-c742-0410-a762-8d5b09965624
2016-12-19 11:50:12 +00:00
hummypkg
097ed2d74c fix error with non-ts files
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3439 2a923420-c742-0410-a762-8d5b09965624
2016-12-19 11:05:19 +00:00
hummypkg
4adc26d2f2 1.3.4-3
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3437 2a923420-c742-0410-a762-8d5b09965624
2016-12-19 10:14:19 +00:00
hummypkg
4f8c5a7b46 improve run-hour selection
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3435 2a923420-c742-0410-a762-8d5b09965624
2016-12-19 01:26:25 +00:00
hummypkg
1fc426cb1a fixes/improvements
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3434 2a923420-c742-0410-a762-8d5b09965624
2016-12-19 00:56:03 +00:00
hummypkg
759b96e764 fix queue cron job
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3433 2a923420-c742-0410-a762-8d5b09965624
2016-12-17 23:56:30 +00:00
hummypkg
d1ccf7b2d1 beta 1.3.4
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3431 2a923420-c742-0410-a762-8d5b09965624
2016-12-17 23:33:14 +00:00
hummypkg
ddeab2831e more tidying up on diag disk page
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3380 2a923420-c742-0410-a762-8d5b09965624
2016-11-22 22:34:31 +00:00
hummypkg
bb80ba1b83 fix disk page
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3379 2a923420-c742-0410-a762-8d5b09965624
2016-11-22 20:28:45 +00:00
hummypkg
1c9d1c75f3 fix button padding on EPG; show rec for chaseplay+op
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3372 2a923420-c742-0410-a762-8d5b09965624
2016-11-21 22:32:49 +00:00
hummypkg
825b377a78 fix thread
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3361 2a923420-c742-0410-a762-8d5b09965624
2016-11-20 16:57:52 +00:00
hummypkg
35785a7387 remove padding override for buttons due to Jquery UI upgrade
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3360 2a923420-c742-0410-a762-8d5b09965624
2016-11-20 15:52:20 +00:00
hummypkg
03459caabc remove old strip-update task
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3359 2a923420-c742-0410-a762-8d5b09965624
2016-11-20 15:46:50 +00:00
hummypkg
e4809de977 fix typo
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3358 2a923420-c742-0410-a762-8d5b09965624
2016-11-20 15:42:32 +00:00
hummypkg
dc5795f8ae 1.3.3
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3354 2a923420-c742-0410-a762-8d5b09965624
2016-11-20 15:40:09 +00:00
hummypkg
3dadba3556 add support for beta testing
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3352 2a923420-c742-0410-a762-8d5b09965624
2016-11-20 15:27:57 +00:00
hummypkg
0c0ea08f09 allow multiple ops for ad-hoc jobs. Some escaping cleanups. Add op for join
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3351 2a923420-c742-0410-a762-8d5b09965624
2016-11-20 12:25:56 +00:00
hummypkg
7b7651b5f8 fix startop -multiple
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3343 2a923420-c742-0410-a762-8d5b09965624
2016-11-15 22:50:22 +00:00
hummypkg
7edf787c28 fix recording icon, use pid in multiple status
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3342 2a923420-c742-0410-a762-8d5b09965624
2016-11-14 19:20:40 +00:00
hummypkg
9e685245b9 allow multiple operations of the same type. Leave recording in the list if file size is changing
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3341 2a923420-c742-0410-a762-8d5b09965624
2016-11-11 20:49:39 +00:00
hummypkg
8710cb0480 fix status.hook
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3340 2a923420-c742-0410-a762-8d5b09965624
2016-11-10 19:22:41 +00:00
hummypkg
8cd924c8ac improve status with centralised operation tracking and plugin support
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3339 2a923420-c742-0410-a762-8d5b09965624
2016-11-09 16:39:24 +00:00
hummypkg
46a539c739 close rsv DB prior to RTS commit
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3337 2a923420-c742-0410-a762-8d5b09965624
2016-11-09 11:54:29 +00:00
hummypkg
de8af8c4ad add EPG service file
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3333 2a923420-c742-0410-a762-8d5b09965624
2016-11-01 20:46:06 +00:00
hummypkg
b89b9cd5c9 add L7.26 loader. Restart parseEPG on failure
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3330 2a923420-c742-0410-a762-8d5b09965624
2016-10-31 21:28:04 +00:00
hummypkg
482e1fb597 fix schedule restore
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3319 2a923420-c742-0410-a762-8d5b09965624
2016-10-13 19:05:04 +00:00
hummypkg
84fdeabd6d fix size.jim and rsv.class for event skip
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3317 2a923420-c742-0410-a762-8d5b09965624
2016-10-02 20:36:14 +00:00
hummypkg
e19cf1998e tweaks
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3260 2a923420-c742-0410-a762-8d5b09965624
2016-09-07 22:25:23 +00:00
hummypkg
3cbf0649ad bump nugget requirement
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3247 2a923420-c742-0410-a762-8d5b09965624
2016-09-01 16:49:12 +00:00
hummypkg
ddde3ecc4e 1.3.2-5
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3246 2a923420-c742-0410-a762-8d5b09965624
2016-09-01 16:49:01 +00:00
hummypkg
eda5ab7656 fix rsv deferred
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3233 2a923420-c742-0410-a762-8d5b09965624
2016-08-30 17:12:13 +00:00
hummypkg
c865d8b1a1 bump version
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3226 2a923420-c742-0410-a762-8d5b09965624
2016-08-26 20:56:38 +00:00
hummypkg
eeba46c703 bump version
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3212 2a923420-c742-0410-a762-8d5b09965624
2016-08-25 19:04:46 +00:00
hummypkg
b13337653d scheduling updates + AR in progress
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3210 2a923420-c742-0410-a762-8d5b09965624
2016-08-25 19:02:11 +00:00
hummypkg
8ed615459f improve in-progress check to accommodate padding
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3197 2a923420-c742-0410-a762-8d5b09965624
2016-08-21 18:32:48 +00:00
hummypkg
f72cf64cce 1.3.2-1, add nugget dependency
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3196 2a923420-c742-0410-a762-8d5b09965624
2016-08-21 14:18:55 +00:00
hummypkg
a6f35d4fdb updates for RT scheduling
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3187 2a923420-c742-0410-a762-8d5b09965624
2016-08-19 18:26:23 +00:00
hummypkg
daa345cac9 disallow unschedule active
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3178 2a923420-c742-0410-a762-8d5b09965624
2016-08-15 20:23:19 +00:00
hummypkg
0d3e33330e mux fixes
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3176 2a923420-c742-0410-a762-8d5b09965624
2016-08-14 18:26:59 +00:00
hummypkg
950051032e hide buttons until dialogue has loaded
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3169 2a923420-c742-0410-a762-8d5b09965624
2016-08-14 12:33:53 +00:00
hummypkg
0bd1f610d1 check size of pending list before showing pending panel
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3156 2a923420-c742-0410-a762-8d5b09965624
2016-08-14 08:52:49 +00:00
hummypkg
5fe06b267c fix visual weekday
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3118 2a923420-c742-0410-a762-8d5b09965624
2016-07-09 18:01:46 +00:00
hummypkg
d7fc82e292 1.3.1
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@3109 2a923420-c742-0410-a762-8d5b09965624
2016-07-05 15:53:50 +00:00
hummypkg
0de011e28d set wakeup timer when rebooting
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2960 2a923420-c742-0410-a762-8d5b09965624
2016-05-23 20:41:47 +00:00
hummypkg
e3e1fb618a fix backup file sorting
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2942 2a923420-c742-0410-a762-8d5b09965624
2016-05-16 16:01:18 +00:00
hummypkg
bcc93e0e9f allow pending cancel from visual screen
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2927 2a923420-c742-0410-a762-8d5b09965624
2016-05-07 08:54:06 +00:00
hummypkg
8238571064 swap MP3 icon hover over, remove epg -nosort
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2904 2a923420-c742-0410-a762-8d5b09965624
2016-05-04 21:14:29 +00:00
hummypkg
638219fd45 1.3.0-2
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2903 2a923420-c742-0410-a762-8d5b09965624
2016-05-04 21:00:25 +00:00
hummypkg
417f1aed61 1.3.0-1
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2890 2a923420-c742-0410-a762-8d5b09965624
2016-05-03 20:59:27 +00:00
hummypkg
7d06c3afbc update thread link
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2887 2a923420-c742-0410-a762-8d5b09965624
2016-05-01 09:32:06 +00:00
hummypkg
4b7509fedd 1.3.0
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2885 2a923420-c742-0410-a762-8d5b09965624
2016-05-01 09:28:10 +00:00
hummypkg
a2a1a54913 1.2.9-7
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2880 2a923420-c742-0410-a762-8d5b09965624
2016-04-29 19:27:18 +00:00
hummypkg
8592bddc0d secondary visual sort
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2876 2a923420-c742-0410-a762-8d5b09965624
2016-04-28 17:53:53 +00:00
hummypkg
d3a352748a add option to hide OTA
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2875 2a923420-c742-0410-a762-8d5b09965624
2016-04-28 17:46:32 +00:00
hummypkg
bd69b981a7 1.2.9-4
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2874 2a923420-c742-0410-a762-8d5b09965624
2016-04-27 16:04:54 +00:00
hummypkg
203813b7ec 1.2.9-2
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2872 2a923420-c742-0410-a762-8d5b09965624
2016-04-26 22:23:01 +00:00
hummypkg
58da098a11 1.2.9 beta
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2871 2a923420-c742-0410-a762-8d5b09965624
2016-04-26 19:54:56 +00:00
hummypkg
9ce18af5cf improve locking
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2845 2a923420-c742-0410-a762-8d5b09965624
2016-04-10 13:24:16 +00:00
hummypkg
7bbfa758c1 improve locking
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2844 2a923420-c742-0410-a762-8d5b09965624
2016-04-09 23:11:43 +00:00
hummypkg
17f5cf5e7e add at + fixpkg
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2824 2a923420-c742-0410-a762-8d5b09965624
2016-03-29 22:16:07 +00:00
hummypkg
6bd6c33e70 adding refresh
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2823 2a923420-c742-0410-a762-8d5b09965624
2016-03-29 22:03:25 +00:00
hummypkg
b044418869 Use szsttime if populated
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2820 2a923420-c742-0410-a762-8d5b09965624
2016-03-28 16:58:56 +00:00
hummypkg
76308b9489 fix transaction
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2811 2a923420-c742-0410-a762-8d5b09965624
2016-03-22 22:53:13 +00:00
hummypkg
e6ed9e9822 update schedule backend, support episode skip
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2806 2a923420-c742-0410-a762-8d5b09965624
2016-03-21 19:38:42 +00:00
hummypkg
c6e933999b fix diag screen error on HD model
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2749 2a923420-c742-0410-a762-8d5b09965624
2016-03-16 10:08:41 +00:00
hummypkg
32774754a4 update inc new CFW versions + initial conflict detection
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2735 2a923420-c742-0410-a762-8d5b09965624
2016-03-12 19:39:34 +00:00
hummypkg
8fd5cdb062 more generic drive detection
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2698 2a923420-c742-0410-a762-8d5b09965624
2016-02-22 23:03:31 +00:00
hummypkg
347f7989ec add exfat to drive types
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2696 2a923420-c742-0410-a762-8d5b09965624
2016-02-22 22:42:27 +00:00
hummypkg
d09e2f2432 switch to flash smartctl
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2691 2a923420-c742-0410-a762-8d5b09965624
2016-02-21 23:59:57 +00:00
hummypkg
055458ed46 fix apostrophe problem in file info, support gpt-driveX
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2680 2a923420-c742-0410-a762-8d5b09965624
2016-02-21 00:22:34 +00:00
hummypkg
03164c8b4c bump
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2662 2a923420-c742-0410-a762-8d5b09965624
2016-02-17 22:03:50 +00:00
hummypkg
59c4e7ad1f add tcpfix, chunked mode for pkg/diag output
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2646 2a923420-c742-0410-a762-8d5b09965624
2016-02-14 18:24:30 +00:00
hummypkg
687fc606a1 fix go with trailing /, tweak pkg to sort final list rather than interim, improve maintenance mode wording
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2624 2a923420-c742-0410-a762-8d5b09965624
2016-02-11 18:30:18 +00:00
hummypkg
879d672a62 sort package list
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2617 2a923420-c742-0410-a762-8d5b09965624
2016-02-11 00:10:25 +00:00
hummypkg
e1a5bb3998 pkg improvements
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2615 2a923420-c742-0410-a762-8d5b09965624
2016-02-10 23:41:02 +00:00
hummypkg
f4afecf77c fix diagnostic output
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2612 2a923420-c742-0410-a762-8d5b09965624
2016-02-10 19:37:25 +00:00
hummypkg
b092b571e2 updates
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2606 2a923420-c742-0410-a762-8d5b09965624
2016-02-09 23:07:47 +00:00
hummypkg
f29532b481 fix scheduling bug, add diagnostic confirmation, fix 404 page
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2603 2a923420-c742-0410-a762-8d5b09965624
2016-02-09 00:37:53 +00:00
hummypkg
943009252b add 404 page, fix typo
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2602 2a923420-c742-0410-a762-8d5b09965624
2016-02-08 18:31:45 +00:00
hummypkg
131b8980ac updated diagnostics page, jquery 1.12
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2598 2a923420-c742-0410-a762-8d5b09965624
2016-02-08 15:32:17 +00:00
hummypkg
e316ad3a5a fix disk temperature check
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2594 2a923420-c742-0410-a762-8d5b09965624
2016-02-06 13:57:05 +00:00
hummypkg
971d074f3c checkpoint
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2590 2a923420-c742-0410-a762-8d5b09965624
2016-02-06 00:13:44 +00:00
hummypkg
4886a5f191 bump version
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2582 2a923420-c742-0410-a762-8d5b09965624
2016-01-31 19:58:45 +00:00
hummypkg
21de0e6d5a radio icon rather than SD/HD for radio programmes.
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2580 2a923420-c742-0410-a762-8d5b09965624
2016-01-31 19:58:12 +00:00
hummypkg
95bc11d2f1 add epgenc class
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2567 2a923420-c742-0410-a762-8d5b09965624
2016-01-17 12:02:11 +00:00
hummypkg
4d3fa4a268 bump version
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2566 2a923420-c742-0410-a762-8d5b09965624
2016-01-04 19:50:52 +00:00
hummypkg
15befb403e fix content mgmt test
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2565 2a923420-c742-0410-a762-8d5b09965624
2016-01-04 19:50:41 +00:00
hummypkg
e3a0d1ec96 fix status when decrypting
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2564 2a923420-c742-0410-a762-8d5b09965624
2016-01-04 02:19:31 +00:00
hummypkg
e5c01f19d3 display Enc icon for protected EPG entries
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2562 2a923420-c742-0410-a762-8d5b09965624
2016-01-03 22:29:55 +00:00
hummypkg
4bdd52307c add m4a, report log change time
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2558 2a923420-c742-0410-a762-8d5b09965624
2015-12-18 23:13:13 +00:00
hummypkg
1579763bb2 allow unstripped settings (for dedup_template)
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2557 2a923420-c742-0410-a762-8d5b09965624
2015-11-29 23:36:03 +00:00
hummypkg
19ae94cd2c support untrimmed settings
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2556 2a923420-c742-0410-a762-8d5b09965624
2015-11-29 23:35:49 +00:00
hummypkg
debb7c0da8 fix channel change + no DLNA server running message
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2555 2a923420-c742-0410-a762-8d5b09965624
2015-11-29 22:49:49 +00:00
hummypkg
47b23d76cf allow dummy setting of flags (for dryruns)
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2554 2a923420-c742-0410-a762-8d5b09965624
2015-11-26 00:33:26 +00:00
hummypkg
bb2496a8a7 update dedup settings
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2551 2a923420-c742-0410-a762-8d5b09965624
2015-11-25 22:28:32 +00:00
hummypkg
57a2523b1c two-digit series number
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2550 2a923420-c742-0410-a762-8d5b09965624
2015-11-25 22:08:03 +00:00
hummypkg
5f04fbdf01 more tvdb work
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2542 2a923420-c742-0410-a762-8d5b09965624
2015-11-18 23:46:47 +00:00
hummypkg
f34872a4c4 tvdb update
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2534 2a923420-c742-0410-a762-8d5b09965624
2015-11-06 18:50:27 +00:00
hummypkg
b373ccb3dc tvdb improvements
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2533 2a923420-c742-0410-a762-8d5b09965624
2015-11-02 23:17:11 +00:00
hummypkg
79dadbec68 more disk attributes
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2519 2a923420-c742-0410-a762-8d5b09965624
2015-10-22 19:28:12 +00:00
hummypkg
96eea155da fix disk usage in the presence of hard links
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2501 2a923420-c742-0410-a762-8d5b09965624
2015-10-16 21:24:25 +00:00
hummypkg
2b6e29b1c2 add tooltip plugin
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2499 2a923420-c742-0410-a762-8d5b09965624
2015-10-14 20:43:49 +00:00
hummypkg
6b8933634b update tvdb support
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2494 2a923420-c742-0410-a762-8d5b09965624
2015-10-12 21:14:34 +00:00
hummypkg
e7ca1d7742 improve rmdir_if_empty, 1.2.5
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2488 2a923420-c742-0410-a762-8d5b09965624
2015-10-05 14:51:09 +00:00
hummypkg
c24374c4c0 fix inuse
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2474 2a923420-c742-0410-a762-8d5b09965624
2015-09-30 18:42:49 +00:00
hummypkg
42f83f1040 commit
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2473 2a923420-c742-0410-a762-8d5b09965624
2015-09-30 18:30:16 +00:00
hummypkg
8a6bc41b4d bug fixes
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2468 2a923420-c742-0410-a762-8d5b09965624
2015-09-16 21:33:15 +00:00
hummypkg
cffa6cca1b ts flag hook
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2467 2a923420-c742-0410-a762-8d5b09965624
2015-09-16 21:07:39 +00:00
hummypkg
dfdb9c5a27 add setflags, unsetflags
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2464 2a923420-c742-0410-a762-8d5b09965624
2015-09-06 18:56:06 +00:00
hummypkg
9b5498af1c browse plugins
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2460 2a923420-c742-0410-a762-8d5b09965624
2015-09-04 20:49:26 +00:00
hummypkg
1b698dbb2d update disk diags
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2457 2a923420-c742-0410-a762-8d5b09965624
2015-08-19 21:27:06 +00:00
hummypkg
a9f7ba3ff2 1.2.4
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2451 2a923420-c742-0410-a762-8d5b09965624
2015-08-14 19:33:25 +00:00
hummypkg
427aa42ace dlnahelper lock fix
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2446 2a923420-c742-0410-a762-8d5b09965624
2015-07-19 20:49:22 +00:00
hummypkg
91a7f66d9c fix newlines in synopsis
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2444 2a923420-c742-0410-a762-8d5b09965624
2015-07-07 19:32:01 +00:00
hummypkg
0c3af11f45 mux updates
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2439 2a923420-c742-0410-a762-8d5b09965624
2015-06-25 22:19:05 +00:00
hummypkg
eb80167e31 allow editing new files
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2433 2a923420-c742-0410-a762-8d5b09965624
2015-06-19 22:24:56 +00:00
hummypkg
23438a6122 remove integrated flatten
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2429 2a923420-c742-0410-a762-8d5b09965624
2015-06-18 20:58:48 +00:00
hummypkg
bc682f4bef New guidance icon, early abort from automatic processing on flag disappearance, show recording icon instead of failed
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2425 2a923420-c742-0410-a762-8d5b09965624
2015-06-15 17:33:32 +00:00
hummypkg
2ce27624ce recmon update
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2413 2a923420-c742-0410-a762-8d5b09965624
2015-05-19 22:38:18 +00:00
hummypkg
37e979787e updates
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2408 2a923420-c742-0410-a762-8d5b09965624
2015-04-23 19:45:00 +00:00
hummypkg
547f825f54 add catch and retries around dlna url
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2406 2a923420-c742-0410-a762-8d5b09965624
2015-04-21 22:08:41 +00:00
hummypkg
677bc95882 1.2.2-6 with autotrigger enhancements
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2401 2a923420-c742-0410-a762-8d5b09965624
2015-04-19 22:00:19 +00:00
hummypkg
c54dd07563 dayfilter
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2395 2a923420-c742-0410-a762-8d5b09965624
2015-04-14 21:15:20 +00:00
hummypkg
1d6d1c972c delete js
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2394 2a923420-c742-0410-a762-8d5b09965624
2015-04-14 20:42:15 +00:00
hummypkg
b136b61893 JQuery UI upgrade
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2392 2a923420-c742-0410-a762-8d5b09965624
2015-04-14 20:09:04 +00:00
hummypkg
0a91878fd5 manual scheduling
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2384 2a923420-c742-0410-a762-8d5b09965624
2015-04-14 00:09:47 +00:00
hummypkg
2e3ce0aed1 1.2.2-4 - faster decrypt
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2383 2a923420-c742-0410-a762-8d5b09965624
2015-04-10 22:01:51 +00:00
hummypkg
bf1bd66bbe tvdb integration
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2382 2a923420-c742-0410-a762-8d5b09965624
2015-03-09 22:19:12 +00:00
hummypkg
9b9032eee8 fix restart icon
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2365 2a923420-c742-0410-a762-8d5b09965624
2015-02-24 20:18:38 +00:00
hummypkg
9b30a9b0b6 update icons
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2359 2a923420-c742-0410-a762-8d5b09965624
2015-02-22 16:42:26 +00:00
hummypkg
e26298cab0 rollup to 1.2.2
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2355 2a923420-c742-0410-a762-8d5b09965624
2015-02-22 16:13:36 +00:00
hummypkg
8f7f20b83d 1.2.1-8
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2346 2a923420-c742-0410-a762-8d5b09965624
2015-02-17 20:44:16 +00:00
hummypkg
217b08922f fix minor bugs
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2332 2a923420-c742-0410-a762-8d5b09965624
2015-02-09 21:59:14 +00:00
hummypkg
03002d4b60 width fix
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2327 2a923420-c742-0410-a762-8d5b09965624
2015-02-08 17:32:49 +00:00
hummypkg
1cd5fbe6fe fix dedup!
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2326 2a923420-c742-0410-a762-8d5b09965624
2015-02-07 21:43:04 +00:00
hummypkg
8334746a5c fixes
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2324 2a923420-c742-0410-a762-8d5b09965624
2015-02-07 21:22:59 +00:00
hummypkg
b9e6ad6881 fix dedup
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2319 2a923420-c742-0410-a762-8d5b09965624
2015-02-07 10:58:11 +00:00
hummypkg
4e8d9f5b88 schedule updates
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2313 2a923420-c742-0410-a762-8d5b09965624
2015-02-06 22:23:53 +00:00
hummypkg
675139500a fix
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2312 2a923420-c742-0410-a762-8d5b09965624
2015-02-05 23:19:20 +00:00
hummypkg
46de6718c3 update version
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2311 2a923420-c742-0410-a762-8d5b09965624
2015-02-05 23:15:09 +00:00
hummypkg
05b8383fb3 update for 0.76 glob fix
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2310 2a923420-c742-0410-a762-8d5b09965624
2015-02-05 23:14:52 +00:00
hummypkg
529fccd4fd update lint
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2309 2a923420-c742-0410-a762-8d5b09965624
2015-02-05 19:46:25 +00:00
hummypkg
97bf8cf820 update lint
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2302 2a923420-c742-0410-a762-8d5b09965624
2015-02-05 16:14:15 +00:00
hummypkg
8f7476a369 1.2.1
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2300 2a923420-c742-0410-a762-8d5b09965624
2015-02-05 00:27:36 +00:00
hummypkg
9e9ffd9c44 more code cleanups
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2299 2a923420-c742-0410-a762-8d5b09965624
2015-02-05 00:23:08 +00:00
hummypkg
157c1c3979 change heuristic arg
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2284 2a923420-c742-0410-a762-8d5b09965624
2015-02-01 01:36:46 +00:00
hummypkg
f9bc928250 Jim code cleanups (for 0.76)
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2283 2a923420-c742-0410-a762-8d5b09965624
2015-02-01 01:28:03 +00:00
hummypkg
35ed1a5db5 update
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2258 2a923420-c742-0410-a762-8d5b09965624
2015-01-28 00:08:09 +00:00
hummypkg
38fdd3aaa6 auto fixencflags
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2220 2a923420-c742-0410-a762-8d5b09965624
2015-01-24 21:52:30 +00:00
hummypkg
73f6fd5519 add media rescan
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2217 2a923420-c742-0410-a762-8d5b09965624
2015-01-22 23:21:19 +00:00
hummypkg
db75c29143 improve wifiscan, enable by default
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2216 2a923420-c742-0410-a762-8d5b09965624
2015-01-21 22:44:10 +00:00
hummypkg
2c2c434fec add network settings (beta)
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2212 2a923420-c742-0410-a762-8d5b09965624
2015-01-19 21:16:52 +00:00
hummypkg
24e1ee5210 fix ualeventinfo handling
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2202 2a923420-c742-0410-a762-8d5b09965624
2015-01-15 23:51:58 +00:00
hummypkg
ede9be2693 mass pkg relocation
git-svn-id: file:///root/webif/svn/pkg/webif/trunk@2151 2a923420-c742-0410-a762-8d5b09965624
2015-01-12 22:40:00 +00:00
hummypkg
3ca87e1285 update webif
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@2114 2a923420-c742-0410-a762-8d5b09965624
2015-01-05 21:59:36 +00:00
hummypkg
777ff469b9 bump version
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@2100 2a923420-c742-0410-a762-8d5b09965624
2015-01-04 21:07:08 +00:00
hummypkg
86ab612ea3 fix content_code
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@2099 2a923420-c742-0410-a762-8d5b09965624
2015-01-04 21:06:44 +00:00
hummypkg
2744a91ec7 use dbfetch for consistent order
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@2094 2a923420-c742-0410-a762-8d5b09965624
2014-12-30 19:48:40 +00:00
hummypkg
85fed3247a show usb disk space. Clickable log viewer
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@2093 2a923420-c742-0410-a762-8d5b09965624
2014-12-30 19:00:15 +00:00
hummypkg
51aded3d2d fix usb eject with virtual-disk2
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@2092 2a923420-c742-0410-a762-8d5b09965624
2014-12-30 14:56:45 +00:00
hummypkg
5d0939d8de Add eject, more context icons, fix some HTML issues, update jquery
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@2090 2a923420-c742-0410-a762-8d5b09965624
2014-12-29 22:28:51 +00:00
hummypkg
fcb036801e fixes
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@2089 2a923420-c742-0410-a762-8d5b09965624
2014-12-21 23:33:22 +00:00
hummypkg
d962ada7e5 fix log ack
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@2088 2a923420-c742-0410-a762-8d5b09965624
2014-12-18 22:33:50 +00:00
hummypkg
3f52c3063a services update
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@2087 2a923420-c742-0410-a762-8d5b09965624
2014-12-17 23:55:31 +00:00
hummypkg
bf94690223 new log viewer
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@2084 2a923420-c742-0410-a762-8d5b09965624
2014-12-17 23:02:55 +00:00
hummypkg
8516f21c18 add tablesorter2 plugin
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@2083 2a923420-c742-0410-a762-8d5b09965624
2014-12-17 19:37:17 +00:00
hummypkg
9d69328615 re-add
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@2078 2a923420-c742-0410-a762-8d5b09965624
2014-12-05 22:57:49 +00:00
hummypkg
14fb5f7c76 rm
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@2077 2a923420-c742-0410-a762-8d5b09965624
2014-12-05 22:56:15 +00:00
hummypkg
788f613a5b sortable disk utilisation page. Better pie chart click handling
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@2075 2a923420-c742-0410-a762-8d5b09965624
2014-12-05 22:36:03 +00:00
hummypkg
1c9da2f52f update
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@2068 2a923420-c742-0410-a762-8d5b09965624
2014-11-29 11:39:24 +00:00
hummypkg
37efb8d633 tweaks
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@2064 2a923420-c742-0410-a762-8d5b09965624
2014-11-27 22:26:36 +00:00
hummypkg
294598faf6 misc updates
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@2062 2a923420-c742-0410-a762-8d5b09965624
2014-11-09 20:24:44 +00:00
hummypkg
1116a3f050 diskspace tweaks
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@2056 2a923420-c742-0410-a762-8d5b09965624
2014-10-18 21:43:02 +00:00
hummypkg
67ffdc8105 new pie chart
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@2055 2a923420-c742-0410-a762-8d5b09965624
2014-10-15 19:31:43 +00:00
hummypkg
04fe30145d updates
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@2054 2a923420-c742-0410-a762-8d5b09965624
2014-10-14 22:08:31 +00:00
hummypkg
61f3868c42 minor tweaks
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@2053 2a923420-c742-0410-a762-8d5b09965624
2014-10-13 12:32:02 +00:00
hummypkg
987425b22a change connectivity test
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@2047 2a923420-c742-0410-a762-8d5b09965624
2014-10-08 00:25:31 +00:00
hummypkg
c886f6afd2 versioned backups + change folder for pending
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@2044 2a923420-c742-0410-a762-8d5b09965624
2014-10-07 21:23:15 +00:00
574 changed files with 20267 additions and 14040 deletions

3
.gitattributes vendored Normal file
View File

@@ -0,0 +1,3 @@
*.jim linguist-language=tcl
*.class linguist-language=tcl

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
ignore:*

View File

@@ -1,10 +1,10 @@
Package: webif
Priority: optional
Section: web
Version: 1.0.17
Version: 1.5.2
Architecture: mipsel
Maintainer: af123@hummypkg.org.uk
Depends: webif-channelicons(>=1.1.12-2),lighttpd(>=1.4.35-2),jim(>=0.75-1),jim-oo,jim-sqlite3(>=0.75),jim-cgi(>=0.7),jim-binary(>=0.75),service-control(>=1.2),busybox(>=1.20.2-1),lsof(>=4.87),epg(>=1.0.13),hmt(>=1.1.21),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),mongoose
Maintainer: prpr
Depends: tcpfix,webif-channelicons(>=1.1.27),lighttpd(>=1.4.39-1),jim(>=0.81-3),jim-cgi(>=0.7-2),service-control(>=2.3),busybox(>=1.20.2-1),lsof(>=4.87),epg(>=1.2.8),hmt(>=2.0.11),ssmtp,cron-daemon(>=1.18.3-3),at(>=3.1.18),anacron,trm(>=1.1),openssl-command,nicesplice,id3v2,file,rsvsync(>=1.1.13),webif-charts(>=1.2-1),stripts(>=1.4.2),tmenu(>=1.21-2),ffmpeg(>=2.8),id3v2,multienv(>=1.6),tcpping(>=1.1),e2fsprogs,wireless-tools(>=29-1),dbupdate,recmon(>=2.0.7),hwctl,nugget(>=0.98),sqlite3(>=3.15.1),jim-xconv,zip(>=3.0-1),wget
Suggests:
Description: An evolving web interface for the Humax.
Tags: http://hummy.tv/forum/threads/5031/
Tags: https://hummy.tv/forum/threads/10760/

View File

@@ -18,9 +18,11 @@ export tmpf=/tmp/cronf.$$
crontab=$PKG_ROOT/bin/crontab
if [ -x $crontab ]; then
$crontab -l | grep -v webif/lib/bin/auto > $tmpf
$crontab -l | grep -v webif/lib/bin/auto \
| grep -v webif/lib/auto > $tmpf
cat $tmpf - << EOM | $crontab -
*/10 * * * * /mod/webif/lib/bin/auto >/dev/null 2>&1
* * * * * /mod/webif/lib/auto/scan >/dev/null 2>>/mod/tmp/auto.log
* * * * * /mod/webif/lib/auto/deq >/dev/null 2>>/mod/tmp/auto.log
EOM
fi
@@ -29,27 +31,37 @@ fi
ana=$PKG_ROOT/etc/anacrontab
egrep -v 'backup/backup.jim|bin/diskattrs' $ana > $tmpf
cat $tmpf - << EOM > $ana
1 8 sched_backup /mod/webif/html/backup/backup.jim
1 8 sched_backup /mod/webif/html/sched/backup/backup.jim
1 5 diskattrs /mod/webif/lib/bin/diskattrs
EOM
$PKG_ROOT/etc/init.d/S02anacron start < /dev/null > /dev/null 2>&1 &
[ -f /tmp/webif_auto.log ] && rm -f /tmp/webif_auto.log
if [ ! -f /mod/webif/.strip-updated ]; then
echo "*********************************"
echo "* Please wait while any shrunk recordings are flagged..."
echo "*********************************"
/mod/webif/lib/bin/strip-update
touch /mod/webif/.strip-updated
fi
[ -f /mod/webif/.strip-updated ] && rm -f /mod/webif/.strip-updated
/mod/webif/lib/bin/diskattrs
/mod/webif/lib/auto/upgrade
#/mod/webif/lib/bin/resetnew
# Remove hook script placed by the legacy rt3070 package which does not work
# with CFW >= 3.00
hook=/mod/boot/xinit.d/rt3070
[ -f $hook ] && rm -f $hook
# Remove legacy mongoose startup script
[ -f /mod/etc/init.d/Z01mongoose ] && rm -f /mod/etc/init.d/Z01mongoose
# Migrate record log to new name.
(
cd /mod/tmp
[ -f record.log -a ! -f activity.log ] && mv record.log activity.log
)
[ -f $tmpf ] && rm -f $tmpf
# Remove empty directories
find /mod/webif/ -type d -exec rmdir {} \; 2>/dev/null
exit 0

View File

@@ -12,5 +12,12 @@ if [ -h /mod/webif -a -d /mod/var/mongoose -a ! -h /mod/var/mongoose ]; then
ln -s ../webif mongoose
fi
if [ ! -f /mod/webif/.pfixpkg -a -x /mod/bin/at ]; then
/mod/bin/at now + 1 minute << EOM
diag fixpkg
touch /mod/webif/.pfixpkg
EOM
fi
exit 0

View File

@@ -4,7 +4,8 @@ export tmpf=/tmp/cronf.$$
crontab=$PKG_ROOT/bin/crontab
if [ -x $crontab ]; then
$crontab -l | grep -v webif/lib/bin/auto > $tmpf
$crontab -l | grep -v webif/lib/bin/auto \
| grep -v webif/lib/auto > $tmpf
[ -s $tmpf ] && $crontab $tmpf || $crontab -r
fi

2
README.md Normal file
View File

@@ -0,0 +1,2 @@
# webif
An evolving web interface for the Humax HD[R] Fox T2 customised firmware.

1
bin/reboot Symbolic link
View File

@@ -0,0 +1 @@
../webif/lib/bin/reboot

23
bin/version Executable file
View File

@@ -0,0 +1,23 @@
#!/mod/bin/jimsh
source /mod/webif/lib/setup
require system.class
set modver [system modversion]
set modbuild [system modbuild]
if {$modbuild > 0} {
append modver " (build $modbuild)"
}
catch {set fhtcpversion [system fhtcpversion]}
catch {set kernelver [system kernelver]}
puts "
Humax [system model] Fox T2 ([system hostname])
Humax Version: $fhtcpversion (kernel $kernelver)
Custom firmware version: $modver
Web interface version: [system pkgver webif]
Serial Number: [system serialno]
Encryption Key: [system encryptionkey]
Last Boot Reason: [system lastbootreason]
"

BIN
boot/xinit.d/ahw Executable file

Binary file not shown.

18
etc/init.d/S59webif Executable file
View File

@@ -0,0 +1,18 @@
#!/bin/sh
. /mod/webif/lib/lib.sh
export TZ=GMT+0BST,M3.5.0/1,M10.5.0/2
case "$1" in
start)
/mod/webif/lib/bin/manage_logs
plog activity "System booted (`lbr_descr`)."
;;
stop)
;;
*)
exit 1
;;
esac

View File

@@ -10,7 +10,14 @@ fi
case "$1" in
start)
/mod/bin/epg -f $epg sqlitedumpd $epgdb > /tmp/epgd.log 2>&1 &
(
ulimit -c unlimited
while [ 1 ]; do
/mod/bin/epg -f $epg sqlitedumpd $epgdb \
> /tmp/epgd.log 2>&1
[ $? -eq 143 ] && break
done
)&
;;
stop)
killall -q epg

3
etc/modservice.d/epg Normal file
View File

@@ -0,0 +1,3 @@
key=/mod/bin/epg
rc=60parseepg
proc="/mod/bin/epg.*sqlitedumpd"

31
etc/recmon.d/autotrigger Executable file
View File

@@ -0,0 +1,31 @@
#!/mod/bin/jimsh
if {[lindex $argv 0] ne "-stop"} exit
source /mod/webif/lib/setup
require system.class settings.class lock
set loglevel [[settings] autolog]
set file [lindex $argv 1]
set dir [file dirname $file]
set prefix "autotrigger\[[pid]\]"
if {$loglevel > 0} {
system plog auto "$prefix: $file"
system plog auto "$prefix: will run for $dir"
}
# Wait up to 10 minutes for any existing auto process to finish...
if {![acquire_lock webif_autoscan 600 5]} {
puts "Cannot acquire exclusive lock, terminating."
system plog auto "$prefix: failed to get lock"
exit
}
if {$loglevel > 0} { system plog auto "$prefix: got lock" }
exec /mod/webif/lib/auto/scan -f -prelocked -logprefix "$prefix: " \
-singledir $dir
if {$loglevel > 0} { system plog auto "$prefix: done" }

21
etc/recmon.d/webiflog Executable file
View File

@@ -0,0 +1,21 @@
#!/mod/bin/jimsh
if {[lindex $argv 0] ne "-stop"} exit
source /mod/webif/lib/setup
require ts.class system.class
set file [lindex $argv 1]
set ts [ts fetch "$file.ts"]
set root [system mediaroot]
set dir [file dirname $file]
if {[string match "$root*" $dir]} {
set dir [string range $dir $([string length $root] + 1) end]
}
set ch [$ts get channel_name]
set dur [$ts duration]
set title [$ts get title]
system plog activity "Recorded: $dir/$title ($dur minutes - $ch)"

0
var/backup/.gitignore vendored Normal file
View File

0
webif/cache/.gitignore vendored Normal file
View File

View File

@@ -1,18 +0,0 @@
#!/bin/sh
[ -n "$QUERY_STRING" ] && rma="${QUERY_STRING##*=}" || rma=0
echo "Content-Type: text/plain"
echo
if [ "$rma" = 1 ]; then
modver="`cat /etc/modversion`"
if [ "$modver" -ge 215 ]; then
touch /var/lib/humaxtv_backup/.rma
else
touch /var/lib/humaxtv/.rma
fi
else
touch /var/lib/humaxtv/mod/_RESET_CUSTOM_FIRMWARE_ENVIRONMENT
fi

22
webif/cgi-bin/chanlist.jim Executable file
View File

@@ -0,0 +1,22 @@
#!/mod/bin/jimsh
source /mod/webif/lib/setup
require epg.class json
httpheader "application/json"
puts "{"
set flag 0
lmap i [$channeldb query "
select usLcn, szSvcName
from TBL_SVC
order by 1
"] {
if {$::flag} { puts "," } else { incr ::flag }
lassign $i x lcn x name
puts -nonewline " \"$lcn\": \"[jescape [system strip $name]]\""
}
puts "\n}"

View File

@@ -12,7 +12,8 @@ set service [cgi_get service 0]
set event [cgi_get event 0]
if {![cgi_exists bare]} header else noheader
set record [lindex [epg fetch dump -service $service -event $event] 0]
set record [lindex [\
epg dbfetch dump -service $service -event $event -sort ""] 0]
$record get_channel_info
set others [$record othertimes]
@@ -23,7 +24,27 @@ if {[[settings] chanchangenc]} {
puts { <script type=text/javascript src=/js/chanchange.js></script> }
}
$record process_sched
if {[$record get sched_type] < 1} {
set conflicts [rsv checkconflict \
[$record get start] [$record get duration] \
[system tuners]]
if {[llength $conflicts]} {
puts {
<div class=warningbox style="width: auto; margin: 0.2em"><div>
This event conflicts with the following items in your scheduled recording list.
<ul>
}
foreach x $conflicts {
puts "<li>$x</li>\n"
}
puts "</div></div>"
}
}
puts "
<div id=epginfo_extra></div>
<table class=keyval>
<tr>
<th>Programme</th>
@@ -63,19 +84,27 @@ puts "
if {[$record showing]} {
puts [progressbar [$record percent]]
}
set icon [$record type_icon]
if {$icon != ""} { set icon "<img class=genre src=$icon>" }
puts "
</td>
</tr><tr>
<th>Type</th>
<td>[$record get content_type] ([$record get content_code])</td>
<td>$icon [$record get content_type] ([$record get content_code])</td>
</tr>
"
if {[$record get warning] != ""} {
if {[$record get warning_mode]} {
set gcol red
} else {
set gcol blue
}
puts "
<tr>
<th>Warning</th>
<td>[$record get warning]</td>
<td><img class=va src=/img/Guidance_$gcol.png height=21>
[$record get warning]</td>
</tr>
"
}
@@ -84,7 +113,7 @@ if {[$record get event_crid] != ""} {
puts "
<tr>
<th>CRID</th><td>
<a href=/cgi-bin/epg/search.jim?crid=[$record get event_crid]>
<a href=/cgi-bin/epg/search.jim?crid=[cgi_quote_url [$record get event_crid]]>
<img border=0 height=14
src=/images/421_1_00_CH_Title_2R_Arrow.png>
[$record get channel_crid][$record get event_crid]
@@ -98,7 +127,7 @@ if {[$record get series_crid] != ""} {
puts "
<tr>
<th nowrap>Series CRID</th><td>
<a href=/cgi-bin/epg/search.jim?scrid=[$record get series_crid]>
<a href=/cgi-bin/epg/search.jim?scrid=[cgi_quote_url [$record get series_crid]]>
<img border=0 height=14
src=/images/421_1_00_CH_Title_2R_Arrow.png>
[$record get channel_crid][$record get series_crid]
@@ -112,7 +141,7 @@ if {[$record get rec_crid] != ""} {
set rec [$record recommended]
if {$rec != ""} {
puts "<tr><th>Recommends</th><td>
<a href=/cgi-bin/epg/search.jim?crid=[$rec get event_crid]>
<a href=/cgi-bin/epg/search.jim?crid=[cgi_quote_url [$rec get event_crid]]>
<img border=0 height=14
src=/images/421_1_00_CH_Title_2R_Arrow.png>
[$rec get name]
@@ -144,8 +173,6 @@ puts "
</a>
"
puts "<div id=epginfo_extra class=footnote></div>"
epg cleanup
if {![cgi_exists bare]} footer

View File

@@ -15,19 +15,15 @@ if {$service eq "-" || $event eq "-"} {
exit
}
set event [lindex [epg fetch dump -service $service -event $event] 0]
set event [lindex [\
epg dbfetch dump -service $service -event $event -sort ""] 0]
if {$event eq ""} {
puts "Error, cannot find event to schedule."
exit
}
if {[$event percent] > 0} {
puts "Error, cannot record programme which has already started showing"
puts "or occurred in the past."
exit
}
set r [rsv construct $event $type]
if {[catch {$r insert} msg]} {
if {[catch {$r insert pending} msg]} {
puts "Error encountered while scheduling: <i>$msg</i>"
} else {
puts "Successfully scheduled <i>[$event get name]</i>"

View File

@@ -9,12 +9,12 @@ header
require totop
set ct [cgi_get ct 0]
set crid [cgi_get crid ""]
set scrid [cgi_get scrid ""]
set ct [cgi_unquote_input [cgi_get ct 0]]
set crid [cgi_unquote_input [cgi_get crid ""]]
set scrid [cgi_unquote_input [cgi_get scrid ""]]
if {[cgi_exists term]} {
set lterm [cgi_get term]
set lterm [cgi_unquote_input [cgi_get term]]
if {[string match {CRID:*} $lterm]} {
set crid [string range $lterm 5 end]
@@ -42,12 +42,12 @@ if {$searchfull} { set cmd "searchall" }
set dedup 0
if {$ct > 0 } {
set records [epg fetch dump -type $ct]
set records [epg dbfetch dump -type $ct]
if {[[settings] genrededup]} { set dedup 1 }
} elseif {$crid ne ""} {
set records [epg fetch dump -crid $crid]
set records [epg dbfetch dump -crid $crid]
} elseif {$scrid ne ""} {
set records [epg fetch dump -scrid $scrid]
set records [epg dbfetch dump -scrid $scrid]
} elseif {$searchterm ne ""} {
set records [epg dbfetch $cmd -term $searchterm]
} else {
@@ -105,7 +105,11 @@ foreach record [lsort -command rsort $records] {
set ended [$record ended]
if $ended { puts "<td nowrap class=blood>" } else { puts "<td nowrap>"}
if {$ended} {
puts "<td nowrap class=blood>"
} else {
puts "<td nowrap>"
}
puts "
[clock format [$record get start] -format "%a %d %b %Y"]<br>
[clock format [$record get start] -format "%H:%M %Z"]"

19
webif/cgi-bin/favlist.jim Executable file
View File

@@ -0,0 +1,19 @@
#!/mod/bin/jimsh
source /mod/webif/lib/setup
require epg.class json
httpheader "application/json"
puts "{"
set flag 0
set i 0
foreach grp [[settings] channel_groups] {
incr i
if {$::flag} { puts "," } else { incr ::flag }
puts -nonewline " \"$i\": \"[jescape $grp]\""
}
puts "\n}"

28
webif/cgi-bin/idle.jim Executable file
View File

@@ -0,0 +1,28 @@
#!/mod/bin/jimsh
source /mod/webif/lib/setup
require system.class
httpheader
set idle [system idletime]
if {$idle > 0} {
lassign [clock format $idle -format {%H %M}] h m
set s "Idle: "
# switch $h {
# 1 { append s "1 hour, " }
# 0 {}
# default { append s "$($h + 0) hours, " }
# }
# switch $m {
# 1 { append s "1 min" }
# default { append s "$($m + 0) mins" }
# }
if {$h > 0} { append s "$($h + 0)h, " }
append s "$($m + 0)m"
puts $s
} else {
puts ""
}

View File

@@ -2,44 +2,81 @@
package require cgi
source /mod/webif/lib/setup
require pkg.class system.class
require pkg.class system.class settings.class
cgi_input
#cgi_dump
set cmd [cgi_get cmd update]
proc opkg {cmd} {
puts ">>> opkg $cmd"
proc putsf {str} {
puts $str
flush stdout
}
proc opkg {cmd {silent 0}} {
if {!$silent} { putsf ">>> opkg $cmd" }
set bcmd "|/mod/webif/lib/bin/opkg $cmd"
set fd [open $bcmd r]
while {[gets $fd line] >= 0} {
puts "$line"
putsf "$line"
}
close $fd
puts ""
putsf ""
}
httpheader "text/plain"
# Google Chrome won't render chunks with text/plain!
# https://bugs.chromium.org/p/chromium/issues/detail?id=156023
#httpheader "text/plain"
httpheader "application/octet-stream"
if {![system connectivity]} {
puts ""
puts "!! ERROR - No network connectivity to package repository !!"
puts ""
puts "Check your Internet connection and DNS service and then try again."
set cmdargs [lassign $cmd cmd]
set netcmds {install update upgrade}
if {$cmd in $netcmds && ![system connectivity]} {
putsf "!! ERROR - No network connectivity to package repository !!"
putsf "Check your Internet connection and DNS service and then try again."
exit
}
if {$cmd eq "dependinfo"} {
putsf ">>> What $cmdargs depends on\n"
opkg "depends $cmdargs" 1
putsf ">>> What depends on $cmdargs\n"
set bcmd "|/mod/webif/lib/bin/opkg whatdepends $cmdargs"
set fd [open $bcmd r]
while {[gets $fd line] >= 0} {
if {[string match "What depends on root set" $line]} break
}
while {[gets $fd line] >= 0} {
if {[string match "*depends on $cmdargs*" $line]} {
puts "$line"
}
}
close $fd
putsf ""
exit
}
if {$cmd eq "upgrade"} { opkg update }
opkg $cmd
if {$cmd eq "update" || $cmd eq "upgrade"} {
puts "Updating package meta information"
pkg fetchmeta
puts "Done."
puts ""
puts "Updating diagnostic meta information"
pkg fetchdiagmeta
puts "Done."
if {$cmd eq "remove" && [[settings] noautoremove] ne "1"} {
append cmd " --autoremove"
}
opkg "$cmd $cmdargs"
if {$cmd eq "update" || $cmd eq "upgrade"} {
putsf "Updating package meta information"
pkg fetchmeta
putsf "Done."
putsf ""
putsf "Updating diagnostic meta information"
pkg fetchdiagmeta
pkg removemuxdb
}
putsf "Done."

9
webif/cgi-bin/pending.jim Executable file
View File

@@ -0,0 +1,9 @@
#!/mod/bin/jimsh
source /mod/webif/lib/setup
require rsv.class
httpheader "application/json"
puts "{ \"pending\": \"[rsv count pending]\" }"

View File

@@ -1,58 +0,0 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require rsv.class system.class
httpheader
if {[cgi_get act] eq "cancel"} {
system restartpending 0
exit
}
if {[cgi_get now] eq "yes"} {
# - Busybox reboot does sync the disk but may still not be clean enough.
puts "Restarting."
system reboot
exit
}
system restartpending 0
jqplugin progressbar
header
# Commit pending reservations on older mod versions.
if {![file exists /sbin/rsvsync] && ![file exists /mod/boot/rsvsync]} {
rsv commit
}
puts {
<script type=text/javascript>
var handle = 0;
var pct = 0;
function update()
{
$('#progressbar').reportprogress(++pct);
if (pct == 100)
{
clearInterval(handle);
pct = 0;
window.location = '/';
}
}
$(document).ready(function() {
$('#progressbar').reportprogress(0);
handle = setInterval("update()", 400);
$.get('/cgi-bin/restart.jim?now=yes');
});
</script>
Please wait while the Humax restarts...<br>
<div id=progressbar></div>
}
footer

View File

@@ -1,7 +0,0 @@
#!/mod/bin/jimsh
source /mod/webif/lib/setup
httpheader
source /mod/webif/include/restart.jim

View File

@@ -2,12 +2,12 @@
package require cgi
source /mod/webif/lib/setup
require system.class findhsvc epg.class rsv.class
require system.class epg.class rsv.class svc.class plugin
set runmode cli
if {[string match {*jim} $argv0]} { set runmode cgi }
set schedtime 1200
set schedtime 1200
switch $runmode {
cgi {
set type [cgi_get type "full"]
@@ -15,7 +15,7 @@ switch $runmode {
}
cli {
set type "full"
if {"-X" in $argv} { set schedtime 7200 }
if {[lsearch -nocase $argv "-x"] >= 0} { set schedtime 7200 }
}
}
@@ -30,120 +30,224 @@ if {[catch {set pid [exec pgrep -n humaxtv]}]} {
exit
}
set exts {.ts .mkv .avi .mpg .mpeg .wmv .mp3 .mp4 .mov}
set exts {.ts .avi .mpg .mpeg .wmv .mkv .mp3 .mp4 .mov .hmt .m4v .m4a}
set statusops {
decrypt { "Decrypting"
"/img/decrypt.png style=\"padding: 0 0.2em 0 0.5em\""
}
mpg { "Extracting MPG"
"/img/mpg.png style=\"padding: 0 0.2em 0 0.5em\""
}
mp { "Extracting MP3"
"/img/mp3.png style=\"padding: 0 0.2em 0 0.5em\""
}
shrink { "Shrinking"
"/img/compress.png style=\"padding: 0 0.2em 0 0.5em\""
}
crop { "Cropping"
"/img/cut.png style=\"padding: 0 0.2em 0 0.5em\""
}
join { "Joining"
"/img/cut.png style=\"padding: 0 0.2em 0 0.5em\""
}
}
proc register_statusop {op name icon} {
set ::statusops($op) [list $name $icon]
}
eval_plugins status 1
proc get_data {} {
global pid exts opfile
global pid exts stream tsr tsrcnt
set ret {}
if {[catch {set data \
[exec /mod/webif/lib/bin/lsof -X -Fns -p $pid]} msg]} {
[exec /mod/webif/lib/bin/lsof -Fnsa -p $pid]} msg]} {
debug "Error: $msg"
set ret {}
} else {
set size 0
foreach line [split $data "\n"] {
set typ [string index $line 0]
switch $typ {
a {
set access [string index $line 1]
}
s {
set size [string range $line 1 end]
}
n {
if {[string first Video/ $line] == -1 && \
[string first /media/ $line] == -1} {
# strip initial n and trailing " (...)" if
# present
regsub -all -- {(^n)|( \([^\)]+\)$)} \
$line "" line
set file [subst -nocommands -novariables $line]
set ext [file extension $line]
# Note but skip TSR buffers
if {[file rootname $file] eq $tsr} {
if {$ext eq ".nts"} {
incr tsrcnt
}
continue
}
if {[string first Video/ $line] >= 0 ||
[string first /media/ $line] >= 0} {
if {$ext ni $exts} {
continue
}
} elseif {[string first $line /] >= 0} {
# fast skip other files
continue
} elseif {[regexp -- {[A-Za-z0-9._-]+:([0-9]+)->([A-Za-z0-9._-]+):([0-9]+)} $line _ sprt host dprt]} {
if {$sprt == 9000} {
incr stream
continue
} elseif {$dprt == 9000} {
set file [\
format "DLNA from %s" $host]
set size 0
set ext ""
} else {
continue
}
} else {
continue
}
regsub -- { \([^\)]+\)$} $line "" line
set ext [file extension $line]
if {$ext ni $exts} continue
set file [string range $line 1 end]
# Handle chase play (same file open twice
# and recently written)
if {[dict exists $ret $file] && \
if {[dict exists $ret $file] &&
$ext eq ".ts"} {
set age [expr [clock seconds] - \
[file mtime $file]]
set age [expr {[clock seconds] \
- [file mtime $file]}]
if {$age < 60} {
set ret($file) -1
set access [lindex \
[dict get $ret $file] 1]
set ret($file) [list -1 $access]
}
} else {
set ret($file) $size
} else {
debug "$file = $size,$access"
set ret($file) [list $size $access]
}
}
}
}
if {$opfile ne "" && $opfile ni $ret} {
set ret($opfile) [file size $opfile]
}
foreach file [dict keys $::ops] {
if {![dict exists $ret $file]} {
set sz 0
if {[file exists $file]} { set sz [file size $file] }
set ret($file) [list $sz u]
}
}
return $ret
}
proc add_output {icon mode name} {
global runmode output
if {$runmode eq "cgi"} {
if {[string first "/" $icon] == -1} {
set icon "/images/$icon"
}
lappend output [concat \
"<span class=\"va stitem\">\n" \
" <img class=va src=$icon>\n" \
" <span>$mode&nbsp;<i>$name</i></span>\n" \
"</span>\n" \
]
} else {
lappend output "$mode $name"
}
}
set play 0
set rec 0
set stream 0
set output {}
set ops {}
set model [system model]
set tsr [file rootname [system tsr]]
set tsrcnt 0
set opfile ""
if {[file exists "/mod/tmp/webif_auto/.op"} {
set fp [open "/mod/tmp/webif_auto/.op"]
lassign [split [string trim [$fp read]] ":"] op opfile
$fp close
debug "OP: $op - $opfile"
foreach opfile [glob -nocomplain -directory /tmp -tails -- ".bgop.*"] {
set op [string range $opfile 6 end]
lassign [split [file read "/tmp/$opfile"] "\n"] file oppid
if {$model eq "HDR"} {
set file [string map {/media/ /mnt/hd2/} $file]
}
# Check that the lock is still held
if {![system checkop $op]} {
debug "$op - $file - $oppid - process not found."
file delete "/tmp/$opfile"
} else {
set ops($file) $op
}
}
debug "OPS: $ops"
set data {}
if {$type eq "full"} {
set data [get_data]
}
if {[llength $data]} {
debug " DATA: ($data)"
if {![file exists /tmp/.rractive]} {
if {[system nuggeted] && ![file exists /mod/.nonuggetrecs]} {
set recs [lmap i [split [system nugget recordings] "\n"] {
function "$i.ts"
}]
debug " RECS: $recs"
set rr 1
} else {
sleep 3
set ndata [get_data]
debug " NDATA: ($ndata)"
set rr 0
} else {
sleep 1
set ndata [get_data]
debug " NDATA: ($ndata)"
foreach k [array names data] {
if {![dict exists $ndata $k]} {
dict unset data $k
}
}
set rr 1
set recs {}
loop i 0 2 {
catch {
set fd [open "/tmp/.rec$i" r]
lappend recs "[$fd read -nonewline].ts"
$fd close
}
}
debug " RECS: $recs"
}
set bnames [lsort [lmap x [array names data] { file tail $x }]]
foreach file [array names data] {
set bname [file rootname [file tail $file]]
set bname [file tail $file]
if {$file eq $opfile} {
set mode $op
} elseif {$data($file) == -1} {
regexp {(^/(mnt/hd2/My Video|media/drive[1-9]+/Video)/)?(.*)(\.ts)?$}\
$file _ _ _ name
if {[lindex $data($file) 0] == -1} {
set mode chase
} elseif {$rr} {
if {$file in $recs} {
set mode rec
} elseif {[llength [\
lsearch -all $bnames $bname]] == 2} {
# two different files having same file.ext open
set mode copy
} else {
set mode play
}
} else {
if {![dict exists $ndata $file]} continue
if {$ndata($file) > $data($file)} {
if {[lindex $ndata($file) 0] > \
[lindex $data($file) 0]} {
set mode rec
} else {
set mode play
}
}
if {[dict exists $ops $file]} {
if {$mode eq "rec" || $mode eq "chase"} {
set mode "Recording"
set icon "745_1_11_Video_1REC.png"
add_output $icon $mode $name
}
set mode $ops($file)
}
regexp -- {^([^0-9]+)} $mode _ mode
switch $mode {
chase {
incr rec
@@ -158,52 +262,32 @@ if {[llength $data]} {
}
play {
incr play
set mode "Playing"
set icon "745_1_10_Video_2Live.png"
if {$play > $stream} {
set mode "Playing"
set icon "745_1_10_Video_2Live.png"
} else {
set mode "Streaming"
set icon "/img/dlna.png"
}
}
dec {
set mode "Decrypting"
set icon "/img/decrypt.png "
append icon "style=\"padding: 0 0.2em 0 0.5em\""
copy {
if {[lindex $data($file) 1] ne "r"} {
continue
}
set mode "Copying"
set icon "/img/dlna.png"
}
mpg {
set mode "Extracting MPG"
set icon "/img/mpg.png "
append icon "style=\"padding: 0 0.2em 0 0.5em\""
}
mp3 {
set mode "Extracting MP3"
set icon "/img/mp3.png "
append icon "style=\"padding: 0 0.2em 0 0.5em\""
}
shrink {
set mode "Shrinking"
set icon "/img/compress.png "
append icon "style=\"padding: 0 0.2em 0 0.5em\""
default {
if {[dict exists $statusops $mode]} {
lassign $statusops($mode) mode icon
} else {
set mode "Unknown"
set icon "/img/blank.gif"
}
}
}
if {[string first "/" $icon] == -1} {
set icon "/images/$icon"
}
set name [string map {
"/mnt/hd2/My Video/" ""
"/media/drive1/Video/" ""
"/media/" ""
".ts" ""
} $file]
if {$runmode eq "cgi"} {
lappend output [concat \
"<span class=\"va stitem\">\n" \
" <img class=va src=$icon>\n" \
" <span>$mode&nbsp;<i>$name</i></span>\n" \
"</span>\n" \
]
} else {
lappend output "$mode $name"
}
add_output $icon $mode $name
}
}
@@ -213,7 +297,7 @@ if {[llength $data]} {
if {![system instandby] && $play < 1} {
set hsvc [system param CUR_SVC Value USERCONFIG]
set ff [$rsvdb query "
set ff [[rsv dbhandle] query "
select usSvcid as svcid, usLcn as lcn,
substr(szSvcName, 2) as name
from channel.TBL_SVC
@@ -231,21 +315,33 @@ if {![system instandby] && $play < 1} {
if {[llength $epgs] == 1} {
lassign $epgs epg
set prog "- [$epg get name] ("
append prog "[clock format [$epg get start] -format %H:%M] - "
append prog "[clock format $([$epg get start] + [$epg get duration]) -format %H:%M]"
append prog "[clock format [\
$epg get start] -format %H:%M] - "
append prog "[clock format $([$epg get start] \
+ [$epg get duration]) -format %H:%M]"
append prog ") \[[$epg percent]%\]"
}
if {$runmode eq "cgi"} {
lappend output [concat \
"<span class=\"va stitem\">\n" \
" [epg channelicon $name 30 \
{vertical-align: middle; padding: 0 4px 0 2px}]\n" \
" <span>Watching <i>$lcn: $name $prog</i></span>\n" \
"</span>\n" \
]
# 0 => no TSR; >=2 => TSR
if {$tsrcnt == 0 || $tsrcnt == 2} {
set s "Watching"
} elseif {$tsrcnt == 3} {
set s "Watching (delayed)"
} else {
lappend output "Watching $lcn: $name $prog"
debug "tsrcnt=$tsrcnt"
set s "Not watching"
}
if {$runmode eq "cgi"} {
lappend output [format "
<span class=\"va stitem\">
[epg channelicon %s 30 \
{vertical-align: middle; padding: 0 4px 0 2px}]
<span>%s <i>%s: %s %s</i></span>
</span>
" $name $s $lcn $name $prog]
} else {
lappend output [format "%s %s: %s %s" \
$s $lcn $name $prog]
}
}
}
@@ -271,7 +367,7 @@ if {[system instandby]} {
# Upcoming recordings
set events [rsv list tbl_reservation \
" where ersvtype = 3 and nsttime - [clock seconds] < $schedtime
" where ersvtype = 3 and nsttime - [clock seconds] < $schedtime
and nsttime > [clock seconds] "]
foreach event $events {
if {$runmode eq "cgi"} {
@@ -284,6 +380,7 @@ foreach event $events {
" [clock format [$event get nsttime] -format {%H:%M}]" \
" </span>\n" \
"</span>\n" \
]
} else {
lappend output [concat \
"Will record '[$event name]' " \
@@ -293,6 +390,21 @@ foreach event $events {
}
}
######################################################################
# VFD
if {$runmode ne "cgi" && [file exists /mod/webif/plugin/redring/lib.jim]} {
source /mod/webif/plugin/redring/lib.jim
lappend output "VFD: [::redring::vfd]"
}
######################################################################
# Idle Time
if {$runmode ne "cgi"} {
lappend output "Idle: [clock format [system idletime] -format %T]"
}
######################################################################
# Output

15
webif/cgi-bin/tvdbimg.jim Executable file
View File

@@ -0,0 +1,15 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require tvdb.class
set file [cgi_get file "-"]
if {$file eq "-"} { exit }
if {![file exists "$::tvdb::icache/$file"]} {
tvdb cachebanner $file
}
httpredirect "/cache/tvdb/img/$file"

29
webif/cgi-bin/usbeject.jim Executable file
View File

@@ -0,0 +1,29 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require system.class
httpheader "application/json"
set label [cgi_get label -]
foreach usb [system usbmounts 1] {
if {$usb(LABEL) eq $label} {
puts "{"
if {[catch {exec /bin/umount $usb(MP)} msg]} {
if {[string match {*resource busy*} $msg]} {
set msg "Failed to eject $label - in use"
}
puts "\"status\": 0,"
puts "\"result\": \"$msg\""
} else {
puts "\"status\": 1,"
puts "\"result\": \"Successfully ejected $label\""
catch {file delete -force $usb(MP)}
}
puts "}"
exit
}
}

60
webif/cgi-bin/usbinfo.jim Executable file
View File

@@ -0,0 +1,60 @@
#!/mod/bin/jimsh
source /mod/webif/lib/setup
require system.class
httpheader "application/json"
set fsg {File-Stor Gadget}
set ignoredev {}
if {[file isdirectory /mnt/hd2]} {
file stat /mnt/hd2 st
lappend ignoredev $st(dev)
}
set usbdisks [system usbdisks 1]
puts "{"
puts " \"mounts\": \["
set flag 0
foreach usb [system usbmounts 1] {
file stat $usb(MP) st
if {$usb(MODEL) ne $fsg && $st(dev) in $ignoredev} continue
if {$flag} { puts "," } else { set flag 1 }
puts " {"
set sf 0
foreach {k v} $usb {
if {$sf} { puts "," } else { set sf 1 }
puts -nonewline " \"$k\": \"$v\""
}
puts ""
puts -nonewline " }"
if {[dict exists $usbdisks $usb(RDEV)]} {
dict unset usbdisks $usb(RDEV)
}
}
if {$flag} { puts "" }
puts -nonewline " ]"
if {[llength $usbdisks] > 0} {
puts ","
puts " \"disks\": \["
set flag 0
foreach {k v} $usbdisks {
if {$flag} { puts "," } else { incr flag }
puts " {"
puts " \"device\": \"$k\","
puts " \"id\": \"$v\""
puts -nonewline " }"
}
puts ""
puts -nonewline "]"
}
puts ""
puts "}"

36
webif/cgi-bin/usbrescan.jim Executable file
View File

@@ -0,0 +1,36 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require system.class
httpheader "application/json"
set dev [cgi_get device -]
set disks [system usbdisks 1]
puts "{"
if {![dict exists $disks $dev]} {
puts "\"status\": 0,"
puts "\"result\": \"No such device - $dev.\""
} else {
set root "/sys/bus/usb/drivers/usb-storage"
set id $disks($dev)
if {[catch {
set fd [open "$root/unbind" w]
puts -nonewline $fd $id
$fd close
set fd [open "$root/bind" w]
puts -nonewline $fd $id
$fd close
} msg]} {
puts "\"status\": 0,"
puts "\"result\": \"$msg\""
} else {
puts "\"status\": 1,"
puts "\"result\": \"Successfully re-scanned $dev\""
}
}
puts "}"

14
webif/cgi-bin/vfd.jim Executable file
View File

@@ -0,0 +1,14 @@
#!/mod/bin/jimsh
source /mod/webif/lib/setup
httpheader
if {![file exists /mod/webif/plugin/redring/lib.jim]} {
puts ""
exit
}
source /mod/webif/plugin/redring/lib.jim
puts [::redring::vfd 1]

130
webif/cgi-bin/wifiscan.jim Executable file
View File

@@ -0,0 +1,130 @@
#!/mod/bin/jimsh
source /mod/webif/lib/setup
require system.class
httpheader "application/json"
if {![system has wifi_dongle]} {
puts "\[]"
exit
}
catch {exec ifconfig wlan0 up}
if {[catch {set op [exec /mod/bin/iwlist wlan0 scan]}]} {
puts "\[]"
exit
}
set lines [split $op "\n"]
puts "\["
set cur 0
foreach line [split $op "\n"] {
set extra [lassign [split $line :] key val]
switch -glob [string trim $key] {
*Address {
if {$cur} {
if {![llength $authtypes]} {
lappend authtypes "WEP"
}
puts ","
puts " \"auth\": \"$authtypes\""
puts " \},"
} else {
incr cur
}
set authtypes {}
puts " \{"
set mac "$val:[join $extra :]"
puts -nonewline " \"address\": \"[string trim $mac]\""
}
IE {
switch -glob [string trim $val] {
"WPA Version 1" {
lappend authtypes "WPA/"
}
*WPA2* {
lappend authtypes "WPA2/"
}
}
}
"Group Cipher" {
switch -glob [string trim $val] {
TKIP {
set x [lindex $authtypes end]
append x "TKIP"
lset authtypes end $x
}
CCMP {
set x [lindex $authtypes end]
append x "AES"
lset authtypes end $x
}
}
}
"Pairwise Ciphers*" {
switch -glob [string trim $val] {
*TKIP* {
set x [lindex $authtypes end]
if {![string match *TKIP* $x]} {
if {![string match */ $x]} {
append x +
}
append x "TKIP"
}
lset authtypes end $x
}
*CCMP* {
set x [lindex $authtypes end]
if {![string match *AES* $x]} {
if {![string match */ $x]} {
append x +
}
append x "AES"
}
lset authtypes end $x
}
}
}
Protocol {
puts ","
puts -nonewline " \"protocol\": \"[string trim [
string map {802.11 ""} $val]]\""
}
ESSID {
puts ","
puts -nonewline " \"ssid\": \"[string trim $val \"]\""
}
Channel {
puts ","
puts -nonewline " \"channel\": \"[string trim $val]\""
}
Quality {
puts ","
#puts "$val $extra"
set q [lindex [split $val /] 0]
set s [lindex [split [lindex $extra 0] " "] 0]
set n [lindex [split [lindex $extra 1] " "] 0]
puts " \"quality\": \"$q\","
puts " \"signal\": \"$s\","
puts -nonewline " \"noise\": \"$n\""
}
Encryption?key {
puts ","
puts -nonewline " \"encryption\": \"[string trim $val]\""
}
}
}
if {$cur} {
if {![llength $authtypes]} {
lappend authtypes "WEP"
}
puts ","
puts " \"auth\": \"$authtypes\""
puts " \}"
}
puts "\]"

View File

@@ -1,266 +0,0 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require settings.class
jqplugin enadis
jscss xepg.js /css/xepg.css
header
require epg.class spinner.class altrow epg_search totop system.class
set irinst [system pkginst ir]
set s [settings]
if {[$s chanchangenc]} {
puts { <script type=text/javascript src=/js/chanchangenc.js></script> }
} else {
jqplugin confirmAction
puts { <script type=text/javascript src=/js/chanchange.js></script> }
}
if {[$s service_style] eq "standard"} {
set surl xservice
} else {
set surl service
}
[spinner new {
text "Loading EPG Information..."
size "1.2em"
style "margin: 1em;"
}] start
require epg_popup
set now [clock seconds]
set stt [cgi_get stt $now]
if {$stt <= $now} {
set stt $now
set current 1
} else {
set current 0
}
set favgroup [$s channel_group]
set hours [expr 1.0 * [[settings] xepghours]]
if {$hours == 0} { set hours 4.0 }
set seconds $($hours * 3600)
set ostt $stt
set stt [expr int($stt / 1800.0) * 1800]
set ett $(int($stt + $seconds))
set offset $(($ostt - $stt) / 1800.0)
set chanpx 160
set eventpx 1000
set totalpx $($chanpx + $eventpx)
set contwidth $($totalpx + 50)
set hourpx $($eventpx / $hours)
set minpx $($hourpx / 60.0)
set secpx $($minpx / 60.0)
set start [clock milliseconds]
if {$::qepg} {
if {$favgroup} {
set records [epg dbfetch dump \
-trange "$stt:$ett" -fav $favgroup]
} else {
set records [epg dbfetch dump -trange "$stt:$ett"]
}
} else {
require channelsort
set records [channelsort [epg fetch dump -trange "$stt:$ett"]]
}
set got [clock milliseconds]
proc but {label time {active 1}} {
puts -nonewline "<button style=\"margin-right: 2em\" tt=$time"
if {$active} {
puts -nonewline " class=nav"
} else {
puts -nonewline " disabled class=\"nav ui-state-disabled\""
}
puts " active=$active>$label</button>"
}
puts "<!-- Hours $hours ($seconds) -->"
puts "<div id=buttons style=\"width: $eventpx; margin-left: ${chanpx}px;\">"
but "&lt&lt; -1 Week" $($stt - 3600 * 24 * 7) \
$($stt - $now + 3600 >= 3600 * 24 * 7)
but "&lt&lt; -1 Day" $($stt - 3600 * 24) $($stt - $now >= 3600 * 23)
but "&lt;&lt; Earlier", $($stt - 3600 * 4) $($stt > $now)
#but "&lt; Now &gt;" $now $($current == 0)
but "&lt; Now &gt;" $now
but "&gt;&gt; Later" $ett;
but "&gt;&gt; +1 Day" $($stt + 3600 * 24) $($stt < $now + 8 * 3600 * 24)
but "&gt;&gt; +1 Week" $($stt + 3600 * 24 * 7) $($stt < $now + 8 * 3600 * 24)
puts "</div>"
puts "
<script type=text/javascript>
\$('button.nav').button();
</script>
<div id=xepg style=\"min-width: ${contwidth}px; overflow: auto\">
<div id=xepgnow></div>
<div id=xegrid>
"
puts "<div id=epgdate style=\"width: ${eventpx}px; margin-left: ${chanpx}px;\">"
puts [clock format $stt -format {%a %d/%m/%Y}]
puts "<input type=hidden id=xepg_dp stt=$stt>"
puts "</div>"
puts "<div class=xechan style=\"width: ${chanpx}px;\">&nbsp;</div>"
for {set i 0} {$i < $hours * 2} {incr i} {
puts "<div class=xetime id=xe$i
style=\"width: [expr $minpx * 30]px\">"
puts "[clock format $($stt + 1800 * $i) -format "%H:%M"]</div>"
}
set lim 0
set lcn 0
set bg "odd"
foreach e $records {
set chnum [$e get channel_num]
if {$chnum == 0} { continue }
if {$chnum != $lcn} {
puts "<div class=xechan style=\"width: ${chanpx}px;\">"
if {$irinst} {
puts "<a class=chanchange chan=$chnum href=#>"
}
puts "[$e channel_icon 30]&nbsp;"
if {$irinst} { puts "</a>" }
puts "$chnum
<a href=\"/epg/$surl.jim?service=[$e get service_id]\"
title=\"[$e get channel_name]\">
[$e get channel_name]
</a></div>"
set lcn $chnum
set le 0
set pos 0
if {$bg eq "odd"} { set bg "even" } else { set bg "odd" }
}
set es [$e get start]
set ee [expr $es + [$e get duration]]
if {$es < $le} continue
if {$es < $stt} { set es $stt }
if {$ee > $ett} { set ee $ett }
set le $ee
set left [expr int(($es - $stt) * $secpx)]
set right [expr int(($ee - $stt - 1) * $secpx)]
set px $($right - $left)
if {$pos < $left} {
set px $($px + $left - $pos - 1)
} elseif {$pos > $left} {
set px $($px - ($pos - $left - 1))
}
incr pos $px
$e process_sched
set recopts 1
if {[$e get series_crid] ne ""} { set recopts 2 }
set perc [$e percent]
set showing 0
if {$perc > 0 && $perc < 100} { set showing 1 }
set txt "[cgi_quote_html [$e get name]] <span>([\
clock format $es -format "%H:%M"] - [\
clock format $ee -format "%H:%M"])"
if {$showing} { append txt " ($perc%)" }
append txt "</span>"
set htxt "[cgi_quote_html [$e get name]] ([\
clock format $es -format "%H:%M"] - [\
clock format $ee -format "%H:%M"])"
if {$showing} { append hxt " ($perc%)" }
set lbg $bg
if {[$e scheduled]} { set lbg "blueshade" }
puts "<div class=\"xeprog $lbg\"
style=\"width: [expr $px - 4]px;\" title=\"$htxt\">
<a class=event href=# xs=[$e get service_id]
xe=[$e get event_id] sch=[$e get sched_type]
rec=$recopts>"
puts $txt
puts "</a>"
puts "</div>"
}
puts "<div id=keypos style=\"float: left; clear: left;\"></div>"
puts "</div>"
puts "</div>"
set earlier $($stt - 3600 * 4)
puts "
<div style=\"clear: both;\">
<small><button id=epgswitch>
Switch to standard now/next display.
</button></small>
</div>
"
if {$current} {
puts "
<script type=text/javascript>
\$(function() {
"
puts {
var kt = $('#xe0');
var ktpos = kt.position();
var height = $('#keypos').position().top - ktpos.top;
}
puts "var nowpos = ktpos.left + (kt.width() * $offset);"
puts {
$('#xepgnow')
.css('left', nowpos + 'px')
.css('top', ktpos.top)
.height(height)
.show('slow');
}
puts "
});
</script>
"
}
puts "
<a href=/settings/settings.jim>
<img border=0 height=14 src=/images/421_1_00_CH_Title_2R_Arrow.png>
Visit settings to change EPG options.
</a><br>
"
epg cleanup
set end [clock milliseconds]
puts "<font class=footnote>
Retrieved in: [expr [expr $got - $start] / 1000.0] seconds.
</font>"
footer

View File

@@ -1,38 +0,0 @@
$(function() {
$('#epgswitch').button().click(function() {
window.location = '/epg/list.jim';
});
$('button.nav').click(function() {
window.location = '/cgi-bin/xepg.jim?stt=' + $(this).attr('tt') +
'&pos=' + $('#xegrid').scrollTop();
});
$('#xepg_dp').datepicker({
buttonImage: '/img/cal.gif',
buttonImageOnly: true,
showOn: 'button',
dateFormat: '@',
minDate: 0,
maxDate: 8,
onSelect: function(val, sel) {
var stt = $(this).attr('stt');
// Extract date part
dval = Math.round(val / 86400000.0);
// Extract current time part
var tm = ~~(stt % 86400);
var ret = dval * 86400 + tm;
window.location = '/cgi-bin/xepg.jim?stt=' + ret;
}
});
$('img.ui-datepicker-trigger').hover(
function() { $(this).css('cursor', 'pointer'); },
function() { $(this).css('cursor', 'auto'); }
);
});

26
webif/html/404.jim Executable file
View File

@@ -0,0 +1,26 @@
#!/mod/bin/jimsh
source /mod/webif/lib/setup
set delay 5
httpheader "text/html" 0 "Refresh: $delay; url=/\r\n"
header
puts "
<div width=100%>
<center>
<div>
<img src=/img/404.png>
</div>
<div>
Redirecting to main menu in $delay seconds...
</div>
</center>
</div>
"
footer

View File

@@ -1,70 +0,0 @@
function refresh_files()
{
$('#backup_files').load('files.jim', function() {
$('input.restore').change(function() {
$('#restore_button').removeAttr('disabled')
.button('option', 'disabled', false);
$('#delete_button').removeAttr('disabled')
.button('option', 'disabled', false);
$('#view_button').removeAttr('disabled')
.button('option', 'disabled', false);
});
});
}
$(document).ready(function() {
$('button').button();
refresh_files();
$('#backup_button').click(function() {
$('#backup_working').slideDown();
$('#results').load('backup.jim?' +
$('#backup_name').serialize(), function() {
$('#results').slideDown(function() {
$('#backup_working').slideUp();
refresh_files();
});
});
});
$('#delete_button').click(function() {
var backup = $('input.restore:checked').val();
if (confirm('Confirm deletion of ' + backup))
{
$('#results').load('delete.jim?' +
$('input.restore').serialize(), function() {
$('#results').slideDown(function() {
refresh_files();
});
});
}
});
$('#view_button').click(function() {
var backup = $('input.restore:checked').val();
$('#results').load('view.jim?' +
$('input.restore').serialize(), function() {
$('#results').slideDown(function() {
refresh_files();
});
});
});
$('#restore_button').click(function() {
var backup = $('input.restore:checked').val();
if (confirm('!!!!!!!!!!!!!!!!!!!!!!!!! PLEASE CONFIRM !!!!!!!!!!!!!!!!!!!!!!!!!\n\nAre you sure you wish to erase all scheduled recordings and favourite channels and then restore them from\n' + backup + '?'))
{
$('#restore_working').slideDown();
$('#results').load('restore.jim?' +
$('input.restore').serialize(), function() {
$('#results').slideDown(function() {
$('#restore_working').slideUp();
refresh_files();
$('#restore_warning').slideDown();
$('#restart_block').load(
'/cgi-bin/restartblock.jim');
});
});
}
});
});

View File

@@ -1,53 +0,0 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require rsv.class findhsvc
set dir /mod/var/backup
httpheader
set file [file tail [cgi_get restore_file]]
if {$file == 0} {
puts "No filename supplied."
exit
}
set ffile "/$dir/$file.rbk"
if {![file exists $ffile]} {
puts "Backup file <i>$file</i> does not exist."
exit
}
if {[catch { set fd [open $ffile r] } msg]} {
puts "Error opening <i>$file</i> - $msg"
exit
}
puts "Listing scheduled events from <i>$file</i>..."
set fields [lsort [[rsv] vars]]
set data [split [read $fd] "\n"]
foreach line $data {
set vals [split $line "\t"]
if {[lindex $vals 0] ne "event"} { continue }
set vars {}
set i 0
foreach f $fields {
incr i
lappend vars $f [lindex $vals $i]
}
set rsv [rsv new $vars]
puts " [$rsv name] ([$rsv channel_name])"
}
close $fd
rsv cleanup

21
webif/html/browse/_dir.jim Executable file
View File

@@ -0,0 +1,21 @@
#!/mod/bin/jimsh
package require cgi
package require pack
source /mod/webif/lib/setup
require json
httpheader "application/json"
set root [cgi_get dir]
# Strip double slashes
regsub -all -- {\/+} "$root/*" "/" root
puts "{"
foreach _ [glob -nocomplain "$root/_*"] {
set node [lindex [split [file dirname $_] /] end]
puts "\"[jescape $node]\": 1,"
}
puts "\"dummy\" : 0"
puts "}"

View File

@@ -14,7 +14,7 @@ set act [cgi_get act "update"]
if {$act eq "fetch"} {
httpheader "application/json"
set data [{dir expiry} $dir]
set data [dir expiry $dir]
puts "{"
puts " \"days\": \"$data(days)\","
puts " \"keep\": \"$data(keep)\","
@@ -44,6 +44,6 @@ if {![file isdirectory $dir]} {
exit
}
{dir expiry} $dir $data
dir expiry $dir $data
puts "Ok."

View File

@@ -9,15 +9,11 @@ puts {
<li class=cut><a href=#cut>Cut to clipboard</a></li>
<li class=pwcopy><a href=#copy>Copy to clipboard</a></li>
<li class=separator><a href=#rename>Rename</a></li>
<li><a href=#download>Download</a></li>
<li class="separator rename"><a href=#rename>Rename</a></li>
<li class=download><a href=#download>Download</a></li>
}
if {$model eq "HDR"} {
puts { <li class="separator decrypt"><a href=#decrypt>Decrypt</a></li> }
puts { <li class="compress"><a href=#strip>Shrink</a></li> }
} else {
puts { <li class="compress separator"><a href=#strip>Shrink</a></li> }
<li class="separator decrypt"><a href=#decrypt>Decrypt</a></li>
<li class="compress"><a href=#strip>Shrink</a></li>
}
if {[system pkginst ffmpeg]} {
puts {
@@ -27,19 +23,19 @@ if {[system pkginst ffmpeg]} {
}
}
puts { <li><a href=#vthm>View Thumbnail</a></li> }
puts { <li class=thm><a href=#vthm>View Thumbnail</a></li> }
puts { <li class=bookmark><a href=#bmarks>Bookmarks</a></li> }
if $nicesplice {
if {$nicesplice} {
puts {
<li class="cut"><a href=#crop>Crop</a></li>
<li class="cut"><a href=#chunk>Split (45m parts)</a></li>
}
}
puts {
<li class=separator><a href=#lock>Toggle Lock</a></li>
<li><a href=#new>Toggle New</a></li>
<li class="separator lock"><a href=#lock>Toggle Lock</a></li>
<li class=new><a href=#new>Toggle New</a></li>
}
if {[llength $plugins(menu)]} {
@@ -57,8 +53,17 @@ puts {
<li class=cut><a href=#cut>Cut to clipboard</a></li>
<li class=pwcopy><a href=#copy>Copy to clipboard</a></li>
<li class=separator><a href=#rename>Rename</a></li>
<li><a href=#download>Download</a></li>
<li class="separator rename"><a href=#rename>Rename</a></li>
<li class="download"><a href=#download>Download</a></li>
}
if {[llength $plugins(omenu)]} {
foreach plugin $plugins(omenu) {
lassign $plugin tag options
puts "<li class=$tag><a href=#$tag>$options(desc)</a></li>"
}
}
puts {
</ul>
<ul id=dooptmenu class=contextMenu style="width: 250px">
@@ -70,28 +75,17 @@ puts {
</ul>
<ul id=doptmenu class=contextMenu style="width: 250px">
<li class=delete><a href=#delete>Delete</a></li>
<li class=cut><a href=#cut>Cut to clipboard</a></li>
<li class=pwcopy><a href=#copy>Copy to clipboard</a></li>
<li class=pwpaste><a href=#paste>Paste to folder</a></li>
<li class=separator><a href=#rename>Rename</a></li>
<li class=delete><a class=notself href=#delete>Delete</a></li>
<li class=cut><a class=notself href=#cut>Cut to clipboard</a></li>
<li class=pwcopy><a class=notself href=#copy>Copy to clipboard</a></li>
<li class=pwpaste><a class=notself href=#paste>Paste to folder</a></li>
<li class="separator rename"><a class=notself href=#rename>Rename</a></li>
<li class=separator><a href=#resetnew>Reset new flag</a></li>
<li class="separator compress"><a href=#shrink>Auto-Shrink</a></li>
<li class="compressr"><a href=#shrinkr>Recursive Auto-Shrink</a></li>
<li class=compressr><a href=#shrinkr>Recursive Auto-Shrink</a></li>
<li class=dedup><a href=#dedup>Auto-Dedup</a></li>
}
if {$model eq "HDR"} {
puts {
<li class=decrypt><a href=#decrypt>Auto-Decrypt</a></li>
<li class=decryptr><a href=#decryptr>Recursive Auto-Decrypt
</a></li>
}
}
if $flatten {
puts { <li class="separator"><a href=#flat>No-Flatten</a></li> }
}
puts {
<li class=decrypt><a href=#decrypt>Auto-Decrypt</a></li>
<li class=decryptr><a href=#decryptr>Recursive Auto-Decrypt</a></li>
<li class=clock><a href=#expire>Auto-Expire Options</a></li>
}
@@ -109,6 +103,8 @@ if {[llength $plugins(dmenu)]} {
}
}
# the maxlength values for title and synopsis are 1 less than the maximum to
# allow for an extra byte to indicate character encoding (see rename.jim)
puts {
</ul>
@@ -137,20 +133,51 @@ puts {
</th>
<td>
<input type=text name="rename_title" id="rename_title"
value="" size=70 maxlength=48
value="" size=70 maxlength=47
class="text ui-widget-content ui-corner-all">
</td>
</tr>
<tr style="display: none" class=tstype>
<th>
<label for="rename_seriesnum" style="padding-top: 0.5em">
<b>New Series Number</b>
</label>
</th>
<td>
<span title="Series number">
<input type=number name="rename_seriesnum" id="rename_seriesnum"
value=0 max=255
class="uint8_t ui-widget-content ui-corner-all">
</span>
<label for="rename_episodenum" style="padding-top: 0.5em">
<b>Episode</b>
</label>
<span title="Episode number">
<input type=number name="rename_episodenum"
id="rename_episodenum" value=0 max=255
class="uint8_t ui-widget-content ui-corner-all">
</span>
<label for="rename_episodetot" style="padding-top: 0.5em">
<b>of</b>
</label>
<span title="Episode total">
<input type=number name="rename_episodetot"
id="rename_episodetot" value=0 max=255
class="uint8_t ui-widget-content ui-corner-all">
</span>
</td>
</tr>
<tr style="display: none" class=tstype>
<th>
<label for="rename_synopsis" style="padding-top: 0.5em">
<b>New Synopsis</b>
</label>
</th>
<td>
<td colspan=3>
<textarea name="rename_synopsis" id="rename_synopsis"
value="" cols=70 rows=4
value="" cols=70 rows=4 maxlength=251
class="text ui-widget-content ui-corner-all"></textarea>
</td>
</tr>
@@ -180,9 +207,9 @@ puts {
class="text ui-widget-content ui-corner-all">
}
set glist [ts genrelist]
foreach genre [array names glist] {
lassign $glist($genre) txt img
foreach genre [dict keys $::epg::genrelist] {
lassign $::epg::genrelist($genre) txt img
if {$txt eq "Unknown" } continue
if {$img eq "Unclassified"} {
set img /images/173_3_26_G3_$img.png
} else {
@@ -229,7 +256,7 @@ puts {
style="display: none">
<div class=pre id=savestream_detail></div>
<div id=savestream_retrieving>
<img src=/img/loading.gif> Retrieving details...
<img src=/img/spin.gif> Retrieving details...
</div>
<form id=savestream_form class=hidden>
}
@@ -248,7 +275,7 @@ puts {
value="" size=70 maxlength=255
class="text ui-widget-content ui-corner-all">
<span id=savestream_spin>
<img src=/img/loading.gif> Saving...
<img src=/img/spin.gif> Saving...
</span>
</td>
</tr>
@@ -344,19 +371,23 @@ puts {
</table>
<div id=aexpiry_working class=hidden>
<img src=/img/loading.gif> Applying changes...
<img src=/img/spin.gif> Applying changes...
</div>
<div id=aexpiry_loading class=hidden>
<img src=/img/loading.gif> Retrieving data...
<img src=/img/spin.gif> Retrieving data...
</div>
</form>
</div>
<div id=dialogue></div>
<div id=dialogue>
<img src=/img/spin.gif>Retrieving data...
</div>
<div id=confirm title="Confirmation Required"></div>
<div id=pwdialogue style="display: none">
<center>
<img src=/img/loading.gif>
<img src=/img/spin.gif>
<br><br>
Please wait...
<div id=pwfeedback></div>
@@ -366,6 +397,5 @@ Please wait...
<div id=bmpdialogue title="Recording Thumbnail" class=hidden>
<img id=thmbmp class=doublebmp src="about:blank">
</div>
}

View File

@@ -35,13 +35,12 @@ puts "
<div id=audiodiv style=\"padding: 1em\">
<button id=audioit>Perform audio extraction - $type</button>
</div>
<button id=back>Back to media list</button>
<div id=progressdiv class=hidden>
Extracting audio: <div id=progressbar></div>
</div>
<button id=back class=hidden>Back to media list</button>
<div id=output class=pre style=\"margin-top: 10px\"></div>
</fieldset>

View File

@@ -15,12 +15,13 @@ $(document).ready(function() {
$('#progressbar').reportprogress(0);
$('#back').button().click(function() {
window.location = '../index.jim?dir=' + $('#params').attr('dir');
window.location = '/go/browse?dir=' + $('#params').attr('dir');
});
$('#audioit').button().click(function() {
$('#audiodiv').hide('slow');
$('#progressdiv').show('slow');
$('#back').hide();
handle = setInterval("update()", 1000);
$('#output').load('execute.jim?file=' + $('#params').attr('rfile'),
function() {

View File

@@ -18,25 +18,12 @@ set base [file rootname $rfile]
set shname [file tail $base]
puts "Processing $shname"
set cmd [list ffmpeg -y -benchmark -v 0 -i "$rfile" -f mp3 -vn]
set slow [[settings] audiomp3]
if {![[settings] audiomp3]} {
lappend cmd -acodec copy
}
lappend cmd "${base}.mp3"
set token [system startop -multiple mp3 $rfile]
puts [$ts mkmp3 $slow]
system endop $token
#puts "$cmd"
puts [exec {*}$cmd]
if {[system pkginst id3v2]} {
puts [exec /mod/bin/id3v2 \
--song "[$ts get title]" \
--comment "[$ts get synopsis]" \
--album "[$ts get channel_name]" \
--year "[clock format [$ts get start] -format {%Y}]" \
"${base}.mp3"]
}
set xtime [expr [expr [clock milliseconds] - $xstart] / 1000.0]
set xtime [expr {[expr {[clock milliseconds] - $xstart}] / 1000.0}]
puts "Time taken: $xtime"

View File

@@ -14,9 +14,9 @@ if {![file exists "${bfile}.mp3"]} {
puts "0"
} else {
set sz [file size $rfile]
set nsz [expr [file size "${bfile}.mp3"] / 0.3]
set nsz [expr {[file size "${bfile}.mp3"] / 0.3}]
set perc [expr $nsz * 100 / $sz]
set perc [expr {$nsz * 100 / $sz}]
if {$perc > 100} { set perc 100 }
puts $perc
}

View File

@@ -2,7 +2,7 @@
package require cgi
source /mod/webif/lib/setup
require ts.class pretty_size
require ts.class system.class pretty_size
jscss script.js style.css
jqplugin touchpunch
@@ -15,9 +15,12 @@ set erfile [string map {' \\'} $rfile]
set len [$ts duration 1]
set start -1
set incr 1
set limit $(1-$start)
puts "
<script type=text/javascript>
var initbookmarks = '[$ts bookmarks]';
var len = [$ts duration 1];
var file = '$erfile';
var dir = '$dir';
@@ -25,25 +28,61 @@ var dir = '$dir';
<fieldset class=cleft>
<legend>Manage Bookmarks</legend>
<table class=keyval cellpadding=5>
<table class=keyval>
<tr><th>File:</th><td>$rfile</td></tr>
<tr><th>Length:</th><td>[clock format $len -format %T]</td></tr>
<tr><th>Size:</th><td>[pretty_size [$ts size]] ([$ts get definition])</td></tr>
<tr><th>Bookmarks<br><span class=footnote>(enter in seconds)</span></th><td>
<input id=bookmarks size=80 maxlength=255 init=\"[$ts bookmarks]\"
value=\"\" />
<input id=bookmarks size=80 maxlength=255 value=\"[$ts bookmarks]\" />
<button id=update>Update</button>
<br>
<span id=bookmarkstime></span>
</td></tr><tr><td align=right>
</td></tr><tr><td class=cell-align-right>
<button class=left id=addbmark>Add Bookmark</button>
<button class=left id=delbmark>Remove Bookmark</button>
</td><td><div id=slider></div></td></tr>
<tr><td class=cell-align-right>
<span class=left>Current: <span id=curbmk></span></span><br><br><br>
"
if {![$ts flag "ODEncrypted"]} {
puts "
<button id=genthumbs title=\"Generate Thumbnails\"
class=left>Generate Thumbnails</button>
"
}
puts "
</td><td>
<div id=thumbs class=hidden>
<table><tr>
"
set times {}
loop v $start $limit $incr {
lappend times $v
puts "
<th class=mark><span class=mark>
[format "%+d" $v]</span>s</th>
"
}
puts "</tr><tr>"
foreach v $times {
puts "<td><img class=bmp data-pos=$v alt=\"thumbnail @ $v s\"></td>"
}
puts "
</tr></table>
</div></td></tr>
</table>
<div id=buttons>
<button id=save>Save Bookmarks</button>
<button id=back>Back to Media Browser</button>
"
if {[system pkginst nicesplice]} {
puts "<button id=crop>Go to Crop</button>"
}
puts "
</div>
<div id=results class=\"hidden blood\"></div>
</fieldset>
"
footer

View File

@@ -1,132 +1,225 @@
var curval = 0;
var $slider;
/* using var len defined in inline script, index.jim */
/* using var file defined in inline script, index.jim */
/* using var dir defined in inline script, index.jim */
function
setvals()
toTimeStr(tval)
{
values = $.trim($('#bookmarks').val()).split(/ +/);
if (!values.length || values[0] == '')
{
refreshtimes();
return;
}
nvalues = [];
$.each(values, function(k, v) {
if (v > len)
v = len;
if (v < 0)
v = 0;
nvalues.push(v);
});
values = nvalues;
$('#bookmarks').val(values.join(' '));
sortmarks();
refreshtimes();
return new Date(null, null, null, null, null, tval)
.toTimeString().match(/\d{2}:\d{2}:\d{2}/)[0];
}
function
draw_slider()
valarray(valstr)
{
if ($slider)
$slider.slider('destroy');
else
$slider = $('#slider');
setvals();
values = $.trim($('#bookmarks').val()).split(/ +/);
if (!values.length || values[0] == '')
{
$slider = null;
return;
}
$slider.slider({
min: 0,
max: len,
step: 1,
values: values,
start: function(event, ui) {
curval = ui.value;
},
stop: function(event, ui) {
curval = ui.value;
sortmarks();
refreshtimes();
},
slide: function(event, ui) {
var marks = '';
for (var i = 0; i < ui.values.length; ++i)
marks += ui.values[i] + ' ';
$('#bookmarks').val($.trim(marks));
setvals();
}
});
};
function
refreshtimes()
{
var t = '';
values = $.trim($('#bookmarks').val()).split(/ +/);
if (!values.length || values[0] == '')
{
$('#bookmarkstime').text(t);
return;
}
$.each(values, function(k, v) {
t += new Date(null, null, null, null, null, v)
.toTimeString().match(/\d{2}:\d{2}:\d{2}/)[0] + ' ';
});
$('#bookmarkstime').text(t);
}
function
sortmarks()
{
var a = $.trim($('#bookmarks').val()).split(/ +/);
a.sort(function(a, b){return a-b});
$('#bookmarks').val(a.join(" "));
return valstr.trim().split(/\s+/);
}
$(function() {
var curval = 0;
var $slider;
var values;
$('#bookmarks').val($('#bookmarks').attr('init'));
draw_slider();
function
sortmarks()
{
values.sort(function(a, b){return a - b});
$('#bookmarks').val(values.join(" "));
}
function
refreshtimes()
{
var t = '';
if (values.length > 0 && values[0] != '')
{
$.each(values, function(k, v) {
if (t != '') t += ', ';
t += toTimeStr(v);
});
$('#slider .ui-slider-handle').each(function(i) {
if (values[i]|0 > 0)
$(this).attr('title', toTimeStr(values[i]))
else $(this).attr('title', '');
});
$('#curbmk').html(toTimeStr(curval));
$('#genthumbs').button('enable');
}
else
{
$('#genthumbs').button('disable');
$('#curbmk').html('');
}
$('#bookmarkstime').text(t);
}
function
setvals()
{
var nvalues;
values = valarray($('#bookmarks').val());
nvalues = new Set();
$.each(values, function(k, v) {
if (v > len)
v = len;
if (v < 0)
v = 0;
nvalues.add(v);
});
values = Array.from(nvalues);
sortmarks();
}
function
regenthumbs(curbmkstr)
{
$('#curbmk').html(curbmkstr);
$('#thumbs').hide();
$('#genthumbs')
.button(curbmkstr ? 'enable': 'disable')
.button('option', 'icon', 'ui-icon-zoomin');
}
function
draw_slider()
{
if ($slider)
$slider.slider('destroy');
else
$slider = $('#slider');
setvals();
$slider.slider({
min: 0,
max: len,
step: 1,
disabled: values.length <= 0 || values[0] == '',
values: values,
start: function(event, ui) {
curval = ui.value;
},
stop: function(event, ui) {
curval = ui.value;
sortmarks();
refreshtimes();
},
slide: function(event, ui) {
var marks = '';
for (var i = 0; i < ui.values.length; ++i)
marks += ui.values[i] + ' ';
$('#bookmarks').val(marks.trim());
setvals();
}
});
refreshtimes();
/* slider values are strings */
var curvalstr = "" + curval;
if (!values.includes(curvalstr)) {
/* try to map current selected bmk to new bmk */
var ovalues = $slider.slider("option", "values");
var nn = ovalues.indexOf(curvalstr);
if (nn < 0) {
curval = 0;
regenthumbs('');
} else {
if (nn >= values.length)
nn = values.length - 1;
if (nn >= 0) {
regenthumbs(toTimeStr(curval = values[nn]));
} else {
curval = 0;
regenthumbs('');
}
}
}
};
$('#genthumbs').button({icons: {primary: "ui-icon-zoomin"}, disabled: true})
.on('click', function() {
var start;
var incr = -1;
var last;
$(this)
.button('disable')
.button('option', 'icon', 'ui-icon-refresh');
$('img.bmp').each(function(i) {
if (start === undefined) {
start = $(this).attr('data-pos') | 0;
} else {
last = $(this).attr('data-pos') | 0;
}
incr++;
$(this).attr('src', '/img/generating.png');
});
$('#thumbs').show();
incr = (last - start) / incr;
$.get('/browse/thumbnail/mkrange.jim', {
'file': file,
's': start+curval,
'e': last+curval,
'i': incr
}, function() {
$('img.bmp').each(function(i) {
/* cast to "int" */
var pos = $(this).attr('data-pos')|0;
$(this).attr('src',
'/browse/thumbnail/fetch.jim?' +
'file=' + encodeURIComponent(file) +
'&pos=' + (curval+pos).toFixed(1));
});
$('#genthumbs').button('option', 'icon', 'ui-icon-zoomin');
});
});
$('#addbmark').button({icons: {primary: "ui-icon-plus"}, text: false})
.on('click', function() {
$('#bookmarks').val('0 ' + $('#bookmarks').val());
draw_slider();
});
$('#delbmark').button({icons: {primary: "ui-icon-minus"}, text: false})
.on('click', function() {
var cur = $('#bookmarks').val();
cur = $.trim(cur.replace(
new RegExp('(^| )' + curval + '( |$)', ''), ' '));
$('#bookmarks').val(cur);
draw_slider();
});
$('#addbmark').button({icons: {primary: "ui-icon-plus"}, text: false})
.on('click', function() {
$('#bookmarks').val('0 ' + $('#bookmarks').val());
curval = 0;
draw_slider();
});
$('#save').button({icons: {primary: "ui-icon-disk"}})
.on('click', function() {
$.post('save.jim', {
file: file,
bookmarks: $('#bookmarks').val()
}, function(data) {
$('#results').html(data)
.slideDown('slow').delay(5000).slideUp('slow');
$('#delbmark').button({icons: {primary: "ui-icon-minus"}, text: false})
.on('click', function() {
var cur = $('#bookmarks').val();
cur = cur.replace(
new RegExp('(^| )' + curval + '( |$)', ''), ' ').trim();
$('#bookmarks').val(cur);
draw_slider();
});
$('#save').button({icons: {primary: "ui-icon-disk"}})
.on('click', function() {
$.post('save.jim', {
file: file,
bookmarks: $('#bookmarks').val()
}, function(data) {
$('#results').html(data)
.slideDown('slow').delay(5000).slideUp('slow');
});
});
$('#back').button({icons: {primary: "ui-icon-arrowreturnthick-1-w"}})
.on('click', function() {
window.location = '/go/browse?dir=' + encodeURIComponent(dir);
});
$('#crop').button({icons: {primary: "ui-icon-arrowreturnthick-1-e"}})
.on('click', function() {
window.location =
window.location.href.replace('/bookmarks/?','/crop/crop.jim?');
});
$('#update').button()
.on('click', draw_slider);
$('#slider')
.on('slidechange', function(evt, ui) {
var tstr = toTimeStr(curval);
if (tstr != $('#curbmk').html())
regenthumbs(tstr);
});
});
$('#back').button({icons: {primary: "ui-icon-arrowreturnthick-1-w"}})
.on('click', function() {
window.location = '../index.jim?dir=' + dir;
});
$('#update').button()
.on('click', function() {
draw_slider();
});
});

View File

@@ -14,3 +14,20 @@
margin-top: 5px;
}
/* <table class=keyval ... cellpadding=5> */
.keyval th, .keyval td
{
padding: 5px;
}
/* <td align=right> */
.cell-align-right
{
text-align: right;
}
/* <th style="text-align: center"> */
th.mark
{
text-align: center;
}

View File

@@ -53,12 +53,9 @@ puts "
<div id=chunkdiv style=\"padding: 1em\">
<button id=chunkit>Split recording into $part parts</button>
</div>
<div id=findiv style=\"padding: 1em\" class=hidden>
<button id=back dir=\"[cgi_quote_url [file dirname $rfile]]\">
Back to Media Browser
</button>
</div>
</fieldset>
"

View File

@@ -48,7 +48,7 @@ function xpart(part)
else
{
clearInterval(handle);
$('#findiv').show('slow');
$('#back').show('slow');
}
}
@@ -60,6 +60,7 @@ $('#chunkit').button().click(function(e) {
e.preventDefault();
$('#chunkdiv').hide('slow');
$('tr.part').show('slow');
$('#back').hide();
handle = setInterval("xprogress()", 1000);
xpart(0);
@@ -69,7 +70,7 @@ $('#back').button().click(function(e) {
e.preventDefault();
var dir = $(this).attr('dir');
window.location = '../index.jim?dir=' + dir;
window.location = '/go/browse?dir=' + dir;
});
});

View File

@@ -4,7 +4,7 @@ package require cgi
source /mod/webif/lib/setup
require ts.class
heepheader
httpheader
set file [cgi_get file]
set part [cgi_get part]

View File

@@ -11,12 +11,13 @@ cgi_input 1
set cb [[clipboard new {path "/tmp/webif-browse.cb"}] load]
set action [cgi_get act list]
set imgpath "/lib/jquery.plugin/contextMenu/images"
switch $action {
list {
if {![$cb size]} {
puts "<i>Clipboard is empty</i>"
break
exit
}
puts "<div class=cliplist>"
foreach file [$cb get items] {
@@ -27,7 +28,7 @@ switch $action {
set path [$file get path]
set xpath [cgi_quote_html $path]
puts "<span title=\"$xpath\" alt=\"$xpath\">"
puts "<img src=/img/context/$img.png>"
puts "<img src=$imgpath/$img.png>"
set dfile [file tail $path]
if {[string length $dfile] > 25} {
set dfile "[string range $dfile 0 22]..."
@@ -42,9 +43,10 @@ switch $action {
<img border=0 src=/img/close.png height=16></a>"
puts "</span>"
}
puts "</div>"
puts "</div><div class=clipbuttons>"
puts "<button id=paste>Paste to current folder</button>"
puts "<button id=clipclear>Empty clipboard</button>"
puts "</div>"
}
add {
if {[set path [cgi_get path]] eq "0"} {
@@ -80,6 +82,7 @@ switch $action {
set path [$item get path]
set file [file tail $path]
set mode [$item get action]
set fileonly 0
puts "Pasting $file"
@@ -103,8 +106,13 @@ switch $action {
"$dir/[file tail $f]"}
}
}
} else {
set fileonly 1
}
} else {
set fileonly 1
}
if {$fileonly} {
if {$mode eq "cut"} {
catch {file rename $path \
"$dir/[file tail $path]"}

View File

@@ -4,8 +4,8 @@ package require cgi
source /mod/webif/lib/setup
require ts.class pretty_size
jqplugin progressbar
jscss crop.js
jqplugin progressbar iphone-style-checkboxes
jscss crop.js style.css
header
set rfile [cgi_get file]
@@ -14,6 +14,7 @@ set ts [ts fetch $rfile]
set dir [file dirname $rfile]
set len [$ts duration 1]
set planwidth 500
puts "
<fieldset>
@@ -23,18 +24,23 @@ puts "
<tr><th>File:</th><td>$rfile</td></tr>
<tr><th>Length:</th><td>[clock format $len -format \"%T\"]</td></tr>
<tr><th>Size:</th><td>[pretty_size [$ts size]] ([$ts get definition])</td></tr>
<tr><th>Bookmarks:</th><td>[$ts get bookmarks] @ "
<tr><th>Bookmarks:</th><td id=originalbookmarks>[$ts get bookmarks] @ "
puts [join [lmap i [$ts bookmarks 1] {
clock format $i -format "%T"
}] ", "]
puts "</td></tr><tr><th>File</th><td>"
# set minimum width as positioned contents doesn't resize its cell
puts "</td></tr><tr><th>&nbsp;</th><td id=cutplan style=\"min-width: ${planwidth}px\">"
puts "<div style=\"position: relative; top: -10px\">"
proc div {type left right} {
set width $($right - $left)
if {$width < 0} {
# negative values are invalid for CSS width
set width 0
}
puts "<div class=$type style=\"left: ${left}px; width: ${width}px\">
$type</div>"
}
@@ -48,17 +54,24 @@ append bookmarks [$ts bookmarks]
set keeping 0
set last 0
set start -1
set newbookmarks "0 "
set cur 0
foreach b $bookmarks {
if {$start < 0} {
# Start of a section to keep
set start $b
continue
}
# End of a section to keep
set end $b
incr keeping $($end - $start)
set l $($end - $start)
incr keeping $l
incr cur $l
append newbookmarks "[expr {$cur + 3}] "
set left $($start * 500 / $len)
set right $($end * 500 / $len)
set left $($start * $planwidth / $len)
set right $($end * $planwidth / $len)
div cut $last $($left - 1)
div keep $left $($right - 1)
@@ -69,12 +82,17 @@ foreach b $bookmarks {
}
if {$start > 0} {
# Still in a keep section...
incr keeping $($len - $start)
set left $($start * 500 / $len)
set left $($start * $planwidth / $len)
div cut $last $($left - 1)
div keep $left 500
div keep $left $planwidth
} else {
div cut $last 500
div cut $last $planwidth
}
if {$cur > $keeping - 8 && $keeping - 8 > 0} {
set newbookmarks [lreplace $newbookmarks end end $($keeping - 8)]
}
set keepperc $($keeping * 100.0 / $len)
@@ -86,30 +104,53 @@ puts "
</td></tr>
<tr><th>Keeping:</th><td>
[clock format $keeping -format "%T"] ([format "%.2f" $keepperc]%)
</td></tr>
<tr><th>Time:</th>
</td></tr>"
puts "
<tr>
<th title=\"Calculated bookmarks for edit points following crop.\">
New Bookmarks:
</th><td id=newbookmarks>
<span id=bookmarks val=\"$newbookmarks\">
$newbookmarks</span>&nbsp;&nbsp;&nbsp;&nbsp;(
"
puts [join [lmap i $newbookmarks {
clock format $i -format "%T"
}] ", "]
puts " )</td></tr>"
puts "
<tr id=esttime><th>Time:</th>
<td>Cropping will take around [clock format $esttime -format "%T"]</td></tr>
</table>
<span class=hidden id=params
file=\"[cgi_quote_url $rfile]\"
file=\"$rfile\"
perc=\"$keepperc\"
dir=\"[cgi_quote_url $dir]\"
></span>
<div id=cropdiv style=\"padding: 1em\">
<button id=invert invert=$invert>Invert selection</button>
<button id=cropit>Perform crop operation</button>
<table><tr>
<td><button id=invert invert=$invert>Invert selection</button></td>
<td><button id=cropit>Perform crop operation</button></td>
<td>
<label id=saveitlabel for=saveit>Save new bookmarks?</label>
<input id=saveit type=checkbox name=saveit checked>
&nbsp;
</td>
</tr></table>
</div>
<button id=back>Back to media list</button>
<button id=save class=\"hidden\">Save New Bookmarks</button>
<div id=results class=\"hidden blood\"></div>
<div id=progressdiv class=hidden>
Cropping: <div id=progressbar></div>
</div>
<button id=back>Back to media list</button>
<div id=output class=\"hidden pre\" style=\"margin-top: 10px\"></div>
</fieldset>
"

View File

@@ -2,42 +2,82 @@ var handle = 0;
function update()
{
var perc = $('#params').attr('perc');
var file = $('#params').attr('file');
$.get('progress.jim' + '?perc=' + perc + '&file=' + file,
function(data) {
$.get('progress.jim', {
'perc': $('#params').attr('perc'),
'file': $('#params').attr('file')
}, function(data) {
if (handle)
$('#progressbar').reportprogress(data);
});
}
$(document).ready(function() {
$(function() {
$('[type="checkbox"]').iphoneStyle({
checkedLabel: 'YES',
uncheckedLabel: 'NO'
});
$('#progressbar').reportprogress(0);
$('#back').button().click(function() {
window.location = '../index.jim?dir=' + $('#params').attr('dir');
$('#back').button({icons: {primary: "ui-icon-arrowreturnthick-1-w"}})
.on('click', function() {
window.location = '/go/browse?dir=' + $('#params').attr('dir');
});
$('#cropit').button().click(function() {
$('#cropdiv').hide('slow');
$('#progressdiv').show('slow');
handle = setInterval("update()", 1000);
$('#output').show().text('Please do not interrupt...')
.load('execute.jim?file=' + $('#params').attr('file') +
'&invert=' + $('#invert').attr('invert'),
function() {
clearInterval(handle);
handle = 0;
$('#back').show();
$('#progressbar').reportprogress(100);
$('#save').button({icons: {primary: "ui-icon-disk"}})
.on('click', function() {
$('#progressdiv,#output,#save').hide('slow');
$.post('../bookmarks/save.jim', {
'file': $('#fileparams').attr('file'),
'bookmarks': $('#bookmarks').attr('val')
}, function(data) {
$('#results').html(data)
.slideDown('slow')
.delay(6000)
.slideUp('slow');
$('#originalbookmarks')
.html($('#newbookmarks').clone());
$('#esttime').hide();
if ($('#results').html().indexOf(' successful') < 0) {
$('#saveit').hide();
$('#saveitlabel').hide();
$('#save').show();
}
});
});
$('#invert').button().on('click', function() {
window.location = 'crop.jim?file=' + $('#params').attr('file') +
'&invert=' + ($(this).attr('invert') == '1' ? '0' : '1');
$('#cropit').button({icons: {primary: "ui-icon-scissors"}})
.on('click', function() {
$('#cropdiv').hide('slow');
$('#progressdiv').show('slow');
$('#back').hide();
handle = setInterval("update()", 1000);
$('#output').show().text('Please do not interrupt...')
.load('execute.jim', {
'file': $('#params').attr('file'),
'invert': $('#invert').attr('invert')
}, function() {
clearInterval(handle);
handle = 0;
$('#back,#save').show();
$('#cutplan').html('File cropping complete');
$('#originalbookmarks').empty();
$('#progressbar').reportprogress(100);
if ($('#saveit').prop('checked'))
{
$('#save').trigger('click');
$('#progressdiv')
.delay(3000)
.text('Cropping complete.');
}
});
});
$('#invert').button({icons: {primary: "ui-icon-shuffle"}})
.on('click', function() {
window.location = window.location.href.replace(/&invert=[01]/,'') +
'&invert=' + ($(this).attr('invert') == '1' ? '0' : '1');
});
});

View File

@@ -14,7 +14,7 @@ if {[system inuse $rfile]} {
exit
}
set ts [ts fetch $rfile]
set ts [ts fetch_or_error $rfile]
set dir [file dirname $rfile]
set len [$ts duration 1]
@@ -50,7 +50,7 @@ set cmd [list /mod/bin/nicesplice \
-out "$dir/$shname"]
if {$invert} {
if {[expr [llength $bookmarks] % 2] != 0} {
if {[expr {[llength $bookmarks] % 2}] != 0} {
lappend bookmarks [$ts duration 1]
}
foreach k [array names bookmarks] {
@@ -60,22 +60,17 @@ if {$invert} {
lappend cmd "-cutBookMarks"
}
puts "CMD: $cmd"
#puts "CMD: $cmd"
set token [system startop -multiple crop $rfile]
puts [exec {*}$cmd]
#puts [exec /mod/bin/nicesplice \
# -in "$origdir/$shname" \
# -out "$dir/$shname" \
# -cutBookMarks]
system endop $token
set newname "$shname-[clock seconds]"
puts "Renaming file group to $newname"
puts "<span class=hidden id=fileparams file=\"$dir/$newname.ts\"></span>"
ts renamegroup "$dir/$shname.ts" $newname
exec /mod/bin/hmt "+setfilename=$newname" "$dir/$newname.hmt"
# New nicesplice shrinks whilst cropping.
# No longer required - nicesplice now sets this flag.
#exec /mod/bin/hmt "+shrunk" "$dir/$newname.hmt"
set croptime [expr [expr [clock milliseconds] - $cropstart] / 1000.0]
set croptime [expr {[expr {[clock milliseconds] - $cropstart}] / 1000.0}]
puts "Time taken: $croptime"

View File

@@ -19,7 +19,7 @@ if {![file exists $newfile]} {
set expected $($sz / 100 * $perc)
set nsz [file size $newfile]
set perc [expr $nsz * 100 / $expected]
set perc [expr {$nsz * 100 / $expected}]
if {$perc > 100} { set perc 100 }
puts $perc
}

View File

@@ -0,0 +1,18 @@
div.switchlabel
{
height: 27px;
line-height: 27px;
}
div.sliderlabel
{
height: 40px;
line-height: 40px;
}
#cutplan {
/* ensure cut plan segments are aligned left */
padding-left: 0;
}

View File

@@ -3,64 +3,67 @@
package require sqlite3
package require cgi
source /mod/webif/lib/setup
require ts.class
require ts.class system.class
jqplugin progressbar
jscss decrypt.js
header
set mode "dlna"
if {[system model] eq "HD"} { set mode "direct" }
set rfile [cgi_get file]
set ts [ts fetch $rfile]
set dir [file dirname $rfile]
set len [$ts duration 1]
lassign [$ts dlnaloc "127.0.0.1"] url
if {$mode eq "dlna"} {
if {![system is_listening 9000]} {
puts {
<div id=sysnotify class=warningbox style="width: 90%"><center>
The Humax media server is not running.<br>
Decryption will not use hardware acceleration.<br>
Have you enabled <i>Content Sharing</i> in the Humax menus?<br>
</center></div>
}
set mode "direct"
}
}
if {$mode eq "dlna"} {
set method "Hardware accelerated (via DLNA)"
} else {
set method "Directly without hardware acceleration"
}
puts "
<fieldset class=cleft>
<legend>Decrypt in-place</legend>
<table class=keyval cellpadding=5>
<tr><th>File:</th><td>$rfile</td></tr>
<tr><th>Length:</th><td>[clock format $len -format "%T"]</td></tr>
<tr><th>DLNA URL</th><td>$url</td></tr>
<tr><th>Decryption method:</th><td>$method</td></tr>
</table>
"
if {$url eq ""} {
puts "This file has not been indexed by the media server.
Cannot decrypt."
puts "Have you enabled <i>Content Sharing</i> in the Humax menus?"
exit
}
if {![system is_listening 9000]} {
puts "The Humax media server is not running, cannot decrypt."
puts "Have you enabled <i>Content Sharing</i> in the Humax menus?"
puts "It can sometimes turn itself off so it's worth double checking."
puts "If it is on then try turning sharing off and on again."
exit
}
puts "
<span class=hidden id=params
dir=\"[cgi_quote_url $dir]\"
file=\"[cgi_quote_url $rfile]\"
mode=\"$mode\"
></span>
<div id=decryptdiv style=\"padding: 1em\">
<div style=\"padding: 1em\">
<span id=decryptdiv>
<button id=decryptit>Perform decryption</button>
</span>
<button id=back>Back to media list</button>
</div>
<div id=progressdiv class=hidden>
Decrypting: <div id=progressbar></div>
</div>
<button id=back class=hidden>Back to media list</button>
<div id=output class=pre style=\"margin-top: 10px\"></div>
<div id=output class=\"hidden pre\" style=\"margin-top: 10px\"></div>
</fieldset>
"

View File

@@ -3,26 +3,31 @@ var handle = 0;
function update()
{
$.get('progress.jim?file=' + $('#params').attr('file'),
$.get('progress.jim?file=' + $('#params').attr('file') +
'&mode=' + $('#params').attr('mode'),
function(data) {
if (handle)
$('#progressbar').reportprogress(data);
});
}
$(document).ready(function() {
$(function() {
$('#progressbar').reportprogress(0);
$('#back').button().click(function() {
window.location = '../index.jim?dir=' + $('#params').attr('dir');
window.location = '/go/browse?dir=' + $('#params').attr('dir');
});
$('#decryptit').button().click(function() {
$('#decryptdiv').hide('slow');
$('#progressdiv').show('slow');
$('#back').hide();
handle = setInterval("update()", 1000);
$('#output').load('execute.jim?file=' + $('#params').attr('file'),
$('#output')
.show()
.load('execute.jim?file=' + $('#params').attr('file') +
'&mode=' + $('#params').attr('mode'),
function() {
clearInterval(handle);
handle = 0;

View File

@@ -8,15 +8,32 @@ require ts.class system.class
httpheader
set rfile [cgi_get file]
set mode [cgi_get mode dlna]
set ts [ts fetch $rfile]
set dir [file dirname $rfile]
set len [$ts duration 1]
lassign [$ts dlnaloc "127.0.0.1"] url
if {$url eq ""} {
puts "This file has not been indexed by the media server.
Cannot decrypt."
exit
if {$mode eq "dlna"} {
lassign [$ts dlnaloc "127.0.0.1"] url
if {$url ne ""} {
# File is indexed
set helper 0
} else {
if {[catch {
lassign [system dlnahelper [\
file normalize $rfile]] url
} msg]} {
puts "Error: Cannot obtain DLNA access to file."
exit
}
set helper 1
}
if {$url eq ""} {
puts "This file has not been indexed by the media server.
Cannot decrypt."
exit
}
}
if {[system inuse $rfile]} {
@@ -32,39 +49,55 @@ if {![file exists $origdir]} { file mkdir $origdir }
set shname [file tail $base]
puts "Processing $shname"
flush stdout
if {[file exists "$origdir/$shname.ts"]} {
puts "The file already exists in _original, cannot decrypt."
exit
}
set token [system startop -multiple decrypt $rfile]
set err 0
if {$mode eq "dlna"} {
if {[catch {exec wget -O "$rfile.decrypting" $url} msg opts]} {
puts "Wget error - $msg - $opts"
incr err
}
exec wget -O "$rfile.decrypting" $url
puts "Moving recording to $origdir"
set tail [file tail $base]
foreach ext $tsgroup {
if {![file exists "$base.$ext"]} continue
puts " $tail.$ext"
file rename "$base.$ext" "${origdir}/$tail.$ext"
}
file rename "$rfile.decrypting" $rfile
file touch $rfile "$origdir/$tail.ts"
foreach ext {nts hmt thm} {
set sidecar "$shname.$ext"
if {[file exists "$origdir/$sidecar"]} {
puts "Copying back sidecar $ext"
file copy "$origdir/$sidecar" "$dir/$sidecar"
file touch "$dir/$sidecar" "$origdir/$tail.ts"
# Release the helper lock once finished.
if {$helper} { system dlnahelper -release }
} else {
if {[catch {
exec /mod/bin/stripts -@@ "$base" "$base.decrypting"
} msg opts]} {
puts "Decrypt error - $msg - $opts"
incr err
}
}
if {[file exists "$dir/$shname.hmt"]} {
exec /mod/bin/hmt -encrypted "$dir/$shname.hmt"
system endop $token
if {$err} exit
puts "Moving recording to $origdir"
$ts move "${origdir}" 1
if {$mode eq "dlna"} {
file rename "$rfile.decrypting" $rfile
foreach ext {nts hmt thm} {
set sidecar "$shname.$ext"
if {[file exists "$origdir/$sidecar"]} {
puts "Copying back sidecar $ext"
file copy "$origdir/$sidecar" "$dir/$sidecar"
file touch "$dir/$sidecar" "$origdir/$shname.ts"
}
}
if {[file exists "$dir/$shname.hmt"]} {
exec /mod/bin/hmt -encrypted "$dir/$shname.hmt"
}
} else {
foreach ext $::tsgroup {
if {![file exists "$base.decrypting.$ext"]} continue
file rename "$base.decrypting.$ext" $base.$ext
}
}
set xtime [expr [expr [clock milliseconds] - $xstart] / 1000.0]
set xtime [expr {[expr {[clock milliseconds] - $xstart}] / 1000.0}]
puts "Time taken: $xtime"

View File

@@ -7,14 +7,21 @@ require ts.class
httpheader
set tsfile [cgi_get file]
set mode [cgi_get mode dlna]
set rfile [file normalize $tsfile]
if {![file exists "$rfile.decrypting"]} {
if {$mode eq "dlna"} {
set file "$rfile.decrypting"
} else {
set file "[file rootname $rfile].decrypting.ts"
}
if {![file exists "$file"]} {
puts "0"
} else {
set sz [file size $rfile]
set nsz [file size "$rfile.decrypting"]
set nsz [file size "$file"]
puts [expr $nsz * 100 / $sz]
puts [expr {$nsz * 100 / $sz}]
}

View File

@@ -10,7 +10,7 @@ set dir [cgi_get dir]
#puts "DIR: ($dir)"
puts "<div id=deleting class=blood><img src=/img/loading.gif>Deleting...</div>"
puts "<div id=deleting class=blood><img src=/img/spin.gif>Deleting...</div>"
puts "<ul style=\"list-style-type: square\">"
foreach file [cgi_get files] {

29
webif/html/browse/dequeue.jim Executable file
View File

@@ -0,0 +1,29 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require ts.class queue.class
httpheader
set dir [cgi_get dir]
puts "<div id=deleting class=blood><img src=/img/spin.gif>De-queuing...</div>"
puts "<ul style=\"list-style-type: square\">"
foreach file [cgi_get files] {
puts -nonewline "<li>\"$file\"..."
if {[string first "$dir/" $file] != 0} {
puts "Error - outside directory."
continue
}
set ts [ts fetch $file]
if {$ts eq "0"} continue
queue delete $ts
puts "</li>"
}
puts "</ul>"

View File

@@ -10,7 +10,7 @@ set urlbase [cgi_get base ""]
# Default to just downloading the raw file.
set url $file
set mime "video/ts"
set mime "video/mp2t"
if {[string match {*.ts} $file]} {
if {![catch {set ts [ts fetch $file]}]} {

View File

@@ -7,7 +7,6 @@ require ts.class
httpheader
set file [cgi_get file]
set ts [ts fetch $file]
if {[set ts [ts fetch $file]] != 0} {
set action enc
if {[$ts flag "Encrypted"]} { set action unenc }

View File

@@ -2,18 +2,22 @@
package require cgi
source /mod/webif/lib/setup
require ts.class
require ts.class json
httpheader "application/json"
set file [cgi_get file]
if {$file == 0} exit
set ts [ts fetch $file]
if {$ts == 0} exit
puts "{"
puts "\"title\" : \"[$ts get title]\","
puts "\"synopsis\" : \"[$ts get synopsis]\","
puts "\"guidance\" : \"[$ts get guidance]\","
puts "\"genre\" : [$ts get genre]"
puts "\"title\" : \"[jescape [$ts get title]]\","
puts "\"synopsis\" : \"[jescape [$ts get synopsis]]\","
puts "\"guidance\" : \"[jescape [$ts get guidance]]\","
puts "\"genre\" : [jescape [$ts genrenib]],"
puts "\"seriesnum\" : [jescape [$ts get seriesnum]],"
puts "\"episodenum\" : [jescape [$ts get episodenum]],"
puts "\"episodetot\" : [jescape [$ts get episodetot]]"
puts "}"

View File

@@ -5,10 +5,6 @@ source /mod/webif/lib/setup
httpheader
if [file exists /mod/bin/ffmpeg] {
set file [cgi_get file]
puts [exec /mod/webif/lib/bin/ffmpeg -i $file]
} else {
puts "Install ffmpeg package for more information..."
}
set file [cgi_get file]
puts [exec /mod/bin/ffprobe -hide_banner $file]

View File

@@ -2,7 +2,7 @@
package require cgi
source /mod/webif/lib/setup
require pretty_size progressbar
require pretty_size progressbar plugin
httpheader
@@ -13,10 +13,20 @@ if {$file == 0} exit
set sz [pretty_size [file size $file]]
set flags {}
set url ""
# assumption: the type is only ts if fetch has already been checked
if {$type eq "ts"} {
require epg.class ts.class
set ts [ts fetch $file]
set ts [ts fetch $file 1]
# Causes other series information to be automatically populated
set epname [$ts episode_name]
set series [$ts series_name]
set tvdb [$ts get tvdb_series]
set idata [$ts get tvdb_data]
puts "
<table class=keyval>
@@ -25,20 +35,82 @@ if {$type eq "ts"} {
<td class=va>
"
if {[file exists "[file rootname $file].thm"]} {
puts "<img class=\"bmp va\" width=70 height=39 src=\"bmp.jim?file=$file\">"
puts "<img class=\"bmp va\"
src=\"/browse/bmp.jim?file=[cgi_quote_url $file]\">"
}
if {[dict exists $idata thumb]} {
puts "
<img class=\"rollimg va\"
src=\"[tvdb bannerurl $idata(thumb)]\">
<div id=rollimg class=hidden></div>
"
}
puts "[$ts get title]</td>
</tr><tr>
<th>Synopsis</th>
<td>[$ts get synopsis]</td>
</tr><tr>
<th>Episode</th>
"
puts "<td>[$ts epstr] - $epname (<i>$series</i>)"
if {[llength $tvdb]} {
puts "<button class=tvdbchoose>Change</button>"
}
puts "</td>
</tr><tr>
"
if {[llength $tvdb] && [llength $idata]} {
puts "</tr><tr><th>TheTVDB</th><td class=va>"
set sid [$tvdb get seriesid]
puts "<a target=_blank href=[\
tvdb seriesurl $sid]>View on
<img class=va height=20 src=/img/tvdb-sm.png></a>"
if {[[settings] tvdb_debug]} {
puts " | "
puts "<a href=/db/index.jim?db=$sid.db target=_blank>
<span class=footnote>View database($sid)</span></a>"
}
puts "
<br>
<img class=collapser id=xtvdb x=tvdb_extra
class=va src=/img/tree/plusonly.png>
Found episode using [$ts get tvdb_method]
<div id=tvdb_extra class=hidden>
<div class=blood>
$idata(overview)
</div>
"
if {[[settings] tvdb_debug]} {
puts "
<div class=bluefootnote>
[$tvdb get _phrases]
</div>
<div class=footnote>
[lrange [$tvdb get _smatches] 0 8]
</div>
"
}
puts "
</div>
</td></tr>"
}
if {[$ts flag "Guidance"] > 0} {
puts "
<th>Guidance</th>
<td><img class=va
src=/images/174_1_26_GuidancePolicy.png height=21>
src=/img/Guidance_purple.png height=21>
[$ts get guidance]
</td>
</tr><tr>
"
}
if {[$ts flag "GGuidance"] > 0} {
puts "
<th>General Guidance</th>
<td><img class=va
src=/img/Guidance_blue.png height=21>
[$ts get guidance]
</td>
</tr><tr>
@@ -49,16 +121,27 @@ if {$type eq "ts"} {
<th>Definition</th>
<td>
"
if {[$ts get definition] eq "HD"} {
puts "<img class=va src=/images/172_1_00_HD.png height=21>"
if {[$ts flag Radio]} {
puts "<img class=va src=/img/radio.png height=21>"
} else {
puts "<img class=va src=/images/172_1_26_SD.png height=21>"
if {[$ts get definition] eq "HD"} {
puts "<img class=va src=/images/172_1_00_HD.png height=21>"
} else {
puts "<img class=va src=/images/172_1_26_SD.png height=21>"
}
}
puts "</td>
</tr><tr>
<th>Channel</th>
<td>[epg channelicon [$ts get channel_name] 50 "vertical-align: middle"]
[$ts get channel_num] - [$ts get channel_name]</td>
</tr>
"
lassign [$ts genre_info] txt img
puts "
<tr>
<th>Genre</th>
<td><img src=\"$img\">$txt ([$ts genrenib])</td>
</tr><tr>
<th>Start Time</th>
<td>"
@@ -71,18 +154,25 @@ if {$type eq "ts"} {
<td>"
puts [clock format [$ts get end] -format "%c %Z"]
puts "<font class=also>(Scheduled: [clock format \
[expr [$ts get schedstart] + [$ts get scheddur]] \
[expr {[$ts get schedstart] + [$ts get scheddur]}] \
-format "%c %Z"])</font>"
set duration [$ts duration]
set durmins $($duration == 1 ? "minute" : "minutes")
set resume [$ts get resume]
set resmins $($resume == 1 ? "minute" : "minutes")
puts "</td>
</tr><tr>
<th>Duration</th>
<td>[$ts duration] minute(s).
<font class=also>(Scheduled: [expr [$ts get scheddur] / 60])
<td>$duration $durmins.
<font class=also>(Scheduled: [expr {[$ts get scheddur] / 60}])
</font></td>
</tr><tr>
<th>Status</th>
<td>[$ts get status]</td>
</tr><tr>
<th>Resumes</th>
<td>[expr [$ts get resume] / 60] minutes into recording.
[progressbar $([$ts get resume] * 100 / [$ts duration 1])]
<td>[expr {$resume / 60}] $resmins into recording.
[progressbar $($resume * 100 / [$ts duration 1])]
</td>
</tr><tr>
<th>Size</th>
@@ -100,7 +190,8 @@ puts "
"
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"
if {[llength $fileset] != 1} { puts -nonewline "s" }
puts -nonewline " in set."
@@ -110,38 +201,72 @@ foreach f $fileset {
}
puts "</ul></div>"
puts "</td>
</tr><tr>
puts "</td></tr>"
eval_plugins browsetsfile
puts "<tr>
<th>Flags</th>
<td>[$ts get flags]
<td>[set flags [$ts get flags]]</td>
</tr>
"
if {[$ts get bookmarks]} {
puts " \[Bookmarks: [$ts get bookmarks] @ [join \
[lmap i [$ts bookmarks 1] {
clock format $i -format "%T"
}] ", "]"
puts "
<tr>
<th>Bookmarks</th>
<td>[$ts get bookmarks] @ [join [lmap i [$ts bookmarks 1] {
clock format $i -format "%T"
}] ", "]
</td>
</tr>
"
}
puts "</tr>"
puts "</table>"
puts {
puts "<div class=hidden id=file>$file</div>"
puts {
<script type=text/javascript>
$('#xfileset').click(function() {
$('#fileset').slideToggle('slow', function() {
if ($('#fileset').is(':visible'))
$('#xfileset').attr('src', '/img/tree/minustop.png');
var file = $('#file').text();
$('button').button();
$('.tvdbchoose').on('click', function() {
window.location.href = '/browse/tvdb/episode.jim?file=' +
encodeURIComponent(file);
});
$('.collapser').on('click', function() {
target = $(this).attr('x');
var $icon = $(this);
$('#' + target).slideToggle('slow', function() {
if ($(this).is(':visible'))
$icon.attr('src', '/img/tree/minustop.png');
else
$('#xfileset').attr('src', '/img/tree/plusonly.png');
$icon.attr('src', '/img/tree/plusonly.png');
});
});
$('img.rollimg').hover(
function() {
var img = this, $img = $(img), offset = $img.offset;
$('#rollimg').css({
top: offset.top,
left: offset.left
})
.append($img.clone().removeClass('rollimg'))
.removeClass('hidden');
},
function() {
$('#rollimg').empty().addClass('hidden');
}
);
</script>
}
exit
}
}
# Otherwise, for a general file.
puts "
if {$type ne "ts"} {
puts "
<table class=keyval>
<tr>
<th>File</th>
@@ -149,20 +274,33 @@ puts "
</tr><tr>
<th>Size</th>
<td>$sz</td>
</tr><tr>
<th>Info</th>
<td class=pre id=ffmpeg>
<img src=/img/loading.gif><i>Loading...</i>
</td>
</tr>
</table>
"
set url "/browse/ffmpeg.jim?file=[cgi_quote_url $file]"
puts { <script type="text/javascript"> }
puts "var url = \"$url\";"
puts {
$('#ffmpeg').load(url);
</script>
</tr>"
}
set hasffmpeg 0
if {$type ne "ts" || ("ODEncrypted" ni $flags && $url eq "") } {
puts "<tr>
<th>Info</th>
<td class=pre id=ffmpeg>
<img src=/img/spin.gif><i>Loading...</i>
</td>
</tr>"
set hasffmpeg 1
} elseif {$type eq "ts" && $url ne ""} {
puts [format {
<script type="text/javascript">
$('#playDL').attr('href','%s').enable();
</script> } $url]
}
puts "
</table>
"
if {$hasffmpeg} {
set url "/browse/ffmpeg.jim?file=[cgi_quote_url $file]"
puts [format {
<script type="text/javascript">
var url = "%s";
$('#ffmpeg').load(url, function() { $('#play, #playDL').enable(); });
</script> } $url]
}

View File

@@ -9,6 +9,6 @@ httpheader
set file [cgi_get file]
if {[file isdirectory $file]} {
lassign [{dir iconset} $file] icons #attrs
lassign [dir iconset $file] icons #attrs
puts [join $icons ""]
}

View File

@@ -2,22 +2,26 @@
package require cgi
source /mod/webif/lib/setup
require ts.class pretty_size system.class settings.class escape browse.class \
plugin epg.class
require ts.class pretty_size system.class settings.class browse.class \
plugin epg.class classdump queue.class
jqplugin contextMenu bar enadis
set mroot [system mediaroot]
set dir [cgi_get dir $mroot]
jqplugin contextMenu bar enadis blockui dialogue
jscss script.js style.css
set plugins { dmenu {} menu {} }
if {[system has tvdb]} { jscss tvdb/script.js tvdb/style.css }
set plugins { dmenu {} menu {} omenu {} buttons {} }
eval_plugins browse
header
set nicesplice [system pkginst nicesplice]
set flatten [system pkginst flatten]
set ignore {.nts .thm .hmi}
set include {.ts .avi .mpg .mpeg .wmv .mkv .mp3 .mp4 .mov .hmt}
set include {.ts .avi .mpg .mpeg .wmv .mkv .mp3 .mp4 .mov .hmt .m4v .m4a .webm}
if {![dict exists $env SCRIPT_NAME]} {
set env(SCRIPT_NAME) ""
@@ -27,6 +31,8 @@ if {![dict exists $env SCRIPT_NAME]} {
if {![dict exists $env QUERY_STRING]} { set env(QUERY_STRING) "root" }
set dir [string map [list "\{root\}" $mroot] $dir]
set config [settings new]
set order [cgi_get order -]
@@ -37,10 +43,13 @@ if {$order eq "-"} {
}
set nofcount [$config nounwatchedcount]
set nounderscore [$config nounderscore]
set model [system model]
set dustbin [system dustbin 1]
set dlnaok [system dlnastatus]
proc icon {img {hover ""} {extra ""} {class "va"}} {
puts -nonewline "<img src=\"$img\" class=\"$class\" height=21 $extra"
if {$hover ne ""} {
@@ -49,20 +58,25 @@ proc icon {img {hover ""} {extra ""} {class "va"}} {
puts ">"
}
proc nbsp {str} {
return [string map {" " &nbsp;} $str]
}
proc directory {file bfile tbfile} {
puts "<div class=\"va relative\">"
set img "/images/711_1_09_Media_Folder.png"
if {$bfile eq $::dustbin} { set img "/img/Dustbin_Folder.png" }
puts "<img border=0 class=va id=\"img$tbfile\" src=$img>"
if {!$::nofcount} { puts "<span class=foldernum></span>" }
if {!$::nounderscore} { puts "<span class=folderu>_</span>" }
puts "<input class=\"fs fsdir\" type=checkbox>"
puts "<a class=dbf
href=\"$::env(SCRIPT_NAME)?dir=[cgi_quote_url $file]\"
file=\"[cgi_quote_url $file]\">"
puts "$bfile</a><span class=filesize id=\"$tbfile\">
file=\"[cgi_quote_html $file]\">"
puts "[nbsp $bfile]</a><span class=filesize id=\"ID$tbfile\">
</span>"
lassign [{dir iconset} $file] icons attrs
lassign [dir iconset $file] icons attrs
puts "<span class=iconset>"
puts [join $icons ""]
@@ -94,15 +108,14 @@ set filecount 0
proc entry {file} {{i 0}} {
global dircount filecount dinuse
set bfile [file tail $file]
regsub -all " +" $bfile "" tbfile
if {[string index $bfile 0] == "\025"} {
set bfile [string range $bfile 1 end]
}
if [file isdirectory "$file"] {
if {[file isdirectory "$file"]} {
incr dircount
directory $file $bfile $tbfile
directory $file $bfile [b64uencode [jsescape $bfile]]
return
}
set ext [string tolower [file extension $file]]
@@ -114,14 +127,29 @@ proc entry {file} {{i 0}} {
set base [file rootname $file]
set thmok 0
if {$ext eq ".ts" && [file exists "${base}.nts"]} {
if {$ext eq ".ts" && [file exists "${base}.hmt"]} {
set type ts
set ts [ts fetch $file 1]
set img Video_TS
set rstat [$ts get status]
if {$rstat eq "Valid/OK"} {
set img Video_TS
} elseif {$rstat eq "Loss of power/OK" && $bfile in $dinuse} {
set img Video_Rec
} else {
set img Video_Failed
}
set omenu opt
if {[$ts get definition] eq ""} {
set type gen
set ts 0
set img Video_Other
set omenu oopt
} else {
set omenu opt
}
if {[file exists "${base}.thm"]} { set thmok 1 }
} elseif {$ext eq ".hmt"} {
if {[file exists "${base}.ts"]} { continue }
if {[file exists "${base}.ts"]} { return }
# Sole hmt file indicates failure to track.
set type bad
set ts 0
@@ -156,8 +184,8 @@ proc entry {file} {{i 0}} {
<img class=va border=0 src=/img/$img.png>
<input class=\"$fscl\" type=checkbox>
<a class=bf title=\"$synopsis\"
file=\"[cgi_quote_url $file]\" type=$type href=#>
$bfile
file=\"[cgi_quote_html $file]\" type=$type href=#>
[nbsp $bfile]
</a>
"
@@ -166,77 +194,39 @@ proc entry {file} {{i 0}} {
# Icons
set locked 0
set encd 0
set odencd 1
set def unknown
set bx 0
set dlna 0
set shrunk 0
set attrs {}
if {$type eq "ts"} {
if {$bfile in $dinuse} {
icon "/img/inuse.png"
}
icon [epg channeliconpath [$ts get channel_name]] \
[$ts get channel_name] "" "va browsechannel"
set genre [$ts get genre]
set glist [ts genrelist]
if {[dict exists $glist $genre]} {
set ret $glist($genre)
} else {
set ret $glist(0)
}
lassign $ret txt img
if {$img eq "Unclassified"} {
icon "/images/173_3_26_G3_$img.png" $txt "" "va genre"
} else {
icon "/images/173_3_00_G3_$img.png" $txt "" "va genre"
}
# HD / SD
if {[$ts get definition] eq "HD"} {
set def HD
set img "172_1_00_HD"
} else {
set def SD
set img "172_1_26_SD"
}
icon "/images/$img.png"
lassign [$ts genre_info] txt img
icon "$img" $txt "" "va genre"
# Locked
if {[$ts flag "Locked"] > 0} {
set locked 1
icon "/images/178_1_00_Icon_Lock.png" "Locked"
}
lassign [ts iconset $ts] icons attrs
# Encrypted
if {[$ts flag "Encrypted"] > 0} {
set encd 1
icon "/images/749_1_26_Video_Encryption.png" ""
}
if {![$ts flag "ODEncrypted"]} {
set odencd 0
icon "/img/Decrypted.png" "Decrypted"
}
puts [join $icons ""]
} elseif {$ext eq ".mp3"} {
# Will be completed using an ajax call.
icon "/img/blank.gif" "" "" "va mp3icon"
}
# Guidance
if {[$ts flag "Guidance"] > 0} {
icon "/images/174_1_26_GuidancePolicy.png"
}
# Indexed
set dlna 0
if {$::dlnaok && $::model eq "HDR" && [llength [
system dlnaurl [file normalize $file]]]} {
icon "/img/dlna.png" "Indexed by DLNA Server"
set dlna 1
}
# Indexed
if {$::model eq "HDR" && [llength [$ts dlnaloc]]} {
icon "/img/dlna.png" "Indexed by DLNA Server"
set dlna 1
# Queued
if {$type eq "ts"} {
set queued [queue status $ts]
if {$queued ne ""} {
icon "/img/queueps.png" "Queued for $queued"
}
# Shrunk
if {[$ts flag Shrunk]} {
icon "/img/compress.png" "Shrunk"
set shrunk 1
}
set bx [$ts get bookmarks]
}
# Opt+ button
@@ -244,9 +234,8 @@ proc entry {file} {{i 0}} {
puts "
<a href=#>
<img class=\"$omenu va\" border=0 width=45 type=$type did=$i
locked=$locked encd=$encd def=$def new=$new bx=$bx
shrunk=$shrunk rsize=$rsz
odencd=$odencd dlna=$dlna thmok=$thmok
[join $attrs " "]
new=$new rsize=$rsz dlna=$dlna thmok=$thmok
src=/images/181_1_00_Help5_OPT_Plus.png>
</a>
<div class=\"results blood\" style=\"margin: 0 0 0 5em\"></div>
@@ -254,31 +243,54 @@ proc entry {file} {{i 0}} {
puts "</div>"
}
set mroot [system mediaroot]
set dir [cgi_get dir $mroot]
######################################################################
# Render web page
source assets.jim
if {[system has tvdb]} { source tvdb/assets.jim }
if {[system model] eq "HDR" && ![system param DMS_START_ON]} {
puts {
<span class="blood dlnawarning cleft">
Note: Content Sharing is disabled on this system.
</span>
}
}
# elseif {!$dlnaok && ![system instandby]} {
# puts {
# <span class="blood dlnawarning cleft">
# Note: Content Sharing not yet active on this system.
# </span>
# }
#}
puts "
<span style=\"display:none\" id=dir>$dir</span>
<span style=\"display:none\" id=mediaroot>$mroot</span>
<fieldset class=cleft style=\"margin: 0 1em 1em 1em\">
<legend style=\"font-size: 1.5em; padding: 0 0.5em 0.5em 0.5em;\">
<script type=text/javascript>
var dir = '[string map {' {\'}} $dir]';
var mediaroot = '$mroot';
</script>
<fieldset class=cleft style=\"margin: 0 1em 1em 1em\">
<legend style=\"font-size: 1.5em; padding: 0 0.5em 0.5em 0.5em;\">
"
browse breadcrumb $dir
lassign [dir iconset $dir] icons attrs
puts "
<span class=filesize id=dirsize></span>
<span id=diriconset>[join $icons ""]</span>
<a href=#>
<img class=\"dopt self va\" border=0 width=45 [join $attrs " "]
src=/images/181_1_00_Help5_OPT_Plus.png>
</a>
<div class=\"results blood\" style=\"margin: 0 0 0 5em\"></div>
"
# Breadcrumb path
set stub ""
foreach part [split $dir /] {
if {$stub eq "/"} { set name $part } else { set name "/$part" }
append stub $name
puts "<a href=\"$env(SCRIPT_NAME)?dir=[cgi_quote_url $stub]\">$name</a>
}
puts "<span class=filesize id=dirsize></span>"
puts "</legend>"
if {[system has tvdb] && [string length $dir] > [string length $mroot]} {
source tvdb/banner.jim
}
# Parent directory
set parent [join [lrange [split $dir /] 0 end-1] /]
if {$parent ne ""} {
@@ -291,7 +303,7 @@ if {$parent ne ""} {
"
}
proc s_time {a b} {
proc s_file_stat {a b attr {rev 0}} {
global dir
set a "$dir/$a"
@@ -309,18 +321,48 @@ proc s_time {a b} {
}
if {[catch {file stat $a l}]} { return 0}
set at $l(mtime)
set at $l($attr)
if {[catch {file stat $b l}]} { return 0}
set bt $l(mtime)
set bt $l($attr)
if {$at < $bt} { return -1 }
if {$at > $bt} { return 1 }
if {$at < $bt} { return [expr {$rev ? 1 : -1}] }
if {$at > $bt} { return [expr {$rev ? -1 : 1}] }
return 0
}
proc s_time {a b} {
tailcall s_file_stat $a $b mtime
}
proc s_time_r {a b} {
tailcall s_file_stat $a $b mtime 1
}
proc s_size {a b} {
tailcall s_file_stat $a $b size
}
proc s_size_r {a b} {
tailcall s_file_stat $a $b size 1
}
proc s_ext {a b} {
set at [file extension $a]
set bt [file extension $b]
if {$at == $bt} {
return [string compare -nocase $a $b]
} else {
return [string compare -nocase $at $bt]
}
}
set files [readdir -nocomplain $dir]
switch $order {
1 { set files [lsort -command s_time $files] }
2 { set files [lsort -command s_time_r $files] }
3 { set files [lsort -command s_size $files] }
4 { set files [lsort -command s_size_r $files] }
5 { set files [lsort -command s_ext $files] }
default { set files [lsort -nocase $files] }
}
@@ -328,29 +370,38 @@ set dinuse [system dirinuse $dir]
foreach file $files { entry "$dir/$file" }
puts "
<a href=# id=selectall>Select all</a> | <a href=# id=deselectall>none</a>
&nbsp;&nbsp;
Directories: $dircount, Files: $filecount
Select: <a href=# id=selectall>All</a> | <a href=# id=deselectall>None</a>
&nbsp;&nbsp;Folders: $dircount, Files: $filecount
"
# Sort icons
puts "<div id=sortdiv>"
set sortlist {{0 sort_name name} {1 sort_date date}}
set sortlist {
{0 sort_name Name {Alphabetical order A->Z}}
{5 sort_type Type {Type A->Z}}
{1 sort_date Date {Oldest first}}
{2 sort_date Reverse-date {Newest first}}
{3 sort_size Size {Smallest first}}
{4 sort_size Reverse-size {Largest first}}
}
puts "
Sort by: "
foreach sl $sortlist {
lassign $sl index img descr
lassign $sl index img descr tt
if {$index} { puts " | " }
set tag "Currently sorting"
set tag " (current)"
if {$order != $index} {
puts "
<a href=\"$env(SCRIPT_NAME)?$env(QUERY_STRING)&order=$index\">"
set tag "Sort"
}
puts "<img class=va border=0 src=/img/$img.gif> $tag by $descr"
if {$order != $index} {
puts "</a>"
set qs [regsub -all {&order=[[:digit:]]+} $env(QUERY_STRING) ""]
puts "<a href=\"$env(SCRIPT_NAME)?$qs&order=$index\" title=\"$tt\">"
set tag ""
set ket "a"
} else {
puts "<span title=\"$tt\">"
set ket "span"
}
puts "<img class=va border=0 src=/img/$img.gif> $descr$tag</$ket>"
}
puts "</div>"
@@ -362,34 +413,18 @@ puts {
File Clipboard
</legend>
<div id=clipboard>
<img src=/img/loading.gif> <i>Loading...</i>
<img src=/img/spin.gif> <i>Loading...</i>
</div>
</fieldset>
}
puts "<div class=brow>"
# Always-active buttons.
puts {
<button id=copy>Copy</button>
<button id=cut>Cut</button>
<button id=delete>Delete</button>
<div class=buttonrow>
<button id=newdir>New Folder</button>
<div id=deletewait class=blood style="display: none">
<img src=/img/loading.gif>Deleting may take some time, please be patient...
</div>
}
# Join
if $nicesplice {
puts { <button id=join>Join</button> }
}
puts "</div><div class=brow style=\"margin-top: 3px\">"
# De-duplicate
puts {
<button id=dedup>De-duplicate/tidy this folder</button>
<button id=dedup><img src=/img/dedup.png width=16>
De-duplicate/tidy this folder</button>
<button id=queue><img src=/img/queueps.png class=qb> View Queue</button>
}
# Streamer file
@@ -397,11 +432,62 @@ puts {
if {[file exists /mnt/hd3/Streamer_down_file]} {
puts {
<button id=save_stream file=/mnt/hd3/Streamer_down_file>
Save last streamed content (e.g. iPlayer/YouTube)
<div id=streamstatus></div>
Save last streamed content
<span id=streamstatus></span>
</button>
}
}
puts "</div>"
# Buttons dependent on selection
puts {
<div class=buttonrow>
<button id=copy class=onesel>Copy</button>
<button id=cut class=onesel>Cut</button>
<button id=delete class=onesel>Delete</button>
}
# Join
if {$nicesplice} {
puts { <button id=join class=tstwosel>Join</button> }
}
# Queue
set queueactions(decrypt) "Decryption"
if {$model ne "HD"} {
# For HDR, give slower option too.
dict set queueactions "decrypt -direct" "Decryption (direct, slower)"
}
set queueactions(shrink) "Shrink"
dict set queueactions "mp3 -mp2" "Audio-Extraction (mp2, fast)"
dict set queueactions "mp3 -mp3" "Audio-Extraction (mp3, slow)"
set queueactions(mpg) "Conversion to MPG"
eval_plugins queueactions
puts {
<button id=so_queue class=tsonesel><img src=/img/queueps.png class=qb>
Queue for</button>
<select id=so_queueactions
class="tsonesel text ui-widget-content ui-corner-all">
}
set rqueueactions [lreverse $queueactions]
foreach v [lsort [dict keys $rqueueactions]] {
set k $rqueueactions($v)
puts "<option value=\"$k\">$v</option>"
}
puts {
</select>
}
# Plugin buttons
if {[llength $plugins(buttons)]} {
puts "</div><div class=buttonrow>"
foreach plugin $plugins(buttons) {
lassign $plugin tag options
puts "
<button class=plugin act=\"$options(link)\">$options(desc)</button>
"
}
}
puts "</div>"

View File

@@ -11,7 +11,7 @@ cgi_input 1
set joinstart [clock milliseconds]
set cmd {/mod/bin/nicesplice}
set dst [file rootname [cgi_get dest "joined"]]
set dst [file rootname [cgi_unquote_input [cgi_get dest "joined"]]]
foreach file [split [cgi_get files] ","] {
set file [cgi_unquote_input $file]
@@ -21,11 +21,13 @@ foreach file [split [cgi_get files] ","] {
lappend cmd "-out" "$dir/$dst"
puts "($cmd)"
set token [system startop -multiple join "$dir/$dst"]
puts [exec {*}$cmd]
system endop $token
set ts [ts fetch "$dir/$dst.ts"]
$ts settitle $dst
set jointime [expr [expr [clock milliseconds] - $joinstart] / 1000.0]
set jointime [expr {[expr {[clock milliseconds] - $joinstart}] / 1000.0}]
puts "Time taken: $jointime"

View File

@@ -45,13 +45,12 @@ Name for joined file:
length=20 maxlength=50>
<button id=dojoin>Join</button>
</div>
<button id=back
dir=\"[cgi_quote_html $dir]\"
esize=\"$esize\">Back to media list</button>
<div id=progressdiv style=\"display: none\">
Joining: <div id=progressbar></div>
<button id=back
dir=\"[cgi_quote_url $dir]\"
esize=\"$esize\"
style=\"display: none\">Back to media list</button>
<div id=output class=pre style=\"margin-top: 10px\"></div>
</div>
"

View File

@@ -8,10 +8,10 @@ var handle = 0;
function update()
{
$.get('progress.jim'
+ '?esize=' + $('#back').attr('esize')
+ '&file=' + $('#back').attr('dir') + '/' + $('#dest').val(),
function(data) {
$.get('progress.jim', {
esize: $('#back').attr('esize'),
file: $('#back').attr('dir') + '/' + $('#dest').val()
}, function(data) {
if (handle)
$('#progressbar').reportprogress(data);
});
@@ -22,7 +22,8 @@ $(document).ready(function() {
$('#progressbar').reportprogress(0);
$('#back').button().click(function() {
window.location = '../index.jim?dir=' + $(this).attr('dir');
window.location = '/go/browse?dir=' +
encodeURIComponent($(this).attr('dir'));
});
$('#filelist').sortable().disableSelection();
@@ -36,11 +37,12 @@ $('#dojoin').button().attr('disabled', true).addClass('ui-state-disabled')
$('#joindiv').hide('slow');
$('#progressdiv').show('slow');
$('#back').hide();
handle = setInterval("update()", 1000);
$('#output').text('Please do not interrupt...')
.load('execute.jim?files=' +
sfiles.join() + '&dest=' + $('#dest').val(),
sfiles.join() + '&dest=' + encodeURIComponent($('#dest').val()),
function() {
clearInterval(handle);
handle = 0;

View File

@@ -6,14 +6,17 @@ source /mod/webif/lib/setup
httpheader
set expected [cgi_get esize 1]
set file [file normalize [cgi_get file]]
if {[catch {set file [file normalize [cgi_get file]]}]} {
puts "12"
exit
}
if {![file exists $file]} {
puts "0"
} else {
set sz [file size $file]
set perc [expr $sz * 100 / $expected]
set perc [expr {$sz * 100 / $expected}]
if {$perc > 100} { set perc 100 }
puts $perc
}

View File

@@ -7,7 +7,6 @@ require ts.class
httpheader
set file [cgi_get file ""]
set ts [ts fetch $file]
if {[set ts [ts fetch $file]] != 0} {
set action lock
if {[$ts flag "Locked"]} { set action unlock }

View File

@@ -2,6 +2,7 @@
package require cgi
source /mod/webif/lib/setup
require plugin
httpheader
@@ -10,3 +11,7 @@ set name [cgi_get newdirname "New Folder"]
file mkdir "$dir/$name"
set dir "$dir/$name"
eval_plugins mkdir

29
webif/html/browse/mp3.jim Executable file
View File

@@ -0,0 +1,29 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require json
httpheader "application/json"
set dir [cgi_get dir "/media/My Video/test"]
puts "{"
foreach file [readdir -nocomplain $dir] {
if {[file extension $file] ne ".mp3"} continue
if {[catch {
set lines [exec ffprobe -hide_banner -v error \
-show_streams "$dir/$file"]
}]} continue
foreach line $lines {
if {[string match "codec_name=mp*" $line]} {
puts "\"[jescape $file]\": \"[string range $line 11 end]\","
}
}
}
puts "\"dummy\":0"
puts "}"

View File

@@ -14,15 +14,10 @@ set len [$ts duration 1]
set xstart [clock milliseconds]
set base [file rootname $rfile]
set shname [file tail $base]
puts "Processing $shname"
set token [system startop -multiple mpg $rfile]
$ts mkmpg
system endop $token
puts [exec /mod/bin/ffmpeg -y -benchmark -v 0 \
-i $rfile \
-map 0:0 -map 0:1 \
-vcodec copy -acodec copy "${base}.mpg"]
set xtime [expr [expr [clock milliseconds] - $xstart] / 1000.0]
set xtime [expr {[expr {[clock milliseconds] - $xstart}] / 1000.0}]
puts "Time taken: $xtime"

View File

@@ -32,13 +32,12 @@ puts "
<div id=mpgdiv style=\"padding: 1em\">
<button id=mpgit>Perform mpg extraction</button>
</div>
<button id=back>Back to media list</button>
<div id=progressdiv class=hidden>
Extracting mpg: <div id=progressbar></div>
</div>
<button id=back class=hidden>Back to media list</button>
<div id=output class=pre style=\"margin-top: 10px\"></div>
</fieldset>

View File

@@ -15,12 +15,13 @@ $(document).ready(function() {
$('#progressbar').reportprogress(0);
$('#back').button().click(function() {
window.location = '../index.jim?dir=' + $('#params').attr('dir');
window.location = '/go/browse?dir=' + $('#params').attr('dir');
});
$('#mpgit').button().click(function() {
$('#mpgdiv').hide('slow');
$('#progressdiv').show('slow');
$('#back').hide();
handle = setInterval("update()", 1000);
$('#output').load('execute.jim?file=' + $('#params').attr('rfile'),
function() {

View File

@@ -14,9 +14,9 @@ if {![file exists "${bfile}.mpg"]} {
puts "0"
} else {
set sz [file size $rfile]
set nsz [expr [file size "${bfile}.mpg"] / 0.75]
set nsz [expr {[file size "${bfile}.mpg"] / 0.75}]
set perc [expr $nsz * 100 / $sz]
set perc [expr {$nsz * 100 / $sz}]
if {$perc > 100} { set perc 100 }
puts $perc
}

View File

@@ -7,7 +7,6 @@ require ts.class
httpheader
set file [cgi_get file]
set ts [ts fetch $file]
if {[set ts [ts fetch $file]] != 0} {
set action new
if {[$ts flag "New"]} { set action watched }

View File

@@ -3,6 +3,7 @@
package require cgi
package require pack
source /mod/webif/lib/setup
require json
httpheader "application/json"
@@ -21,7 +22,7 @@ foreach dir [glob -nocomplain "$root"] {
set diff $($recs - $plays)
if {$diff > 0} {
set node [lindex [split $dir /] end]
puts "\"$node\": $diff,"
puts "\"[jescape $node]\": $diff,"
}
}
}

62
webif/html/browse/play.jim Executable file
View File

@@ -0,0 +1,62 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require system.class
require ts.class
set file [cgi_get file]
set urlbase [cgi_get base ""]
set duration [cgi_get duration 1]
set fmts [split [cgi_get fmts ""] ","]
set vc [cgi_get vc ""]
# Default to just downloading the raw file.
set url $file
# Prefer to use DLNA server ... (necessary if encrypted)
set dlna [system dlnaurl [file normalize $url] $urlbase]
if {[llength $dlna]} {
set url [lindex $dlna 0]
} elseif {[regexp {^(https?://(.+:.*@)?[[:alnum:].]+(:[[:digit:]]+)?)/} $urlbase x y]} {
set url "$y$url"
} else {
set url "http://[system ip]$url"
}
if {[file extension $file] in {.ts .TS}} {
if {![catch {set ts [ts fetch $file]}] && $ts != 0} {
set duration [$ts duration 1]
}
}
set file [file tail $file]
set playlist [file tempfile "[env "TMPDIR" [env "TMP" "/tmp"]]/playXXXXXX"]
set pl ""
try {
set pl [open $playlist w]
$pl puts "#EXTM3U"
$pl puts "#EXTINF:$duration,$file"
$pl puts "#PLAYLIST:$file"
$pl puts $url
} finally {
if {$pl ne ""} {
$pl close
}
}
httpheader "application/x-mpegurl" 0 [list \
"Content-Disposition" "attachment; filename=\"[file rootname $file].m3u\"" \
"Content-Length" "[file size $playlist]" \
]
set pl ""
try {
set pl [open $playlist r]
$pl copyto stdout
} finally {
if {$pl ne ""} {
$pl close
}
}
catch {file delete $playlist}

38
webif/html/browse/queue.jim Executable file
View File

@@ -0,0 +1,38 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require ts.class queue.class
httpheader
set dir [cgi_get dir]
set act [cgi_get act -]
if {$act eq "-"} {
puts "No action."
exit;
}
puts "<div id=deleting class=blood><img src=/img/spin.gif>Queuing...</div>"
puts "<ul style=\"list-style-type: square\">"
foreach file [cgi_get files] {
puts -nonewline "<li>\"$file\"..."
if {[string first "$dir/" $file] != 0} {
puts "Error - outside directory."
continue
}
set ts [ts fetch $file]
if {$ts eq "0"} continue
lassign $act xact args
set q [queue insert -hold $ts $xact]
if {$args ne ""} { $q set args $args }
$q submit
puts "</li>"
}
puts "</ul>"

View File

@@ -23,18 +23,60 @@ if {[file isdirectory $file]} {
foreach attr {title synopsis guidance genre} {
if {[catch {
set new [string trim [cgi_get "rename_$attr"]]
set new [string map {"\n" ""} [
string trim [cgi_get "rename_$attr"]]]
set old [$ts get $attr]
if {$attr eq "genre"} {
set new [ts genre $new]
}
if {$new ne $old} {
if {$attr eq "guidance" ||
[string length $new] > 0} {
if {$attr eq "guidance" || $new ne ""} {
$ts set$attr $new
}
}
} msg]} {
puts "$attr: $msg"
stderr puts "$attr: $msg"
}
}
# deal with series number/ep num/ep total, which get set together
# list the old values seen in case a later one is changed
set epdataold {}
# list values to be set, or {}
set epdatanew {}
foreach attr {seriesnum episodenum episodetot} {
if {[catch {
set new [string map {"\n" ""} [
string trim [cgi_get "rename_$attr"]]]
set old [$ts get $attr]
if {$new ne $old} {
switch $attr {
seriesnum {
set epdatanew [list $new]
}
episodenum -
episodetot {
if {$epdatanew eq {}} {
set epdatanew $epdataold
}
lappend epdatanew $new
}
}
} elseif {$epdatanew eq {}} {
# nothing to be changed yet
lappend epdataold $old
} else {
# fill to-be-set list with old value
lappend epdatanew $old
}
} msg]} {
stderr puts "$attr: $msg"
}
}
if {$epdatanew ne {}} {
if {[catch {$ts storeepisode $epdatanew} msg]} {
puts "ts::storeepisode: $msg"
}
}
if {"$dir/$newfile.ts" ne "$file"} { ts renamegroup $file $newfile }
} else {

File diff suppressed because it is too large Load Diff

View File

@@ -2,7 +2,7 @@
package require cgi
source /mod/webif/lib/setup
require ts.class
require ts.class json
httpheader "application/json"
@@ -27,7 +27,7 @@ foreach file [readdir -nocomplain $dir] {
if {!$eit} { $ts set_shrunk }
}
puts " \"$file\": $eit,"
puts " \"[jescape $file]\": $eit,"
}
puts " \"dummy\": 0"
puts "}"

View File

@@ -2,39 +2,53 @@
package require cgi
source /mod/webif/lib/setup
require json
httpheader "application/json"
set dir [cgi_get dir]
set dir [cgi_get dir "/media/My Video"]
set dlen [string length "$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 -d 1 "$dir/"] "\n"] {
if {[catch {exec /mod/bin/busybox/du -h -l -d 1 "$dir/"} dutxt]} {
set dutxt ""
}
foreach line [split $dutxt "\n"] {
lassign [split $line "\t"] size node
set node [string range $node $dlen end]
puts "\"$node\" : \"$size\","
if {[string length $node]} {
puts "\"[jescape $node]\": \"$size\","
}
}
# Handle symbolic links.
foreach file [readdir $dir] {
foreach file [readdir -nocomplain $dir] {
set file "$dir/$file"
if {[catch {set lk [file readlink $file]}]} continue
if {![string match "/*" $lk]} { set lk "$dir/$lk" }
if {![file isdirectory $lk]} continue
foreach line [split [exec /mod/bin/busybox/du -h "$lk"] "\n"] {
if {[catch {exec /mod/bin/busybox/du -h "$lk"} dutxt]} {
set dutxt ""
}
foreach line [split $dutxt "\n"] {
set fields [split $line "\t"]
if {[lindex $fields 1] eq $lk} {
set node [file tail $file]
set size [lindex $fields 0]
puts "\"$node\" : \"@$size\","
puts "\"[jescape $node]\" : \"@$size\","
}
}
}
puts "\"dummy\" : \"\""
if {[catch {exec /mod/bin/busybox/du -hs "$dir/"} dutxt]} {
set dutxt "N/A"
}
lassign [split $dutxt] total
puts "\"\": \"$total\""
puts "}"

View File

@@ -2,7 +2,7 @@
package require cgi
source /mod/webif/lib/setup
require ts.class pretty_size
require system.class ts.class pretty_size
httpheader
@@ -35,11 +35,12 @@ foreach ext $tsgroup {
file rename "$base.$ext" "${origdir}/$tail.$ext"
}
set token [system startop -multiple shrink $rfile]
puts [exec /mod/bin/stripts \
"$origdir/$shname" \
"$dir/$shname" \
]
system endop $token
# Set the file time to match the old file
ts touchgroup "$dir/$shname.ts" "$origdir/$shname.ts"
@@ -50,6 +51,6 @@ ts renamegroup "$dir/$shname.ts" $newname
exec /mod/bin/hmt "+setfilename=$newname" "$dir/$newname.hmt"
exec /mod/bin/hmt "+shrunk" "$dir/$newname.hmt"
set striptime [expr [expr [clock milliseconds] - $stripstart] / 1000.0]
set striptime [expr {[expr {[clock milliseconds] - $stripstart}] / 1000.0}]
puts "Time taken: $striptime"

View File

@@ -17,7 +17,7 @@ if {![file exists $ntsfile]} {
set sz [file size $origfile]
set nsz [file size $ntsfile]
set perc [expr $nsz * 100 / $sz]
set perc [expr {$nsz * 100 / $sz}]
if {$perc > 100} { set perc 100 }
puts $perc
}

View File

@@ -34,7 +34,7 @@ Your original recording files will be retained in a folder called _original.
<td>Shrinking will take around [clock format $esttime -format "%T"]</td></tr>
<tr><th>Estimated Saving:</th>
<td class=va><span id=analysis class=va>
<img class=va src=/img/loading.gif> Analysing file, please wait...
<img class=va src=/img/spin.gif> Analysing file, please wait...
</span></td></tr>
</table>
@@ -46,13 +46,12 @@ Your original recording files will be retained in a folder called _original.
<div id=stripdiv class=hidden style=\"padding: 1em\">
<button id=stripit>Shrink recording</button>
</div>
<button id=back>Back to media list</button>
<div id=progressdiv class=hidden>
Shrinking: <div id=progressbar></div>
</div>
<button id=back class=hidden>Back to media list</button>
<div id=output class=pre style=\"margin-top: 10px\"></div>
</fieldset>
"

View File

@@ -27,12 +27,13 @@ $('#analysis').load('analyse.jim?file=' + $('#params').attr('file'),
$('#progressbar').reportprogress(0);
$('#back').button().click(function() {
window.location = '../index.jim?dir=' + $('#params').attr('dir');
window.location = '/go/browse?dir=' + $('#params').attr('dir');
});
$('#stripit').button().click(function() {
$('#stripdiv').hide('slow');
$('#progressdiv').show('slow');
$('#back').hide();
handle = setInterval("update()", 1000);
$('#output').text('Please do not interrupt...')
.load('execute.jim?file=' + $('#params').attr('file'),

View File

@@ -1,8 +1,14 @@
div.brow
div.buttonrow
{
float: left;
clear: left;
margin-top: 3px;
}
div.clipbuttons
{
margin-top: 3px;
}
div.cliplist span
@@ -10,8 +16,32 @@ div.cliplist span
display: block;
}
#clipclear
img.qb
{
margin-top: 1em;
height: 14px;
position: relative;
top: 3px;
}
#diriconset
{
font-style: italic;
font-size: 0.7em;
color: #ff4000;
}
input.uint8_t
{
width: 6ch;
}
/* a link that looks like a button */
button + a.ui-button
{
margin-right: 0.4em;
}
.ui-button:link
{
background-color: rgb(254, 206, 47) !important;
}

View File

@@ -59,11 +59,11 @@ puts "<div style=\"width=100%; text-align: center\">
<input name=pos id=pos size=5 maxlength=4 value=\"$pos\">
second(s) into recording.
</form>
<button class=mvpos pos=[expr $pos - 30]>&lt;&lt; 30 seconds</button>
<button class=mvpos pos=[expr $pos - 5]>&lt; 5 seconds</button>
<button class=mvpos pos=[expr {$pos - 30}]>&lt;&lt; 30 seconds</button>
<button class=mvpos pos=[expr {$pos - 5}]>&lt; 5 seconds</button>
<button id=repos>Update</button>
<button class=mvpos pos=[expr $pos + 5]>&gt; 5 seconds</button>
<button class=mvpos pos=[expr $pos + 30]>&gt;&gt; 30 seconds</button>
<button class=mvpos pos=[expr {$pos + 5}]>&gt; 5 seconds</button>
<button class=mvpos pos=[expr {$pos + 30}]>&gt;&gt; 30 seconds</button>
</div>
<span id=start class=hidden>$start</span>
<span id=end class=hidden>$limit</span>
@@ -71,7 +71,7 @@ puts "<div style=\"width=100%; text-align: center\">
<tr>
"
for {set i [expr $start + 0.0]} {$i <= $limit} {set i [expr $i + 0.5]} {
for {set i [expr {$start + 0.0}]} {$i <= $limit} {set i [expr {$i + 0.5}]} {
lappend times $i
puts "<th style=\"text-align: center\">
@ <span class=mark>$i</span>s</th>"

View File

@@ -9,11 +9,11 @@ httpheader
set rfile [cgi_get file]
set s [cgi_get s 0]
set e [cgi_get e $($s + 2)]
set i [expr [cgi_get i 0.5] + 0.0]
set i [expr {[cgi_get i 0.5] + 0.0}]
if {![catch {set ts [ts fetch $rfile]}]} {
$ts cleanbmp
for {set n [expr $s + 0.0]} {$n <= $e} {set n [expr $n + $i]} {
for {set n [expr {$s + 0.0}]} {$n <= $e} {set n [expr {$n + $i}]} {
puts "Generating thumbnail for pos $n"
$ts mkbmp $n ".pos$n"
}

View File

@@ -8,7 +8,7 @@ $('button').button();
function go(pos)
{
window.location.href = 'index.jim?file=' +
window.location.href = '/browse/thumbnail/?file=' +
encodeURIComponent(file) + '&pos=' + pos;
}
@@ -26,7 +26,7 @@ $('#repos').disable().on('click', function(e) {
$('#back').on('click', function(e) {
e.preventDefault();
window.location.href = '/browse/index.jim?dir=' +
window.location.href = '/go/browse?dir=' +
encodeURIComponent(dir);
});
@@ -34,22 +34,27 @@ $('button.usethm').disable().on('click', function(e) {
e.preventDefault();
var pos = $(this).attr('pos');
$('button,input').disable();
$.get('set.jim?file=' + encodeURIComponent(file) + '&pos=' + pos,
function() {
window.location.href = '/browse/index.jim?dir=' +
$.get('/browse/thumbnail/set.jim',
{
'file': file,
'pos': pos
}, function() {
window.location.href = '/go/browse?dir=' +
encodeURIComponent(dir);
});;
});
var start = $('#start').text();
var end = $('#end').text();
$.get('mkrange.jim?file=' + encodeURIComponent(file) +
'&s=' + start + '&e=' + end, function() {
$.get('/browse/thumbnail/mkrange.jim',
{
'file': file,
's': $('#start').text(),
'e': $('#end').text()
}, function() {
$('img.bmp').each(function(i) {
var pos = $(this).attr('pos');
$(this).attr('src',
'fetch.jim?file=' + encodeURIComponent(file) +
'&pos=' + pos);
'/browse/thumbnail/fetch.jim?file=' +
encodeURIComponent(file) + '&pos=' + pos);
});
$('button').enable();
});

View File

@@ -0,0 +1,52 @@
#!/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/spin.gif>
Searching TheTVDB.com database, please wait...
</div>
<div class=tvdbresults id=tvdbresults_saving>
<img src=/img/spin.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>
</table>
</div>
<div class=tvdbresults id=tvdbresults_inner></div>
</div>
}

Some files were not shown because too many files have changed in this diff Show More