Compare commits

..

302 Commits

Author SHA1 Message Date
hummypkg
52d05a7f48 update jquery
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1839 2a923420-c742-0410-a762-8d5b09965624
2014-04-14 23:00:15 +00:00
hummypkg
612a61a5b1 removing legacy directories
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1838 2a923420-c742-0410-a762-8d5b09965624
2014-04-14 22:56:06 +00:00
hummypkg
17ba0bb00e remove SSI
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1837 2a923420-c742-0410-a762-8d5b09965624
2014-04-14 22:54:01 +00:00
hummypkg
5f473c9e72 add ts iterate
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1833 2a923420-c742-0410-a762-8d5b09965624
2014-04-03 20:21:40 +00:00
hummypkg
e0ac834c78 preserve more timestamps
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1832 2a923420-c742-0410-a762-8d5b09965624
2014-04-02 21:14:23 +00:00
hummypkg
604ac65172 fix grid problem
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1828 2a923420-c742-0410-a762-8d5b09965624
2014-03-27 21:34:27 +00:00
hummypkg
dad2a630c7 fix strip et al. with no thumbnail
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1827 2a923420-c742-0410-a762-8d5b09965624
2014-03-26 21:48:09 +00:00
hummypkg
2bf876262f checkbox fixes, glob removal
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1825 2a923420-c742-0410-a762-8d5b09965624
2014-03-24 21:07:32 +00:00
hummypkg
972eab191c fix pretty size
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1819 2a923420-c742-0410-a762-8d5b09965624
2014-03-03 17:30:17 +00:00
hummypkg
9fd84a8938 use file size over file stat, add mp3 type preference
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1814 2a923420-c742-0410-a762-8d5b09965624
2014-03-03 14:00:46 +00:00
hummypkg
ceccfd9c1d update to Jim 0.75
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1811 2a923420-c742-0410-a762-8d5b09965624
2014-03-02 18:44:41 +00:00
hummypkg
c948926cc2 fix typo
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1806 2a923420-c742-0410-a762-8d5b09965624
2014-02-24 19:46:44 +00:00
hummypkg
a087581573 fix scroll position
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1805 2a923420-c742-0410-a762-8d5b09965624
2014-02-23 22:47:01 +00:00
hummypkg
3416d4e9e2 fixes
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1804 2a923420-c742-0410-a762-8d5b09965624
2014-02-23 22:22:07 +00:00
hummypkg
b4af9b62fc fix URL
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1802 2a923420-c742-0410-a762-8d5b09965624
2014-02-21 23:22:19 +00:00
hummypkg
68fdfcc4d5 1.0.9
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1800 2a923420-c742-0410-a762-8d5b09965624
2014-02-21 23:09:19 +00:00
hummypkg
7c181557a1 re-adding synlinks
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1790 2a923420-c742-0410-a762-8d5b09965624
2014-02-21 21:27:03 +00:00
hummypkg
0f1bbed6b9 migrating
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1789 2a923420-c742-0410-a762-8d5b09965624
2014-02-21 21:25:33 +00:00
hummypkg
8c4449ee36 new service screen
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1788 2a923420-c742-0410-a762-8d5b09965624
2014-02-20 00:51:02 +00:00
hummypkg
23cc31a02a foreign characters
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1786 2a923420-c742-0410-a762-8d5b09965624
2014-02-18 21:34:44 +00:00
hummypkg
98c4182a1f fix mkdir
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1785 2a923420-c742-0410-a762-8d5b09965624
2014-02-10 23:21:26 +00:00
hummypkg
1984d7151b restructure restartpending, create folder, cancel restartpending once nothing pending
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1784 2a923420-c742-0410-a762-8d5b09965624
2014-02-10 23:03:36 +00:00
hummypkg
97289969f1 more package management tweaks
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1781 2a923420-c742-0410-a762-8d5b09965624
2014-02-03 23:06:38 +00:00
hummypkg
0cfc8f233a package management improvements
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1778 2a923420-c742-0410-a762-8d5b09965624
2014-02-03 21:42:20 +00:00
hummypkg
ea2f231ad8 fix duplicate check
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1775 2a923420-c742-0410-a762-8d5b09965624
2014-02-02 23:37:50 +00:00
hummypkg
13af77c1e4 various updates
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1768 2a923420-c742-0410-a762-8d5b09965624
2014-01-22 21:18:12 +00:00
hummypkg
d08475daaa pkg management updates
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1760 2a923420-c742-0410-a762-8d5b09965624
2014-01-18 00:26:33 +00:00
hummypkg
26981ebb2d fix mux display
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1741 2a923420-c742-0410-a762-8d5b09965624
2013-12-11 00:16:01 +00:00
hummypkg
fe7de23c67 fix service restore
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1733 2a923420-c742-0410-a762-8d5b09965624
2013-12-04 20:16:48 +00:00
hummypkg
fbd469ffec restore to LCN if channel name not found
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1726 2a923420-c742-0410-a762-8d5b09965624
2013-11-26 22:53:35 +00:00
hummypkg
2c62699f00 update hexdump and fix dict merge problem
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1723 2a923420-c742-0410-a762-8d5b09965624
2013-11-26 21:47:58 +00:00
hummypkg
2a4ec43ef6 work around missing event IDs in the future
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1716 2a923420-c742-0410-a762-8d5b09965624
2013-11-06 22:13:25 +00:00
hummypkg
7080242ff8 update depends, pgrep -n
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1715 2a923420-c742-0410-a762-8d5b09965624
2013-11-05 17:39:48 +00:00
hummypkg
e2c099668e add decrypted file touch
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1713 2a923420-c742-0410-a762-8d5b09965624
2013-10-29 20:51:10 +00:00
hummypkg
d801e71bf3 update version
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1711 2a923420-c742-0410-a762-8d5b09965624
2013-10-29 20:05:27 +00:00
hummypkg
66a7fcec9c fix hostname setting
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1710 2a923420-c742-0410-a762-8d5b09965624
2013-10-29 20:05:15 +00:00
hummypkg
8dc232646b modularise schedule/backup restore. Fix bug in reset new
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1709 2a923420-c742-0410-a762-8d5b09965624
2013-10-26 11:05:47 +00:00
hummypkg
a505022d39 tweaks
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1708 2a923420-c742-0410-a762-8d5b09965624
2013-10-23 20:38:25 +00:00
hummypkg
4fc05273e1 fix hostname in settings screen
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1704 2a923420-c742-0410-a762-8d5b09965624
2013-10-13 15:23:15 +00:00
hummypkg
d81037aa5f update to 1.0.7
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1700 2a923420-c742-0410-a762-8d5b09965624
2013-10-07 20:18:42 +00:00
hummypkg
abc7d0655e add schedule cleanup button
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1699 2a923420-c742-0410-a762-8d5b09965624
2013-10-07 20:17:22 +00:00
hummypkg
f7ab52698d allow customisation of the fav icons
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1698 2a923420-c742-0410-a762-8d5b09965624
2013-10-07 19:45:09 +00:00
hummypkg
f5ff9cbf67 update jquery.mobile
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1697 2a923420-c742-0410-a762-8d5b09965624
2013-09-25 22:41:40 +00:00
hummypkg
009eb100b6 update
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1695 2a923420-c742-0410-a762-8d5b09965624
2013-09-21 20:50:58 +00:00
hummypkg
e6366df3c8 update
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1692 2a923420-c742-0410-a762-8d5b09965624
2013-09-18 17:54:33 +00:00
hummypkg
7a767e5443 update
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1691 2a923420-c742-0410-a762-8d5b09965624
2013-09-18 17:38:08 +00:00
hummypkg
0e2bc599a5 updates
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1665 2a923420-c742-0410-a762-8d5b09965624
2013-09-09 19:38:56 +00:00
hummypkg
10e9ef191e update version
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1664 2a923420-c742-0410-a762-8d5b09965624
2013-09-08 20:47:40 +00:00
hummypkg
9b826e8f95 resetnew on delete
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1663 2a923420-c742-0410-a762-8d5b09965624
2013-09-08 20:46:11 +00:00
hummypkg
8a802e5c1d Upgrade JQuery, JQuery UI. Accordian on settings screen
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1662 2a923420-c742-0410-a762-8d5b09965624
2013-09-08 20:41:01 +00:00
hummypkg
61a8b537e6 upgrading jquery
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1661 2a923420-c742-0410-a762-8d5b09965624
2013-09-08 19:48:26 +00:00
hummypkg
f7de940e51 fix EPG calendar. Leave Now ungrayed.
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1660 2a923420-c742-0410-a762-8d5b09965624
2013-09-08 19:15:54 +00:00
hummypkg
27c7818da8 updates for 1.0.6
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1658 2a923420-c742-0410-a762-8d5b09965624
2013-09-07 22:13:03 +00:00
hummypkg
9fb84443cd add rmdir_if_empty
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1654 2a923420-c742-0410-a762-8d5b09965624
2013-09-05 18:52:13 +00:00
hummypkg
0ae9a07cce update
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1651 2a923420-c742-0410-a762-8d5b09965624
2013-09-04 23:52:40 +00:00
hummypkg
ed20eec408 update
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1646 2a923420-c742-0410-a762-8d5b09965624
2013-08-30 21:22:30 +00:00
hummypkg
c095cc7913 1.0.5
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1632 2a923420-c742-0410-a762-8d5b09965624
2013-07-30 20:07:13 +00:00
hummypkg
b379bb64dc update for new channel icons
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1611 2a923420-c742-0410-a762-8d5b09965624
2013-07-11 22:13:36 +00:00
hummypkg
e82d303c95 update version
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1574 2a923420-c742-0410-a762-8d5b09965624
2013-06-24 21:42:11 +00:00
hummypkg
84a03f49bf webif updates
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1573 2a923420-c742-0410-a762-8d5b09965624
2013-06-24 21:34:46 +00:00
hummypkg
e0fea797bb update mongoose dependency
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1560 2a923420-c742-0410-a762-8d5b09965624
2013-05-16 21:02:24 +00:00
hummypkg
102ae13acb 1.0.2
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1545 2a923420-c742-0410-a762-8d5b09965624
2013-04-17 18:05:12 +00:00
hummypkg
0bca853384 1.0.1
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1534 2a923420-c742-0410-a762-8d5b09965624
2013-04-10 21:49:11 +00:00
hummypkg
38a079b0ba 1.0.0-2
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1524 2a923420-c742-0410-a762-8d5b09965624
2013-04-05 20:07:42 +00:00
hummypkg
cf0a6b5028 1.0.0 final
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1522 2a923420-c742-0410-a762-8d5b09965624
2013-04-04 22:44:16 +00:00
hummypkg
93cbf651ba synchronise scheduled event detection with RS code. Add blue shading
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1521 2a923420-c742-0410-a762-8d5b09965624
2013-04-04 22:20:41 +00:00
hummypkg
26ef83fbff add button links to foot of front page
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1520 2a923420-c742-0410-a762-8d5b09965624
2013-04-04 00:24:24 +00:00
hummypkg
a1e45d5e9c 1.0.0 rc
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1519 2a923420-c742-0410-a762-8d5b09965624
2013-04-03 23:50:25 +00:00
hummypkg
232546feef checkpoint on the way to 1.0.0
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1516 2a923420-c742-0410-a762-8d5b09965624
2013-04-03 22:42:15 +00:00
hummypkg
246112d68f new channelicons + nocase sort
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1502 2a923420-c742-0410-a762-8d5b09965624
2013-03-26 19:11:13 +00:00
hummypkg
b2c7be03a4 add thumbnail generation
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1445 2a923420-c742-0410-a762-8d5b09965624
2013-03-11 23:00:41 +00:00
hummypkg
ccf3cc1888 add thumbnail generation/display
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1442 2a923420-c742-0410-a762-8d5b09965624
2013-03-07 23:37:56 +00:00
hummypkg
9d3e52edd3 fix decrypt
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1441 2a923420-c742-0410-a762-8d5b09965624
2013-03-07 21:41:38 +00:00
hummypkg
612f9f8866 add automp3, fix ffmpeg
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1440 2a923420-c742-0410-a762-8d5b09965624
2013-03-06 22:49:28 +00:00
hummypkg
d4a4af756d fix ffmpeg
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1439 2a923420-c742-0410-a762-8d5b09965624
2013-03-06 19:46:44 +00:00
hummypkg
070fd7a749 update
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1436 2a923420-c742-0410-a762-8d5b09965624
2013-03-05 00:10:38 +00:00
hummypkg
2f570f6ea0 fix dedup fastpath, cross-device renames, undelete on usb drives, directory menu outside of media root
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1425 2a923420-c742-0410-a762-8d5b09965624
2013-02-27 23:15:37 +00:00
hummypkg
fa8b6d7e7c 0.13.0
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1423 2a923420-c742-0410-a762-8d5b09965624
2013-02-25 23:57:55 +00:00
hummypkg
d466b5cc15 file rename
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1422 2a923420-c742-0410-a762-8d5b09965624
2013-02-25 23:55:41 +00:00
hummypkg
dae5f9394b remove unused directory
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1421 2a923420-c742-0410-a762-8d5b09965624
2013-02-25 22:32:25 +00:00
hummypkg
22320536ee browse relocation, system class improvements, safe_delete improvements, auto expire, utf-8, ...
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1420 2a923420-c742-0410-a762-8d5b09965624
2013-02-25 22:31:54 +00:00
hummypkg
39d7dab2a9 genre dedup
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1408 2a923420-c742-0410-a762-8d5b09965624
2013-02-17 22:58:37 +00:00
hummypkg
8ec75e783d fix directory rename
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1405 2a923420-c742-0410-a762-8d5b09965624
2013-02-15 22:07:19 +00:00
hummypkg
909342eb1c allow guidance removal, skip mounted directories in auto
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1402 2a923420-c742-0410-a762-8d5b09965624
2013-02-12 00:08:54 +00:00
hummypkg
2ab6f7caa2 0.12.0
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1398 2a923420-c742-0410-a762-8d5b09965624
2013-02-09 22:46:15 +00:00
hummypkg
f116cc5801 show pending schedule items, auto diskspace check improvements
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1396 2a923420-c742-0410-a762-8d5b09965624
2013-02-04 22:32:21 +00:00
hummypkg
9d75b810c8 safe delete library
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1381 2a923420-c742-0410-a762-8d5b09965624
2013-01-30 23:48:37 +00:00
hummypkg
d2f61fb70e auto improvements
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1376 2a923420-c742-0410-a762-8d5b09965624
2013-01-28 01:35:14 +00:00
hummypkg
1ff5b8ec0e remove global ::, allow test as argument
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1374 2a923420-c742-0410-a762-8d5b09965624
2013-01-27 21:26:45 +00:00
hummypkg
52939392ba stop auto recursion into bin
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1373 2a923420-c742-0410-a762-8d5b09965624
2013-01-27 21:23:16 +00:00
hummypkg
1964f4dfad lower case file extensions, fixes to parseepg
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1372 2a923420-c742-0410-a762-8d5b09965624
2013-01-26 23:09:34 +00:00
hummypkg
d649456cfe finish recursive handling
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1358 2a923420-c742-0410-a762-8d5b09965624
2013-01-18 19:24:50 +00:00
hummypkg
f550931f71 cleanup directory flag functions. No refresh on flag change
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1356 2a923420-c742-0410-a762-8d5b09965624
2013-01-18 18:47:14 +00:00
hummypkg
a294c084b3 show streaming speed
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1331 2a923420-c742-0410-a762-8d5b09965624
2013-01-13 22:48:38 +00:00
hummypkg
7172c7c107 auto mpg extract, fix rename
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1325 2a923420-c742-0410-a762-8d5b09965624
2013-01-08 22:43:43 +00:00
hummypkg
f7933beaf8 tweak genre code, table in ts.class
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1320 2a923420-c742-0410-a762-8d5b09965624
2013-01-07 21:32:06 +00:00
hummypkg
3dbc3cbf82 add genre rename
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1316 2a923420-c742-0410-a762-8d5b09965624
2013-01-06 23:50:39 +00:00
hummypkg
41047e8668 add grid EPG hours option
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1314 2a923420-c742-0410-a762-8d5b09965624
2013-01-05 22:27:00 +00:00
hummypkg
d6df19dd32 add build number to main screen
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1299 2a923420-c742-0410-a762-8d5b09965624
2013-01-03 22:20:57 +00:00
hummypkg
79bff00465 require latest tmenu, busybox, new dedup prefix, lower dedup reserve threshold
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1292 2a923420-c742-0410-a762-8d5b09965624
2013-01-02 22:22:11 +00:00
hummypkg
4ce9701792 show 20 minutes upcoming, tweak dedup reserve
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1270 2a923420-c742-0410-a762-8d5b09965624
2013-01-01 20:58:42 +00:00
hummypkg
6ff5b7a8e3 rejig dedup, prepare for RMA in 2.15
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1261 2a923420-c742-0410-a762-8d5b09965624
2012-12-31 22:41:09 +00:00
hummypkg
25523058f0 rejig dedup, prepare for RMA in 2.15
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1260 2a923420-c742-0410-a762-8d5b09965624
2012-12-31 22:39:54 +00:00
hummypkg
d661c8016e clear log function
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1256 2a923420-c742-0410-a762-8d5b09965624
2012-12-01 22:00:03 +00:00
hummypkg
ebcd6cdbf7 tweak settings ON/OFF to YES/NO
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1255 2a923420-c742-0410-a762-8d5b09965624
2012-11-30 21:17:16 +00:00
hummypkg
4fe5bd1bff update
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1253 2a923420-c742-0410-a762-8d5b09965624
2012-11-29 22:28:08 +00:00
hummypkg
d5679ead84 disc -> disk
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1252 2a923420-c742-0410-a762-8d5b09965624
2012-11-29 21:33:58 +00:00
hummypkg
e666711eeb various changes
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1250 2a923420-c742-0410-a762-8d5b09965624
2012-11-25 00:22:18 +00:00
hummypkg
775add8c04 improve media rename, require HMT 1.1.7
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1231 2a923420-c742-0410-a762-8d5b09965624
2012-11-18 12:07:53 +00:00
hummypkg
d4dc56b816 minor updates for new menu system
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1221 2a923420-c742-0410-a762-8d5b09965624
2012-11-16 21:16:03 +00:00
hummypkg
e720740507 0.10.0-3
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1214 2a923420-c742-0410-a762-8d5b09965624
2012-11-12 22:42:33 +00:00
hummypkg
3c327ff80d minor updates
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1212 2a923420-c742-0410-a762-8d5b09965624
2012-11-09 21:56:36 +00:00
hummypkg
d05632e8d3 various updates
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1210 2a923420-c742-0410-a762-8d5b09965624
2012-11-06 22:58:17 +00:00
hummypkg
c208e186c3 rma mode and stream size monitor
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1202 2a923420-c742-0410-a762-8d5b09965624
2012-11-05 22:36:04 +00:00
hummypkg
328ca16b5c checkpoint - mobile version working, fixed auto bug
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1201 2a923420-c742-0410-a762-8d5b09965624
2012-11-05 21:57:29 +00:00
hummypkg
e15b82fe2d checkpoint pkg
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1195 2a923420-c742-0410-a762-8d5b09965624
2012-10-31 23:50:27 +00:00
hummypkg
0a2c7966b5 checkpoint
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1182 2a923420-c742-0410-a762-8d5b09965624
2012-10-30 18:58:54 +00:00
hummypkg
57b78c4c0d new disk diagnostics. Progress on mobile
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1173 2a923420-c742-0410-a762-8d5b09965624
2012-10-25 23:31:09 +00:00
hummypkg
eb0adb8f29 checkpoint
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1172 2a923420-c742-0410-a762-8d5b09965624
2012-10-23 22:51:54 +00:00
hummypkg
6e06f3875a fix db.jim
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1170 2a923420-c742-0410-a762-8d5b09965624
2012-10-18 19:37:39 +00:00
hummypkg
b691be415a quick edit, cli status, db.jim
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1164 2a923420-c742-0410-a762-8d5b09965624
2012-10-15 21:32:25 +00:00
hummypkg
c149d7ae3c 0.9.14
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1151 2a923420-c742-0410-a762-8d5b09965624
2012-10-08 22:40:51 +00:00
hummypkg
38757583bb jquery update
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1150 2a923420-c742-0410-a762-8d5b09965624
2012-10-08 20:16:27 +00:00
hummypkg
dec82728cb remove remote code, now in plugin
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1139 2a923420-c742-0410-a762-8d5b09965624
2012-10-02 20:05:53 +00:00
hummypkg
49170bdd39 initial remote
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1138 2a923420-c742-0410-a762-8d5b09965624
2012-10-01 19:53:02 +00:00
hummypkg
1bf67cf177 tweaks
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1123 2a923420-c742-0410-a762-8d5b09965624
2012-09-21 20:56:53 +00:00
hummypkg
e669a3d08f update channelicons, add size check
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1122 2a923420-c742-0410-a762-8d5b09965624
2012-09-19 20:44:04 +00:00
hummypkg
39ed7752bc add paste to folder
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1113 2a923420-c742-0410-a762-8d5b09965624
2012-08-09 23:06:30 +00:00
hummypkg
e4f61f4047 many escaping fixes. Remove unecessary regsub/string match and replace with better alternatives
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1111 2a923420-c742-0410-a762-8d5b09965624
2012-08-07 22:22:30 +00:00
hummypkg
4e36ecc6f0 catch sort file stats
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1110 2a923420-c742-0410-a762-8d5b09965624
2012-08-07 20:25:13 +00:00
hummypkg
d2712f2a76 add diskspace check and remove escape
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1103 2a923420-c742-0410-a762-8d5b09965624
2012-08-04 21:42:02 +00:00
hummypkg
24d26aee75 update to 0.9.13
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1100 2a923420-c742-0410-a762-8d5b09965624
2012-08-04 00:29:57 +00:00
hummypkg
39b3dee3e1 add get_channel_attr_byorglcn
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1097 2a923420-c742-0410-a762-8d5b09965624
2012-07-21 19:47:23 +00:00
hummypkg
3d3f7d17ed update VLC player
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1092 2a923420-c742-0410-a762-8d5b09965624
2012-07-16 20:29:59 +00:00
hummypkg
89a68cf538 updates
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1081 2a923420-c742-0410-a762-8d5b09965624
2012-06-24 20:45:07 +00:00
hummypkg
51db7b1e36 fix stripped icon
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1070 2a923420-c742-0410-a762-8d5b09965624
2012-06-16 21:57:24 +00:00
hummypkg
9d8d630b07 add auto + better inuse checking
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1066 2a923420-c742-0410-a762-8d5b09965624
2012-06-15 21:34:07 +00:00
hummypkg
101f5a7946 working towards auto-\*
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1060 2a923420-c742-0410-a762-8d5b09965624
2012-06-13 23:21:34 +00:00
hummypkg
50346e5d4b strip->squeeze, depend on fixed tool
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1057 2a923420-c742-0410-a762-8d5b09965624
2012-06-13 21:09:44 +00:00
hummypkg
f0d22b3b01 new strip version
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1052 2a923420-c742-0410-a762-8d5b09965624
2012-06-11 18:49:56 +00:00
hummypkg
7356e6e220 add strip
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1046 2a923420-c742-0410-a762-8d5b09965624
2012-06-10 21:16:22 +00:00
hummypkg
7d1331f1aa add Humax version to main screen, fix shtml footer;
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1029 2a923420-c742-0410-a762-8d5b09965624
2012-06-03 20:12:31 +00:00
hummypkg
895dda6dee favourite order
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1020 2a923420-c742-0410-a762-8d5b09965624
2012-05-30 19:51:20 +00:00
hummypkg
d7284ff3ef 0.9.9
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1016 2a923420-c742-0410-a762-8d5b09965624
2012-05-21 20:23:41 +00:00
hummypkg
d04dcee369 add tbstatus
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1014 2a923420-c742-0410-a762-8d5b09965624
2012-05-20 15:05:48 +00:00
hummypkg
db4f7cf122 toolbar tweaks - redo status
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1011 2a923420-c742-0410-a762-8d5b09965624
2012-05-20 14:10:37 +00:00
hummypkg
015b992fcb fix browse link
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1010 2a923420-c742-0410-a762-8d5b09965624
2012-05-19 21:46:45 +00:00
hummypkg
a41c2ae6f9 add toolbar
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1008 2a923420-c742-0410-a762-8d5b09965624
2012-05-19 21:44:42 +00:00
hummypkg
f56d226cf8 fix padding bug
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1002 2a923420-c742-0410-a762-8d5b09965624
2012-05-11 20:33:04 +00:00
hummypkg
5b5485dd4c update menuicons
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@999 2a923420-c742-0410-a762-8d5b09965624
2012-05-07 00:24:12 +00:00
hummypkg
1b11c7959b fix dustbin delete of same-named file, remove toggle ENC option
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@991 2a923420-c742-0410-a762-8d5b09965624
2012-05-02 17:41:23 +00:00
hummypkg
df72a42abf 0.9.7
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@963 2a923420-c742-0410-a762-8d5b09965624
2012-04-27 19:17:31 +00:00
hummypkg
6d95ee89a4 remove mediatomb/transmission code
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@946 2a923420-c742-0410-a762-8d5b09965624
2012-04-23 19:19:23 +00:00
hummypkg
57c769a4e8 add menuplugins
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@943 2a923420-c742-0410-a762-8d5b09965624
2012-04-22 23:34:30 +00:00
hummypkg
020e1b707c add resetnew
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@933 2a923420-c742-0410-a762-8d5b09965624
2012-04-22 20:54:29 +00:00
hummypkg
3b8863a4b4 improve status
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@929 2a923420-c742-0410-a762-8d5b09965624
2012-04-18 22:46:21 +00:00
hummypkg
b45fe08fe2 tweak message
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@928 2a923420-c742-0410-a762-8d5b09965624
2012-04-18 21:19:12 +00:00
hummypkg
a5c65505e4 show current channel, retain more backups
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@927 2a923420-c742-0410-a762-8d5b09965624
2012-04-18 20:26:34 +00:00
hummypkg
6ab9318fa9 update dedup
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@926 2a923420-c742-0410-a762-8d5b09965624
2012-04-14 21:31:25 +00:00
hummypkg
52728ba471 update dedup, require new rsvsync
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@909 2a923420-c742-0410-a762-8d5b09965624
2012-04-11 20:54:59 +00:00
hummypkg
68ae915f57 change folder for events
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@897 2a923420-c742-0410-a762-8d5b09965624
2012-04-10 19:45:49 +00:00
hummypkg
3d0152e475 add dlna stuff
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@894 2a923420-c742-0410-a762-8d5b09965624
2012-04-08 23:26:38 +00:00
hummypkg
87060ef8e2 exclude more directories
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@890 2a923420-c742-0410-a762-8d5b09965624
2012-04-05 21:00:22 +00:00
hummypkg
46dad281f5 test
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@889 2a923420-c742-0410-a762-8d5b09965624
2012-04-05 20:59:08 +00:00
hummypkg
f14b2a8b2e move icons into separate package
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@888 2a923420-c742-0410-a762-8d5b09965624
2012-04-05 20:39:57 +00:00
hummypkg
79a09e1df6 move links from main page to diag
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@885 2a923420-c742-0410-a762-8d5b09965624
2012-04-05 20:30:40 +00:00
hummypkg
2de66b4f3c update version
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@880 2a923420-c742-0410-a762-8d5b09965624
2012-03-31 21:30:21 +00:00
hummypkg
2bbf69f820 schedule restructure
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@876 2a923420-c742-0410-a762-8d5b09965624
2012-03-31 21:16:31 +00:00
hummypkg
8fb6570882 fix mpg extraction progress bar
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@863 2a923420-c742-0410-a762-8d5b09965624
2012-03-28 18:59:06 +00:00
hummypkg
df8d655cc8 improvements
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@835 2a923420-c742-0410-a762-8d5b09965624
2012-03-11 00:26:14 +00:00
hummypkg
d8914e2311 enable cfw reset
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@762 2a923420-c742-0410-a762-8d5b09965624
2012-02-23 22:06:39 +00:00
hummypkg
3afef45f86 depend on file
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@759 2a923420-c742-0410-a762-8d5b09965624
2012-02-23 00:25:59 +00:00
hummypkg
4ae2604f0a checkpoint
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@758 2a923420-c742-0410-a762-8d5b09965624
2012-02-23 00:08:38 +00:00
hummypkg
973a7cdacf improve diagnostics and file editor
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@755 2a923420-c742-0410-a762-8d5b09965624
2012-02-22 19:09:46 +00:00
hummypkg
aadac18796 add editor
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@753 2a923420-c742-0410-a762-8d5b09965624
2012-02-22 01:14:12 +00:00
hummypkg
955217bdd2 update dependencies and remote reset block
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@748 2a923420-c742-0410-a762-8d5b09965624
2012-02-19 22:38:36 +00:00
hummypkg
1dbd659ddb add op complete to pkg
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@737 2a923420-c742-0410-a762-8d5b09965624
2012-02-13 21:02:12 +00:00
hummypkg
57515b2941 add mpg, fix diag
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@735 2a923420-c742-0410-a762-8d5b09965624
2012-02-12 23:11:23 +00:00
hummypkg
ef1e7b82e8 version 0.9.2
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@731 2a923420-c742-0410-a762-8d5b09965624
2012-02-07 22:54:29 +00:00
hummypkg
1a7cb41a16 restructure epg, fix log newlines
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@730 2a923420-c742-0410-a762-8d5b09965624
2012-02-07 22:48:54 +00:00
hummypkg
7a66306f78 label segments with sequence number
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@726 2a923420-c742-0410-a762-8d5b09965624
2012-02-07 00:40:31 +00:00
hummypkg
a014fec23d move modules to subdirectories and split JS/CSS out
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@725 2a923420-c742-0410-a762-8d5b09965624
2012-02-07 00:17:33 +00:00
hummypkg
d307699ab1 add 45 minute split
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@724 2a923420-c742-0410-a762-8d5b09965624
2012-02-06 23:28:53 +00:00
hummypkg
3f6e8754c6 bug fixes
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@723 2a923420-c742-0410-a762-8d5b09965624
2012-02-05 22:49:27 +00:00
hummypkg
742a56485a catch more dlna database errors, bump to version 0.9.1
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@717 2a923420-c742-0410-a762-8d5b09965624
2012-02-05 20:07:49 +00:00
hummypkg
fa9905d8bd replace glob with readdir in some cases. Move paste button to clipboard
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@711 2a923420-c742-0410-a762-8d5b09965624
2012-02-01 21:02:43 +00:00
hummypkg
a3ecbe1d3f add system inuse
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@705 2a923420-c742-0410-a762-8d5b09965624
2012-01-30 21:59:18 +00:00
hummypkg
924bc72832 update to 0.9.0-2, fix vlc icons, require fixed jim
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@694 2a923420-c742-0410-a762-8d5b09965624
2012-01-28 11:15:22 +00:00
hummypkg
909605b074 fix deletions from non-mediaroot paths
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@691 2a923420-c742-0410-a762-8d5b09965624
2012-01-27 21:54:39 +00:00
hummypkg
f62904edb4 vlc working + media
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@690 2a923420-c742-0410-a762-8d5b09965624
2012-01-25 23:19:57 +00:00
hummypkg
8d36fe22dd checkpoint webif
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@687 2a923420-c742-0410-a762-8d5b09965624
2012-01-22 19:47:47 +00:00
hummypkg
2e0d49537d update jim documentation
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@686 2a923420-c742-0410-a762-8d5b09965624
2012-01-22 19:46:30 +00:00
hummypkg
572e31efcc only show transmission/mediatomb icons if running, fix pkgdev toggle
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@681 2a923420-c742-0410-a762-8d5b09965624
2012-01-21 01:27:06 +00:00
hummypkg
8ec03f2636 add SSL server support
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@679 2a923420-c742-0410-a762-8d5b09965624
2012-01-19 21:15:52 +00:00
hummypkg
95bef6f458 add network name
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@678 2a923420-c742-0410-a762-8d5b09965624
2012-01-18 22:15:20 +00:00
hummypkg
44038eb7a1 fix another size issue
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@677 2a923420-c742-0410-a762-8d5b09965624
2012-01-18 00:07:25 +00:00
hummypkg
ae607a6071 hover over synopsis, fix sizes, fix delete
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@676 2a923420-c742-0410-a762-8d5b09965624
2012-01-18 00:02:55 +00:00
hummypkg
c5de79b214 Streamline deletion. Touch files into dustbin.
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@674 2a923420-c742-0410-a762-8d5b09965624
2012-01-16 22:28:20 +00:00
hummypkg
fa839705fc rename default bin
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@672 2a923420-c742-0410-a762-8d5b09965624
2012-01-14 23:08:54 +00:00
hummypkg
3d75b93f1a allow deletions from inside dustbin
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@666 2a923420-c742-0410-a762-8d5b09965624
2012-01-14 00:29:44 +00:00
hummypkg
602f96e1ac support variable dustbin name
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@663 2a923420-c742-0410-a762-8d5b09965624
2012-01-14 00:12:07 +00:00
hummypkg
3312a76cc6 dynamic dustbin
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@661 2a923420-c742-0410-a762-8d5b09965624
2012-01-13 23:28:48 +00:00
hummypkg
88026872d9 add dustbin folder image
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@658 2a923420-c742-0410-a762-8d5b09965624
2012-01-13 21:34:24 +00:00
hummypkg
ce2dfa8338 update delete system
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@657 2a923420-c742-0410-a762-8d5b09965624
2012-01-13 21:23:03 +00:00
hummypkg
6e2a0f3e2b dustbin support + bugfix
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@648 2a923420-c742-0410-a762-8d5b09965624
2012-01-10 19:51:45 +00:00
hummypkg
ccb513be49 0.8.11
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@639 2a923420-c742-0410-a762-8d5b09965624
2012-01-08 21:10:38 +00:00
hummypkg
84b5cb9506 reinstate delete, add failed recordings
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@638 2a923420-c742-0410-a762-8d5b09965624
2012-01-08 20:54:07 +00:00
hummypkg
337a2add7a verson 0.8.10
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@636 2a923420-c742-0410-a762-8d5b09965624
2012-01-07 22:30:41 +00:00
hummypkg
4706fe6bcd disable delete
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@635 2a923420-c742-0410-a762-8d5b09965624
2012-01-07 22:30:19 +00:00
hummypkg
88d78a7d42 more verbose message
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@634 2a923420-c742-0410-a762-8d5b09965624
2012-01-06 23:57:31 +00:00
hummypkg
b442fef333 upgradable packages come first
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@632 2a923420-c742-0410-a762-8d5b09965624
2012-01-06 23:44:55 +00:00
hummypkg
f771f55017 fix pkg upgrade tab
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@631 2a923420-c742-0410-a762-8d5b09965624
2012-01-06 23:39:15 +00:00
hummypkg
267ba4fade fix avail
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@630 2a923420-c742-0410-a762-8d5b09965624
2012-01-06 23:27:35 +00:00
hummypkg
c2ec779465 allow restart cancel, improve logfile list
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@629 2a923420-c742-0410-a762-8d5b09965624
2012-01-05 22:42:45 +00:00
hummypkg
75b31696c5 dynamic databases
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@600 2a923420-c742-0410-a762-8d5b09965624
2012-01-03 12:12:07 +00:00
hummypkg
f54d162298 update to 0.8.9
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@594 2a923420-c742-0410-a762-8d5b09965624
2011-12-29 01:17:55 +00:00
hummypkg
2a0bcbc81e minor tweaks for IE9
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@593 2a923420-c742-0410-a762-8d5b09965624
2011-12-29 01:17:32 +00:00
hummypkg
4d3183ea61 working copy/paste
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@592 2a923420-c742-0410-a762-8d5b09965624
2011-12-29 00:57:18 +00:00
hummypkg
7c038a1776 checkpoint
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@588 2a923420-c742-0410-a762-8d5b09965624
2011-12-28 21:36:35 +00:00
hummypkg
822de81971 checkpoint - working on clipboard
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@587 2a923420-c742-0410-a762-8d5b09965624
2011-12-28 14:11:10 +00:00
hummypkg
09e71400a2 updates
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@585 2a923420-c742-0410-a762-8d5b09965624
2011-12-27 18:43:40 +00:00
hummypkg
18cafc8c39 handle ar/pad icons
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@576 2a923420-c742-0410-a762-8d5b09965624
2011-12-19 22:52:17 +00:00
hummypkg
593b7dbb89 fix bugs, show AR/Pad status
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@572 2a923420-c742-0410-a762-8d5b09965624
2011-12-19 15:57:03 +00:00
hummypkg
de47e46fe7 fix scheduling problem
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@566 2a923420-c742-0410-a762-8d5b09965624
2011-12-18 21:17:03 +00:00
hummypkg
509c98ee74 update
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@564 2a923420-c742-0410-a762-8d5b09965624
2011-12-14 13:55:58 +00:00
hummypkg
ddb63e68b7 7 days, not 7 hours
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@562 2a923420-c742-0410-a762-8d5b09965624
2011-12-13 22:55:42 +00:00
hummypkg
5de2ba1c37 fix bug
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@561 2a923420-c742-0410-a762-8d5b09965624
2011-12-13 21:00:27 +00:00
hummypkg
43f6281410 add flatten support
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@560 2a923420-c742-0410-a762-8d5b09965624
2011-12-12 23:45:58 +00:00
hummypkg
8166af0f1b fix IE error, fix typo in anacrontab
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@559 2a923420-c742-0410-a762-8d5b09965624
2011-12-12 21:11:08 +00:00
hummypkg
25344c5ff4 add audio extraction
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@554 2a923420-c742-0410-a762-8d5b09965624
2011-12-09 20:33:57 +00:00
hummypkg
b6ce0e3b16 fix sorting of backups
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@553 2a923420-c742-0410-a762-8d5b09965624
2011-12-09 10:57:13 +00:00
hummypkg
a189b524ab automatic daily schedule backups
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@551 2a923420-c742-0410-a762-8d5b09965624
2011-12-09 10:35:21 +00:00
hummypkg
84b00010a8 update icons
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@550 2a923420-c742-0410-a762-8d5b09965624
2011-12-09 10:12:02 +00:00
hummypkg
993958d346 update icons
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@549 2a923420-c742-0410-a762-8d5b09965624
2011-12-09 10:11:41 +00:00
hummypkg
1045587fbd fix error on default browse directory
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@545 2a923420-c742-0410-a762-8d5b09965624
2011-12-06 00:13:41 +00:00
hummypkg
659fd40fe9 update to 0.8.3
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@543 2a923420-c742-0410-a762-8d5b09965624
2011-12-05 21:45:24 +00:00
hummypkg
fcb4615c82 bug fixes
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@542 2a923420-c742-0410-a762-8d5b09965624
2011-12-05 21:44:30 +00:00
hummypkg
8146627f18 join is working, more webif functions
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@538 2a923420-c742-0410-a762-8d5b09965624
2011-11-28 15:24:38 +00:00
hummypkg
99dde5a4a5 update
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@534 2a923420-c742-0410-a762-8d5b09965624
2011-11-27 23:29:14 +00:00
hummypkg
d04d3bdb15 fix autocapitalisation
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@531 2a923420-c742-0410-a762-8d5b09965624
2011-11-24 22:25:28 +00:00
hummypkg
78d49d419a require updated busybox
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@529 2a923420-c742-0410-a762-8d5b09965624
2011-11-19 01:12:36 +00:00
hummypkg
df67594f29 updates for HD cropping
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@514 2a923420-c742-0410-a762-8d5b09965624
2011-11-16 22:55:06 +00:00
hummypkg
8cc2ef3d3f add logfiles/cat and improved images
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@512 2a923420-c742-0410-a762-8d5b09965624
2011-11-16 21:40:53 +00:00
hummypkg
ac93144789 add access control and diagnostics
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@511 2a923420-c742-0410-a762-8d5b09965624
2011-11-12 23:57:19 +00:00
hummypkg
93ebdce4e1 update decrypt
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@510 2a923420-c742-0410-a762-8d5b09965624
2011-11-12 11:12:07 +00:00
hummypkg
9ba7c3dba8 download already decrypted files in the clear
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@509 2a923420-c742-0410-a762-8d5b09965624
2011-11-06 16:34:30 +00:00
hummypkg
436db53de3 fix bugs in crop, improve screen
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@507 2a923420-c742-0410-a762-8d5b09965624
2011-11-04 20:47:27 +00:00
hummypkg
ebe6a0f64c fix bug with duplicate files
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@506 2a923420-c742-0410-a762-8d5b09965624
2011-11-04 13:54:54 +00:00
hummypkg
20b2a7e2dc fix crop progress?
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@505 2a923420-c742-0410-a762-8d5b09965624
2011-11-04 13:38:48 +00:00
hummypkg
258c3b76af updates
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@504 2a923420-c742-0410-a762-8d5b09965624
2011-11-04 13:19:56 +00:00
hummypkg
e87cc8586e add dec icon
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@503 2a923420-c742-0410-a762-8d5b09965624
2011-11-04 01:16:07 +00:00
hummypkg
eace5c5260 add decryption
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@502 2a923420-c742-0410-a762-8d5b09965624
2011-11-04 00:55:13 +00:00
hummypkg
15e33ab751 add crop
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@501 2a923420-c742-0410-a762-8d5b09965624
2011-11-03 23:43:17 +00:00
hummypkg
fa5561d200 updates
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@492 2a923420-c742-0410-a762-8d5b09965624
2011-10-31 13:47:47 +00:00
hummypkg
64da76ed64 css update
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@469 2a923420-c742-0410-a762-8d5b09965624
2011-10-25 21:25:11 +00:00
hummypkg
86424d065c remove portal code
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@464 2a923420-c742-0410-a762-8d5b09965624
2011-10-22 19:17:16 +00:00
hummypkg
2128aded40 update epg extraction
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@462 2a923420-c742-0410-a762-8d5b09965624
2011-10-20 23:24:25 +00:00
hummypkg
218ff8edfb add epg previous method
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@455 2a923420-c742-0410-a762-8d5b09965624
2011-10-13 23:32:46 +00:00
hummypkg
02f7c5aad9 version 0.7.6
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@449 2a923420-c742-0410-a762-8d5b09965624
2011-10-11 19:51:58 +00:00
hummypkg
0fa394eaa1 tweak update all
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@445 2a923420-c742-0410-a762-8d5b09965624
2011-10-07 18:18:45 +00:00
hummypkg
8949bfaa02 update pkg management and add update-all, add reset firmware button
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@443 2a923420-c742-0410-a762-8d5b09965624
2011-10-05 22:07:22 +00:00
hummypkg
c3a41bed59 update to 0.7.4
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@441 2a923420-c742-0410-a762-8d5b09965624
2011-10-04 20:06:56 +00:00
hummypkg
903a4453bb more work on dedup
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@440 2a923420-c742-0410-a762-8d5b09965624
2011-10-04 20:02:59 +00:00
hummypkg
761def1a24 checkpoint
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@439 2a923420-c742-0410-a762-8d5b09965624
2011-10-03 22:47:44 +00:00
hummypkg
e832d05b17 update 0.7.3
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@437 2a923420-c742-0410-a762-8d5b09965624
2011-10-03 09:39:17 +00:00
hummypkg
3b8720c6d4 EPG update
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@436 2a923420-c742-0410-a762-8d5b09965624
2011-10-03 09:37:24 +00:00
hummypkg
2fb26975e2 new db based EPG
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@433 2a923420-c742-0410-a762-8d5b09965624
2011-09-29 23:22:02 +00:00
hummypkg
93f1b67ba1 add epg parser
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@432 2a923420-c742-0410-a762-8d5b09965624
2011-09-29 22:58:13 +00:00
hummypkg
6daa4e28f5 add alternate epg implementations
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@427 2a923420-c742-0410-a762-8d5b09965624
2011-09-27 20:26:36 +00:00
hummypkg
9a72e40c03 improve system busy detection
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@424 2a923420-c742-0410-a762-8d5b09965624
2011-09-26 20:31:17 +00:00
hummypkg
9b2f138fd9 update
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@420 2a923420-c742-0410-a762-8d5b09965624
2011-09-25 18:25:09 +00:00
hummypkg
22db1fbbd6 add icons, fix Mux name
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@418 2a923420-c742-0410-a762-8d5b09965624
2011-09-22 22:29:43 +00:00
hummypkg
a9f4bd4f0b remove iajax code for now
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@417 2a923420-c742-0410-a762-8d5b09965624
2011-09-22 20:27:41 +00:00
hummypkg
31688eaa1c add doctype to headers, fix iajax problem
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@416 2a923420-c742-0410-a762-8d5b09965624
2011-09-22 20:15:26 +00:00
hummypkg
926a49737a add new channel icons, detect MUX
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@413 2a923420-c742-0410-a762-8d5b09965624
2011-09-21 20:21:13 +00:00
hummypkg
fbb64a2e9f fix padding
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@409 2a923420-c742-0410-a762-8d5b09965624
2011-09-19 17:11:18 +00:00
hummypkg
ff322fdc39 update channel icons, support padding
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@407 2a923420-c742-0410-a762-8d5b09965624
2011-09-18 22:19:54 +00:00
hummypkg
d29ed50f7f allow scheduling reminders; flag for reboot after event cancel
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@402 2a923420-c742-0410-a762-8d5b09965624
2011-09-15 23:08:15 +00:00
hummypkg
7113208940 add totop
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@400 2a923420-c742-0410-a762-8d5b09965624
2011-09-14 22:38:22 +00:00
hummypkg
0b566bca72 add mod version to front page
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@397 2a923420-c742-0410-a762-8d5b09965624
2011-09-14 19:59:56 +00:00
hummypkg
f235b05026 fix insert bugs
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@396 2a923420-c742-0410-a762-8d5b09965624
2011-09-14 16:58:11 +00:00
hummypkg
af87e1a66e update
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@390 2a923420-c742-0410-a762-8d5b09965624
2011-09-13 19:16:02 +00:00
hummypkg
ed225ca751 fix split events, check for duplicates
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@385 2a923420-c742-0410-a762-8d5b09965624
2011-09-11 21:59:08 +00:00
hummypkg
cfb12b7da6 move scheduling code to class, support split events
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@384 2a923420-c742-0410-a762-8d5b09965624
2011-09-11 21:23:42 +00:00
hummypkg
1d44efdcdc add channel info page
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@381 2a923420-c742-0410-a762-8d5b09965624
2011-09-09 19:38:37 +00:00
hummypkg
0eb305c32c fix bug in restore
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@372 2a923420-c742-0410-a762-8d5b09965624
2011-09-07 18:07:06 +00:00
hummypkg
6797ee4416 minor tweaks and fix system diskspace
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@364 2a923420-c742-0410-a762-8d5b09965624
2011-09-05 22:23:29 +00:00
hummypkg
510c6c7407 fix reboot busy check
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@354 2a923420-c742-0410-a762-8d5b09965624
2011-09-04 00:18:07 +00:00
hummypkg
f6bf03691d use findhsvc class
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@352 2a923420-c742-0410-a762-8d5b09965624
2011-09-03 23:26:54 +00:00
hummypkg
b378ec1b9c create system class and use it. Expand rsv fetch to include ersvtype
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@344 2a923420-c742-0410-a762-8d5b09965624
2011-09-02 19:50:10 +00:00
hummypkg
df85584352 fix sql queries to use escaped parameters
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@339 2a923420-c742-0410-a762-8d5b09965624
2011-09-01 22:20:53 +00:00
hummypkg
b7310e9765 fix rsvp table and allow scheduling
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@331 2a923420-c742-0410-a762-8d5b09965624
2011-08-31 21:55:39 +00:00
hummypkg
3f02bf8365 increment version to 0.6.6
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@329 2a923420-c742-0410-a762-8d5b09965624
2011-08-31 21:48:15 +00:00
hummypkg
1d6917a782 changes for rs
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@328 2a923420-c742-0410-a762-8d5b09965624
2011-08-31 21:47:43 +00:00
hummypkg
0852c70891 improve scheduling screen
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@311 2a923420-c742-0410-a762-8d5b09965624
2011-08-29 22:34:26 +00:00
hummypkg
981c8312cd version
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@306 2a923420-c742-0410-a762-8d5b09965624
2011-08-25 20:30:48 +00:00
hummypkg
3559a430ab add epg -day and rsv commit when necessary
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@305 2a923420-c742-0410-a762-8d5b09965624
2011-08-25 20:30:13 +00:00
hummypkg
945c6d1b4b use pending table for scheduling
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@296 2a923420-c742-0410-a762-8d5b09965624
2011-08-22 20:55:06 +00:00
hummypkg
81c3ef4f73 support same directory symlinks
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@294 2a923420-c742-0410-a762-8d5b09965624
2011-08-20 21:30:43 +00:00
hummypkg
2c61281b09 skip non-directory links
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@292 2a923420-c742-0410-a762-8d5b09965624
2011-08-20 20:50:40 +00:00
hummypkg
d5b27acd46 fix minor file browser bugs
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@291 2a923420-c742-0410-a762-8d5b09965624
2011-08-20 20:45:23 +00:00
hummypkg
767021557f download decrypted fiels
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@285 2a923420-c742-0410-a762-8d5b09965624
2011-08-13 00:18:42 +00:00
1231 changed files with 20042 additions and 6225 deletions

