Compare commits

...

437 Commits

Author SHA1 Message Date
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
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
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
557 changed files with 18275 additions and 13728 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.2.0
Version: 1.4.9-3
Architecture: mipsel
Maintainer: af123@hummypkg.org.uk
Depends: webif-channelicons(>=1.1.14),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(>=2.1),busybox(>=1.20.2-1),lsof(>=4.87),epg(>=1.2.0),hmt(>=1.2.0),ssmtp,anacron,trm(>=1.1),openssl-command,nicesplice,id3v2,file,rsvsync(>=1.0.2),webif-charts(>=1.2-1),stripts(>=1.2.5-3),smartmontools,tmenu(>=1.08),ffmpeg,id3v2,multienv(>=1.6),tcpping(>=1.1),e2fsprogs,mongoose
Maintainer: af123@hpkg.tv
Depends: tcpfix,webif-channelicons(>=1.1.27),lighttpd(>=1.4.39-1),jim(>=0.79),jim-pack(>=0.79),jim-oo(>=0.77),jim-sqlite3(>=0.77),jim-cgi(>=0.7-2),jim-binary(>=0.76),service-control(>=2.3),busybox(>=1.20.2-1),lsof(>=4.87),epg(>=1.2.8),hmt(>=2.0.10),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/5866/
Tags: https://hummy.tv/forum/threads/7712/

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,24 +31,17 @@ 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
@@ -54,7 +49,19 @@ fi
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,11 +84,13 @@ 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>
"
@@ -150,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