6
CONTROL/conffiles Normal file
View File

@@ -0,0 +1,6 @@
var/mongoose/html/css/EXTRA.css
var/mongoose/html/favicon.ico
var/mongoose/html/img/fav/57.png
var/mongoose/html/img/fav/72.png
var/mongoose/html/img/fav/114.png
var/mongoose/html/img/fav/144.png

View File

@@ -1,11 +1,10 @@
Package: webif
Priority: optional
Section: web
Version: 0.6.3-3
Version: 1.0.10-6
Architecture: mipsel
Maintainer: af123@hummypkg.org.uk
Depends: mongoose(>=3.0-2),jim(>=0.71-1),jim-sqlite3(>=0.71-1),jim-cgi(>=0.4),jim-oo,jim-pack,service-control,busybox(>=1.18.3-1),lsof,epg(>=1.0.2),hmt(>=1.0.6),ssmtp
Replaces: af123-webif
Conflicts: af123-webif
Suggests: ffmpeg
Depends: webif-channelicons(>=1.1.10),mongoose(>=3.0.11),jim(>=0.75-1),jim-oo,jim-sqlite3(>=0.75),jim-cgi(>=0.7),jim-binary(>=0.75),service-control(>=1.2),busybox(>=1.20.2-1),lsof,epg(>=1.0.13),hmt(>=1.1.14),ssmtp,anacron,trm(>=1.1),openssl-command,nicesplice,id3v2,file,rsvsync(>=1.0.2),webif-charts(>=1.2),stripts(>=1.2.5-3),smartmontools,tmenu(>=1.05),ffmpeg,id3v2,multienv(>=1.6)
Suggests:
Description: An evolving web interface for the Humax.
Tags: http://hummy.tv/forum/threads/4723/

45
CONTROL/postinst Executable file
View File

@@ -0,0 +1,45 @@
#!/bin/sh
echo "Postinstall $*"
export tmpf=/tmp/cronf.$$
# Add cron jobs
crontab=$PKG_ROOT/bin/crontab
if [ -x $crontab ]; then
$crontab -l | grep -v webif/lib/bin/auto > $tmpf
cat $tmpf - << EOM | $crontab -
*/10 * * * * /mod/webif/lib/bin/auto >/dev/null 2>&1
EOM
fi
# Add anacron jobs
ana=$PKG_ROOT/etc/anacrontab
egrep -v 'backup/backup.jim|bin/diskattrs' $ana > $tmpf
cat $tmpf - << EOM > $ana
1 8 sched_backup /mod/webif/cgi-bin/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
/mod/webif/lib/bin/diskattrs
#/mod/webif/lib/bin/resetnew
[ -f $tmpf ] && rm -f $tmpf
exit 0

18
CONTROL/prerm Executable file
View File

@@ -0,0 +1,18 @@
#!/bin/sh
export tmpf=/tmp/cronf.$$
crontab=$PKG_ROOT/bin/crontab
if [ -x $crontab ]; then
$crontab -l | grep -v webif/lib/bin/auto > $tmpf
[ -s $tmpf ] && $crontab $tmpf || $crontab -r
fi
ana=/mod/etc/anacrontab
egrep -v 'backup/backup.jim|bin/diskattrs' $ana > $tmpf
cp $tmpf $ana
[ -f $tmpf ] && rm -f $tmpf
exit 0

1
bin/status Symbolic link
View File

@@ -0,0 +1 @@
../webif/cgi-bin/status.jim

24
etc/init.d/S60parseepg Executable file
View File

@@ -0,0 +1,24 @@
#!/bin/sh
if [ "`cat /etc/model`" = HD ]; then
epg=/media/drive1/epgsavedata
epgdb=/media/drive1/epg.db
else
epg=/mnt/hd1/dvbepg/epg.dat
epgdb=/mnt/hd1/epg.db
fi
case "$1" in
start)
/mod/bin/epg -f $epg sqlitedumpd $epgdb > /tmp/epgd.log 2>&1 &
;;
stop)
killall -q epg
;;
*)
exit 1
;;
esac
exit 0

View File

@@ -1,75 +0,0 @@
#!/mod/bin/jimsh
package require cgi
source /mod/var/mongoose/lib/setup
require rsv.class
set dir /mod/var/backup
puts "Content-Type: text/html"
puts ""
cgi_input
#cgi_dump
if {![dict exists $_cgi file]} {
puts "No filename supplied."
exit
}
set file [file tail [dict get $_cgi file]]
set ffile "/$dir/$file.rbk"
if {[file exists $ffile]} {
puts "Backup file <i>$file</i> already exists."
exit
}
if {[catch { set fd [open $ffile w] } msg]} {
puts "Error creating backup file. - $msg"
exit
}
puts "Backing up scheduled recordings and events..."
set events [rsv list]
set fields [lsort [[rsv] vars]]
#puts $fd "# [join $fields "\t"]"
foreach event $events {
puts " Backing up scheduled event '[$event name]'"
puts -nonewline $fd "event\t"
foreach f $fields {
if {$f eq "aulEventToRecordInfo"} { continue }
puts -nonewline $fd "[$event get $f]\t"
}
puts $fd ""
}
puts "Done."
puts "Backing up channel favourites..."
set grp 0
foreach res [$rsvdb query {
select eFavGroup,
TBL_FAV.eSvcType,
substr(szSvcName, 2) as szSvcName
from TBL_FAV join TBL_SVC using (hSvc)
order by eFavGroup
}] {
if {$res(eFavGroup) != $grp} {
set grp $res(eFavGroup)
puts " Group $grp"
}
puts " $res(szSvcName)"
puts $fd "fav\t$res(eFavGroup)\t$res(eSvcType)\t$res(szSvcName)"
}
puts "Done."
close $fd
rsv cleanup

View File

@@ -1,142 +0,0 @@
#!/mod/bin/jimsh
package require cgi
source /mod/var/mongoose/lib/setup
require rsv.class
set dir /mod/var/backup
puts "Content-Type: text/html"
puts ""
cgi_input
#cgi_dump
#set _cgi(restore_file) "backup-2011-Jul-09-20:37"
if {![dict exists $_cgi restore_file]} {
puts "No filename supplied."
exit
}
set file [file tail [dict get $_cgi restore_file]]
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 backup file. - $msg"
exit
}
proc findhsvc {channel} {
global rsvdb
set hsvc [$rsvdb query "
select hSvc
from channel.TBL_SVC
where szSvcName = '$channel'
or szSvcname = '\025$channel'
limit 1
"]
if {[llength $hsvc] == 1} {
return [lindex [lindex $hsvc 0] 1]
} else {
return 0
}
}
puts "Restoring scheduled events..."
$rsvdb query {begin transaction;}
$rsvdb query {delete from TBL_RESERVATION;}
set fields [lsort [[rsv] vars]]
set data [split [read $fd] "\n"]
foreach line $data {
set vals [split $line "\t"]
if {[lindex $vals 0] ne "event"} { continue }
set vars {}
set i 0
foreach f $fields {
if {$f eq "aulEventToRecordInfo"} { continue }
incr i
lappend vars $f [lindex $vals $i]
}
set rsv [rsv new $vars]
# Need to fix up channel and CRID mappings in case something has
# changed during a channel scan.
puts " Restoring [$rsv name]"
set bad 0
# First, the service number
set ohsvc [$rsv get hsvc]
if {$ohsvc > 0} {
set hsvc [$rsv fix_hsvc]
if {$hsvc == 0} {
puts " Cannot find channel, restore failed."
set bad 1
} elseif {$hsvc != $ohsvc} {
puts -nonewline " Service number has "
puts "changed $ohsvc -> $hsvc, fixing."
} else {
puts " No change in channel service."
}
}
if {!$bad} { $rsv insert }
}
$rsvdb query {commit transaction;}
puts "Restoring favourite channels..."
$rsvdb query {begin transaction;}
$rsvdb query {delete from channel.TBL_FAV}
set grp 0
foreach line $data {
set vals [split $line "\t"]
if {[lindex $vals 0] ne "fav"} { continue }
set group [lindex $vals 1]
set type [lindex $vals 2]
set chan [lindex $vals 3]
set hsvc [findhsvc $chan]
if {$grp != $group} {
set grp $group
puts " Group $grp"
}
puts " $chan"
if {!$hsvc} {
puts " Cannot map channel name to service."
continue
}
set query "
insert into channel.TBL_FAV(hSvc, eFavGroup, eSvcType)
values($hsvc, $group, $type);
"
$rsvdb query $query
}
$rsvdb query {commit transaction;}
close [open /tmp/.restartpending w]
close $fd
rsv cleanup

View File

@@ -1,236 +0,0 @@
#!/mod/bin/jimsh
package require cgi
source /mod/var/mongoose/lib/setup
require ts.class pretty_size
puts "Content-Type: text/html"
puts ""
set ignore {.nts .thm .hmt .hmi}
set include {.ts .avi .mpg .mpeg .wmv .mkv .mp3 .mp4 .mov}
cgi_input
#cgi_dump
#set env(REQUEST_URI) ''
#set _cgi(dir) "/media/My Video/Chuggington"
proc directory {file bfile} {
regsub -all " +" $bfile "" tbfile
puts "<div class=va>"
puts "<a href=$::env(REQUEST_URI)?dir=[cgi_quote_url $file]>"
puts "<img border=0 class=va id=\"img$tbfile\"
src=/images/711_1_09_Media_Folder.png>"
puts "$bfile</a><span class=filesize id=\"$tbfile\">
</span></div>"
}
proc entry {file} {{i 0}} {
set bfile [file tail $file]
if {[string index $bfile 0] == "\025"} {
set bfile [string range $bfile 1 end]
}
if [file isdirectory "$file"] {
directory $file $bfile
continue
}
set ext [file extension $file]
if {$ext in $::ignore || $ext ni $::include} { continue }
file stat $file st
set sz [pretty_size $st(size)]
set base [file rootname $file]
if {$ext eq ".ts" && [file exists "${base}.nts"]} {
set type ts
set ts [ts fetch $file 1]
set img Video_TS
} else {
set type gen
set ts 0
set img Video_Other
}
puts "
<div class=\"va bf\" id=[incr i]>
<a class=bf file=\"$file\" type=$type href=#>
"
set new 0
if {$type eq "ts"} {
if {[$ts flag "New"] > 0} { set new 1 }
} else {
if {![file exists "[file rootname $file].hmi"]} { set new 1 }
}
if {$new} { append img _New }
puts "<img class=va border=0 src=/img/$img.png>"
puts "
$bfile
</a>
"
# Size
puts "<span class=filesize> ($sz) </span>"
# Icons
set locked 0
set encd 0
set def unknown
if {$type eq "ts"} {
# 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"
}
puts "<img class=va src=/images/$img.png height=21>"
# Locked
if {[$ts flag "Locked"] > 0} {
set locked 1
puts "<img class=va src=/images/178_1_00_Icon_Lock.png
height=21>"
}
# Encrypted
if {[$ts flag "Encrypted"] > 0} {
set encd 1
puts "<img class=va
src=/images/749_1_26_Video_Encryption.png
height=21>"
}
# Guidance
if {[$ts flag "Guidance"] > 0} {
puts "<img class=va
src=/images/174_1_26_GuidancePolicy.png
height=21>"
}
}
# Opt+ button
puts "
<a href=#>
<img class=\"opt va\" border=0 width=45 type=$type did=$i
locked=$locked encd=$encd def=$def new=$new
src=/images/181_1_00_Help5_OPT_Plus.png>
</a>
<div class=\"results blood\" style=\"margin: 0 0 0 5em\"></div>
"
puts "</div>"
}
if {[dict exists $_cgi dir]} {
set dir [dict get $_cgi dir]
} else {
set dir "/media/My Video"
}
######################################################################
# Render web page
header
puts {
<link href=/css/jquery.contextMenu.css rel=stylesheet type=text/css />
<script type="text/javascript" src="/js/jquery.contextMenu.js"></script>
<ul id=optmenu class=contextMenu>
<li><a href=#delete>Delete</a></li>
<li><a href=#lock>Toggle Lock</a></li>
<li><a href=#enc>Toggle Enc</a></li>
<li><a href=#new>Toggle New</a></li>
<li><a href=#rename>Rename</a></li>
<li><a href=#download>Download</a></li>
</ul>
<div id=renameform title="Rename media file" style="display: none">
<form id=renameform_form>
<input type=hidden name="renameorig" id="renameorig" value="">
<input type=hidden name="titleorig" id="titleorig" value="">
<table border=0>
<tr>
<th>
<label for="rename">
<b>New Filename</b>
</label>
</th>
<td>
<input type=text name="rename" id="rename"
value="" size=70 maxlength=255
class="text ui-widget-content ui-corner-all">
</td>
</tr>
<tr style="display: none" class=tstype>
<th>
<label for="renametitle" style="padding-top: 0.5em">
<b>New EPG Title</b>
</label>
</th>
<td>
<input type=text name="renametitle" id="renametitle"
value="" size=70 maxlength=48
class="text ui-widget-content ui-corner-all">
</td>
</tr>
<tr style="display: none" class=tstype>
<td colspan=2 id=synopsis style="font-style: italic"></td>
</tr>
</table>
</form>
</div>
<div id=dialogue></div>
<div id=confirm title="Confirmation Required"></div>
<script type=text/javascript src=/cgi-bin/browse/browse.js></script>
}
puts "<span style=\"display:none\" id=dir>$dir</span>"
# Breadcrumb path
puts "
<fieldset style=\"margin: 1em\">
<legend style=\"font-size: 1.5em; padding: 0 0.5em 0.5em 0.5em;\">
"
set stub ""
foreach part [split $dir /] {
if {$stub eq "/"} { set name $part } else { set name "/$part" }
append stub $name
puts "<a href=$env(REQUEST_URI)?dir=[cgi_quote_url $stub]>$name</a>
}
puts "<span class=filesize id=dirsize></span>"
puts "</legend>"
# Parent directory
set parent [join [lrange [split $dir /] 0 end-1] /]
if {$parent ne ""} {
puts "
<div class=va>
<a href=$env(REQUEST_URI)?dir=[cgi_quote_url $parent]>
<img border=0 src=/images/711_3_09_Media_Folder_UP.png class=va>
\[parent directory\]</a>
</div>
"
}
# Strip double slashes
regsub -all -- {\/+} "$dir/*" "/" dir
foreach file [lsort [glob -nocomplain "$dir"]] {
entry $file
}
puts "</fieldset>"
footer

View File

@@ -1,287 +0,0 @@
function epginfo_callback(data, status, xhr)
{
var width = 85;
if (status != 'success')
return;
//console.log(status);
//console.dir(data);
$('#titleorig').val(data.title);
$('#renametitle').val(data.title);
if (data.synopsis.length > width)
data.synopsis = data.synopsis.substring(0, width) + '...';
$('#synopsis').html(data.synopsis);
$('tr.tstype').show('slow');
}
function insert_folder_size(folder, size)
{
folder = folder.replace(/ /g, '');
folder = folder.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1');
//console.log("Folder: (%s) = (%s)", folder, size);
if (folder == "")
$('#dirsize').text(' (' + size + 'iB)');
else
$('#' + folder).text(' (' + size + 'iB)');
}
function folder_size_callback(data, status, xhr)
{
//console.log("Status: %s", status);
//console.dir(data);
$.each(data, insert_folder_size);
}
function set_folder_new(folder, cnt)
{
folder = folder.replace(/ /g, '');
folder = folder.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1');
//console.log("Folder: (%s) = (%s)", folder, cnt);
$('#img' + folder).attr('src', '/img/Folder_New.png');
}
function new_folder_callback(data, status, xhr)
{
//console.log("Status: %s", status);
//console.dir(data);
$.each(data, set_folder_new);
}
function delete_callback(file, type, id)
{
var el = 'div.bf#' + id;
var results = el + ' .results';
var url = '/cgi-bin/browse/delete.jim?file=' +
encodeURIComponent(file) + '&type=' + type;
$(results).load(url, function() {
$(el).delay(3000).slideUp(300, function() {
$(el).remove();
});
});
}
function lock_callback(file, type, id)
{
var url = '/cgi-bin/browse/lock.jim?file=' + encodeURIComponent(file);
$.get(url, function() { window.location.reload(true); });
}
function enc_callback(file, type, id)
{
var url = '/cgi-bin/browse/enc.jim?file=' + encodeURIComponent(file);
$.get(url, function() { window.location.reload(true); });
}
function new_callback(file, type, id)
{
var url = '/cgi-bin/browse/new.jim?file=' + encodeURIComponent(file);
$.get(url, function() { window.location.reload(true); });
}
function rename_submit()
{
var s = $('#renameform_form').serialize();
$.get('/cgi-bin/browse/rename.jim?' + s,
function() { window.location.reload(true); });
}
var $confirm; // Populated after DOM is loaded.
function confirm_action(action, callback, file, type, id)
{
var bfile = file.replace(/.*\/|\.[^.]*$/g, '');
$confirm.dialog('option', 'buttons', {
'Yes': function() { $(this).dialog('close');
callback(file, type, id); },
'No': function() {$(this).dialog('close');}
});
$('#confirm').empty().html(
'Are you sure you wish to ' + action + '<br>' +
'<i>' + bfile + '</i> ?'
);
$confirm.dialog('open');
}
function preparemenu(el, menu)
{
if (el.attr('type') == 'ts')
{
if (el.attr('def') == 'HD')
{
$('#optmenu').enableContextMenuItems('#enc');
if (el.attr('encd') == 1)
$(menu).changeContextMenuItem('#enc',
'Remove ENC');
else
$(menu).changeContextMenuItem('#enc',
'Set ENC');
}
else
$('#optmenu').disableContextMenuItems('#enc');
$('#optmenu').enableContextMenuItems('#new');
if (el.attr('new') == 1)
$(menu).changeContextMenuItem('#new', 'Mark watched');
else
$(menu).changeContextMenuItem('#new', 'Mark new');
$('#optmenu').enableContextMenuItems('#lock');
if (el.attr('locked') == 1)
{
$(menu).changeContextMenuItem('#lock', 'Unlock');
$('#optmenu').disableContextMenuItems('#delete');
}
else
{
$(menu).changeContextMenuItem('#lock', 'Lock');
$('#optmenu').enableContextMenuItems('#delete');
}
}
else
{
$('#optmenu').enableContextMenuItems('#delete');
$('#optmenu').disableContextMenuItems('#lock');
$('#optmenu').disableContextMenuItems('#enc');
$('#optmenu').disableContextMenuItems('#new');
}
}
$(document).ready(function() {
var menuclick = function(action, el, pos)
{
var file = $(el).parent().prevAll('a.bf').last().attr('file');
var bfile = file.replace(/.*\/|\.[^.]*$/g, '');
bfile = bfile.replace(/[\x00-\x1f]+/g, '');
var type = $(el).attr('type');
var id = $(el).attr('did');
switch (action)
{
case 'delete':
confirm_action('delete', delete_callback, file,
type, id);
break;
case 'lock':
confirm_action('change the lock on', lock_callback,
file, type, id);
break;
case 'enc':
confirm_action('change the ENC flag on', enc_callback,
file, type, id);
break;
case 'new':
confirm_action('change the New flag on', new_callback,
file, type, id);
break;
case 'rename':
$('#rename').val(bfile);
$('#renameorig').val(file);
$('#titleorig').val('');
$('#renametitle').val('');
$('#synopsis').val('');
$('tr.tstype').css('display', 'none');
if (type == 'ts')
{
$.getJSON('/cgi-bin/browse/epgtitle.jim?file=' +
encodeURIComponent(file), epginfo_callback);
}
$('#renameform').dialog('open');
break;
case 'download':
window.location.href = '/cgi-bin/browse/download.jim?file=' +
encodeURIComponent(file);
break;
default:
alert('Unhandled action: ' + action);
break;
}
};
// Bind context menu to opt+ image
$('img.opt').contextMenu(
{
menu: 'optmenu',
leftButton: true,
beforeShow: preparemenu
},
menuclick
);
// Disable items which are not yet implemented.
$('#optmenu').disableContextMenuItems('#title');
// Create reusable dialogue.
var $dialog = $('#dialogue').dialog({
title: "Media Details",
modal: false, autoOpen: false,
height: 600, width: 700,
show: 'scale', hide: 'fade',
draggable: true, resizable: true,
buttons: {
"Close": function() {
$(this).dialog('close');
}
},
close: function(e,u) { $('#dialogue').empty().html(
'<img src="/img/loading.gif" alt="loading">'); }
});
// Bind dialogue open to filenames.
$('a.bf').click(function(e) {
e.preventDefault();
var file = $(this).attr('file');
var type = $(this).attr('type');
var url = '/cgi-bin/browse/file.jim?file=' +
encodeURIComponent(file) + '&type=' + type;
$('#dialogue').load(url);
$dialog.dialog('open');
});
$('#renameform').dialog({
autoOpen: false,
height: 'auto', width: 'auto',
modal: true,
buttons: {
"Update": rename_submit,
"Close": function() {
$(this).dialog('close');
}
},
close: function() { $('#rename').val(''); }
});
// Create re-usable confirmation dialogue.
$confirm = $('#confirm').dialog({
modal: true, autoOpen: false,
height: 160, width: 500,
show: 'fade', hide: 'fade',
draggable: false, resizable: false
});
var dir = $('#dir').text();
// Load folder sizes
$.getJSON('/cgi-bin/browse/sizes.jim?dir=' + encodeURIComponent(dir),
folder_size_callback);
// Flag folders with unwatched items
$.getJSON('/cgi-bin/browse/newdir.jim?dir=' + encodeURIComponent(dir),
new_folder_callback);
});

View File

@@ -1,27 +0,0 @@
#!/mod/bin/jimsh
package require cgi
source /mod/var/mongoose/lib/ts.class
puts "Content-Type: text/html"
puts ""
cgi_input
#cgi_dump
set file [dict get $_cgi file]
set type [dict get $_cgi type]
if {$type eq "ts"} {
set ts [ts fetch $file]
if {[$ts delete]} {
puts "Successfully deleted $file."
} else {
puts "Problem deleting $file, [$ts get error]"
}
exit
}
file delete $file
puts "Successfully deleted $file."

View File

@@ -1,22 +0,0 @@
#!/mod/bin/jimsh
package require cgi
source /mod/var/mongoose/lib/ts.class
puts "Content-Type: application/json"
puts ""
cgi_input
#cgi_dump
#set _cgi(file) "/media/My Video/Doctor Who/6.13._The_Almost_People.ts"
if {![dict exists $_cgi file]} { exit }
set file [dict get $_cgi file]
set ts [ts fetch $file]
puts "{"
puts "\"title\" : \"[$ts get title]\","
puts "\"synopsis\" : \"[$ts get synopsis]\""
puts "}"

View File

@@ -1,17 +0,0 @@
#!/mod/bin/jimsh
package require cgi
puts "Content-Type: text/html"
puts ""
cgi_input
#cgi_dump
if [file exists /mod/bin/ffmpeg] {
set file [dict get $_cgi file]
puts [exec /mod/var/mongoose/lib/ffmpeg -i $file]
} else {
puts "Install ffmpeg package for more information..."
}

View File

@@ -1,115 +0,0 @@
#!/mod/bin/jimsh
package require cgi
source /mod/var/mongoose/lib/pretty_size
puts "Content-Type: text/html"
puts ""
cgi_input
#cgi_dump
#set _cgi(file) "/media/My Video/Dangermouse/Series 1/01_rogue_robots.avi"
if {![dict exists $_cgi file]} { exit }
set file [dict get $_cgi file]
set type [dict get $_cgi type]
file stat $file st
set sz [pretty_size $st(size)]
if {$type eq "ts"} {
source /mod/var/mongoose/lib/epg.class
source /mod/var/mongoose/lib/ts.class
set ts [ts fetch $file]
puts "
<table class=keyval>
<tr>
<th>Title</th>
<td>[$ts get title]</td>
</tr><tr>
<th>Synopsis</th>
<td>[$ts get synopsis]</td>
</tr><tr>
"
if {[$ts flag "Guidance"] > 0} {
puts "
<th>Guidance</th>
<td><img class=va
src=/images/174_1_26_GuidancePolicy.png height=21>
[$ts get guidance]
</td>
</tr><tr>
"
}
puts "
<th>Definition</th>
<td>
"
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><tr>
<th>Start Time</th>
<td>"
puts [clock format [$ts get start] -format "%c %Z"]
puts "</td>
</tr><tr>
<th>End Time</th>
<td>"
puts [clock format [$ts get end] -format "%c %Z"]
puts "</td>
</tr><tr>
<th>Duration</th>
<td>[$ts duration] minute(s).</td>
</tr><tr>
<th>Size</th>
<td>$sz</td>
</tr><tr>
<th>Flags</th>
<td>[$ts get flags]</td>
</tr>
</table>
"
exit
}
# Otherwise, for a general file.
puts "
<table class=keyval>
<tr>
<th>File</th>
<td>$file</td>
</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 "/cgi-bin/browse/ffmpeg.jim?file=[cgi_quote_url $file]"
puts { <script type="text/javascript"> }
puts "var url = \"$url\";"
puts {
$('#ffmpeg').load(url);
</script>
}

View File