@@ -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,48 +2,82 @@
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"
set cmdargs [lassign $cmd cmd]
set netcmds {install update upgrade}
if {$cmd in $netcmds && ![system connectivity]} {
puts ""
puts "!! ERROR - No network connectivity to package repository !!"
puts ""
puts "Check your Internet connection and DNS service and then try again."
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 }
if {$cmd eq "remove" && [[settings] noautoremove] ne "1"} {
append cmd " --autoremove"
}
opkg "$cmd $cmdargs"
if {$cmd eq "update" || $cmd eq "upgrade"} {
puts "Updating package meta information"
putsf "Updating package meta information"
pkg fetchmeta
puts "Done."
puts ""
puts "Updating diagnostic meta information"
putsf "Done."
putsf ""
putsf "Updating diagnostic meta information"
pkg fetchdiagmeta
puts "Done."
putsf "Updating MUX database"
pkg fetchmuxdb
}
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,228 @@ 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} {
set name [string map {
"/mnt/hd2/My Video/" ""
"/media/drive1/Video/" ""
"/media/" ""
".ts" ""
} $file]
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 x mode
switch $mode {
chase {
incr rec
@@ -158,52 +266,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 +301,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 +319,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 +371,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 +384,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 +394,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"

View File

@@ -13,23 +13,47 @@ if {[file isdirectory /mnt/hd2]} {
lappend ignoredev $st(dev)
}
puts "\["
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 " {"
puts " {"
set sf 0
foreach k [array names usb] {
foreach {k v} $usb {
if {$sf} { puts "," } else { set sf 1 }
puts -nonewline " \"$k\": \"$usb($k)\""
puts -nonewline " \"$k\": \"$v\""
}
puts ""
puts -nonewline " }"
}
puts ""
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 "}"

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,60 +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"]
set ver 1
foreach line $data {
if {[string match "# version *" $line]} {
set ver [lindex [split $line " "] 2]
puts "Backup version $ver"
}
set vals [split $line "\t"]
if {[lindex $vals 0] ne "event"} { continue }
set vars {}
set i 0
foreach f $fields {
if {$ver < 2 && $f eq "aulEventToRecordInfo"} continue
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

@@ -12,12 +12,8 @@ puts {
<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 {
@@ -31,7 +27,7 @@ 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>
@@ -79,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 rename"><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=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>
}
@@ -118,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>
@@ -146,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>
@@ -189,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 {
@@ -238,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>
}
@@ -257,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>
@@ -353,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>
@@ -375,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,24 +18,11 @@ 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"
#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 token [system startop -multiple mp3 $rfile]
puts [$ts mkmp3 $slow]
system endop $token
set xtime [expr [expr [clock milliseconds] - $xstart] / 1000.0]
puts "Time taken: $xtime"

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,6 +15,10 @@ 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]';
@@ -39,10 +43,38 @@ var dir = '$dir';
<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 align=right>
<span class=left>Current: <span id=curbmk></span></span><br><br><br>
<button id=genthumbs title=\"Generate Thumbnails\"
class=left>Generate Thumbnails</button>
</td><td>
<div id=thumbs class=hidden>
<table><tr>
"
set times {}
loop v $start $limit $incr {
lappend times $v
puts "
<th style=\"text-align: center\"><span class=mark>
[format "%+d" $v]</span>s</th>
"
}
puts "</tr><tr>"
foreach v $times {
puts "<td><img class=bmp src=/img/generating.png pos=$v></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>
"

View File

@@ -1,11 +1,26 @@
var curval = 0;
var $slider;
var values;
function
toTimeStr(tval)
{
return new Date(null, null, null, null, null, tval)
.toTimeString().match(/\d{2}:\d{2}:\d{2}/)[0] + ' ';
}
function
valarray(valstr)
{
return valstr.trim().split(/ +/);
}
function
setvals()
{
values = $.trim($('#bookmarks').val()).split(/ +/);
if (!values.length || values[0] == '')
var nvalues;
values = valarray($('#bookmarks').val());
if (values.length > 0 && values[0] != '')
{
refreshtimes();
return;
@@ -20,6 +35,7 @@ setvals()
});
values = nvalues;
$('#bookmarks').val(values.join(' '));
values = valarray($('#bookmarks').val());
sortmarks();
refreshtimes();
}
@@ -32,7 +48,6 @@ draw_slider()
else
$slider = $('#slider');
setvals();
values = $.trim($('#bookmarks').val()).split(/ +/);
if (!values.length || values[0] == '')
{
$slider = null;
@@ -55,55 +70,95 @@ draw_slider()
var marks = '';
for (var i = 0; i < ui.values.length; ++i)
marks += ui.values[i] + ' ';
$('#bookmarks').val($.trim(marks));
$('#bookmarks').val(marks.trim());
setvals();
}
});
refreshtimes();
};
function
regenthumbs(curbmkstr)
{
$('#curbmk').html(curbmkstr);
$('#thumbs').hide();
$('#genthumbs')
.button('enable')
.button('option', 'icon', 'ui-icon-zoomin');
}
function
update_slider()
{
setvals();
/* 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;
} else {
if (nn >= values.length)
nn = values.length - 1;
curval = nn >= 0 ? values[nn] : 0;
}
regenthumbs(toTimeStr(curval));
}
$('#slider .ui-slider-handle').each(function(i) {
if (i >= values.length)
$(this).hide();
else
$(this).show();
});
$slider.slider("option", "values", values);
};
function
refreshtimes()
{
var t = '';
values = $.trim($('#bookmarks').val()).split(/ +/);
if (!values.length || values[0] == '')
{
$('#bookmarkstime').text(t);
return;
$.each(values, function(k, v) {
t += toTimeStr(v);
});
$('#slider .ui-slider-handle').each(function(i) {
$(this).attr('title', toTimeStr(values[i]));
});
}
$.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(" "));
values.sort(function(a, b){return a - b});
$('#bookmarks').val(values.join(" "));
}
$(function() {
$('#bookmarks').val($('#bookmarks').attr('init'));
draw_slider();
$('#curbmk').html(toTimeStr(curval));
$('#addbmark').button({icons: {primary: "ui-icon-plus"}, text: false})
.on('click', function() {
$('#bookmarks').val('0 ' + $('#bookmarks').val());
draw_slider();
curval = 0;
update_slider();
});
$('#delbmark').button({icons: {primary: "ui-icon-minus"}, text: false})
.on('click', function() {
var cur = $('#bookmarks').val();
cur = $.trim(cur.replace(
new RegExp('(^| )' + curval + '( |$)', ''), ' '));
cur = cur.replace(
new RegExp('(^| )' + curval + '( |$)', ''), ' ').trim();
$('#bookmarks').val(cur);
draw_slider();
update_slider();
});
$('#save').button({icons: {primary: "ui-icon-disk"}})
@@ -119,14 +174,65 @@ $('#save').button({icons: {primary: "ui-icon-disk"}})
$('#back').button({icons: {primary: "ui-icon-arrowreturnthick-1-w"}})
.on('click', function() {
window.location = '../index.jim?dir=' + dir;
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', function() {
draw_slider();
update_slider();
});
$('#slider')
.on('slidechange', function(evt, ui) {
var tstr = toTimeStr(curval);
if (tstr != $('#curbmk').html())
regenthumbs(tstr);
});
$('#genthumbs').button({icons: {primary: "ui-icon-zoomin"}, disabled: false})
.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('pos') | 0;
} else {
last = $(this).attr('pos') | 0;
}
incr++;
});
incr = (last - start) / incr;
$.get('/browse/thumbnail/mkrange.jim', {
'file': file,
's': start+curval,
'e': last+curval,
'i': incr
}, function() {
$('#thumbs').show();
$('img.bmp').each(function(i) {
/* cast to "int" */
var pos = $(this).attr('pos')|0;
$(this).attr('src',
'/browse/thumbnail/fetch.jim?' +
'file=' + encodeURIComponent(file) +
'&pos=' + (curval+pos).toFixed(1));
});
$('#genthumbs').button('option', 'icon', 'ui-icon-zoomin');
});
});
});

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"} {

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]
@@ -60,16 +60,15 @@ 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.

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,37 +49,53 @@ 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]