@@ -1,53 +0,0 @@
#!/mod/bin/jimsh
package require cgi
source /mod/var/mongoose/lib/ts.class
puts "Content-Type: text/html"
puts ""
cgi_input
#cgi_dump
#renameorig
#titleorig
#rename
#renametitle
#set _cgi(renameorig) "/media/My Video/The Walking Dead/The Walking Dead_20110521_2201.ts"
#set _cgi(rename) "Last Episode"
if {![dict exists $_cgi renameorig]} { exit }
set file [dict get $_cgi renameorig]
set newfile [dict get $_cgi rename]
if {[string length [string trim $newfile]] == 0 || $file eq $newfile} {
set newfile ""
}
if {[file isdirectory $file]} {
#puts "Directory."
if {$newfile ne ""} {
set dir [file dirname $file]
set newfile "${dir}/${newfile}"
file rename $file $newfile
}
} elseif {[set ts [ts fetch $file]] != 0} {
#puts "TS file."
catch {
set title [dict get $_cgi renametitle]
set titleorig [dict get $_cgi titleorig]
if {[string length [string trim $title]] > 0 &&
$title ne $titleorig} {
$ts settitle $title
}
}
if {$newfile ne ""} { ts renamegroup $file $newfile }
} else {
#puts "Normal file."
if {$newfile ne ""} { ts renamegroup $file $newfile }
}

View File

@@ -1,26 +0,0 @@
#!/mod/bin/jimsh
package require cgi
puts "Content-Type: application/json"
puts ""
cgi_input
#cgi_dump
#set _cgi(dir) "/media/My Video"
set dir [dict get $_cgi dir]
#9.4G /media/My Video/Archive
#1.4G /media/My Video/CSI_ Crime Scene Investigation
puts "{"
foreach line [split [exec /mod/bin/busybox/du -h "$dir/"] "\n"] {
set fields [split $line "\t"]
set size [lindex $fields 0]
set node [lindex [split [lindex $fields 1] /] end]
puts "\"$node\" : \"$size\","
}
puts "\"dummy\" : \"\""
puts "}"

23
var/mongoose/cgi-bin/cat.jim Executable file
View File

@@ -0,0 +1,23 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require system.class pretty_size
cgi_input
#cgi_dump
set file [cgi_get file "-"]
if {$file eq "-"} { exit }
httpheader "text/plain"
if {![file exists $file]} {
puts ">>> File $file does not exist.\r\n"
} else {
puts ">>> Contents of $file [pretty_size [file size $file]]\r\n"
set fp [open $file r]
puts [read $fp]
close $fp
}

View File

@@ -0,0 +1,18 @@
#!/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

144
var/mongoose/cgi-bin/channel.jim Executable file
View File

@@ -0,0 +1,144 @@
#!/mod/bin/jimsh
package require cgi
package require sqlite3
source /mod/webif/lib/setup
require altrow progressbar epg.class
header
proc f2c {frequency} {
set ch int($((($frequency / 1000) - 303.25) / 8))
return [expr int($ch)]
}
if {[catch {set db [sqlite3.open /var/lib/humaxtv/channel.db]} msg]} {
puts "Error opening channel database: $msg"
exit
}
puts "
<button id=expandall>Expand All</button>
<button id=collapseall>Collapse All</button>
<br><br>
<table class=borders>
<tr>
<th>Channel</th>
<th>Frequency</th>
<th>Signal Strength</th>
<th>Signal Quality</th>
<th>Network</th>
<th>Mux</th>
<th>Type</th>
<th>Channels</th>
<th>&gt;799</th>
</tr>
"
foreach tw [$db query {
select tsIdx, szNetName, usTsID, ulFrequency, ucLevel,
ucQuality, eTransMode
from TBL_TS join TBL_NET using (netIdx)
order by ulFrequency
}] {
lassign $tw \
x tsIdx x netName x usTsID x ulFrequency x ucLevel x ucQuality \
x eTransMode
puts "
<tr class=odd>
<td>[f2c $ulFrequency]</td>
<td>[expr $ulFrequency / 1000.0] MHz</td>
"
puts "<td>[progressbar $ucLevel]</td>"
puts "<td>[progressbar $ucQuality]</td>"
puts "<td>[string range $netName 3 end]</td>"
set channels [$db query {
select usLcn, szSvcName, szPrvName, aucDefaultAuthority
from TBL_SVC left join TBL_PRV using (prvIdx)
where tsIdx = %s
order by usLcn
} $tsIdx]
set mux "Local"
set ehs 0
foreach chan $channels {
lassign $chan x lcn x name
set name [string range $name 1 end]
if {$lcn >= 800} { incr ehs }
switch $name {
"BBC THREE" { set mux "PSB1/BBC A" }
"ITV1" { set mux "PSB2/D3&amp;4" }
"ITV" { set mux "PSB2/D3&amp;4" }
"BBC ONE HD" { set mux "PSB3/BBC B" }
"ITV3" { set mux "COM4/SDN" }
"Dave" { set mux "COM5/ARQ A" }
"Film4+1" { set mux "COM6/ARQ B" }
"BBC NEWS HD" { set mux "COM7/ARQ C" }
"Movies4Men" { set mux "Local" }
}
}
puts "<td>$mux</td>"
if {$eTransMode == 2} {
puts "<td>DVB-T (SD)</td>"
} else {
puts "<td class=blood>DVB-T2 (HD)</td>"
}
puts "<td>[llength $channels]
<a class=mchan ts=$tsIdx href=#>
<img border=0 height=14
src=/images/421_1_00_CH_Title_2R_Arrow.png>
view
</a></td>"
puts "<td>$ehs</th>"
puts "</tr>"
puts "<tr id=mchan_$tsIdx class=mchan style=\"display: none\">
<td colspan=5>"
puts "<table style=\"margin-left: 5em\">"
puts "<tr>
<th colspan=3>Channel</th>
<th>Provider</th>
<th>Authority</th>
</tr>"
altrow reset
foreach chan $channels {
lassign $chan x lcn x name x prv x auth
set name [string range $name 1 end]
set prv [string range $prv 3 end]
altrow
puts "<td class=va>"
puts "[epg channelicon $name 50]</td>
<td>$lcn</td><td>$name</td>"
puts "</td><td>"
puts $prv
puts "</td><td>"
puts $auth
puts "</td>"
puts "</tr>"
}
puts "</table>"
puts "</td></tr>"
}
puts "</table>"
puts {
<script type=text/javascript>
$(document).ready(function() {
$('a.mchan').click(function(e) {
e.preventDefault();
$('#mchan_' + $(this).attr('ts')).slideToggle('slow');
});
$('#expandall').button().click(function() {
$('tr.mchan').slideDown('slow');
});
$('#collapseall').button().click(function() {
$('tr.mchan').slideUp('slow');
});
});
</script>
}

View File