View File

@@ -7,13 +7,20 @@ 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]
}

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

@@ -2,7 +2,7 @@
package require cgi
source /mod/webif/lib/setup
require ts.class
require ts.class json
httpheader "application/json"
@@ -11,9 +11,12 @@ if {$file == 0} exit
set ts [ts fetch $file]
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,72 @@ 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=/img/Guidance_red.png height=21>
src=/img/Guidance_purple.png height=21>
[$ts get guidance]
</td>
</tr><tr>
@@ -59,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>"
@@ -89,6 +162,9 @@ if {$type eq "ts"} {
<td>[$ts duration] minute(s).
<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.
@@ -110,7 +186,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."
@@ -120,38 +197,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>
@@ -159,20 +270,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 {} omenu {} }
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 .m4v}
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,80 +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 "/img/Guidance_red.png"
}
if {[$ts flag "GGuidance"] > 0} {
icon "/img/Guidance_blue.png"
}
# Indexed
set dlna 0
if {$::dlnaok && $::model eq "HDR" &&
[llength [system dlnaurl $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
@@ -247,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>
@@ -257,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 ""} {
@@ -294,7 +303,7 @@ if {$parent ne ""} {
"
}
proc s_time {a b} {
proc s_file_stat {a b attr} {
global dir
set a "$dir/$a"
@@ -312,18 +321,29 @@ 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 }
return 0
}
proc s_time {a b} {
tailcall s_file_stat $a $b mtime
}
proc s_size {a b} {
tailcall s_file_stat $a $b size
}
set files [readdir -nocomplain $dir]
switch $order {
1 { set files [lsort -command s_time $files] }
2 { set files [lreverse [lsort -command s_time $files]] }
3 { set files [lsort -command s_size $files] }
4 { set files [lreverse [lsort -command s_size $files]] }
default { set files [lsort -nocase $files] }
}
@@ -338,22 +358,30 @@ Directories: $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}}
{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>"
@@ -365,34 +393,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
@@ -400,11 +412,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,7 +21,9 @@ 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

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,7 +6,10 @@ 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"

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 $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,14 +14,9 @@ set len [$ts duration 1]
set xstart [clock milliseconds]
set base [file rootname $rfile]
set shname [file tail $base]
puts "Processing $shname"
puts [exec /mod/bin/ffmpeg -y -benchmark -v 0 \
-i $rfile \
-map 0:0 -map 0:1 \
-vcodec copy -acodec copy "${base}.mpg"]
set token [system startop -multiple mpg $rfile]
$ts mkmpg
system endop $token
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

@@ -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 $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,11 +23,14 @@ 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 "title" || $attr eq "synopsis"} {
set new "\025$new"
}
if {$new ne $old} {
if {$attr eq "guidance" ||
[string length $new] > 0} {
if {$attr eq guidance || $new ne ""} {
$ts set$attr $new
}
}
@@ -35,6 +38,45 @@ if {[file isdirectory $file]} {
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]} {
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,19 +2,25 @@
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.
@@ -25,16 +31,24 @@ foreach file [readdir $dir] {
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"

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

@@ -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>
}

View File

@@ -0,0 +1,37 @@
#!/mod/bin/jimsh
require classdump
set seriescount 0
foreach seriesid [ts serieslist $dir] {
incr seriescount
set tvdb_series [set v [tvdb series [file tail $dir] $seriesid]]
puts "<div class=tvdbbanner sid=$seriesid>"
if {[set banner [$v get banner]] ne ""} {
puts "
<img class=tvdbbannertop src=\"[tvdb bannerurl $banner]\">
"
}
puts "
<span id=tvdbseriesname title=\"Series ID: $seriesid\">
<a target=_blank href=\"/db/?db=$seriesid.db\">
[cgi_quote_html [$v get name]]
</a>
</span>
"
if {[file exists "$dir/.tvdbseries"]} {
set n [string trim [file read "$dir/.tvdbseries"]]
puts "(S$n)"
}
puts "<button id=tvdbsetseries>Change</button>"
puts "</div>"
}
if {!$seriescount} {
puts {
<span id=tvdbinfo class="va right">
<img class=tvdblogo src=/img/tvdb.png>
<button id=tvdbsetseries>Select Series</button>
</span>
}
}

View File

@@ -0,0 +1,123 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require settings.class ts.class tvdb.class browse.class
jqplugin highlight tablesorter2
header
set file [cgi_get file -]
if {$file eq "-"} exit
puts "
<script type=text/javascript>
var file = '$file';
var dir = '[file dirname $file]';
</script>
"
jscss episode.js
set search [cgi_get search ""]
if {[catch {set ts [ts fetch $file]}] || $ts eq "0"} {
puts "Unable to load recording data."
exit
}
# Causes other series information to be automatically populated
$ts clearepdata
set epname [$ts episode_name]
set series [$ts series_name]
set tvdb [$ts get tvdb_series]
set idata [$ts get tvdb_data]
browse breadcrumb [file dirname $file]
puts "
<fieldset>
<legend>Episode Search</legend>
Search for:
<input id=searchterm name=search value=\"$search\">
<button id=tvdbepsearch>Search</button>
</fieldset>
<div>
<table class=keyval>
<tr>
<th>Title</th>
<td>[$ts get title]</td>
</tr><tr>
<th>File</th>
<td>[$ts get file]</td>
</tr><tr>
<th>Detected&nbsp;Episode</th>
<td>[$ts epstr] - $epname (<i>$series</i>)</td>
</tr><tr>
<th>Found&nbsp;Using</th>
<td>[$ts get tvdb_method]</td>
</tr><tr>
<th>Synopsis</th>
<td class=synopsis>[$ts get synopsis]</td>
</tr>
</table>
</div>
"
if {$search ne ""} {
set matches [lmap i [$tvdb episodesearch $search] {
lassign $i x id
list $id 0
}]
} else {
set matches [$tvdb get _smatches]
}
if {![llength $matches]} {
exit
}
puts "
<div>
<table class=\"results keyval borders\">
<thead>
<tr>
<th data-sorter=false></th>
<th>Score</th>
<th>Ep.</th>
<th>Name</th>
<th data-sorter=false>Synopsis</th>
</tr>
</thead>
<tbody>
"
foreach match $matches {
lassign $match episode_id score
set ep [$tvdb episodebyid $episode_id]
if {![llength $ep]} continue
puts "<tr sid=$episode_id s=$ep(series) e=$ep(episode)><td>"
if {[dict exists $ep thumb]} {
puts "<img width=200 src=\"[tvdb bannerurl $ep(thumb)]\">"
}
puts "</td>
<td>$score</td>
<td>s$ep(series)e$ep(episode)</td>
<td> $ep(name)
<br>
<button class=select eid=$episode_id>Select</button>
</td>
<td>$ep(overview)</td>
</tr>
"
}
puts "
</tbody>
</table>
</div>
"

View File

@@ -0,0 +1,42 @@
$(function() {
var synopsis = $('.synopsis').text();
var words = synopsis.split(" ");
for (var i = 0;i < words.length - 1; i++)
{
var word = words[i];
if (word.length > 4)
$('table.results').highlight(words[i]);
}
$('button.select').button().on('click', function() {
$tr = $(this).closest('tr');
$.get('select.jim', {
file: file,
episode: $tr.attr('sid'),
s: $tr.attr('s'),
e: $tr.attr('e')
}, function() {
window.location.href = '/go/browse/?dir=' +
encodeURIComponent(dir);
});
});
$('#tvdbepsearch').button({icons:{primary:"ui-icon-search"}})
.on('click', function() {
window.location.href = '/browse/tvdb/episode.jim?file=' +
encodeURIComponent(file) + '&search=' +
encodeURIComponent($('#searchterm').val());
});
$('table.results')
.tablesorter({
theme: 'webif',
widthFixed: false,
sortList: [[1,1]],
widgets: ['zebra', 'stickyHeaders']
});
});

View File

@@ -0,0 +1,122 @@
$(function() {
function select_episode()
{
var sid = $(this).attr('sid');
$('.tvdbresults').hide();
$('#tvdbresults_saving').show();
$('#tvdbresults').diagrefresh();
$.get('/browse/tvdb/store.jim', { dir: dir, sid: sid }, function(data) {
if (data <= 0)
{
window.location.reload(true);
return;
}
$('.tvdbresults').hide();
$('#tvdbresults_force').show();
$('#tvdb_forceseries').attr('max', data).val(0);
$('#tvdbresults').dialog('option', 'buttons', {
"Save": function() {
$('.tvdbresults').hide();
$('#tvdbresults_saving').show();
$('#tvdbresults').diagrefresh();
$.get('/browse/tvdb/store.jim', {
dir: dir,
sid: sid,
series: $('#tvdb_forceseries').val()
}, function() {
window.location.reload(true);
});
}
});
});
}
$('#tvdbsetseries').button({icons:{primary:"ui-icon-link"}})
.on('click', function(e) {
e.stopPropagation();
val = $('#tvdbseriesname').text();
if (!val)
val = dir.split(/[\\/]/).pop();
val = val.trim();
$('#tvdbsearch').val(val);
$('#tvdbdialogue').dialog({
modal: true, autoOpen: true,
height: 'auto', width: 'auto',
show: 'scale', hide: 'fade',
draggable: true, resizable: true,
closeOnEscape: true,
buttons: [
{
text: "Search",
icons: { primary: "ui-icon-search" },
click: function() {
$(this).dialog('close');
$('.tvdbresults').hide();
$('#tvdbresults_loading').show();
$('#tvdbresults_inner').empty();
$('#tvdbresults').dialog({
modal: true, autoOpen: true,
height: 'auto', width: 'auto',
show: 'scale', hide: 'fade',
draggable: true, resizable: true,
closeOnEscape: true,
buttons: {
"Cancel": function() {
$(this).dialog('close');
}
}
});
$('#tvdbresults_inner').load('/browse/tvdb/search.jim',
{ term: $('#tvdbsearch').val() }, function() {
$('#tvdbresults_inner')
.find('.tvdbselect')
.button()
.on('click', select_episode);
$('#tvdbresults_loading').slideUp('slow');
$('#tvdbresults_inner').show();
$('#tvdbresults').diagrefresh({
width: $(window).width() - 100,
height: $(window).height() - 100
});
});
}
},
{
text: "Clear Series Information",
'class': 'red',
click: function() {
if (!confirm('Clear series information for ' +
'this folder?'))
return;
blockpage('Clearing Series Information...');
$.get('/browse/tvdb/store.jim', {dir: dir, sid: 0},
function() {
window.location.reload(true);
});
}
},
{
text: "Close",
click: function() {
$(this).dialog('close');
}
}
]
});
});
$('img.tvdbbannertop').hover(
function() { $(this).css('cursor', 'pointer'); },
function() { $(this).css('cursor', 'auto'); }
).on('click', function() {
var sid = $(this).closest('div').attr('sid');
window.open('http://thetvdb.com/?tab=series&id=' + sid, '_blank');
});
});

View File

@@ -0,0 +1,49 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require tvdb.class
set term [cgi_get term -]
if {$term eq "-"} exit
httpheader
set slist [[tvdb] searchseries $term]
if {[llength $slist]} {
foreach series $slist {
puts "
<div>
<div class=tvdbseries>
<a target=_blank href=[tvdb seriesurl $series(seriesid)]>
"
if {[dict exists $series banner]} {
puts "
<img class=tvdbbanner src=\"[tvdb bannerurl $series(banner)]\">
"
} else {
puts "View on TheTVDB"
}
puts "
</a>
<span title=\"Series ID: $series(seriesid)\">
$series(seriesname)
</span>
<button class=tvdbselect sid=\"$series(seriesid)\">
Select
</button>
</div>
<div class=tvdbsynopsis>
"
if {[dict exists $series overview]} {
puts $series(overview)
}
puts "
</div>
</div>
"
}
} else {
puts "No matches found."
}

View File

@@ -0,0 +1,22 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require tvdb.class ts.class
set file [cgi_get file -]
set episode [cgi_get episode -]
set s [cgi_get s -]
set e [cgi_get e -]
httpheader
if {$file eq "-" || $episode eq "-"} exit
if {[catch {set ts [ts fetch $file]}] || $ts eq "0"} {
puts "Unable to load recording data."
exit
}
$ts storeepisode [list $s $e 0]

View File

@@ -0,0 +1,33 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require tvdb.class classdump
set dir [cgi_get dir -]
set sid [cgi_get sid -]
set series [cgi_get series 0]
httpheader
if {$dir eq "-" || $sid eq "-"} exit
if {$sid == 0} {
file delete "$dir/.tvdbseriesid"
file delete "$dir/.tvdbseries"
puts -nonewline 0
exit
}
set v [tvdb series "" $sid]
if {[$v get seriesid] == 0} exit
file write "$dir/.tvdbseriesid" $sid
if {$series > 0} {
file write "$dir/.tvdbseries" $series
} else {
file delete "$dir/.tvdbseries"
}
puts -nonewline [$v series_count]

View File

@@ -0,0 +1,32 @@
div.tvdbseries
{
border-top: 1px solid;
padding-top: 4px;
vertical-align: middle;
}
div.tvdbsynopsis
{
font-style: italic;
margin: 0 2em;
}
img.tvdbbanner
{
height: 50px;
vertical-align: middle;
}
img.tvdbbannertop
{
height: 60px;
vertical-align: middle;
}
img.tvdblogo
{
vertical-align: middle;
height: 25px;
}

View File

@@ -3,3 +3,32 @@
* It will not be overwritten on webif updates.
*/
/* The examples below can be uncommented if required. */
/* Hide the Guidance icons on the schedule and EPG pages */
/* img.guidance { display: none; } */
/* Hide the VFD display */
/* #vfd { display: none; } */
/* Set VFD to orange */
/* #vfd { color: #ffa500; } */
/* Set VFD to orange with no black background */
/* #vfd { color: #ffa500; background: transparent; } */
/* Move VFD left to align with Humax above */
/* #vfd { left: 180px; } */
/* Hide the Idle time */
/* #idletime { display: none; } */
/* Make the package screens more compact */
/* table.avail td, table.inst td, table.upgr td { padding: 0 !important; } */
/* Shrink main menu icons */
/* img.mmenu { width: 120px !important; height: 125px !important; } */
/* Wrap long lines in the queue screen log column */
/* td.queuelog { white-space: normal !important; } */

View File

@@ -0,0 +1,34 @@
/* This style sheet can be customised to change the look and feel of some
* web interface elements.
* It will not be overwritten on webif updates.
*/
/* The examples below can be uncommented if required. */
/* Hide the Guidance icons on the schedule and EPG pages */
/* img.guidance { display: none; } */
/* Hide the VFD display */
/* #vfd { display: none; } */
/* Set VFD to orange */
/* #vfd { color: #ffa500; } */
/* Set VFD to orange with no black background */
/* #vfd { color: #ffa500; background: transparent; } */
/* Move VFD left to align with Humax above */
/* #vfd { left: 180px; } */
/* Hide the Idle time */
/* #idletime { display: none; } */
/* Make the package screens more compact */
/* table.avail td, table.inst td, table.upgr td { padding: 0 !important; } */
/* Shrink main menu icons */
/* img.mmenu { width: 120px !important; height: 125px !important; } */
/* Wrap long lines in the queue screen log column */
/* td.queuelog { white-space: normal !important; } */

View File

@@ -1,3 +1,9 @@
@font-face
{
font-family: vfd;
src: url(/lib/font/vfd.ttf);
}
html body
{
line-height: 1.55em;
@@ -75,6 +81,28 @@ div.container .usb
top: 8px;
}
#vfd
{
position: absolute;
left: 200px;
top: 55px;
background: #444;
color: #1bd1b0;
/*color: #58edf0;*/
font-size: 20px;
padding: 5px;
font-family: vfd, 'Lucida Console', Monaco, monospace;
}
#idletime
{
position: absolute;
left: 50px;
top: 45px;
font-style: italic;
font-size: 12px;
}
div.footer
{
clear: both;
@@ -165,22 +193,22 @@ table.keyval td
pre, .pre, .prelike
{
font-family: Consolas, 'Courier New', Courier, monospace;
color: black;
background: #f9d9b0 url('/img/prebg.png') repeat-x top;
font-family: Consolas, 'Courier New', Courier, monospace;
color: black;
background: #f9d9b0 url('/img/prebg.png') repeat-x top;
line-height: 1.24;
padding: 3px 8px;
margin: 0 5em 1em 5em;
border-color: #f9d9b0;
border-bottom: 1px solid #f9bc6d;
border-top-left-radius: 4px;
-webkit-border-top-left-radius: 4px;
-moz-border-radius-topleft: 4px;
-khtml-border-top-left-radius: 4px;
border-top-right-radius: 4px;
-webkit-border-top-right-radius: 4px;
-moz-border-radius-topright: 4px;
-khtml-border-top-right-radius: 4px;
padding: 3px 8px;
margin: 0 5em 1em 5em;
border-color: #f9d9b0;
border-bottom: 1px solid #f9bc6d;
border-top-left-radius: 4px;
-webkit-border-top-left-radius: 4px;
-moz-border-radius-topleft: 4px;
-khtml-border-top-left-radius: 4px;
border-top-right-radius: 4px;
-webkit-border-top-right-radius: 4px;
-moz-border-radius-topright: 4px;
-khtml-border-top-right-radius: 4px;
}
pre, .pre
@@ -235,17 +263,23 @@ pre, .pre
.blood
{
color: #ff4000;
color: #ff4000 !important;
background: transparent;
}
.idletime
{
font-size: 70%;
font-style: italic;
}
.filesize
{
color: #6a6aff;
background: transparent;
}
.footnote, .bfootnote
.footnote, .bfootnote, .bluefootnote
{
background: transparent;
font-size: 70%;
@@ -254,12 +288,17 @@ pre, .pre
.footnote
{
color: #ff4000;
color: #ff4000 !important;
}
.blueshade
.bluefootnote
{
background: #b9daff;
color: #0000ff !important;
}
tr.blueshade > td, .blueshade
{
background: #b9daff !important;
color: black;
}
@@ -271,7 +310,7 @@ pre, .pre
.pinkshade
{
background: #ffccff;
background: #ffccff !important;
color: black;
}
@@ -280,18 +319,30 @@ pre, .pre
text-decoration: line-through;
}
.error
{
background: #ffcccc;
color: black;
}
.greenshade
{
background: #e4faa8;
color: black;
}
.orangeshade
tr.orangeshade > td, .orangeshade
{
background: #ffeeaa;
background: #ff8040 !important;
color: black;
}
tr.purpleshade > td, .purpleshade
{
background: #7e587e !important;
color: white;
}
.redshade
{
background: #ff4000;
@@ -365,7 +416,6 @@ div.cut
.ui-button, .ui-button-text
{
padding: 0;
font-size: 12px;
}
@@ -413,11 +463,15 @@ span.toolbarcell
border-right: 1px solid #ccc;
text-align: center;
padding: 0 1em;
margin-top: 1px;
margin-left: 1px;
}
.tbhover
{
background: #dfe8ef;
margin-top: 0 !important;
margin-left: 0 !important;
border-top: solid 1px #ccc;
border-left: solid 1px #ccc;
}
@@ -432,21 +486,21 @@ span.toolbarcell
button.blue
{
background: url(/img/gloss_wave_blue.png) repeat-x center;
background: url(/img/gloss_wave_blue.png) repeat-x center !important;
border: 1px solid blue;
color: #ffffff;
}
button.green
{
background: url(/img/gloss_wave_green.png) repeat-x center;
background: url(/img/gloss_wave_green.png) repeat-x center !important;
border: 1px solid green;
color: #ffffff;
}
button.red
{
background: url(/img/gloss_wave_red.png) repeat-x center;
background: url(/img/gloss_wave_red.png) repeat-x center !important;
border: 1px solid green;
color: #ffffff;
}
@@ -456,15 +510,19 @@ div#restart_block
text-align: center;
z-index: 31;
float: right;
width: 60%;
position: absolute;
top: 10px;
left: 100px;
width: 130px;
position: relative;
top: 20px;
background-color: #f8f8f8;
opacity: 0.9;
filter:alpha(opacity=90);
}
button#restart_humaxtv
{
margin-bottom: 3px;
}
img.bmp, img.doublebmp
{
transform: scaleY(-1);
@@ -485,6 +543,13 @@ img.doublebmp
position: relative;
}
.stackimg
{
position: absolute;
height: 20px;
width: 29px;
}
span.foldernum
{
display: none;
@@ -494,13 +559,38 @@ span.foldernum
color: white;
height: 15px;
line-height: 16px;
background-color: #CC0000;
background: linear-gradient(#FF0000, #CC0000) repeat scroll 0 0 #EEEEEE;
background-color: #cc0000;
background: linear-gradient(#ff0000, #cc0000) repeat scroll 0 0 #eeeeee;
font-size: 10px;
border: 1px solid #660000;
padding: 0 2px 0 2px;
border-radius: 1em 1em 1em 1em;
-moz-border-radius: 1em;
-moz-border-radius: 1em;
-webkit-border-radius: 1em;
border-top-right-radius: 1em;
border-top-left-radius: 1em;
border-bottom-right-radius: 1em;
border-bottom-left-radius: 1em;
}
span.folderu
{
display: none;
position: absolute;
z-index: 40;
left: 34px;
top: 7px;
color: black;
font-weight: bold;
height: 10px;
line-height: 1px;
background-color: #00cc00;
background: linear-gradient(#00ff00, #00cc00) repeat scroll 0 0 #eeeeee;
font-size: 10px;
border: 1px solid #660000;
padding: 0 2px 0 2px;
border-radius: 1em 1em 1em 1em;
-moz-border-radius: 1em;
-webkit-border-radius: 1em;
border-top-right-radius: 1em;
border-top-left-radius: 1em;
@@ -544,3 +634,90 @@ span.foldernum
z-index: 40;
}
#rollimg
{
position: absolute;
}
img.rollimg
{
height: 78px;
width: 140px;
}
.versions
{
color: #ff4000 !important;
background: transparent;
font-size: 0.9em;
float: right;
clear: right;
}
#epginfo_extra
{
color: #ff4000 !important;
background: transparent;
font-size: 1.3em;
font-weight: bold;
padding-bottom: 2px;
}
/* Minimal tabs */
#minimaltabbar
{
background: transparent;
border: none;
padding: 0 0 0 0;
position: relative;
top: -40px;
}
#minimaltabbar .ui-widget-header
{
background: transparent;
border: none;
border-bottom: 1px solid #c0c0c0;
-moz-border-radius: 0px;
-webkit-border-radius: 0px;
border-radius: 0px;
}
#minimaltabbar .ui-tabs-nav
{
margin-bottom: 15px;
}
#minimaltabbar .ui-tabs-nav .ui-state-default
{
background: transparent;
border: none;
}
#minimaltabbar .ui-tabs-nav .ui-state-active
{
background: transparent url(/img/uiTabsArrow.png) no-repeat bottom center;
border: none;
}
#minimaltabbar .ui-tabs-nav .ui-state-default a
{
color: #c0c0c0;
}
#minimaltabbar .ui-tabs-nav .ui-state-active a
{
color: #000000;
}
#minimaltabbar .ui-tabs-panel
{
padding: 0 0 0 0;
}
a.breadcrumb:hover
{
color: #008080;
}

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