@@ -2,17 +2,15 @@
package require cgi
package require sqlite3
source /mod/var/mongoose/lib/setup
source /mod/webif/lib/setup
require altrow
puts "Content-Type: text/html"
puts ""
set databases [glob /var/lib/humaxtv/*.db]
lappend databases {*}[glob /mod/etc/*.db]
lappend databases "/mnt/hd2/dms_cds.db"
header
cgi_input
#cgi_dump
set ftab [cgi_get tab]
set fdb [cgi_get db]
@@ -21,7 +19,7 @@ if {$fdb != 0} {
}
proc db_info {db_file} {
global _cgi fdb ftab
global fdb ftab
if {$fdb != 0 && [file tail $db_file] ne $fdb} { return }
if {![file exists $db_file]} { return }
@@ -62,10 +60,16 @@ proc db_info {db_file} {
$db close
}
db_info /var/lib/humaxtv/rsv.db
db_info /var/lib/humaxtv/setup.db
db_info /var/lib/humaxtv/channel.db
db_info /mnt/hd2/dms_cds.db
if {$fdb == 0} {
puts "Please choose database to view:<ul>"
foreach db $databases {
puts "<li><a href=$::env(SCRIPT_NAME)?db=[file tail $db]>
$db</a></li>"
}
puts "</ul>"
} else {
foreach db $databases { db_info $db }
}
footer

9
var/mongoose/cgi-bin/env.jim Executable file
View File

@@ -0,0 +1,9 @@
#!/mod/bin/jimsh
source /mod/webif/lib/setup
httpheader "text/plain"
foreach f [dict keys $env] {
puts "$f = $env($f)"
}

23
var/mongoose/cgi-bin/epg/db.jim Executable file
View File

@@ -0,0 +1,23 @@
#!/bin/sh
PATH=$PATH:/mod/bin export PATH
echo "Content-Type: text/plain"
echo ""
[ -n "$QUERY_STRING" ] && data="${QUERY_STRING##*=}" || data=epg
case $data in
channels)
sqlite3 -header -batch -separator ' ' \
/var/lib/humaxtv/channel.db '
select * from TBL_SVC;
'
;;
*) /mod/bin/epg -p dump ;;
esac
exit 0

View File

@@ -0,0 +1,27 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require epg.class
header
set service [cgi_get service]
set event [cgi_get event]
set raw [cgi_get raw]
puts "<pre>"
if { $raw == 0 } {
puts [epg exec dump -raw 1 -service $service -event $event]
puts "<a href=$env(SCRIPT_NAME)?$env(QUERY_STRING)&raw=1>
Click here for extended dump</a>"
} else {
puts [epg exec dumpraw -raw 1 -service $service -event $event]
}
puts "</pre>"
epg cleanup
footer

View File

@@ -1,38 +1,26 @@
#!/mod/bin/jimsh
package require cgi
source /mod/var/mongoose/lib/setup
require epg.class
source /mod/webif/lib/setup
require epg.class system.class settings.class
puts "Content-Type: text/html"
puts ""
set irinst [system pkginst ir]
cgi_input
#cgi_dump
httpheader
set service 0
catch { set service [dict get $_cgi service] }
set event 0
catch { set event [dict get $_cgi event] }
if {! [dict exists $_cgi bare]} { header }
#set service 8448
#set event 30843
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]
$record get_channel_info
set others [$record othertimes]
puts {
<style type=text/css>
font.also
{
font-size: 0.9em;
font-style: italic;
color: #333;
background: transparent;
}
</style>
if {[[settings] chanchangenc]} {
puts { <script type=text/javascript src=/js/chanchangenc.js></script> }
} else {
jqplugin confirmAction
puts { <script type=text/javascript src=/js/chanchange.js></script> }
}
puts "
@@ -96,7 +84,7 @@ if {[$record get event_crid] != ""} {
puts "
<tr>
<th>CRID</th><td>
<a href=/cgi-bin/epg_search.jim?crid=[$record get event_crid]>
<a href=/cgi-bin/epg/search.jim?crid=[$record get event_crid]>
<img border=0 height=14
src=/images/421_1_00_CH_Title_2R_Arrow.png>
[$record get channel_crid][$record get event_crid]
@@ -110,7 +98,7 @@ if {[$record get series_crid] != ""} {
puts "
<tr>
<th nowrap>Series CRID</th><td>
<a href=/cgi-bin/epg_search.jim?scrid=[$record get series_crid]>
<a href=/cgi-bin/epg/search.jim?scrid=[$record get series_crid]>
<img border=0 height=14
src=/images/421_1_00_CH_Title_2R_Arrow.png>
[$record get channel_crid][$record get series_crid]
@@ -124,7 +112,7 @@ if {[$record get rec_crid] != ""} {
set rec [$record recommended]
if {$rec != ""} {
puts "<tr><th>Recommends</th><td>
<a href=/cgi-bin/epg_search.jim?crid=[$rec get event_crid]>
<a href=/cgi-bin/epg/search.jim?crid=[$rec get event_crid]>
<img border=0 height=14
src=/images/421_1_00_CH_Title_2R_Arrow.png>
[$rec get name]
@@ -137,13 +125,20 @@ if {[$record get rec_crid] != ""} {
puts "
<tr>
<td colspan=2 valign=top>
[$record channel_icon 70]
"
if {$irinst} {
puts "<a class=chanchange chan=[$record get channel_num] href=#>"
}
puts [$record channel_icon 70]
if {$irinst} { puts "</a>" }
puts "
[join [$record icon_set] "&nbsp;"]
</td>
</tr>
</table>
<a class=footnote href=/cgi-bin/epg_dump.jim?service=[$record get service_id]&event=[$record get event_id]&raw=1>
<a class=footnote href=/cgi-bin/epg/dump.jim?service=[$record get service_id]&event=[$record get event_id]&raw=1>
<img border=0 src=/images/532_1_00_Find_Path_Arrow.png>
Show raw EPG info
</a>
@@ -152,5 +147,5 @@ puts "
puts "<div id=epginfo_extra class=footnote></div>"
epg cleanup
if {! [dict exists $_cgi bare]} { footer }
if {![cgi_exists bare]} footer

View File

@@ -0,0 +1,38 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require epg.class system.class
httpheader
set service [cgi_get service -]
set event [cgi_get event -]
set type [cgi_get type 1]
if {$service eq "-" || $event eq "-"} {
puts "Error, insufficient parameters passed."
exit
}
set event [lindex [epg fetch dump -service $service -event $event] 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]} {
puts "Error encountered while scheduling: <i>$msg</i>"
} else {
puts "Successfully scheduled <i>[$event get name]</i>"
system restartpending
}
epg cleanup

View File

@@ -1,28 +1,20 @@
#!/mod/bin/jimsh
package require cgi
source /mod/var/mongoose/lib/setup
require epg.class spinner.class altrow
puts "Content-Type: text/html"
puts ""
source /mod/webif/lib/setup
require epg.class spinner.class altrow settings.class
jqplugin highlight
header
puts "<script type=text/javascript src=/js/jquery.highlight.js></script>"
require totop
cgi_input
#cgi_dump
set ct [cgi_get ct 0]
set crid [cgi_get crid ""]
set scrid [cgi_get scrid ""]
set ct 0
catch { set ct [dict get $_cgi ct] }
set crid ""
catch { set crid [dict get $_cgi crid] }
set scrid ""
catch { set scrid [dict get $_cgi scrid] }
if {[dict exists $_cgi term]} {
set lterm [dict get $_cgi term]
if {[cgi_exists term]} {
set lterm [cgi_get term]
if {[string match {CRID:*} $lterm]} {
set crid [string range $lterm 5 end]
@@ -45,25 +37,30 @@ require epg_search
require epg_popup
#set _cgi [dict create term "doctor who"]
#set env(REQUEST_URI) "test"
set cmd "search"
if {$searchfull} { set cmd "searchall" }
set dedup 0
if {$ct > 0 } {
set records [epg fetch dump -type $ct]
if {[[settings] genrededup]} { set dedup 1 }
} elseif {$crid ne ""} {
set records [epg fetch dump -crid $crid]
} elseif {$scrid ne ""} {
set records [epg fetch dump -scrid $scrid]
} elseif {$searchterm ne ""} {
set records [epg fetch $cmd -extra $searchterm]
set records [epg dbfetch $cmd -term $searchterm]
} else {
set records {}
}
set favlist [epg favlist]
set s [settings]
if {[$s service_style] eq "standard"} {
set surl xservice
} else {
set surl service
}
if {[llength $records] > 0} {
puts {
@@ -88,8 +85,17 @@ proc rsort {v1 v2} {
return -1
}
set seen {}
set i 0
foreach record [lsort -command rsort $records] {
set ename [$record get name]
if {$ename eq ""} continue
if {$dedup} {
if {$ename in $seen} continue
lappend seen $ename
}
if {$favlist != "" && [$record get service_id] ni $favlist} {
continue
}
@@ -106,7 +112,7 @@ foreach record [lsort -command rsort $records] {
puts "<td>[$record get channel_num]</td>"
puts "<td>[$record channel_icon 50]</td>"
puts "<td nowrap>
<a href=/cgi-bin/epg_service.jim?service=[$record get service_id]>
<a href=/epg/$surl.jim?service=[$record get service_id]>
[$record get channel_name]
</a></td>"
puts [$record cell]

View File

@@ -1,37 +0,0 @@
#!/mod/bin/jimsh
package require cgi
source /mod/var/mongoose/lib/setup
require epg.class
puts "Content-Type: text/html"
puts ""
header
cgi_input
#cgi_dump
set service 0
set service 4351
catch { set service [dict get $_cgi service] }
set event 0
catch { set event [dict get $_cgi event] }
set raw 0
catch { set raw [dict get $_cgi raw] }
puts "<pre>"
if { $raw == 0 } {
puts [epg exec dump -raw 1 -service $service -event $event]
puts "<a href=$env(REQUEST_URI)?$env(QUERY_STRING)&raw=1>
Click here for extended dump</a>"
} else {
puts [epg exec dumpraw -raw 1 -service $service -event $event]
}
puts "</pre>"
epg cleanup
footer

View File

@@ -1,83 +0,0 @@
#!/mod/bin/jimsh
package require cgi
source /mod/var/mongoose/lib/setup
require epg.class
puts "Content-Type: text/html"
puts ""
cgi_input
#cgi_dump
#set _cgi(service) 4170
#set _cgi(event) 38584
#set _cgi(type) 2
if {![dict exists $_cgi service] || ![dict exists $_cgi event]} {
puts "Error, insufficient parameters passed."
exit
}
set service $_cgi(service)
set event $_cgi(event)
set type 1
if {[dict exists $_cgi type]} { set type $_cgi(type) }
set event [lindex [epg fetch dump -service $service -event $event] 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
}
$event get_channel_info
set args {}
set args(ersvtype) 3
set args(hsvc) [$event get channel_hsvc]
set args(nsttime) [$event get start]
set args(nduration) [$event get duration]
set args(usevtid) [$event get event_id]
set args(szevtname) "\025[$event get name]"
set args(eReady) 30
set ccrid [$event get channel_crid]
if {$type == 1} {
# Event
set args(ucCRIDType) 49
set args(ucRecKind) 1
set args(szCRID) "$ccrid[$event get event_crid]"
set args(szEventToRecord) "1$args(szCRID)|"
} else {
# Series
set args(ucCRIDType) 50
set args(ucRecKind) 4
set args(szCRID) "$ccrid[$event get series_crid]"
set args(szFPBRecPath) "$args(szevtname)"
set progs [lmap i [epg fetch dump -scrid [$event get series_crid]] {
if {[set ecrid [$i get event_crid]] eq ""} { continue }
list "1$::ccrid$ecrid"
}]
set args(szEventToRecord) "[join $progs "|"]|"
}
#puts $args
set msg ""
if {![file exists /mod/.schedule.testing]} { set msg "Disabled during testing" }
if {$msg ne "" || [catch {[rsv new $args] insert} msg]} {
puts "Error encountered while scheduling the recording: <i>$msg</i>"
} else {
puts "Successfully scheduled recording of <i>[$event get name]</i>"
close [open /tmp/.restartpending w]
}
epg cleanup

View File

@@ -1,29 +1,36 @@
#!/mod/bin/jimsh
package require cgi
source /mod/var/mongoose/lib/setup
require pkg.class chunked
source /mod/webif/lib/setup
require pkg.class
cgi_input
#cgi_dump
set cmd [cgi_get cmd update]
start_chunked
set bcmd "|/mod/var/mongoose/lib/opkg $cmd"
set fd [open $bcmd r]
while {[gets $fd line] >= 0} {
chunk "$line\r\n"
#chunk_pad
proc opkg {cmd} {
puts ">>> opkg $cmd\r\n"
set bcmd "|/mod/webif/lib/bin/opkg $cmd"
set fd [open $bcmd r]
while {[gets $fd line] >= 0} {
puts "$line\r\n"
}
close $fd
puts "\r\n"
}
close $fd
if {$cmd eq "update"} {
chunk "Updating package meta information\r\n"
httpheader "text/plain"
if {$cmd eq "upgrade"} { opkg update }
opkg $cmd
if {$cmd eq "update" || $cmd eq "upgrade"} {
puts "Updating package meta information\r\n"
pkg fetchmeta
chunk "Done.\r\n"
puts "Done.\r\n"
puts "Updating diagnostic meta information\r\n"
pkg fetchdiagmeta
puts "Done.\r\n"
}
end_chunked

View File

@@ -1,9 +1,58 @@
#!/mod/bin/jimsh
puts "Content-Type: text/html"
puts ""
package require cgi
source /mod/webif/lib/setup
require rsv.class system.class
#puts [exec /etc/init.d/S90settop restart]
#file delete /tmp/.restartpending
puts [exec killall humaxtv]
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()", 350);
$.get('/cgi-bin/restart.jim?now=yes');
});
</script>
Please wait while the Humax restarts...<br>
<div id=progressbar></div>
}
footer

View File

@@ -1,7 +1,7 @@
#!/mod/bin/jimsh
puts "Content-Type: text/html"
puts ""
source /mod/webif/lib/setup
httpheader
source /mod/var/mongoose/include/restart.jim
source /mod/webif/include/restart.jim

View File

@@ -1,15 +1,12 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
puts "Content-Type: text/html"
puts ""
httpheader
cgi_input
#cgi_dump
catch { set service [dict get $_cgi service] }
catch { set action [dict get $_cgi action] }
set service [cgi_get service]
set action [cgi_get action]
catch { puts [exec /mod/bin/service $action $service] }

View File

@@ -1,26 +1,58 @@
#!/mod/bin/jimsh
package require cgi
source /mod/var/mongoose/lib/setup
require settings.class
require plugin
source /mod/webif/lib/setup
require settings.class plugin system.class
puts "Content-Type: text/html"
puts ""
httpheader
cgi_input
#cgi_dump
if {[cgi_get act] eq "https"} {
set val [cgi_get val off]
if {$val in {0 off}} {
file delete /mod/etc/mongoose.cert
puts "HTTPS Server will be disabled after next reboot."
} else {
exec /mod/sbin/mongoose_mkcert
puts "HTTPS Server will be enabled after next reboot."
}
exit
}
if {[cgi_get act] eq "xtelnet"} {
set val [cgi_get val off]
if {$val in {0 off}} {
file delete /mod/boot/xtelnet
puts "Telnet server expert mode will be disabled after next reboot."
} else {
exec /mod/bin/busybox/touch /mod/boot/xtelnet
puts "Telnet server expert mode will be enabled after next reboot."
}
exit
}
set settings [settings new]
set hostname [$settings hostname]
set smtp_server [$settings smtp_server]
set channel_group [$settings channel_group]
set epg_style [$settings epg_style]
set service_style [$settings service_style]
set pkgdev [$settings pkgdev]
set notoolbar [$settings notoolbar]
set nomobile [$settings nomobile]
set nohelplinks [$settings nohelplinks]
set notwitfeed [$settings notwitfeed]
set nounwatchedcount [$settings nounwatchedcount]
set chanchangenc [$settings chanchangenc]
set xepghours [$settings xepghours]
if {$xepghours == 0} { set xepghours 4 }
set genrededup [$settings genrededup]
set autolog [$settings autolog]
set audiomp3 [$settings audiomp3]
# Handle updates
if {![dict exists $env REQUEST_URI]} { set env(REQUEST_URI) "" }
if {![dict exists $env SCRIPT_NAME]} { set env(SCRIPT_NAME) "" }
proc _handle_update {class var old text} {
global _cgi
@@ -51,40 +83,76 @@ proc handle_str_update {var old {text "Value"}} {
handle_str_update hostname $hostname Hostname
_handle_update ascii smtp_server $smtp_server "SMTP Server"
handle_int_update channel_group $channel_group "Channel Group"
if {[dict exists $_cgi pkgdevoff] && ![dict exists $_cgi pkgdev]} {
set _cgi(pkgdev) 0
}
handle_int_update xepghours $xepghours "Grid EPG Hours"
handle_str_update epg_style $epg_style "EPG Type"
handle_str_update service_style $service_style "EPG Channel Type"
handle_int_update pkgdev $pkgdev "Development Package Display"
handle_int_update notoolbar $notoolbar "Disable toolbar"
handle_int_update nomobile $nomobile "Disable mobile link"
handle_int_update nohelplinks $nohelplinks "Disable help links"
handle_int_update notwitfeed $notwitfeed "Disable twitter feed ticker"
handle_int_update chanchangenc $chanchangenc \
"Disable channel change confirmation"
handle_int_update nounwatchedcount $nounwatchedcount "Disable unwatched count"
handle_int_update genrededup $genrededup "Genre search dedup"
handle_int_update autolog $autolog "Auto-processing log level"
handle_int_update audiomp3 $audiomp3 "MP3 type"
set acluser [cgi_get acluser "-"]
set aclpass [cgi_get aclpass "-"]
set aclpassc [cgi_get aclpassc "-"]
if {$acluser ne "-" && $aclpass ne "-"} {
if {![string length $acluser]} {
puts "No username provided."
exit
}
if {$aclpass ne $aclpassc} {
puts "Passwords do not match."
exit
}
if {[string length $aclpass] < 4} {
puts "Password is too short (< 4 characters)"
exit
}
puts [$settings addacluser $acluser $aclpass]
exit
}
set aclact [cgi_get aclact "-"]
if {$aclact ne "-" && $acluser ne "-"} {
switch $aclact {
"del" { puts [$settings delacluser $acluser] }
}
exit
}
jqplugin form iphone-style-checkboxes
header
puts {<script type="text/javascript" src="/js/jquery.form.js"></script>}
puts {
<script type=text/javascript>
$(document).ready(function () {
$(":submit").button();
$('form.auto').each(function(i, el) {
var id = $(this).attr('id');
var output = '#' + id + '_output'
$(this).ajaxForm({
target: output,
success: function() {
$(output).css('font-style', 'italic');
$(output).show('slow');
$(output).delay(2000).fadeOut('slow');
}
});
});
});
</script>
<script type="text/javascript" src="settings.js"></script>
<div id=accordion>
}
proc setting_toggle {name attr checked {invert 0} {val 0}} {
puts -nonewline "
<tr>
<th class=key>$name</th>
<td><input class=setting_toggle type=checkbox value=yes"
if {$checked} { puts -nonewline " checked" }
puts -nonewline " attr=$attr"
if {$invert} { puts -nonewline " invert=1" }
if {$val} { puts -nonewline " useval=1" }
puts -nonewline ">
<div id=${attr}_output></div>
</td>
</tr>
"
}
puts "
<link href=/css/iphone-style-checkboxes.css rel=stylesheet type=text/css />
<script type=\"text/javascript\" src=\"/js/iphone-style-checkboxes.js\">
</script>
<fieldset style=\"display: inline\">
<h4>General Settings</h4>
<div><fieldset style=\"display: inline\">
<legend>
General Settings
</legend>
@@ -93,7 +161,7 @@ puts "
puts "
<tr>
<form class=auto id=hostname method=get action=$env(REQUEST_URI)>
<form class=auto id=hostname method=get action=$env(SCRIPT_NAME)>
<th class=key>Hostname</th>
<td><input name=hostname value=\"$hostname\"
class=\"text ui-widget-content ui-corner-all\"
@@ -107,13 +175,134 @@ puts "
</tr>
"
setting_toggle "HTTPS web server?" "https" \
[file exists /mod/etc/mongoose.cert] 0 1
setting_toggle "Slide-down toolbar?" "notoolbar" $(!$notoolbar) 1
setting_toggle "Mobile link on main page?" "nomobile" $(!$nomobile) 1
setting_toggle "Help links on main page?" "nohelplinks" $(!$nohelplinks) 1
setting_toggle "Twitter feed ticker on main page?" "notwitfeed" $(!$notwitfeed) 1
setting_toggle "Unwatched count on folders?" "nounwatchedcount" $(!$nounwatchedcount) 1
if {[system pkginst ir]} {
setting_toggle "Disable channel change confirmation?" \
"chanchangenc" $chanchangenc 0
}
puts -nonewline "
<tr>
<form class=auto id=autolog method=get action=$env(SCRIPT_NAME)>
<th class=key>Auto-processing log level</th>
<td><select id=autolog name=autolog
class=\"text ui-widget-content ui-corner-all\">
"
puts "<option value=0"
if {$autolog == 0} { puts " selected" }
puts ">Actions and errors only\n"
puts "<option value=1"
if {$autolog == 1} { puts " selected" }
puts ">Actions, errors and scan information\n"
puts "<option value=2"
if {$autolog == 2} { puts " selected" }
puts ">Debugging information\n"
puts "
</select>
<small>
<input name=autolog value=\"set\" type=submit>
</small>
<div id=autolog_output></div>
</td>
</form>
</tr>
"
puts -nonewline "
<tr>
<form class=auto id=audiomp3 method=get action=$env(SCRIPT_NAME)>
<th class=key>Audio extraction type</th>
<td><select id=audiomp3 name=audiomp3
class=\"text ui-widget-content ui-corner-all\">
"
puts "<option value=0"
if {$audiomp3 == 0} { puts " selected" }
puts ">[$settings audiomp3descr 0] - very fast but less compatible.\n"
puts "<option value=1"
if {$audiomp3 == 1} { puts " selected" }
puts ">[$settings audiomp3descr 1] - around 60 times slower.\n"
puts "
</select>
<small>
<input name=audiomp3 value=\"set\" type=submit>
</small>
<div id=audiomp3_output></div>
</td>
</form>
</tr>
"
puts "
</table></fieldset></div>
<h4>EPG Settings</h4>
<div><fieldset style=\"display: inline\">
<legend>
EPG Settings
</legend>
<table>
"
puts "
<tr>
<form class=auto id=channel_group method=get action=$env(REQUEST_URI)>
<form class=auto id=epg_style method=get action=$env(SCRIPT_NAME)>
<th class=key>Default Now/Next style</th>
<td><select id=epg_style name=epg_style
class=\"text ui-widget-content ui-corner-all\">
"
puts "<option value=standard"
if {$epg_style ne "grid"} { puts " selected" }
puts ">Standard\n"
puts "<option value=grid"
if {$epg_style eq "grid"} { puts " selected" }
puts ">Grid\n"
puts "
</select>
<small>
<input name=epg_style value=\"set\" type=submit>
</small>
<div id=epg_style_output></div>
</td>
</form>
</tr>
"
puts "
<tr>
<form class=auto id=service_style method=get action=$env(SCRIPT_NAME)>
<th class=key>Default Single-channel style</th>
<td><select id=service_style name=service_style
class=\"text ui-widget-content ui-corner-all\">
"
puts "<option value=standard"
if {$service_style eq "standard"} { puts " selected" }
puts ">Standard\n"
puts "<option value=grid"
if {$service_style ne "standard"} { puts " selected" }
puts ">Grid\n"
puts "
</select>
<small>
<input name=service_style value=\"set\" type=submit>
</small>
<div id=service_style_output></div>
</td>
</form>
</tr>
"
puts "
<tr>
<form class=auto id=channel_group method=get action=$env(SCRIPT_NAME)>
<th class=key>Channel Group for EPG</th>
<td><select id=channel_group name=channel_group
class=\"text ui-widget-content ui-corner-all\"
value=[$settings channel_group]>
class=\"text ui-widget-content ui-corner-all\">
"
set i 0
@@ -139,64 +328,191 @@ puts "
"
puts "
</table>
</fieldset>
<br><br>
<fieldset style=\"display: inline\">
<legend> Email Settings </legend>
<table>
<tr>
<form class=auto id=xepghours method=get action=$env(SCRIPT_NAME)>
<th class=key>Grid-style EPG Hours</th>
<td><select id=xepghours name=xepghours
class=\"text ui-widget-content ui-corner-all\">
"
foreach xehopt {2 3 4 5 6} {
puts -nonewline "<option value=$xehopt"
if {$xehopt == $xepghours} {
puts -nonewline " selected"
}
puts ">$xehopt hours"
}
puts "
<tr>
<form class=auto id=smtp_server method=get action=$env(REQUEST_URI)>
<th class=key>SMTP Server for outbound email</th>
<td><input name=smtp_server value=\"$smtp_server\"
class=\"text ui-widget-content ui-corner-all\"
length=20 maxlength=50>
<small>
<input id=smtp_server_submit value=\"change\" type=submit>
</small>
<div id=smtp_server_output></div>
</select>
<small>
<input name=xepghours value=\"set\" type=submit>
</small>
<div id=xepghours_output></div>
</td>
</form>
</tr>
"
setting_toggle "De-duplicate genre search results?" genrededup $genrededup
puts "
</table>
</fieldset></div>
"
#puts "
# <fieldset style=\"display: inline\">
# <legend> Email Settings </legend>
# <table>
#"
#
#puts "
# <tr>
# <form class=auto id=smtp_server method=get action=$env(SCRIPT_NAME)>
# <th class=key>SMTP Server for outbound email</th>
# <td><input name=smtp_server value=\"$smtp_server\"
# class=\"text ui-widget-content ui-corner-all\"
# length=20 maxlength=50>
# <small>
# <input id=smtp_server_submit value=\"change\" type=submit>
# </small>
# <div id=smtp_server_output></div>
# </td>
# </form>
# </tr>
#"
#
#puts "
# </table>
# </fieldset>
# <br><br>
#"
puts "
<h4>Web Interface User Access Control</h4>
<div>
<fieldset style=\"display: inline\">
<legend> Web Interface User Access Control </legend>
<table>
"
set aclusers [$settings aclusers]
if {[llength $aclusers]} {
puts "<tr><th colspan=5 class=odd>Existing Users</th></tr>"
foreach user [$settings aclusers] {
lassign $user user
puts "<tr><td align=center style=\"font-weight: bold\">
$user</td>"
puts "<th class=key>New password:
<input
class=\"aclpass text ui-widget-content ui-corner-all\"
type=password size=20 maxlength=50><br>"
puts "Again:
<input
class=\"aclpassc text ui-widget-content ui-corner-all\"
type=password size=20 maxlength=50></td>"
puts "<th class=key><button class=pwchange>
Change</button></td>"
puts "<th class=key><button class=userdel>
Delete User</button></td>"
puts "</tr>"
}
puts "<tr><td colspan=5 id=aclusermod_output>&nbsp;</td></tr>"
puts "<tr><td colspan=5>&nbsp;</td></tr>"
} else {
puts "<tr><td colspan=5 class=blood><b>
Add a user to enable authentication.</b></td></tr>"
}
puts "<tr><th colspan=5 class=odd>Add New User</th></tr>"
puts "
<form id=aclnewuser method=get action=$env(SCRIPT_NAME)>
<tr><th class=key>New User:</th><td>
<input
class=\"text ui-widget-content ui-corner-all\"
id=acluser name=acluser size=20 maxlength=50></td></tr>
<tr><th class=key>Password:</th><td>
<input type=password
class=\"text ui-widget-content ui-corner-all\"
id=aclpass name=aclpass size=20 maxlength=50></td></tr>
<tr><th class=key>Password (confirm):</th><td>
<input type=password
class=\"text ui-widget-content ui-corner-all\"
id=aclpassc name=aclpassc size=20 maxlength=50></td></tr>
<tr><td><input id=aclnewuser_submit value=\"Add User\" type=submit>
</td></tr>
</form>
</table>
<div id=aclnewuser_output></div>
</fieldset>
<br><br>
</div>
"
puts {
<script type=text/javascript>
$('#aclnewuser').ajaxForm({
target: '#aclnewuser_output',
success: function(txt) {
if (txt.indexOf('Success') >= 0)
window.location.reload(true);
}
});
$('button.userdel').click(function(el) {
var user = $('td:first', $(this).parents('tr')).text().trim();
$('#aclusermod_output').load(
'/cgi-bin/settings.jim?aclact=del&acluser=' +
encodeURIComponent(user), function(txt) {
if (txt.indexOf('Success') >= 0)
window.location.reload(true);
});
});
$('button.pwchange').click(function(el) {
var tr = $(this).parents('tr');
var user = $('td:first', $(tr)).text().trim();
var pass = $(tr).find('input.aclpass').val();
var passc = $(tr).find('input.aclpassc').val();
$('#aclusermod_output').load('/cgi-bin/settings.jim?' +
'acluser=' + encodeURIComponent(user) + '&' +
'aclpass=' + encodeURIComponent(pass) + '&' +
'aclpassc=' + encodeURIComponent(passc));
});
</script>
}
puts -nonewline "
<h4>Advanced Settings</h4>
<div>
<fieldset style=\"display: inline\">
<legend> Advanced Settings </legend>
<table>
"
setting_toggle "Show development and advanced packages?" "pkgdev" $pkgdev
puts "
<tr>
<form class=auto id=pkgdev method=get action=$env(REQUEST_URI)>
<th class=key>Show development and advanced packages?</th>
<td><input name=pkgdevoff value=0 type=hidden>
<input name=pkgdev id=pkgdev value=1 type=checkbox
"
if {$pkgdev} { puts " checked" }
puts {
>
<small>
<input id=pkgdev_submit value="save" type=submit>
</small>
<div id=pkgdev_output></div>
</td>
</form>
</tr>
if {[system modversion 1] >= 214} {
setting_toggle "Expert mode telnet server?" "xtelnet" \
[file exists /mod/boot/xtelnet] 0 1
}
puts "
</table>
</fieldset>
</div>
"
eval_plugins settings
set hook settings
foreach plugin [lsort [glob -nocomplain /mod/webif/plugin/*]] {
if {[file isfile "$plugin/$hook.hook"]} {
puts "<h4>Settings for <i>[file tail $plugin]</i> package</h4>"
puts "<div class=pluginsettings>"
catch {source "$plugin/$hook.hook"}
puts "</div>"
}
}
puts "</div>"
footer

View File

@@ -0,0 +1,86 @@
(function($)
{
$.fn.enable = function()
{
return this.each(function() {
$(this)
.removeClass('ui-state-disabled')
.removeProp('disabled');
});
};
$.fn.disable = function()
{
return this.each(function() {
$(this)
.addClass('ui-state-disabled')
.prop('disabled', true);
});
};
})(jQuery);
$(document).ready(function () {
$(":submit").button();
//$('[type="checkbox"] :not(.yesno)').iphoneStyle();
$('[type="checkbox"]').iphoneStyle({
checkedLabel: 'YES',
uncheckedLabel: 'NO'
});
$('form.auto').each(function(i, el) {
var id = $(this).attr('id');
var output = '#' + id + '_output';
$(this).ajaxForm({
target: output,
success: function() {
$(output)
.css('font-style', 'italic')
.show('slow')
.delay(2000)
.fadeOut('slow');
}
});
});
$('.setting_toggle').change(function() {
var arg = '0';
var urlargs;
if ($(this).prop('checked'))
arg = '1';
if ($(this).attr('invert'))
arg = arg == "0" ? "1" : "0";
var el = $(this);
var attr = $(this).attr('attr');
var output = '#' + attr + '_output';
if ($(this).attr('useval'))
urlargs = 'act=' + attr + '&val=' + arg;
else
urlargs = attr + '=' + arg;
$(this).disable();
$(output)
.empty()
.show('slow')
.load('/cgi-bin/settings.jim?' + urlargs,
function() {
$(el).enable();
$(output)
.css('font-style', 'italic')
.delay(2000).fadeOut('slow');
});
});
$('#accordion').accordion({
header: 'h4',
collapsible: true,
active: 0,
heightStyle: 'content'
});
// For now - until plugins are updated.
$('div.pluginsettings').find('br + br').remove();
});

View File

@@ -1,49 +1,183 @@
#!/mod/bin/jimsh
puts "Content-Type: text/html"
puts ""
package require cgi
source /mod/webif/lib/setup
require system.class findhsvc epg.class rsv.class
if {[catch {set pid [exec pgrep humaxtv]}]} { exit }
set runmode cli
if {[string match {*jim} $argv0]} { set runmode cgi }
if {[catch {set data [exec lsof -p $pid | grep Video | fgrep .ts]} ]} {
exit
set schedtime 1200
switch $runmode {
cgi {
set type [cgi_get type "full"]
httpheader
}
cli {
set type "full"
if {"-X" in $argv} { set schedtime 7200 }
}
}
set lines [split $data "\n"]
foreach line $lines {
regsub -all -- {[[:space:]]+} $line " " line
set fields [split $line " "]
set name [lindex [split $line "/"] end]
set size($name) [lindex $fields 6]
set seen($name) 0
if {[catch {set pid [exec pgrep -n humaxtv]}]} {
puts "Cannot find humaxtv process."
exit
}
sleep 2
proc get_data {} {
global pid
set data [exec lsof -p $pid | grep Video | fgrep .ts]
regsub -all -- {[[:space:]]+} $line " " line
set lines [split $data "\n"]
foreach line $lines {
regsub -all -- {[[:space:]]+} $line " " line
set fields [split $line " "]
set name [lindex [split $line "/"] end]
set size2 [lindex $fields 6]
if { $size2 > $size($name) && $seen($name) < 1 } {
set mode "Recording"
set icon "745_1_11_Video_1REC.png"
set ret {}
if {[catch {set data \
[exec /mod/bin/lsof -p $pid | grep Video | fgrep .ts]} ]} {
set ret {}
} else {
set mode "Watching"
set icon "745_1_10_Video_2Live.png"
foreach line [split $data "\n"] {
regsub -all -- {[[:space:]]+} $line " " line
set name [file rootname [file tail $line]]
if {[dict exists $ret $name]} {
set ret($name) -1
} else {
set size [lindex [split $line " "] 6]
set ret($name) $size
}
}
}
return $ret
}
incr seen($name)
set play 0
set rec 0
set seen {}
set output {}
lappend output "<img class=va src=/images/$icon><span class=va>
$mode&nbsp;$name</span><br>"
if {$type eq "full"} {
set data [get_data]
} else {
set data {}
}
if {[llength $data]} {
sleep 3
set ndata [get_data]
foreach name [array names ndata] {
if {![dict exists $seen $name]} { set seen($name) 0 }
if {![dict exists $data $name]} { set data($name) 0 }
if {[file exists "/mod/tmp/webif_auto/decrypting.$name.ts"]} {
set mode "Decrypting"
set icon "178_1_00_Icon_Lock.png style=\"padding: 0 0.2em 0 0.5em\""
} elseif {$ndata($name) == -1} {
incr rec
incr play
set mode "Chase Playing"
set icon "745_1_11_Video_3REC_Live.png"
} elseif {$ndata($name) > $data($name) && $seen($name) < 1} {
incr rec
set mode "Recording"
set icon "745_1_11_Video_1REC.png"
} else {
incr play
set mode "Playing"
set icon "745_1_10_Video_2Live.png"
}
incr seen($name)
if {$runmode eq "cgi"} {
lappend output [concat \
"<span class=\"va stitem\">\n" \
" <img class=va src=/images/$icon>\n" \
" <span>$mode&nbsp;<i>$name</i></span>\n" \
"</span>\n" \
]
} else {
lappend output "$mode $name"
}
}
}
if {![system instandby] && $play < 1} {
set hsvc [system param CUR_SVC Value USERCONFIG]
set ff [$rsvdb query "
select usSvcid as svcid, usLcn as lcn,
substr(szSvcName, 2) as name
from channel.TBL_SVC
where hSvc = $hsvc
limit 1
"]
if {[llength $ff] == 1} {
lassign [lindex $ff 0] x svcid x lcn x name
set epgs [epg dbfetch get \
-service $svcid \
-time [clock seconds]\
]
set prog ""
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 ") \[[$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" \
]
} else {
lappend output "Watching $lcn: $name $prog"
}
}
}
if {[system instandby]} {
if {$runmode eq "cgi"} {
lappend output [concat \
"<span class=\"va stitem\">\n" \
" <img class=va width=28 style=\"padding: 0 4px\"" \
"src=/img/standby.png>\n" \
" <span>System is in standby.</span>\n" \
"</span>" \
]
} else {
lappend output "System is in standby."
}
}
set events [rsv list tbl_reservation \
" where ersvtype = 3 and nsttime - [clock seconds] < $schedtime
and nsttime > [clock seconds] "]
foreach event $events {
if {$runmode eq "cgi"} {
set icon "175_1_11_Reservation_Record.png"
lappend output [concat \
"<span class=\"va stitem\">\n" \
" <img class=va src=/images/$icon width=20>\n" \
" <span>Will record <i>[$event name]</i>" \
" on [$event channel_name] at"\
" [clock format [$event get nsttime] -format {%H:%M}]" \
" </span>\n" \
"</span>\n" \
} else {
lappend output [concat \
"Will record '[$event name]' " \
"on [$event channel_name] at " \
"[clock format [$event get nsttime] -format {%H:%M}]" \
]
}
}
if {[llength $output]} {
puts [join $output " "]
if {$runmode eq "cgi"} {
puts [join $output "\n<br>\n"]
} else {
puts [join $output "\n"]
}
}

View File

@@ -1,13 +0,0 @@
#!/mod/bin/jimsh
set url "http://$env(HTTP_HOST):9091/"
puts "Content-Type: text/html
Location: $url
<meta http-equiv=refresh content=\"0; url=$url\">
Transmission is available <a href=$url>here</a>
"

266
var/mongoose/cgi-bin/xepg.jim Executable file
View File

@@ -0,0 +1,266 @@
#!/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=/cgi-bin/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

@@ -0,0 +1,38 @@
$(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'); }
);
});

View File

@@ -1,4 +0,0 @@
<!--#include virtual="/lib/header.shtml" -->
<!--#exec cmd="/mod/var/mongoose/include/backup.jim" -->
<!--#include virtual="/lib/footer.shtml" -->

View File

@@ -0,0 +1,37 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require rsv.class
set dir "/mod/var/backup"
httpheader
set now [clock seconds]
set file [file tail [cgi_get file \
[clock format $now -format "auto-%Y-%b-%d-%H:%M"]]]
if {[string match {auto-*} $file]} {
# Delete any automatic backups over 7 days old.
set mt $(15 * 86400)
foreach af [glob -nocomplain "$dir/auto-*"] {
set aft [file mtime $af]
set diff $($now - $aft)
if {$diff > $mt} {
puts "Removing $af"
file delete $af
}
}
}
set ffile "$dir/$file.rbk"
if {[file exists $ffile]} {
puts "Backup file <i>$file</i> already exists."
exit
}
rsv backup $ffile

View File

@@ -1,12 +1,14 @@
function refresh_files()
{
$('#backup_files').load('/cgi-bin/backup/files.jim', function() {
$('#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);
});
});
}
@@ -18,7 +20,7 @@ $(document).ready(function() {
$('#backup_button').click(function() {
$('#backup_working').slideDown();
$('#results').load('/cgi-bin/backup/backup.jim?' +
$('#results').load('backup.jim?' +
$('#backup_name').serialize(), function() {
$('#results').slideDown(function() {
$('#backup_working').slideUp();
@@ -27,10 +29,10 @@ $(document).ready(function() {
});
});
$('#delete_button').click(function() {
var backup = $('input.restore').val();
var backup = $('input.restore:checked').val();
if (confirm('Confirm deletion of ' + backup))
{
$('#results').load('/cgi-bin/backup/delete.jim?' +
$('#results').load('delete.jim?' +
$('input.restore').serialize(), function() {
$('#results').slideDown(function() {
refresh_files();
@@ -38,12 +40,21 @@ $(document).ready(function() {
});
}
});
$('#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').val();
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('/cgi-bin/backup/restore.jim?' +
$('#results').load('restore.jim?' +
$('input.restore').serialize(), function() {
$('#results').slideDown(function() {
$('#restore_working').slideUp();

View File

@@ -1,24 +1,18 @@
#!/mod/bin/jimsh
package require cgi
source /mod/var/mongoose/lib/setup
source /mod/webif/lib/setup
set dir /mod/var/backup
puts "Content-Type: text/html"
puts "Pragma: no-cache"
puts "Expires: Thu, 01 Jan 1970 00:00:00 GMT"
puts ""
httpheader
cgi_input
#cgi_dump
if {![dict exists $_cgi restore_file]} {
set file [file tail [cgi_get restore_file]]
if {$file == 0} {
puts "No filename supplied."
exit
}
set file [file tail [dict get $_cgi restore_file]]
set ffile "/$dir/$file.rbk"
if {![file exists $ffile]} {

View File

@@ -1,11 +1,9 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
puts "Content-Type: text/html"
puts "Pragma: no-cache"
puts "Expires: Thu, 01 Jan 1970 00:00:00 GMT"
puts ""
httpheader
set dir "/mod/var/backup"
@@ -20,7 +18,18 @@ if {![file isdirectory $dir]} {
exit
}
set backups [glob -nocomplain "$dir/*.rbk"]
proc s_time {a b} {
file stat $a l
set at $l(ctime)
file stat $b l
set bt $l(ctime)
if {$at < $bt} { return -1 }
if {$at > $bt} { return 1 }
return 0
}
set backups [lsort -command s_time [glob -nocomplain "$dir/*.rbk"]]
if {![llength $backups]} {
empty

View File

@@ -1,21 +1,22 @@
#!/mod/bin/jimsh
source /mod/var/mongoose/lib/setup
source /mod/webif/lib/setup
require altrow rsv.class
jscss backup.js
header
puts {
<script type=text/javascript src=/cgi-bin/backup/backup.js></script>
<h2>Backup/Restore</h2>
<div id=restore_warning class="hidden warningbox">
<div>
<center>
<b>!!!!!!!!!!!!!! PLEASE NOTE !!!!!!!!!!!!!!
<br><br>
After restoring the scheduled recordings you <b>MUST</b> restart the box using
the link at the top of the screen or via the remote control and then add
at least one scheduled entry using the remote control
(which you can then delete).
</div>
the link at the top of the screen or via the remote control.
</div></div>
<div style="clear: both; float: left; width: 40%; border: 1px solid grey;
padding: 1em">
@@ -50,6 +51,7 @@ puts {
<br>
<button id=restore_button disabled>Restore Backup</button>
<button id=delete_button disabled>Delete Backup</button>
<button id=view_button disabled>View Backup</button>
<br>
<div id=restore_working class=va style="display: none;">
<img class=va src=/img/loading.gif>&nbsp;
@@ -64,3 +66,5 @@ puts {
</div>
}
footer

View File

@@ -0,0 +1,21 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require rsv.class
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"
rsv restore $ffile

View File

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

View File

@@ -0,0 +1,24 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
httpheader
# dir=%2Fmedia%2FMy+Video%2FWeatherview
# aexpiry_days=13
set dir [cgi_get dir "-"]
set days [cgi_get aexpiry_days 7]
if {$dir eq "-"} exit
if {![file isdirectory $dir]} {
puts "Not a directory."
exit
}
set fd [open "$dir/.autoexpire" w]
puts $fd $days
$fd close
puts "Ok."

View File

@@ -0,0 +1,304 @@
#!/mod/bin/jimsh
puts {
<div id=jbar></div>
<ul id=optmenu class=contextMenu style="width: 160px">
<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=separator><a href=#rename>Rename</a></li>
<li><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> }
}
if {[system pkginst ffmpeg]} {
puts {
<li class=mp3><a href=#audio>Extract Audio</a></li>
<li class=mpg><a href=#mpg>Extract to MPG</a></li>
<li class=thm><a href=#thm>Set Thumbnail</a></li>
}
}
puts { <li><a href=#vthm>View Thumbnail</a></li> }
if $nicesplice {
puts {
<li class="cut"><a href=#crop>Crop</a></li>
<li class="cut"><a href=#chunk>Split (45m parts)</a></li>
}
}
puts {
<li class=separator><a href=#lock>Toggle Lock</a></li>
<li><a href=#new>Toggle New</a></li>
</ul>
<ul id=ooptmenu class=contextMenu style="width: 160px">
<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=separator><a href=#rename>Rename</a></li>
<li><a href=#download>Download</a></li>
</ul>
<ul id=dooptmenu class=contextMenu style="width: 250px">
<li class=delete><a href=#delete>Delete</a></li>
<li class=cut><a href=#cut>Cut to clipboard</a></li>
<li class=pwcopy><a href=#copy>Copy to clipboard</a></li>
<li class=pwpaste><a href=#paste>Paste to folder</a></li>
<li class=separator><a href=#rename>Rename</a></li>
</ul>
<ul id=doptmenu class=contextMenu style="width: 250px">
<li class=delete><a href=#delete>Delete</a></li>
<li class=cut><a href=#cut>Cut to clipboard</a></li>
<li class=pwcopy><a href=#copy>Copy to clipboard</a></li>
<li class=pwpaste><a href=#paste>Paste to folder</a></li>
<li class=separator><a href=#rename>Rename</a></li>
<li class=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=clock><a href=#expire>Auto-Expire</a></li>
}
if {[system pkginst ffmpeg]} {
puts {
<li class=mp3><a href=#mp3>Auto-Audio Extract</a></li>
<li class=mpg><a href=#mpg>Auto-MPG Extract</a></li>
}
}
puts {
</ul>
<div id=renameform title="Rename media file" style="display: none">
<form id=renameform_form>
<input type=hidden name="renamefile" id="renamefile" value="">
<table border=0>
<tr>
<th>
<label for="rename">
<b>New Filename</b>
</label>
</th>
<td>
<input type=text name="rename" id="rename"
value="" size=70 maxlength=255
class="text ui-widget-content ui-corner-all">
</td>
</tr>
<tr style="display: none" class=tstype>
<th>
<label for="rename_title" style="padding-top: 0.5em">
<b>New Medialist Title</b>
</label>
</th>
<td>
<input type=text name="rename_title" id="rename_title"
value="" size=70 maxlength=48
class="text ui-widget-content ui-corner-all">
</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>
<textarea name="rename_synopsis" id="rename_synopsis"
value="" cols=70 rows=4
class="text ui-widget-content ui-corner-all"></textarea>
</td>
</tr>
<tr style="display: none" class=tstype>
<th>
<label for="rename_guidance" style="padding-top: 0.5em">
<b>New Guidance Text</b>
</label>
</th>
<td>
<input type=text name="rename_guidance" id="rename_guidance"
value="" size=70 maxlength=74
class="text ui-widget-content ui-corner-all">
</td>
</tr>
<tr style="display: none" class=tstype>
<th>
<label for="rename_genre" style="padding-top: 0.5em">
<b>New Genre</b>
</label>
</th>
<td>
<select name="rename_genre" id="rename_genre"
style="vertical-align: middle"
class="text ui-widget-content ui-corner-all">
}
set glist [ts genrelist]
foreach genre [array names glist] {
lassign $glist($genre) txt img
if {$img eq "Unclassified"} {
set img /images/173_3_26_G3_$img.png
} else {
set img /images/173_3_00_G3_$img.png
}
puts "<option value=$genre style=\"
background: url($img) no-repeat left;
padding: 8px 0 8px 30px;
vertical-align: middle;
\" onclick=\"this.parentNode.setAttribute('style',
this.getAttribute('style'));\">$txt"
}
puts {
</select>
</td>
</tr>
</table>
</form>
</div>
<div id=drenameform title="Rename directory" style="display: none">
<form id=drenameform_form>
<input type=hidden name="renamefile" id="drenameorig" value="">
<table border=0>
<tr>
<th>
<label for="drename">
<b>New Directory Name</b>
</label>
</th>
<td>
<input type=text name="rename" id="drename"
value="" size=70 maxlength=255
class="text ui-widget-content ui-corner-all">
</td>
</tr>
</table>
</form>
</div>
<div id=savestreamform title="Save streamed content"
style="display: none">
<div class=pre id=savestream_detail></div>
<div id=savestream_retrieving>
<img src=/img/loading.gif> Retrieving details...
</div>
<form id=savestream_form class=hidden>
}
puts "<input type=hidden name=dir value=\"$dir\">"
puts {
<table border=0>
<tr>
<th>
<label for="savestream_name">
<b>Enter Filename</b>
</label>
</th>
<td>
<input type=text name="savestream_name"
id="savestream_name"
value="" size=70 maxlength=255
class="text ui-widget-content ui-corner-all">
<span id=savestream_spin>
<img src=/img/loading.gif> Saving...
</span>
</td>
</tr>
</table>
</form>
</div>
<div id=newdirform title="New Folder" style="display: none">
<form id=newdirform_form>
}
puts "<input type=hidden name=dir value=\"$dir\">"
puts {
<table border=0>
<tr>
<th>
<label for="newdirname">
<b>New Folder Name</b>
</label>
</th>
<td>
<input type=text name="newdirname" id="newdirname"
value="" size=70 maxlength=255
class="text ui-widget-content ui-corner-all">
</td>
</tr>
</table>
</form>
</div>
<div id=aexpiry title="Auto-Expiry" style="display: none">
<form id=aexpiry_form>
<input type=hidden name="dir" id="aexpiry_ldir" value="">
}
puts {
<table border=0>
<tr>
<th>
<label for="aexpiry_days">
<b>Expire after</b>
<span class=blood>(in days)</span>
</label>
</th>
<td>
<input name="aexpiry_days" id="aexpiry_days"
type=number value=0 size=5 maxlength=3
class="text ui-widget-content ui-corner-all">
</td>
</tr>
</table>
<div id=aexpiry_working class=hidden>
<img src=/img/loading.gif> Applying auto-expiry...
</div>
</form>
</div>
<div id=dialogue></div>
<div id=confirm title="Confirmation Required"></div>
<div id=pwdialogue style="display: none">
<center>
<img src=/img/loading.gif>
<br><br>
Please wait...
<div id=pwfeedback></div>
</center>
</div>
<div id=bmpdialogue title="Recording Thumbnail" class=hidden>
<img id=thmbmp class=doublebmp src="about:blank">
</div>
}

View File

@@ -0,0 +1,49 @@
#!/mod/bin/jimsh
package require sqlite3
package require cgi
source /mod/webif/lib/setup
require ts.class system.class settings.class
jqplugin progressbar
jscss audio.js
header
set s [settings]
set type [$s audiomp3descr [$s audiomp3]]
set rfile [cgi_get file]
set ts [ts fetch $rfile]
set dir [file dirname $rfile]
set len [$ts duration 1]
puts "
<fieldset class=cleft>
<legend>Audio Extraction</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>
</table>
<span class=hidden id=params
dir=\"[cgi_quote_url $dir]\"
rfile=\"[cgi_quote_url $rfile]\"
></span>
<div id=audiodiv style=\"padding: 1em\">
<button id=audioit>Perform audio extraction - $type</button>
</div>
<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

@@ -0,0 +1,35 @@
var handle = 0;
function update()
{
$.get('progress.jim?file=' + $('#params').attr('rfile'),
function(data) {
if (handle)
$('#progressbar').reportprogress(data);
});
}
$(document).ready(function() {
$('#progressbar').reportprogress(0);
$('#back').button().click(function() {
window.location = '../index.jim?dir=' + $('#params').attr('dir');
});
$('#audioit').button().click(function() {
$('#audiodiv').hide('slow');
$('#progressdiv').show('slow');
handle = setInterval("update()", 1000);
$('#output').load('execute.jim?file=' + $('#params').attr('rfile'),
function() {
clearInterval(handle);
handle = 0;
$('#back').show();
$('#progressbar').reportprogress(100);
});
});
});

View File

@@ -0,0 +1,42 @@
#!/mod/bin/jimsh
package require sqlite3
package require cgi
source /mod/webif/lib/setup
require ts.class system.class settings.class
httpheader
set rfile [cgi_get file]
set ts [ts fetch $rfile]
set dir [file dirname $rfile]
set len [$ts duration 1]
set xstart [clock milliseconds]
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]
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 xtime [expr [expr [clock milliseconds] - $xstart] / 1000.0]
puts "Time taken: $xtime"

View File

@@ -0,0 +1,23 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require ts.class
httpheader
set tsfile [cgi_get file]
set rfile [file normalize $tsfile]
set bfile [file rootname $rfile]
if {![file exists "${bfile}.mp3"]} {
puts "0"
} else {
set sz [file size $rfile]
set nsz [expr [file size "${bfile}.mp3"] / 0.3]
set perc [expr $nsz * 100 / $sz]
if {$perc > 100} { set perc 100 }
puts $perc
}

View File

@@ -0,0 +1,19 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require cat
set file [cgi_get file]
set file "[file rootname $file].thm"
if {![file exists $file]} {
httpheader "text/plain"
puts "No such file, $file"
exit
}
httpheader "image/bmp"
cat "/mod/webif/lib/bmpheader"
cat $file

View File

@@ -0,0 +1,6 @@
div.progressbar
{
width: 200px;
}

View File

@@ -0,0 +1,65 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require ts.class pretty_size
jqplugin progressbar
jscss chunk.js chunk.css
header
set rfile [cgi_get file]
set ts [ts fetch $rfile]
set dir [file dirname $rfile]
# 45 minute chunks
set max $(45 * 60)
set len [$ts duration 1]
set esttime $(int($len * 0.025))
if {[$ts get definition] eq "HD"} { set esttime $($esttime * 4) }
puts "
<fieldset class=cleft>
<legend>Split recording into 45 minute segments</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>Size:</th><td>[pretty_size [$ts size]] ([$ts get definition])</td></tr>
<tr><th>Time:</th>
<td>Splitting will take around [clock format $esttime -format "%T"]</td></tr>
"
set bytesperminute $([$ts size] / ($len / 60))
while {$len > 0} {
incr part
incr len -$max
puts "<tr class=\"part hidden\">
<th>Part $part</th><td>
<div id=progresspart$part class=progressbar></div>
<div id=progressstat$part class=also>waiting...</div>
</td></tr>"
}
puts "
</table>
<span class=hidden id=params parts=$part bpm=$bytesperminute
file=\"[cgi_quote_url $rfile]\">
</span>
<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

@@ -0,0 +1,76 @@
var handle;
var currentpart = 0;
var stime = 0;
function xprogress()
{
var file = $('#params').attr('file');
var bpm = $('#params').attr('bpm');
if (currentpart > 0)
$.get('progress.jim?part=' + currentpart + '&file=' + file,
function(data) {
if (currentpart > 0)
{
perc = (data / bpm) * 100 / 45;
$('#progresspart' + currentpart)
.reportprogress(perc);
}
});
}
function xpart(part)
{
var parts = $('#params').attr('parts');
var file = $('#params').attr('file');
if (part++ < parts)
{
currentpart = part;
$('#progressstat' + part)
.text('extracting...')
.addClass('blood');
stime = new Date().getTime();
$.get('extract.jim?parts=' + parts +
'&part=' + part +
'&file=' + file,
function(data) {
var taken = (new Date().getTime() - stime) / 1000;
$('#progressstat' + part)
.text('done... (' + taken + ' seconds)')
.removeClass('blood');
currentpart = 0;
$('#progresspart' + part)
.reportprogress(100);
xpart(part);
});
}
else
{
clearInterval(handle);
$('#findiv').show('slow');
}
}
$(function() {
$('div.progressbar').reportprogress(0);
$('#chunkit').button().click(function(e) {
e.preventDefault();
$('#chunkdiv').hide('slow');
$('tr.part').show('slow');
handle = setInterval("xprogress()", 1000);
xpart(0);
});
$('#back').button().click(function(e) {
e.preventDefault();
var dir = $(this).attr('dir');
window.location = '../index.jim?dir=' + dir;
});
});

View File

@@ -0,0 +1,35 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require ts.class pretty_size
httpheader
set rfile [cgi_get file]
set part [cgi_get part -]
set parts [cgi_get parts "?"]
if {$part eq "-"} exit
set start $(($part - 1) * 45 * 600 - 600)
set end $($part * 45 * 600 + 600)
puts "START: $start"
puts "END: $end"
set ts [ts fetch $rfile]
set base [file rootname $rfile]
set cmd [list /mod/bin/nicesplice -in $base -out "$base.part$part"]
if {$start > 0} { lappend cmd -cut 0 $start }
lappend cmd -cut $end 9999999
puts "CMD: ($cmd)"
puts [exec {*}$cmd]
set ts [ts fetch "$base.part$part.ts"]
$ts settitle "$part/$parts. [string range [ts get $title] 0 40]"

View File

@@ -0,0 +1,14 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require ts.class
heepheader
set file [cgi_get file]
set part [cgi_get part]
set rfile "[file rootname $file].part$part"
puts [file size $rfile]

View File

@@ -0,0 +1,122 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require clipboard.class ts.class
httpheader
cgi_input 1
set cb [[clipboard new {path "/tmp/webif-browse.cb"}] load]
set action [cgi_get act list]
switch $action {
list {
if {![$cb size]} {
puts "<i>Clipboard is empty</i>"
break
}
puts "<div class=cliplist>"
foreach file [$cb get items] {
set img "page_white_copy"
if {[$file get action] eq "cut"} {
set img "cut"
}
set path [$file get path]
set xpath [cgi_quote_html $path]
puts "<span title=\"$xpath\" alt=\"$xpath\">"
puts "<img src=/img/context/$img.png>"
set dfile [file tail $path]
if {[string length $dfile] > 25} {
set dfile "[string range $dfile 0 22]..."
}
if {[file isdirectory $path]} {
puts "<img height=16
src=/images/711_1_09_Media_Folder.png>"
}
puts [cgi_quote_html $dfile]
puts "<a class=clipdel href=# alt=\"Remove\" title=\"Remove\"
path=\"[cgi_quote_url $path]\">
<img border=0 src=/img/close.png height=16></a>"
puts "</span>"
}
puts "</div>"
puts "<button id=paste>Paste to current folder</button>"
puts "<button id=clipclear>Empty clipboard</button>"
}
add {
if {[set path [cgi_get path]] eq "0"} {
puts "No path."
exit
}
set dir [cgi_unquote_input [cgi_get dir]]
set mode [cgi_get mode copy]
foreach p $path {
set p [cgi_unquote_input $p]
if {$dir ne "0" && [string first "$dir/" $p] != 0} {
puts "$p not in directory<br>"
continue
}
if {![$cb present $p]} {
$cb add $mode $p
puts "Added $p for $mode<br>"
}
}
$cb save
}
remove {
$cb remove [cgi_unquote_input [cgi_get path]]
$cb save
}
clear {
$cb clear
$cb save
}
paste {
set dir [cgi_unquote_input [cgi_get dir]]
foreach item [$cb get items] {
set path [$item get path]
set file [file tail $path]
set mode [$item get action]
puts "Pasting $file"
if {[file isdirectory $path]} {
# Directory
if {$mode eq "cut"} {
catch {file rename $path "$dir/$file"}
} else {
catch {puts [exec /mod/bin/busybox/cp -r \
$path $dir]}
}
} elseif {[string match {*.ts} $path]} {
set ts [ts fetch $path]
if {![catch {$ts get file}]} {
foreach f [$ts fileset] {
if {$mode eq "cut"} {
catch {file rename $f \
"$dir/[file tail $f]"}
} else {
catch {file copy $f \
"$dir/[file tail $f]"}
}
}
}
} else {
if {$mode eq "cut"} {
catch {file rename $path \
"$dir/[file tail $path]"}
} else {
catch {file copy $path \
"$dir/[file tail $path]"}
}
}
ts resetnew $dir
}
$cb clear
$cb save
}
}

View File

@@ -0,0 +1,110 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require ts.class pretty_size
jqplugin progressbar
jscss crop.js
header
set rfile [cgi_get file]
set ts [ts fetch $rfile]
set dir [file dirname $rfile]
set len [$ts duration 1]
puts "
<fieldset class=cleft>
<legend>Crop recording</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>Size:</th><td>[pretty_size [$ts size]] ([$ts get definition])</td></tr>
<tr><th>Bookmarks:</th><td>[$ts get bookmarks] @ "
set flag 0
foreach b [$ts bookmarks] {
if $flag { puts -nonewline ", " }
incr flag
puts -nonewline [clock format $b -format "%T"]
}
puts "</td></tr><tr><th>File</th><td>"
puts "<div style=\"position: relative; top: -10px\">"
proc div {type left right} {
set width $($right - $left)
puts "<div class=$type style=\"left: ${left}px; width: ${width}px\">
$type</div>"
}
set keeping 0
set last 0
set start -1
foreach b [$ts bookmarks] {
if {$start < 0} {
set start $b
continue
}
set end $b
incr keeping $($end - $start)
set left $($start * 500 / $len)
set right $($end * 500 / $len)
div cut $last $($left - 1)
div keep $left $($right - 1)
set last $right
set start -1
}
if {$start > 0} {
incr keeping $($len - $start)
set left $($start * 500 / $len)
div cut $last $($left - 1)
div keep $left 500
} else {
div cut $last 500
}
set keepperc $($keeping * 100.0 / $len)
set esttime $(int($keeping * 0.025))
if {[$ts get definition] eq "HD"} { set esttime $($esttime * 4) }
puts "
</div>
</td></tr>
<tr><th>Keeping:</th><td>
[clock format $keeping -format "%T"] ([format "%.2f" $keepperc]%)
</td></tr>
<tr><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]\"
perc=\"$keepperc\"
dir=\"[cgi_quote_url $dir]\"
></span>
<div id=cropdiv style=\"padding: 1em\">
<button id=cropit>Perform crop operation</button>
</div>
<div id=progressdiv class=hidden>
Cropping: <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

@@ -0,0 +1,38 @@
var handle = 0;
function update()
{
var perc = $('#params').attr('perc');
var file = $('#params').attr('file');
$.get('progress.jim' + '?perc=' + perc + '&file=' + file,
function(data) {
if (handle)
$('#progressbar').reportprogress(data);
});
}
$(document).ready(function() {
$('#progressbar').reportprogress(0);
$('#back').button().click(function() {
window.location = '../index.jim?dir=' + $('#params').attr('dir');
});
$('#cropit').button().click(function() {
$('#cropdiv').hide('slow');
$('#progressdiv').show('slow');
handle = setInterval("update()", 1000);
$('#output').text('Please do not interrupt...')
.load('execute.jim?file=' + $('#params').attr('file'),
function() {
clearInterval(handle);
handle = 0;
$('#back').show();
$('#progressbar').reportprogress(100);
});
});
});

View File

@@ -0,0 +1,59 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require ts.class pretty_size system.class
httpheader
set rfile [cgi_get file]
if {[system inuse $rfile]} {
puts "This file is in use. Cannot process at the moment."
exit
}
set ts [ts fetch $rfile]
set dir [file dirname $rfile]
set len [$ts duration 1]
set cropstart [clock milliseconds]
set base [file rootname $rfile]
set origdir "$dir/_original"
if {![file exists $origdir]} { file mkdir $origdir }
set shname [file tail $base]
puts "Processing $shname"
if {[file exists "$origdir/$shname.ts"]} {
puts "This recording already exists within _original"
puts "Cannot continue."
exit
}
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"
}
puts [exec /mod/bin/nicesplice \
-in "$origdir/$shname" \
-out "$dir/$shname" \
-cutBookMarks]
set newname "$shname-[clock seconds]"
puts "Renaming file group to $newname"
ts renamegroup "$dir/$shname.ts" $newname
exec /mod/bin/hmt "+setfilename=$newname" "$dir/$newname.hmt"
# New nicesplice shrinks whilst cropping.
exec /mod/bin/hmt "+shrunk" "$dir/$newname.hmt"
set croptime [expr [expr [clock milliseconds] - $cropstart] / 1000.0]
puts "Time taken: $croptime"

View File

@@ -0,0 +1,26 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require ts.class
httpheader
set perc [cgi_get perc 100]
set tsfile [cgi_get file]
set origfile "[file dirname $tsfile]/_original/[file tail $tsfile]"
set newfile [file rootname $tsfile]
if {![file exists $newfile]} {
puts "0"
} else {
set sz [file size $origfile]
set expected $($sz / 100 * $perc)
set nsz [file size $newfile]
set perc [expr $nsz * 100 / $expected]
if {$perc > 100} { set perc 100 }
puts $perc
}

View File

@@ -0,0 +1,66 @@
#!/mod/bin/jimsh
package require sqlite3
package require cgi
source /mod/webif/lib/setup
require ts.class
jqplugin progressbar
jscss decrypt.js
header
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
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>
</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]\"
></span>
<div id=decryptdiv style=\"padding: 1em\">
<button id=decryptit>Perform decryption</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>
</fieldset>
"

View File

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

View File

@@ -0,0 +1,70 @@
#!/mod/bin/jimsh
package require sqlite3
package require cgi
source /mod/webif/lib/setup
require ts.class system.class
httpheader
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 {$url eq ""} {
puts "This file has not been indexed by the media server.
Cannot decrypt."
exit
}
if {[system inuse $rfile]} {
puts "This file is in use. Cannot decrypt at the moment."
exit
}
set xstart [clock milliseconds]
set base [file rootname $rfile]
set origdir "$dir/_original"
if {![file exists $origdir]} { file mkdir $origdir }
set shname [file tail $base]
puts "Processing $shname"
if {[file exists "$origdir/$shname.ts"]} {
puts "The file already exists in _original, cannot decrypt."
exit
}
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"
}
}
if {[file exists "$dir/$shname.hmt"]} {
exec /mod/bin/hmt -encrypted "$dir/$shname.hmt"
}
set xtime [expr [expr [clock milliseconds] - $xstart] / 1000.0]
puts "Time taken: $xtime"

View File

@@ -0,0 +1,20 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require ts.class
httpheader
set tsfile [cgi_get file]
set rfile [file normalize $tsfile]
if {![file exists "$rfile.decrypting"]} {
puts "0"
} else {
set sz [file size $rfile]
set nsz [file size "$rfile.decrypting"]
puts [expr $nsz * 100 / $sz]
}

View File

@@ -0,0 +1,35 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require safe_delete ts.class
httpheader
set dir [cgi_get dir]
#puts "DIR: ($dir)"
puts "<div id=deleting class=blood><img src=/img/loading.gif>Deleting...</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
}
if {[safe_delete $file]} {
puts -nonewline "Done..."
} else {
puts -nonewline "Error..."
}
puts "</li>"
}
puts "</ul>"
ts resetnew $dir

View File

@@ -2,32 +2,27 @@
package require cgi
package require sqlite3
source /mod/var/mongoose/lib/setup
source /mod/webif/lib/setup
require ts.class
cgi_input
#cgi_dump
set file [dict get $_cgi file]
set rfile [file normalize $file]
set ts [ts fetch $file]
set dmsfile /mnt/hd2/dms_cds.db
set file [cgi_get file]
set urlbase [cgi_get base ""]
# Default to just downloading the raw file.
set url $file
set mime "video/ts"
if {[file exists $dmsfile]} {
set db [sqlite3.open /mnt/hd2/dms_cds.db]
set muri [$db query "
select tblresource.mimetype, contenturi
from tblresource join tblmedia using (mediaid)
where localurl = '$rfile'
"]
if {$muri != ""} {
set rec [lindex $muri 0]
set xuri [lindex $rec 3]
set mime [lindex $rec 1]
set url "http://$env(HTTP_HOST):9000/web/$xuri"
if {[string match {*.ts} $file]} {
if {![catch {set ts [ts fetch $file]}]} {
# If it's encrypted on disk and the DLNA option is available,
# then use the server to perform decryption on the fly.
if {[$ts flag "ODEncrypted"] > 0} {
set dlna [$ts dlnaloc $urlbase]
if {[llength $dlna]} { lassign $dlna url mime }
#puts "DLNA: $dlna"
}
}
}

View File

@@ -1,17 +1,12 @@
#!/mod/bin/jimsh
package require cgi
source /mod/var/mongoose/lib/ts.class
source /mod/webif/lib/setup
require ts.class
puts "Content-Type: text/html"
puts ""
httpheader
cgi_input
#cgi_dump
#set _cgi(file) "/media/My Video/The Walking Dead/The Walking Dead S01E06.ts"
set file [dict get $_cgi file]
set file [cgi_get file]
set ts [ts fetch $file]
if {[set ts [ts fetch $file]] != 0} {
set action enc

View File

@@ -0,0 +1,19 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require ts.class
httpheader "application/json"
set file [cgi_get file]
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 "}"

View File

@@ -0,0 +1,14 @@
#!/mod/bin/jimsh
package require cgi
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..."
}

160
var/mongoose/html/browse/file.jim Executable file
View File

@@ -0,0 +1,160 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require pretty_size
httpheader
set file [cgi_get file]
set type [cgi_get type]
if {$file == 0} exit
set sz [pretty_size [file size $file]]
if {$type eq "ts"} {
require epg.class ts.class
set ts [ts fetch $file]
puts "
<table class=keyval>
<tr>
<th>Title</th>
<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 "[$ts get title]</td>
</tr><tr>
<th>Synopsis</th>
<td>[$ts get synopsis]</td>
</tr><tr>
"
if {[$ts flag "Guidance"] > 0} {
puts "
<th>Guidance</th>
<td><img class=va
src=/images/174_1_26_GuidancePolicy.png height=21>
[$ts get guidance]
</td>
</tr><tr>
"
}
puts "
<th>Definition</th>
<td>
"
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><tr>
<th>Start Time</th>
<td>"
puts [clock format [$ts get start] -format "%c %Z"]
puts "<font class=also>(Scheduled: [
clock format [$ts get schedstart] -format "%c %Z"])</font>"
puts "</td>
</tr><tr>
<th>End Time</th>
<td>"
puts [clock format [$ts get end] -format "%c %Z"]
puts "<font class=also>(Scheduled: [clock format \
[expr [$ts get schedstart] + [$ts get scheddur]] \
-format "%c %Z"])</font>"
puts "</td>
</tr><tr>
<th>Duration</th>
<td>[$ts duration] minute(s).
<font class=also>(Scheduled: [expr [$ts get scheddur] / 60])
</font></td>
</tr><tr>
<th>Size</th>
<td>$sz</td>
"
lassign [$ts dlnaloc] url
if {$url ne ""} {
puts "</tr><tr><th>DLNA&nbsp;URL</th>
<td><a href=\"$url\">$url</a></td>"
}
puts "
</tr><tr>
<th>Files</th>
<td>
"
set fileset [$ts fileset]
puts -nonewline "<img 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."
puts "<div id=fileset class=hidden><ul>"
foreach f $fileset {
puts "<li>[file tail $f] ([pretty_size [file size $f]])</li>"
}
puts "</ul></div>"
puts "</td>
</tr><tr>
<th>Flags</th>
<td>[$ts get flags]
"
if {[$ts get bookmarks]} {
puts " \[Bookmarks: [$ts get bookmarks]\]"
}
puts "</tr>"
puts "</table>"
puts {
<script type=text/javascript>
$('#xfileset').click(function() {
$('#fileset').slideToggle('slow', function() {
if ($('#fileset').is(':visible'))
$('#xfileset').attr('src', '/img/tree/minustop.png');
else
$('#xfileset').attr('src', '/img/tree/plusonly.png');
});
});
</script>
}
exit
}
# Otherwise, for a general file.
puts "
<table class=keyval>
<tr>
<th>File</th>
<td>$file</td>
</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>
}

View File

@@ -0,0 +1,18 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
httpheader
set dir [cgi_get dir]
set flag [cgi_get flag]
if {![file isdirectory $dir]} { exit }
if {[file exists "$dir/.$flag"]} {
file delete "$dir/.$flag"
puts "Unflagged directory as $flag."
} else {
close [open "$dir/.$flag" w]
puts "Flagged directory as $flag."
}

View File

@@ -0,0 +1,14 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require browse.class
httpheader
set file [cgi_get file]
if {[file isdirectory $file]} {
lassign [{dir iconset} $file] icons #attrs
puts [join $icons ""]
}

View File

@@ -0,0 +1,398 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require ts.class pretty_size system.class settings.class escape browse.class
jqplugin contextMenu bar enadis
jscss script.js style.css
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}
if {![dict exists $env SCRIPT_NAME]} {
set env(SCRIPT_NAME) ""
cgi_input
set _cgi(dir) "/media/My Video/"
}
if {![dict exists $env QUERY_STRING]} { set env(QUERY_STRING) "root" }
set config [settings new]
set order [cgi_get order -]
if {$order eq "-"} {
set order [$config sortorder]
} else {
$config sortorder $order
}
set nofcount [$config nounwatchedcount]
set model [system model]
set dustbin [system dustbin 1]
proc icon {img {hover ""} {extra ""} {class "va"}} {
puts -nonewline "<img src=$img class=\"$class\" height=21 $extra"
if {$hover ne ""} {
puts -nonewline " alt=\"$hover\" title=\"$hover\""
}
puts ">"
}
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>" }
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\">
</span>"
lassign [{dir iconset} $file] icons attrs
puts "<span class=iconset>"
puts [join $icons ""]
puts "</span>"
if {[string first $::mroot $file] >= 0} {
set class dopt
} else {
set class doopt
}
puts -nonewline "
<a href=#>
<img class=\"$class va\" border=0 width=45 "
puts -nonewline [join $attrs " "]
puts "
src=/images/181_1_00_Help5_OPT_Plus.png>
</a>
"
puts "
<div class=\"results blood\" style=\"margin: 0 0 0 5em\"></div>
"
puts "</div>"
}
set dircount 0
set filecount 0
proc entry {file} {{i 0}} {
global dircount filecount
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"] {
incr dircount
directory $file $bfile $tbfile
return
}
set ext [string tolower [file extension $file]]
if {$ext in $::ignore || $ext ni $::include} { return }
set rsz [file size $file]
set sz [pretty_size $rsz]
set base [file rootname $file]
set thmok 0
if {$ext eq ".ts" && [file exists "${base}.nts"]} {
set type ts
set ts [ts fetch $file 1]
set img Video_TS
set omenu opt
if {[file exists "${base}.thm"]} { set thmok 1 }
} elseif {$ext eq ".hmt"} {
if {[file exists "${base}.ts"]} { continue }
# Sole hmt file indicates failure to track.
set type bad
set ts 0
set img Video_Failed
set omenu oopt
} else {
set type gen
set ts 0
set img Video_Other
set omenu oopt
}
incr filecount
set new 0
if {$type eq "ts"} {
if {[$ts flag "New"] > 0} { set new 1 }
} elseif {$type eq "gen"} {
if {![file exists "${base}.hmi"]} { set new 1 }
}
if {$new} { append img _New }
set fscl "fs"
set synopsis ""
if {$type eq "ts"} {
set fscl "fs fsts"
set synopsis [cgi_quote_html [$ts get synopsis]]
}
puts "
<div class=\"va bf\" id=[incr i]>
<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
</a>
"
# Size
puts "<span class=filesize> ($sz) </span>"
# Icons
set locked 0
set encd 0
set odencd 1
set def unknown
set bx 0
set dlna 0
set shrunk 0
if {$type eq "ts"} {
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"
# Locked
if {[$ts flag "Locked"] > 0} {
set locked 1
icon "/images/178_1_00_Icon_Lock.png" "Locked"
}
# 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"
}
# Guidance
if {[$ts flag "Guidance"] > 0} {
icon "/images/174_1_26_GuidancePolicy.png"
}
# Indexed
if {$::model eq "HDR" && [llength [$ts dlnaloc]]} {
icon "/img/dlna.png" "Indexed by DLNA Server"
set dlna 1
}
# Shrunk
if {[$ts flag Shrunk]} {
icon "/img/compress.png" "Shrunk"
set shrunk 1
}
set bx [$ts get bookmarks]
}
# Opt+ button
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
src=/images/181_1_00_Help5_OPT_Plus.png>
</a>
<div class=\"results blood\" style=\"margin: 0 0 0 5em\"></div>
"
puts "</div>"
}
set mroot [system mediaroot]
set dir [cgi_get dir $mroot]
######################################################################
# Render web page
source assets.jim
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;\">
"
# 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>"
# Parent directory
set parent [join [lrange [split $dir /] 0 end-1] /]
if {$parent ne ""} {
puts "
<div class=va>
<a href=\"$env(SCRIPT_NAME)?dir=[cgi_quote_url $parent]\">
<img border=0 src=/images/711_3_09_Media_Folder_UP.png class=va>
\[parent directory\]</a>
</div>
"
}
proc s_time {a b} {
global dir
set a "$dir/$a"
set b "$dir/$b"
set ad [file isdirectory $a]
set bd [file isdirectory $b]
if {$ad && !$bd} { return -1 }
if {$bd && !$ad} { return 1 }
if {$ad && $bd} {
if {$a < $b} { return -1 }
if {$a > $b} { return 1 }
return 0
}
if {[catch {file stat $a l}]} { return 0}
set at $l(mtime)
if {[catch {file stat $b l}]} { return 0}
set bt $l(mtime)
if {$at < $bt} { return -1 }
if {$at > $bt} { return 1 }
return 0
}
set files [readdir -nocomplain $dir]
switch $order {
1 { set files [lsort -command s_time $files] }
default { set files [lsort -nocase $files] }
}
foreach file $files { entry "$dir/$file" }
puts "
<a href=# id=selectall>Select all</a> | <a href=# id=deselectall>none</a>
&nbsp;&nbsp;
Directories: $dircount, Files: $filecount
"
# Sort icons
puts "<div id=sortdiv>"
set sortlist {{0 sort_name name} {1 sort_date date}}
foreach sl $sortlist {
lassign $sl index img descr
if {$index} { puts " | " }
set tag "Currently sorting"
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>"
}
}
puts "</div>"
puts "</fieldset>"
puts {
<fieldset class=left style="margin: 0 1em 1em 1em">
<legend style="font-size: 1.5em; padding: 0 0.5em 0.5em 0.5em; color: #1e5bbd;">
File Clipboard
</legend>
<div id=clipboard>
<img src=/img/loading.gif> <i>Loading...</i>
</div>
</fieldset>
}
puts "<div class=brow>"
puts {
<button id=copy>Copy</button>
<button id=cut>Cut</button>
<button id=delete>Delete</button>
<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>
}
# Streamer file
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>
</button>
}
}
puts "</div>"
footer

View File

@@ -0,0 +1,31 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require ts.class pretty_size
httpheader
cgi_input 1
set joinstart [clock milliseconds]
set cmd {/mod/bin/nicesplice}
set dst [file rootname [cgi_get dest "joined"]]
foreach file [split [cgi_get files] ","] {
set file [cgi_unquote_input $file]
lappend cmd "-in" [file rootname $file]
set dir [file dirname $file]
}
lappend cmd "-out" "$dir/$dst"
puts "($cmd)"
puts [exec {*}$cmd]
set ts [ts fetch "$dir/$dst.ts"]
$ts settitle $dst
set jointime [expr [expr [clock milliseconds] - $joinstart] / 1000.0]
puts "Time taken: $jointime"

View File

@@ -0,0 +1,6 @@
#filelist { list-style-type: none; margin: 0; padding: 0; }
#filelist li { margin: 0 3px 3px 3px; padding: 0.4em; padding-left: 1.5em;
height: 35px; }
#filelist li span { position: absolute; margin-left: -1.3em; }
span.pl { padding-left: 2em; }

View File

@@ -0,0 +1,60 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require ts.class pretty_size
jqplugin progressbar touchbridge
jscss join.js join.css
header
cgi_input 1
#cgi_dump
puts "
<p><b>
Drag the files below into order, enter a name for the resulting file and then
click the <i>Join</i> button.</b>
"
puts "<ul id=filelist>"
set esize 0
foreach file [split [cgi_get files] ","] {
set file [cgi_unquote_input $file]
set dir [file dirname $file]
set ts [ts fetch $file]
puts "<li class=\"va ui-state-default\" id=\"$file\"><span
class=\"va ui-icon ui-icon-arrowthick-2-n-s\"></span>
<img class=va src=/img/Video_TS.png>
<span class=pl>
$file ([clock format [$ts duration 1] -format "%T"])
\[[pretty_size [$ts size]]\]
<br><i style=\"font-size: 0.8em\">[$ts get title]</i>
</span>
</li>"
incr esize [$ts size]
}
puts "</ul>"
puts "
<br><br>
<div id=joindiv>
Name for joined file:
<input id=dest name=dfile class=\"text ui-widget-content ui-corner-all\"
length=20 maxlength=50>
<button id=dojoin>Join</button>
</div>
<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>
"
footer

View File

@@ -0,0 +1,62 @@
$('#filelist li').hover(
function() { $(this).css('cursor', 'pointer'); },
function() { $(this).css('cursor', 'auto'); }
);
var handle = 0;
function update()
{
$.get('progress.jim'
+ '?esize=' + $('#back').attr('esize')
+ '&file=' + $('#back').attr('dir') + '/' + $('#dest').val(),
function(data) {
if (handle)
$('#progressbar').reportprogress(data);
});
}
$(document).ready(function() {
$('#progressbar').reportprogress(0);
$('#back').button().click(function() {
window.location = '../index.jim?dir=' + $(this).attr('dir');
});
$('#filelist').sortable().disableSelection();
$('#dojoin').button().attr('disabled', true).addClass('ui-state-disabled')
.click(function() {
var files = $('#filelist').sortable('toArray');
var sfiles = new Array();
for (x in files)
sfiles.push(encodeURIComponent(files[x]));
$('#joindiv').hide('slow');
$('#progressdiv').show('slow');
handle = setInterval("update()", 1000);
$('#output').text('Please do not interrupt...')
.load('execute.jim?files=' +
sfiles.join() + '&dest=' + $('#dest').val(),
function() {
clearInterval(handle);
handle = 0;
$('#back').show();
$('#progressbar').reportprogress(100);
});
});
$('#dest').val('').keyup(function() {
if ($(this).val().length > 0)
$('#dojoin')
.removeProp('disabled').removeClass('ui-state-disabled');
else
$('#dojoin')
.prop('disabled', true).addClass('ui-state-disabled');
});
});

View File

@@ -0,0 +1,20 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
httpheader
set expected [cgi_get esize 1]
set file [file normalize [cgi_get file]]
if {![file exists $file]} {
puts "0"
} else {
set sz [file size $file]
set perc [expr $sz * 100 / $expected]
if {$perc > 100} { set perc 100 }
puts $perc
}

View File

@@ -1,17 +1,12 @@
#!/mod/bin/jimsh
package require cgi
source /mod/var/mongoose/lib/ts.class
source /mod/webif/lib/setup
require ts.class
puts "Content-Type: text/html"
puts ""
httpheader
cgi_input
#cgi_dump
#set _cgi(file) "/media/My Video/The Walking Dead/The Walking Dead S01E06.ts"
set file [dict get $_cgi file]
set file [cgi_get file ""]
set ts [ts fetch $file]
if {[set ts [ts fetch $file]] != 0} {
set action lock

View File

@@ -0,0 +1,12 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
httpheader
set dir [cgi_get dir -]
set name [cgi_get newdirname "New Folder"]
file mkdir "$dir/$name"

View File

@@ -0,0 +1,28 @@
#!/mod/bin/jimsh
package require sqlite3
package require cgi
source /mod/webif/lib/setup
require ts.class system.class
httpheader
set rfile [cgi_get file]
set ts [ts fetch $rfile]
set dir [file dirname $rfile]
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 xtime [expr [expr [clock milliseconds] - $xstart] / 1000.0]
puts "Time taken: $xtime"

View File

@@ -0,0 +1,46 @@
#!/mod/bin/jimsh
package require sqlite3
package require cgi
source /mod/webif/lib/setup
require ts.class system.class
jqplugin progressbar
jscss mpg.js
header
set rfile [cgi_get file]
set ts [ts fetch $rfile]
set dir [file dirname $rfile]
set len [$ts duration 1]
puts "
<fieldset class=cleft>
<legend>Extract to MPG</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>
</table>
<span class=hidden id=params
dir=\"[cgi_quote_url $dir]\"
rfile=\"[cgi_quote_url $rfile]\"
></span>
<div id=mpgdiv style=\"padding: 1em\">
<button id=mpgit>Perform mpg extraction</button>
</div>
<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

@@ -0,0 +1,35 @@
var handle = 0;
function update()
{
$.get('progress.jim?file=' + $('#params').attr('rfile'),
function(data) {
if (handle)
$('#progressbar').reportprogress(data);
});
}
$(document).ready(function() {
$('#progressbar').reportprogress(0);
$('#back').button().click(function() {
window.location = '../index.jim?dir=' + $('#params').attr('dir');
});
$('#mpgit').button().click(function() {
$('#mpgdiv').hide('slow');
$('#progressdiv').show('slow');
handle = setInterval("update()", 1000);
$('#output').load('execute.jim?file=' + $('#params').attr('rfile'),
function() {
clearInterval(handle);
handle = 0;
$('#back').show();
$('#progressbar').reportprogress(100);
});
});
});

View File

@@ -0,0 +1,23 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require ts.class
httpheader
set tsfile [cgi_get file]
set rfile [file normalize $tsfile]
set bfile [file rootname $rfile]
if {![file exists "${bfile}.mpg"]} {
puts "0"
} else {
set sz [file size $rfile]
set nsz [expr [file size "${bfile}.mpg"] / 0.75]
set perc [expr $nsz * 100 / $sz]
if {$perc > 100} { set perc 100 }
puts $perc
}

View File

@@ -1,17 +1,12 @@
#!/mod/bin/jimsh
package require cgi
source /mod/var/mongoose/lib/ts.class
source /mod/webif/lib/setup
require ts.class
puts "Content-Type: text/html"
puts ""
httpheader
cgi_input
#cgi_dump
#set _cgi(file) "/media/My Video/The Walking Dead/The Walking Dead S01E06.ts"
set file [dict get $_cgi file]
set file [cgi_get file]
set ts [ts fetch $file]
if {[set ts [ts fetch $file]] != 0} {
set action new
@@ -19,6 +14,7 @@ if {[set ts [ts fetch $file]] != 0} {
if {[$ts set_$action]} {
puts "Successfully marked $file as $action."
ts resetnew [file dirname $file]
} else {
puts "Problem marking $file as $action,
[$ts get error]"

View File

@@ -2,16 +2,11 @@
package require cgi
package require pack
source /mod/webif/lib/setup
puts "Content-Type: application/json"
puts ""
httpheader "application/json"
cgi_input
#cgi_dump
#set _cgi(dir) "/media/My Video"
set root [dict get $_cgi dir]
set root [cgi_get dir]
# Strip double slashes
regsub -all -- {\/+} "$root/*" "/" root
@@ -20,10 +15,11 @@ foreach dir [glob -nocomplain "$root"] {
if {[file exists "$dir/.series"]} {
set fd [open "$dir/.series"]
set bytes [read $fd 8]
$fd close
set recs [unpack $bytes -uintle 0 32]
set plays [unpack $bytes -uintle 32 32]
set diff $($recs - $plays)
if {$diff != 0} {
if {$diff > 0} {
set node [lindex [split $dir /] end]
puts "\"$node\": $diff,"
}

View File

@@ -0,0 +1,48 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require ts.class
httpheader
set file [cgi_get renamefile "-"]
if {$file eq "-"} exit
set newfile [string trim [cgi_get rename]]
set dir [file dirname $file]
if {[file isdirectory $file]} {
#puts "Directory."
if {$newfile ne ""} {
set newfile "${dir}/${newfile}"
file rename $file $newfile
}
} elseif {[set ts [ts fetch $file]] != 0} {
#puts "TS file."
foreach attr {title synopsis guidance genre} {
if {[catch {
set new [string trim [cgi_get "rename_$attr"]]
set old [$ts get $attr]
if {$new ne $old} {
if {$attr eq "guidance" ||
[string length $new] > 0} {
$ts set$attr $new
}
}
} msg]} {
puts "$attr: $msg"
}
}
if {"$dir/$newfile.ts" ne "$file"} { ts renamegroup $file $newfile }
} else {
#puts "Normal file."
if {$newfile ne ""} {
set newfile "$dir/$newfile[file extension $file]"
puts "Rename ($file) -> ($newfile)"
file rename $file $newfile
}
}

View File

@@ -0,0 +1,12 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require ts.class
httpheader
set dir [cgi_get dir]
ts resetnew $dir

View File

@@ -0,0 +1,18 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require ts.class
httpheader
set dir [cgi_get dir "/media/My Video"]
set file [file tail [cgi_get savestream_name]]
set sfile [cgi_get savestream_source "/mnt/hd3/Streamer_down_file"]
if {$file == "0"} { exit }
if {[string length [string trim $file]] == 0} { exit }
if {[file extension $file] ne ".mp4"} { append file ".mp4" }
file copy $sfile "$dir/$file"

View File

@@ -0,0 +1,999 @@
var dir;
function disableall()
{
$('button,a,input').disable();
}
function pastedialogue()
{
$('#pwdialogue').dialog({
title: "Pasting from clipboard",
modal: true, autoOpen: true,
height: 'auto', width: 'auto',
show: 'scale', hide: 'fade',
draggable: false, resizable: false,
closeOnEscape: false,
open: function() {
$('.ui-dialog-titlebar-close').hide();
}
});
}
function reloadclipboard()
{
$('#clipboard')
.empty()
.html('<img src=/img/loading.gif> <i>Loading...</i>')
.load('/browse/clipboard.jim', function() {
// Start Clipboard post-load actions
if ($('#clipclear').length)
{
$('#paste').enable();
$('#doptmenu,#dooptmenu').enableContextMenuItems('#paste');
}
else
{
$('#paste').disable();
$('#doptmenu,#dooptmenu').disableContextMenuItems('#paste');
}
$('#clipclear').button().click(function() {
$.get('/browse/clipboard.jim?act=clear', function() {
reloadclipboard();
});
});
$('a.clipdel').click(function() {
$.get('/browse/clipboard.jim?act=remove&path=' +
$(this).attr('path'), function() {
reloadclipboard();
});
});
$('#paste').button()
.click(function() {
disableall();
pastedialogue();
$('#pwfeedback').load(
'/browse/clipboard.jim?act=paste&dir='
+ encodeURIComponent(dir), function() {
$('#pwdialogue').dialog('close');
window.location.reload(true);
});
});
// End Clipboard post-load actions
});
}
function epginfo_callback(data, status, xhr)
{
//console.log(status);
//console.dir(data);
if (status != 'success')
return;
$('#rename_title').val(data.title);
$('#rename_synopsis').val(data.synopsis);
$('#rename_guidance').val(data.guidance);
$('#rename_genre').val(data.genre);
$('tr.tstype').show('slow');
}
function insert_folder_size(folder, size)
{
folder = folder.replace(/ /g, '');
folder = folder.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1');
//console.log("Folder: (%s) = (%s)", folder, size);
if (size.search(/\d$/) == -1)
size += 'iB';
else
size += ' bytes';
if (folder == "")
$('#dirsize').text(' (' + size + ')');
else
$('#' + folder).text(' (' + size + ')');
}
function folder_size_callback(data, status, xhr)
{
//console.log("Status: %s", status);
//console.dir(data);
$.each(data, insert_folder_size);
}
function set_folder_new(folder, cnt)
{
folder = folder.replace(/ /g, '');
folder = folder.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1');
//console.log("Folder: (%s) = (%s)", folder, cnt);
left = cnt > 99 ? 11 : (cnt > 9 ? 14 : 17);
$('#img' + folder)
.attr('src', '/img/Folder_New.png')
.next('span.foldernum')
.css('left', left + 'px')
.text(cnt)
.show();
}
function new_folder_callback(data, status, xhr)
{
//console.log("Status: %s", status);
//console.dir(data);
$.each(data, set_folder_new);
}
//function insert_shrunk(file, perc)
//{
// if (perc == 0)
// {
// file = file.replace(/[ ]/g, '');
// file = file.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1');
// //console.log("File: (%s) = (%s)", file, perc);
// $('#sp_' + file).show();
// }
//}
//function shrunk_callback(data, status, xhr)
//{
// //console.log("Status: %s", status);
// //console.dir(data);
// $.each(data, insert_shrunk);
//}
function delete_callback(file, dir, id)
{
var el = 'div.bf#' + id;
var results = el + ' .results';
$(results)
.html('<img src=/img/loading.gif>Deleting, please wait...')
.slideDown('slow')
.load('/browse/delete.jim', {
'dir': dir,
'files': [decodeURIComponent(file)]
}, function() {
$(el).delay(3000).slideUp(300, function() {
$(el).remove();
});
});
}
function lock_callback(file, type, id)
{
var url = '/browse/lock.jim?file=' + file;
$.get(url, function() { window.location.reload(true); });
}
function enc_callback(file, type, id)
{
var url = '/browse/enc.jim?file=' + file;
$.get(url, function() { window.location.reload(true); });
}
function new_callback(file, type, id)
{
var url = '/browse/new.jim?file=' + file;
$.get(url, function() { window.location.reload(true); });
}
function thumbnail_callback(file, type, id)
{
var el = 'div.bf#' + id;
var results = el + ' .results';
$(results)
.html('<img src=/img/loading.gif>Generating thumbnail, ' +
'please wait...')
.slideDown('slow')
.load('/browse/thumbnail.jim?file=' + file)
.delay(3000)
.slideUp('slow');
$('div.bf#' + id + ' img.opt').attr('thmok', 1);
}
function rename_submit()
{
var s = $('#renameform_form').serialize();
$.post('/browse/rename.jim', s,
function() { window.location.reload(true); });
}
function drename_submit()
{
var s = $('#drenameform_form').serialize();
$.get('/browse/rename.jim?' + s,
function() { window.location.reload(true); });
}
function aexpiry_submit()
{
$('#aexpiry_working').slideDown('slow');
var s = $('#aexpiry_form').serialize();
$.get('/browse/aexpiry.jim?' + s,
function() { window.location.reload(true); });
}
function newdir_submit()
{
var s = $('#newdirform_form').serialize();
$.get('/browse/mknewdir.jim?' + s,
function() { window.location.reload(true); });
}
function savestream_submit()
{
var s = $('#savestream_form').serialize();
var sf = $('#save_stream').attr('file');
$('#savestream_name').disable();
$('#savestream_spin').show();
$.get('/browse/savestream.jim?sfile=' +
encodeURIComponent(sf) + '&' + s,
function() {
window.location.reload(true);
});
}
var $confirm; // Populated after DOM is loaded.
function confirm_action(action, callback, file, type, id)
{
var bfile = file.replace(/.*\/|\.[^.]*$/g, '');
$confirm.dialog('option', 'buttons', {
'Yes': function() { $(this).dialog('close');
callback(file, type, id); },
'No': function() {$(this).dialog('close');}
});
$('#confirm').empty().html(
'Are you sure you wish to ' + action + '<br>' +
'<i>' + decodeURIComponent(bfile) + '</i> ?'
);
$confirm.dialog('open');
}
function preparemenu(el, menu)
{
if (el.attr('type') == 'ts')
{
// if (el.attr('def') == 'HD')
// {
// $(menu).enableContextMenuItems('#enc');
// if (el.attr('encd') == 1)
// $(menu).changeContextMenuItem('#enc',
// 'Remove Enc');
// else
// $(menu).changeContextMenuItem('#enc',
// 'Set Enc');
// }
if (el.attr('bx') > 0)
$(menu).enableContextMenuItems('#crop');
else
$(menu).disableContextMenuItems('#crop');
if (el.attr('odencd') == 0)
$(menu).enableContextMenuItems('#thm');
else
$(menu).disableContextMenuItems('#thm');
if (el.attr('thmok') == 1)
$(menu).enableContextMenuItems('#vthm');
else
$(menu).disableContextMenuItems('#vthm');
$(menu).enableContextMenuItems('#strip');
if (el.attr('rsize') > 4294967296)
$(menu).enableContextMenuItems('#chunk');
else
$(menu).disableContextMenuItems('#chunk');
$(menu).enableContextMenuItems('#new');
if (el.attr('new') == 1)
$(menu).changeContextMenuItem('#new', 'Mark watched');
else
$(menu).changeContextMenuItem('#new', 'Mark new');
$(menu).enableContextMenuItems('#lock');
if (el.attr('locked') == 1)
{
$(menu).changeContextMenuItem('#lock', 'Unlock');
$(menu).disableContextMenuItems('#delete');
}
else
{
$(menu).changeContextMenuItem('#lock', 'Lock');
$(menu).enableContextMenuItems('#delete');
}
if (el.attr('odencd') == 1 && el.attr('dlna') == 1 &&
el.attr('encd') == 0)
$(menu).enableContextMenuItems('#decrypt');
else
$(menu).disableContextMenuItems('#decrypt');
if (el.attr('odencd') == 1)
{
$(menu).disableContextMenuItems('#audio');
$(menu).disableContextMenuItems('#mpg');
}
else
{
$(menu).enableContextMenuItems('#audio');
if (el.attr('def') == 'HD')
$(menu).disableContextMenuItems('#mpg');
else
$(menu).enableContextMenuItems('#mpg');
}
}
else
{
$(menu).enableContextMenuItems('#delete');
$(menu).disableContextMenuItems('#lock');
//$(menu).disableContextMenuItems('#enc');
$(menu).disableContextMenuItems('#new');
}
}
function fixdmenu(el, menu, flag, tag, descr, recurse)
{
var a = el.attr(flag);
var b = el.attr(flag + 'r');
if (a == undefined) a = 0;
if (b == undefined) b = 0;
if (a > 0)
$(menu).changeContextMenuItem(tag, 'Disable ' + descr);
else
$(menu).changeContextMenuItem(tag, 'Enable ' + descr);
if (recurse)
{
if (b > 0)
{
$(menu).changeContextMenuItem(tag + 'r',
'Disable Recursive ' + descr);
$(menu).disableContextMenuItems(tag);
}
else
{
$(menu).changeContextMenuItem(tag + 'r',
'Enable Recursive ' + descr);
$(menu).enableContextMenuItems(tag);
}
}
}
function preparedmenu(el, menu)
{
if (el.attr('noflat') != undefined)
{
if (el.attr('noflat') > 0)
$(menu).changeContextMenuItem('#flat', 'Allow Flatten');
else
$(menu).changeContextMenuItem('#flat',
'Prevent Flatten');
}
fixdmenu(el, menu, 'autoshrink', '#shrink', 'Auto-shrink', 1);
fixdmenu(el, menu, 'autodedup', '#dedup', 'Auto-dedup', 0);
fixdmenu(el, menu, 'autodecrypt', '#decrypt', 'Auto-decrypt', 1);
fixdmenu(el, menu, 'autompg', '#mpg', 'Auto-mpg', 0);
fixdmenu(el, menu, 'automp3', '#mp3', 'Auto-audio', 0);
fixdmenu(el, menu, 'autoexpire', '#expire', 'Auto-expire', 0);
}
$(document).ready(function() {
dir = $('#dir').text();
var menuclick = function(action, el, pos)
{
var file = $(el).parent().prevAll('a.bf').last().attr('file');
var bfile = file.replace(/.*\/|\.[^.]*$/g, '');
bfile = bfile.replace(/[\x00-\x1f]+/g, '');
var type = $(el).attr('type');
var id = $(el).attr('did');
switch (action)
{
case 'delete':
confirm_action('delete', delete_callback, file,
dir, id);
break;
case 'copy':
if (!confirm('Are you sure? Copying recordings takes a long time!'))
break;
// Fallthrough
case 'cut':
$.get('/browse/clipboard.jim?act=add&mode=' + action +
'&path=' + file, function() {
reloadclipboard();
});
break;
case 'lock':
confirm_action('change the lock on', lock_callback,
file, type, id);
break;
// case 'enc':
// confirm_action('change the ENC flag on', enc_callback,
// file, type, id);
// break;
case 'new':
confirm_action('change the New flag on', new_callback,
file, type, id);
break;
case 'rename':
$('#rename').val(decodeURIComponent(bfile));
$('#renamefile').val(decodeURIComponent(file));
$('#rename_title').val('');
$('#rename_synopsis').val('');
$('#rename_guidance').val('');
$('tr.tstype').css('display', 'none');
if (type == 'ts')
{
$.getJSON('/browse/epgtitle.jim?file=' +
file, epginfo_callback);
}
$('#renameform').dialog('open');
break;
case 'thm':
window.location.href = '/browse/thumbnail/index.jim?file=' +
file;
break;
case 'vthm':
// window.open('/browse/bmpw.jim?file=' + file, 'hxwebifbmp',
// 'height=156,width=280,toolbar=no,' +
// 'scrollbars=no,menubar=no,location=no,titlebar=no');
$('#thmbmp').attr('src', 'bmp.jim?file=' + file);
$('#bmpdialogue').dialog('open');
break;
case 'download':
window.location.href = '/browse/download.jim?file=' +
file + '&base=' +
encodeURIComponent(document.URL.match(/:\/\/(.[^/]+)/)[1]);
break;
case 'crop':
window.location.href = '/browse/crop/crop.jim?file=' +
file;
break;
case 'strip':
window.location.href = '/browse/strip/strip.jim?file=' +
file;
break;
case 'chunk':
window.location.href = '/browse/chunk/chunk.jim?file=' +
file;
break;
case 'decrypt':
window.location.href =
'/browse/decrypt/decrypt.jim?file=' + file;
break;
case 'audio':
window.location.href = '/browse/audio/audio.jim?file=' +
file;
break;
case 'mpg':
window.location.href = '/browse/mpg/mpg.jim?file=' +
file;
break;
default:
alert('Unhandled action: ' + action);
break;
}
};
function flagdir(file, flag, iconset, output, options)
{
var url = '/browse/flagdir.jim?dir=' + file +
'&flag=' + flag;
$(output).load(url, function() {
$(iconset)
.empty()
.html('<img src=/img/loading.gif> Updating...')
.load('/browse/iconset.jim?file=' + file);
if ($(options).attr(flag) == '1')
$(options).attr(flag, 0);
else
$(options).attr(flag, 1);
}).delay(3000).slideUp();
}
var dmenuclick = function(action, el, pos)
{
var direl = $(el).parent().parent();
var file = $(el).parent().prevAll('a.dbf').last().attr('file');
var iconset = $(el).parent().prevAll('span.iconset').last();
var bfile = file.replace(/.*\//g, '');
bfile = bfile.replace(/[\x00-\x1f]+/g, '');
var results = $(el).parent().next('div.results');
switch (action)
{
case 'paste':
pastedialogue();
$('#pwfeedback').load(
'/browse/clipboard.jim?act=paste&dir=' +
file, function() {
$('#pwdialogue').dialog('close');
reloadclipboard();
});
break;
case 'delete':
if (confirm('Are you sure you wish to delete "' +
decodeURIComponent(file) +
'" and all files within it?'))
{
$(results)
.html('<img src=/img/loading.gif>' +
'Deleting, please wait...')
.slideDown('slow')
.load('/browse/delete.jim', {
'dir': dir,
'files': [decodeURIComponent(file)]
}, function() {
$(direl).delay(3000).slideUp(300, function() {
$(direl).remove();
});
});
}
break;
case 'copy':
if (!confirm('Are you sure? Copying directories can take a very long time!'))
break;
// Fallthrough
case 'cut':
$.get('/browse/clipboard.jim?act=add&mode=' + action +
'&path=' + file, function() {
reloadclipboard();
});
break;
case 'rename':
$('#drename').val(decodeURIComponent(bfile));
$('#drenameorig').val(decodeURIComponent(file));
$('#drenameform').dialog('open');
break;
case 'expire':
if ($(el).attr('autoexpire') == 1)
flagdir(file, 'autoexpire', iconset, results, el);
else
{
$('#aexpiry_ldir').val(decodeURIComponent(file));
if ($(el).attr('autoexpiredays') > 0)
$('#aexpiry_days')
.val($(el).attr('autoexpiredays'));
else
$('#aexpiry_days').val(7);
$('#aexpiry_working').hide('fast');
$('#aexpiry').dialog('open');
}
break;
case 'flat':
flagdir(file, 'noflatten', iconset, results, el);
break;
case 'dedup':
flagdir(file, 'autodedup', iconset, results, el);
break;
case 'mpg':
flagdir(file, 'autompg', iconset, results, el);
break;
case 'mp3':
flagdir(file, 'automp3', iconset, results, el);
break;
case 'shrink':
flagdir(file, 'autoshrink', iconset, results, el);
break;
case 'shrinkr':
flagdir(file, 'autoshrinkr', iconset, results, el);
break;
case 'decrypt':
flagdir(file, 'autodecrypt', iconset, results, el);
break;
case 'decryptr':
flagdir(file, 'autodecryptr', iconset, results, el);
break;
case 'resetnew':
var url = '/browse/resetnew.jim?dir=' + file;
$.get(url, function() { window.location.reload(true); });
break;
default:
alert('Unhandled action: ' + action);
break;
}
};
// Bind context menu to opt+ image
$('img.opt').contextMenu(
{
menu: 'optmenu',
leftButton: true,
beforeShow: preparemenu
},
menuclick
);
// Bind context menu to opt+ image
$('img.oopt').contextMenu(
{
menu: 'ooptmenu',
leftButton: true,
beforeShow: preparemenu
},
menuclick
);
$('img.dopt').contextMenu(
{
menu: 'doptmenu',
leftButton: true,
beforeShow: preparedmenu
},
dmenuclick
);
$('img.doopt').contextMenu(
{
menu: 'dooptmenu',
leftButton: true,
beforeShow: preparedmenu
},
dmenuclick
);
// Disable items which are not yet implemented.
$('#optmenu').disableContextMenuItems('#title');
var $buttons = {
"Close" : function() {$(this).dialog('close');}
};
var $buttonsp = $.extend(
{"Play" : function() { doplay(); }},
$buttons);
// Create reusable dialogue.
var $dialog = $('#dialogue').dialog({
title: "Media Details",
modal: false, autoOpen: false,
height: 600, width: 700,
show: 'scale', hide: 'fade',
draggable: true, resizable: true,
buttons: $buttons,
close: function(e,u) { $('#dialogue').empty().html(
'<img src="/img/loading.gif" alt="loading">'); }
});
function doplay()
{
var file = $dialog.attr('file');
var type = $dialog.attr('type');
disableall();
window.location = '/play/play.jim?' +
'dir=' + encodeURIComponent(dir) +
'&file=' + file;
}
// Bind dialogue open to filenames.
$('a.bf').click(function(e) {
e.preventDefault();
var file = $(this).attr('file');
var type = $(this).attr('type');
var opt = $(this).nextAll('a').find('img.opt');
var url = '/browse/file.jim?file=' + file
+ '&type=' + type;
$dialog.load(url);
$dialog.attr('file', file);
$dialog.attr('type', type);
if (type == 'ts' &&
(opt.attr('odencd') == 0 || opt.attr('dlna') == 1))
$dialog.dialog("option", "buttons", $buttonsp);
else
$dialog.dialog("option", "buttons", $buttons);
$dialog.dialog('open');
});
$('#renameform').dialog({
autoOpen: false,
height: 'auto', width: 'auto',
modal: true,
buttons: {
"Update": rename_submit,
"Close": function() {
$(this).dialog('close');
}
},
close: function() { $('#rename').val(''); }
});
$('#drenameform').dialog({
autoOpen: false,
height: 'auto', width: 'auto',
modal: true,
buttons: {
"Update": drename_submit,
"Close": function() {
$(this).dialog('close');
}
},
close: function() { $('#drename').val(''); }
});
$('#aexpiry').dialog({
autoOpen: false,
height: 'auto', width: 'auto',
modal: true,
buttons: {
"Update": aexpiry_submit,
"Close": function() {
$(this).dialog('close');
}
},
close: function() { $('#aexpiry_days').val('0'); }
});
$('#savestreamform').dialog({
autoOpen: false,
height: 'auto', width: 'auto',
modal: true,
buttons: {
"Save": savestream_submit,
"Cancel": function() {
$(this).dialog('close');
}
},
close: function() { $('#savestream_name').val(''); }
});
$('#savestream_name').keyup(function(e) {
if (e.keyCode == $.ui.keyCode.ENTER)
savestream_submit();
});
$('#bmpdialogue').dialog({
autoOpen: false,
height: 'auto', width: 'auto',
modal: true,
buttons: {
"Close": function() {
$(this).dialog('close');
}
},
close: function() { $('#thmbmp').attr('src', 'about:blank'); }
});
// Create re-usable confirmation dialogue.
$confirm = $('#confirm').dialog({
modal: true, autoOpen: false,
height: 160, width: 500,
show: 'fade', hide: 'fade',
draggable: false, resizable: false
});
// Load folder sizes
$.getJSON('/browse/sizes.jim?dir=' + encodeURIComponent(dir),
folder_size_callback);
// Flag shrunk recordings
// $.getJSON('/browse/shrunk.jim?dir=' + encodeURIComponent(dir),
// shrunk_callback);
// Flag folders with unwatched items
$.getJSON('/browse/newdir.jim?dir=' + encodeURIComponent(dir),
new_folder_callback);
// Load clipboard
reloadclipboard();
// Uncheck everything
$('input.fs:checked').prop('checked', false);
// Buttons
$('#dedup').button().click(function() {
window.location = '/dedup/dedup.jim?dir='
+ encodeURIComponent(dir);
});
$('#save_stream').button().click(function() {
$('#savestream_retrieving').show();
$('#savestream_detail').text('').hide();
$('#savestream_spin').hide();
$('#savestream_name').val('').enable();
$('#savestreamform').dialog('open');
$('#savestream_detail').load(
'/browse/ffmpeg.jim?file=' +
encodeURIComponent($('#save_stream').attr('file')),
function() {
$('#savestream_retrieving').hide();
$('#savestream_detail').show();
$('#savestream_form').show();
});
});
$('#selectall').click(function(e) {
e.preventDefault();
$('input.fs').prop('checked', true).trigger('change');
});
$('#deselectall').click(function(e) {
e.preventDefault();
$('input.fs:checked').prop('checked', false).trigger('change');
});
$('#join').button().disable()
.click(function() {
var files = new Array();
var els = $('input.fsts:checked + a').each(function() {
files.push($(this).attr('file'));
});
//console.log("%o", files);
window.location.href = '/browse/join/join.jim?files=' +
files.join();
});
$('#delete').button().disable()
.click(function() {
var files = new Array();
var els = $('input.fs:checked + a').each(function() {
files.push(decodeURIComponent($(this).attr('file')));
});
//console.log("%o", files);
var str = 'Are you sure you want to delete ' + files.length +
' file';
if (files.length != 1) str += 's';
str += '?';
if (confirm(str))
{
disableall();
$('#deletewait').slideDown('slow');
$('#pwdialogue').dialog({
title: "Deleting",
modal: true, autoOpen: true,
height: 'auto', width: 'auto',
show: 'scale', hide: 'fade',
draggable: false, resizable: false,
closeOnEscape: false,
open: function() {
$('.ui-dialog-titlebar-close').hide();
}
});
$('#pwfeedback').load(
'/browse/delete.jim', {
'dir': dir,
'files': files
}, function() {
$('#pwdialogue').dialog('close');
window.location.reload(true);
});
}
});
$('#copy,#cut').button().disable()
.click(function() {
var files = new Array();
var els = $('input.fs:checked + a').each(function() {
files.push(decodeURIComponent($(this).attr('file')));
});
//console.log("%o", files);
var action = $(this).attr('id');
if (action == 'copy' && !confirm('Are you sure? ' +
'Copying recordings can take a very long time!'))
return;
$.post('/browse/clipboard.jim', {
'act': 'add',
'dir': dir,
'mode': action,
'path': files
}, function() {
reloadclipboard();
$('input.fs:checked').prop('checked', false);
});
});
$('#newdir').button().click(function() {
$('#newdirform').dialog({
autoOpen: true,
height: 'auto', width: 'auto',
modal: true,
buttons: {
"Create": newdir_submit,
"Cancel": function() {
$(this).dialog('close');
}
},
close: function() { $('#newdirname').val(''); }
});
});
$('input.fs').change(function() {
var num = $('input.fs:checked').size();
if (num > 0)
$('#delete,#cut,#copy').enable();
else
$('#delete,#cut,#copy').disable();
var num = $('input.fsts:checked').size();
if (num > 1)
$('#join').enable();
else
$('#join').disable();
});
var streamsize = 0;
function checkstream()
{
$.get('/browse/streamsize.jim', function(size) {
//console.log('Stream size: %o', size);
var mb = size / (1024 * 1024);
mb = mb|0;
if (streamsize && size > streamsize)
{
rate = (size - streamsize) * 8.0 /
(3 * 1048576);
$('#streamstatus').text(mb +
' MiB (growing @' + rate.toFixed(2) +
' Mib/s)');
}
else
$('#streamstatus').text(mb + ' MiB');
streamsize = size;
});
}
if ($('#streamstatus').length)
setInterval(checkstream, 3000);
});

View File

@@ -0,0 +1,34 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require ts.class
httpheader "application/json"
set dir [cgi_get dir "-"]
if {$dir eq "-"} exit
puts "{"
foreach file [readdir -nocomplain $dir] {
if {![string match {*.ts} $file]} { continue }
if {[catch {set ts [ts fetch "$dir/$file"]}]} continue
set eit 1
if {[$ts flag "Shrunk"]} { set eit 0 }
if {$eit} {
set xfile [file rootname $file]
if {[catch {set eit [\
exec /mod/bin/stripts -cq "$dir/$xfile"]}]} {
continue
}
if {!$eit} { $ts set_shrunk }
}
puts " \"$file\": $eit,"
}
puts " \"dummy\": 0"
puts "}"

View File

@@ -0,0 +1,40 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
httpheader "application/json"
set dir [cgi_get dir]
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"] {
lassign [split $line "\t"] size node
set node [string range $node $dlen end]
puts "\"$node\" : \"$size\","
}
# Handle symbolic links.
foreach file [readdir $dir] {
set file "$dir/$file"
if {[catch {set lk [file readlink $file]}]} continue
if {![string match "/*" $lk]} { set lk "$dir/$lk" }
if {![file isdirectory $lk]} continue
foreach line [split [exec /mod/bin/busybox/du -h "$lk"] "\n"] {
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 "\"dummy\" : \"\""
puts "}"

View File

@@ -0,0 +1,13 @@
#!/mod/bin/jimsh
set stream "/mnt/hd3/Streamer_down_file"
source /mod/webif/lib/setup
httpheader "text/plain"
if {[file exists $stream]} {
puts -nonewline [file size $stream]
} else {
puts -nonewline 0
}

View File

@@ -0,0 +1,13 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require ts.class pretty_size
httpheader
set rfile [cgi_get file]
set base [file rootname $rfile]
puts [exec /mod/bin/stripts -aq $base]

View File

@@ -0,0 +1,55 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require ts.class pretty_size
httpheader
set rfile [cgi_get file]
set ts [ts fetch $rfile]
set dir [file dirname $rfile]
set len [$ts duration 1]
set stripstart [clock milliseconds]
set base [file rootname $rfile]
set origdir "$dir/_original"
if {![file exists $origdir]} { file mkdir $origdir }
set shname [file tail $base]
puts "Processing $shname"
if {[file exists "$origdir/$shname.ts"]} {
puts "This recording already exists within _original"
puts "Cannot continue."
exit
}
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"
}
puts [exec /mod/bin/stripts \
"$origdir/$shname" \
"$dir/$shname" \
]
# Set the file time to match the old file
ts touchgroup "$dir/$shname.ts" "$origdir/$shname.ts"
set newname "$shname-[clock seconds]"
puts "Renaming file group to $newname"
ts renamegroup "$dir/$shname.ts" $newname
exec /mod/bin/hmt "+setfilename=$newname" "$dir/$newname.hmt"
exec /mod/bin/hmt "+shrunk" "$dir/$newname.hmt"
set striptime [expr [expr [clock milliseconds] - $stripstart] / 1000.0]
puts "Time taken: $striptime"

View File

@@ -0,0 +1,24 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require ts.class
httpheader
set tsfile [file normalize [cgi_get file]]
set ntsfile "[file rootname $tsfile].nts"
set origfile "[file dirname $tsfile]/_original/[file tail $ntsfile]"
if {![file exists $ntsfile]} {
puts "0"
} else {
set sz [file size $origfile]
set nsz [file size $ntsfile]
set perc [expr $nsz * 100 / $sz]
if {$perc > 100} { set perc 100 }
puts $perc
}

View File

@@ -0,0 +1,59 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require ts.class pretty_size
jqplugin progressbar
jscss strip.js
header
set rfile [cgi_get file]
set ts [ts fetch $rfile]
set dir [file dirname $rfile]
set len [$ts duration 1]
set esttime $([$ts size] / 5700000)
puts "
<fieldset class=cleft>
<legend>Make recordings smaller by removing unecessary frames</legend>
<p><i>This process will remove freeview EPG data from the recording.<br>
These data are not required and can increase the size of the
recording file by as much as 20%.<br>
Your original recording files will be retained in a folder called _original.
</i>
<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>Size:</th><td>[pretty_size [$ts size]] ([$ts get definition])</td></tr>
<tr><th>Time:</th>
<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...
</span></td></tr>
</table>
<span class=hidden id=params
file=\"[cgi_quote_url $rfile]\"
dir=\"[cgi_quote_url $dir]\"
></span>
<div id=stripdiv class=hidden style=\"padding: 1em\">
<button id=stripit>Shrink recording</button>
</div>
<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>
"

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