Compare commits

..

123 Commits

Author SHA1 Message Date
hummypkg
a001241c5d remove unecessary css files
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1869 2a923420-c742-0410-a762-8d5b09965624
2014-04-30 21:17:23 +00:00
hummypkg
a8a9f041f0 Upgrade jquery mobile
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1868 2a923420-c742-0410-a762-8d5b09965624
2014-04-30 21:15:31 +00:00
hummypkg
67df756156 add mongoose symlink
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1864 2a923420-c742-0410-a762-8d5b09965624
2014-04-30 14:45:44 +00:00
hummypkg
a73afaf951 relocate var/mongoose
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1863 2a923420-c742-0410-a762-8d5b09965624
2014-04-30 14:44:57 +00:00
hummypkg
fe439ec25a remove webif symlink
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1862 2a923420-c742-0410-a762-8d5b09965624
2014-04-30 14:43:49 +00:00
hummypkg
2fa55d3c90 fix automatic backups and slidedown menu
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1861 2a923420-c742-0410-a762-8d5b09965624
2014-04-30 14:39:25 +00:00
hummypkg
c76e6638a4 fix modversion.jim
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1856 2a923420-c742-0410-a762-8d5b09965624
2014-04-27 14:49:46 +00:00
hummypkg
cd3cbf186c fix mobile interface, settings
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1851 2a923420-c742-0410-a762-8d5b09965624
2014-04-23 12:59:30 +00:00
hummypkg
38956e2669 fix scheduled check
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1850 2a923420-c742-0410-a762-8d5b09965624
2014-04-23 11:56:55 +00:00
hummypkg
62a13e18cc version 1.0.11
git-svn-id: file:///root/webif/svn/humax/pkg/src/webif/trunk@1848 2a923420-c742-0410-a762-8d5b09965624
2014-04-22 00:03:29 +00:00
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
807 changed files with 8939 additions and 3676 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,9 +1,11 @@
Package: webif
Priority: optional
Section: web
Version: 0.10.0
Version: 1.0.11-5
Architecture: mipsel
Maintainer: af123@hummypkg.org.uk
Depends: webif-channelicons(>=1.0.3),mongoose(>=3.0-7),jim(>=0.73-1),jim-oo,jim-sqlite3(>=0.73),jim-cgi(>=0.5),service-control(>=1.2),busybox(>=1.19.3-1),lsof,epg(>=1.0.9),hmt(>=1.1.6),ssmtp,anacron,trm,openssl-command,nicesplice,id3v2,file,rsvsync(>=1.0.2),webif-charts(>=1.2),stripts(>=1.1.2)
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.08),ffmpeg,id3v2,multienv(>=1.6)
Conflicts: tvdiary(<0.0.2-6)
Suggests:
Description: An evolving web interface for the Humax.
Tags: http://hummy.tv/forum/threads/4723/

View File

@@ -1,29 +1,45 @@
#!/bin/sh
echo "Postinstall $*"
export tmpf=/tmp/cronf.$$
# Add cron jobs
crond=$PKG_ROOT/var/spool/cron/crontabs
[ -d $crond ] || exit 1
cronf=$crond/root
grep -v webif/lib/bin/auto $cronf > $tmpf
(
cat $tmpf
echo '*/10 * * * * /mod/webif/lib/bin/auto >> /tmp/webif_auto.log 2>&1'
) > $cronf
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
grep -v 'backup/backup.jim' $ana > $tmpf
(
cat $tmpf
echo "1 8 sched_backup /mod/var/mongoose/cgi-bin/backup/backup.jim"
) > $ana
egrep -v 'backup/backup.jim|bin/diskattrs' $ana > $tmpf
cat $tmpf - << EOM > $ana
1 8 sched_backup /mod/webif/html/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

16
CONTROL/preinst Executable file
View File

@@ -0,0 +1,16 @@
#!/bin/sh
# Handle moving the legacy /var/mongoose directory to /webif..
if [ -h /mod/webif -a -d /var/mongoose ]; then
echo "Relocating web interface files..."
cd /mod
rm webif || exit 1
mv var/mongoose webif || exit 1
cd var
ln -s ../webif mongoose
fi
exit 0

View File

@@ -2,16 +2,17 @@
export tmpf=/tmp/cronf.$$
cronf=$PKG_ROOT/var/spool/cron/crontabs/root
if [ -f $cronf ]; then
grep -v webif/lib/bin/auto $cronf > $tmpf
cp $tmpf $cronf
[ -s $cronf ] || rm -f $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
grep -v 'backup/backup.jim' $ana > $tmpf
egrep -v 'backup/backup.jim|bin/diskattrs' $ana > $tmpf
cp $tmpf $ana
[ -f $tmpf ] && rm -f $tmpf
exit 0

View File

@@ -1,16 +1,16 @@
#!/bin/sh
if [ -f /mnt/hd1/dvbepg/epg.dat ]; then
epg=/mnt/hd1/dvbepg/epg.dat
epgdb=/mnt/hd1/epg.db
else
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 &
/mod/bin/epg -f $epg sqlitedumpd $epgdb > /tmp/epgd.log 2>&1 &
;;
stop)
killall -q epg

1
var/mongoose Symbolic link
View File

@@ -0,0 +1 @@
../webif

View File

@@ -1,87 +0,0 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require rsv.class
set dir /mod/var/backup
puts "Content-Type: text/html"
puts ""
cgi_input
#cgi_dump
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
}
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,
favIdx
from TBL_FAV join TBL_SVC using (hSvc)
order by eFavGroup, favIdx
}] {
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)\t$res(favIdx)"
}
puts "Done."
close $fd
rsv cleanup

View File

@@ -1,141 +0,0 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require rsv.class findhsvc system.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 <i>$file</i> - $msg"
exit
}
puts "Restoring scheduled events from <i>$file</i>..."
$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]
}
# Don't restore DSO events.
if {$vars(ersvtype) == 11} { continue }
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} {
if {[catch {$rsv insert pending 1} msg]} {
puts " Error inserting event, $msg"
}
}
}
$rsvdb query {commit transaction;}
puts "Restoring favourite channels..."
$rsvdb query {begin transaction;}
$rsvdb query {delete from channel.TBL_FAV}
$rsvdb query {drop table if exists pending.fav}
$rsvdb query {create table pending.fav (
favIdx integer primary key autoincrement unique,
hSvc integer(4),
eFavGroup integer(4),
[eSvcType] integer(4)
)}
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 idx [lindex $vals 4]
if {$idx eq ""} { set idx 0 }
set hsvc [get_channel_attr $chan]
if {$grp != $group} {
set grp $group
puts " Group $grp"
}
puts " $chan"
if {$hsvc eq ""} {
puts " Cannot map channel name to service."
continue
}
set query "
insert into pending.fav(favIdx, hSvc, eFavGroup, eSvcType)
values($idx, $hsvc, $group, $type);
"
$rsvdb query $query
}
$rsvdb query {commit transaction;}
system restartpending
close $fd
rsv cleanup

View File

@@ -1,102 +0,0 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require ts.class pretty_size system.class tdelete
puts "Content-Type: text/html\r\n"
cgi_input
#cgi_dump
set dir [cgi_get dir]
#puts "DIR: ($dir)"
if {[system pkginst undelete]} {
set dustbin [system dustbin]
} else {
set dustbin ""
}
proc bindir {file} {
global dustbin
set dir [file dirname $file]
regsub "^[system mediaroot]" $dir $dustbin ndir
if {$dir eq $ndir} { set ndir $dustbin }
system mkdir_p $ndir
return $ndir
}
proc touch {file} {
exec /mod/bin/busybox/touch $file
}
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 {$dustbin ne "" && [string first $dustbin $file] > -1} {
set ldustbin ""
} else {
set ldustbin $dustbin
}
set done 0
if {[file isdirectory $file]} {
puts -nonewline "Directory..."
if {$ldustbin ne ""} {
set ndir "[bindir $file]/[file tail $file]"
while {[file isdirectory $ndir]} {
append ndir "_"
}
file rename $file $ndir
touch $ndir
} else {
tdelete $file
}
puts -nonewline "Done..."
set done 1
} elseif {[string match {*.ts} $file]} {
set ts [ts fetch $file]
# Check TS validity
if {![catch {$ts get file}]} {
if {$ldustbin ne ""} {
$ts move [bindir $file] 1 1
} else {
if {[$ts delete]} {
puts "Successfully deleted $file."
} else {
puts "Problem deleting $file, [$ts get error]"
}
}
set done 1
}
# else treat as normal file.
}
if {!$done} {
if {$ldustbin ne ""} {
set nfile "[bindir $file]/[file tail $file]"
file rename $file $nfile
touch $nfile
} else {
tdelete $file
}
catch {file delete "[file rootname $file].hmi"}
puts -nonewline "Done..."
}
puts "</li>"
}
puts "</ul>"

View File

@@ -1,22 +0,0 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/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,54 +0,0 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require 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,49 +0,0 @@
#!/mod/bin/jimsh
package require cgi
package require pack
source /mod/webif/lib/setup
require ts.class hexdump
puts "Content-Type: text/html"
puts ""
cgi_input
#cgi_dump
set dir [cgi_get dir]
if {![file isdirectory $dir]} { exit }
if {![file exists "$dir/.series"]} { exit }
set tot 0
set watched 0
foreach file [readdir -nocomplain $dir] {
if {![string match {*.ts} $file]} { continue }
#puts "FILE: $file"
incr tot
if {[set ts [ts fetch "$dir/$file"]] != 0} {
if {![$ts flag "New"]} { incr watched }
}
}
set fd [open "$dir/.series"]
set bytes [read $fd]
close $fd
set recs [unpack $bytes -uintle 0 32]
set played [unpack $bytes -uintle 32 32]
puts "Current: $played/$recs"
#hexdump $bytes
puts "Calculated: $watched/$tot"
pack bytes $tot -intle 32 0
pack bytes $watched -intle 32 32
#hexdump $bytes
set fd [open "$dir/.series" "w"]
puts -nonewline $fd $bytes
close $fd

View File

@@ -1,27 +0,0 @@
#!/mod/bin/jimsh
package require cgi
#puts "Content-Type: text/plain"
puts "Content-Type: application/json"
puts ""
cgi_input
#cgi_dump
set dir [cgi_get dir "/media/My Video/Children"]
puts "{"
foreach file [readdir -nocomplain $dir] {
if {![string match {*.ts} $file]} { continue }
set xfile [file rootname $file]
if {[catch {set eit [exec /mod/bin/stripts -cq "$dir/$xfile"]}]} {
continue
}
puts " \"$file\": $eit,"
}
puts " \"dummy\": 0"
puts "}"

View File

@@ -1,8 +0,0 @@
#!/mod/bin/jimsh
puts "Content-type: text/plain\n"
foreach f [dict keys $env] {
puts "$f = $env($f)"
}

View File

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

View File

@@ -1,365 +0,0 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require settings.class
require plugin
puts "Content-Type: text/html"
puts ""
cgi_input
#cgi_dump
if {[cgi_get act] eq "https"} {
if {[cgi_get val off] eq "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
}
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 pkgdev [$settings pkgdev]
set notoolbar [$settings notoolbar]
set nomobile [$settings nomobile]
# Handle updates
if {![dict exists $env REQUEST_URI]} { set env(REQUEST_URI) "" }
proc _handle_update {class var old text} {
global _cgi
global settings
if {[dict exists $_cgi $var]} {
set new [string trim [dict get $_cgi $var]]
if {$new == $old} {
puts "$text unchanged."
} elseif [string is $class -strict $new] {
$settings $var $new
puts "$text updated."
} else {
puts "Invalid value for $var."
}
exit
}
}
proc handle_int_update {var old {text "Value"}} {
_handle_update digit $var $old $text
}
proc handle_str_update {var old {text "Value"}} {
_handle_update alnum $var $old $text
}
handle_str_update hostname $hostname Hostname
_handle_update ascii smtp_server $smtp_server "SMTP Server"
handle_int_update channel_group $channel_group "Channel Group"
handle_str_update epg_style $epg_style "EPG Type"
handle_int_update pkgdev $pkgdev "Development Package Display"
handle_int_update notoolbar $notoolbar "Disable toolbar"
handle_int_update nomobile $nomobile "Disable mobile link"
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
}
header
puts {
<script type="text/javascript" src="/cgi-bin/settings.js"></script>
<script type="text/javascript" src="/js/jquery.form.js"></script>
<script type="text/javascript" src="/js/jconfirmaction.jquery.js"></script>
<link href=/css/jconfirmaction.jquery.css rel=stylesheet type=text/css />
<script type="text/javascript" src="/js/iphone-style-checkboxes.js"></script>
<link href=/css/iphone-style-checkboxes.css rel=stylesheet type=text/css />
}
puts "
<fieldset style=\"display: inline\">
<legend>
General Settings
</legend>
<table>
"
puts "
<tr>
<form class=auto id=hostname method=get action=$env(REQUEST_URI)>
<th class=key>Hostname</th>
<td><input name=hostname value=\"$hostname\"
class=\"text ui-widget-content ui-corner-all\"
length=20 maxlength=50>
<small>
<input id=hostname_submit value=\"change\" type=submit>
</small>
<div id=hostname_output></div>
</td>
</form>
</tr>
"
puts -nonewline "
<tr>
<th class=key>HTTPS web server?</th>
<td><input id=https_toggle name=https type=checkbox value=yes"
if {[file exists /mod/etc/mongoose.cert]} { puts -nonewline " checked" }
puts ">
<div id=https_output></div>
</td>
</tr>
"
puts -nonewline "
<tr>
<th class=key>Slide-down toolbar?</th>
<td><input id=toolbar_toggle name=toolbar type=checkbox value=yes"
if {$notoolbar == 0} { puts -nonewline " checked" }
puts ">
<div id=toolbar_output></div>
</td>
</tr>
"
puts -nonewline "
<tr>
<th class=key>Mobile link on main page?</th>
<td><input id=mobile_toggle name=mobile type=checkbox value=yes"
if {$nomobile == 0} { puts -nonewline " checked" }
puts ">
<div id=mobile_output></div>
</td>
</tr>
"
puts "
<tr>
<form class=auto id=epg_style method=get action=$env(REQUEST_URI)>
<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=channel_group method=get action=$env(REQUEST_URI)>
<th class=key>Channel Group for EPG</th>
<td><select id=channel_group name=channel_group
class=\"text ui-widget-content ui-corner-all\">
"
set i 0
puts "<option value=0>-- None --"
foreach grp [$settings channel_groups] {
incr i
puts -nonewline "<option value=$i"
if {$channel_group == $i} {
puts -nonewline " selected"
}
puts ">$grp"
}
puts "
</select>
<small>
<input name=channel_group value=\"set\" type=submit>
</small>
<div id=channel_group_output></div>
</td>
</form>
</tr>
"
puts "
</table>
</fieldset>
<br><br>
<fieldset style=\"display: inline\">
<legend> Email Settings </legend>
<table>
"
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>
</td>
</form>
</tr>
"
puts "
</table>
</fieldset>
"
puts "
<br><br>
<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(REQUEST_URI)>
<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>
"
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 "
<br><br>
<fieldset style=\"display: inline\">
<legend> Advanced Settings </legend>
<table>
<tr>
<th class=key>Show development and advanced packages?</th>
<td><input name=pkgdev id=pkgdev value=1 type=checkbox
"
if {$pkgdev} { puts -nonewline " checked" }
puts ">
</td>
</tr>
</table>
<div id=pkgdev_output></div>
</fieldset>
"
eval_plugins settings
footer

View File

@@ -1,117 +0,0 @@
(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();
$(":checkbox").iphoneStyle();
$('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');
}
});
});
$('#pkgdev').change(function() {
var arg = '0';
if ($(this).attr('checked'))
arg = '1';
$(this).disable();
$('#pkgdev_output')
.empty()
.show('slow')
.load('/cgi-bin/settings.jim?pkgdev=' + arg,
function() {
$('#pkgdev').enable();
$('#pkgdev_output')
.css('font-style', 'italic')
.delay(2000).fadeOut('slow');
});
});
$('#https_toggle').change(function() {
var arg = 'off';
if ($(this).attr('checked'))
arg = 'on';
$(this).disable();
$('#https_output')
.empty()
.html('<img src=/img/loading.gif>Please Wait...')
.show('slow')
.load('/cgi-bin/settings.jim?act=https&val=' + arg,
function() {
$('#https_toggle').enable();
$('#https_output')
.css('font-style', 'italic')
.delay(2000).fadeOut('slow');
});
});
$('#toolbar_toggle').change(function() {
var arg = '1';
if ($(this).attr('checked'))
arg = '0';
$(this).disable();
$('#toolbar_output')
.empty()
.show('slow')
.load('/cgi-bin/settings.jim?notoolbar=' + arg,
function() {
$('#toolbar_toggle').enable();
$('#toolbar_output')
.css('font-style', 'italic')
.delay(2000).fadeOut('slow');
});
});
$('#mobile_toggle').change(function() {
var arg = '1';
if ($(this).attr('checked'))
arg = '0';
$(this).disable();
$('#mobile_output')
.empty()
.show('slow')
.load('/cgi-bin/settings.jim?nomobile=' + arg,
function() {
$('#mobile_toggle').enable();
$('#mobile_output')
.css('font-style', 'italic')
.delay(2000).fadeOut('slow');
});
});
});

View File

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

View File

@@ -1,33 +0,0 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require system.class chunked
cgi_input
#cgi_dump
set diag [cgi_get diag general]
start_chunked
if {[system modversion 1] < 113} {
chunk ">>> Diagnostics only available with customised firmware 1.13 or above."
end_chunked
exit
}
chunk ">>> Beginning diagnostic $diag\r\n"
set bcmd "|/bin/diag $diag"
set fd [open $bcmd r]
while {[gets $fd line] >= 0} {
chunk "$line\r\n"
#chunk_pad
}
close $fd
chunk "\r\n"
chunk ">>> Ending diagnostic $diag\r\n"
end_chunked

View File

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

View File

@@ -1,51 +0,0 @@
jQuery.ajaxPrefilter(function(options, _, jqXHR) {
if (jQuery.isFunction(options.progress)) {
var xhrFactory = options.xhr,
interval;
options.xhr = function() {
var xhr = xhrFactory.apply(this, arguments),
partial = "",
prevcount = 1;
interval = setInterval(function() {
var responseText,
jQueryPartial;
try {
responseText = xhr.responseText;
if (responseText && (responseText.length > partial.length))
{
partial = responseText;
jQueryPartial = $(partial).filter("*")
if (jQueryPartial.length > prevcount) {
prevcount = jQueryPartial.length;
options.progress(jQueryPartial.filter("*:not(:last)"));
}
}
} catch(e) {
if (window.console)
console.log(e);
}
}, options.progressInterval);
return xhr;
};
function stop()
{
if (interval)
clearInterval(interval);
}
jqXHR.then(stop, stop);
}
});

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
<!--#exec cmd="/mod/webif/html/lib/footer.jim" -->

View File

@@ -1,35 +0,0 @@
#!/mod/bin/jimsh
puts {
<!doctype html>
<html>
<head>
<title>
}
source /mod/webif/include/model.jim
puts {
</title>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9" />
<link rel="shortcut icon" href=/img/favicon.ico />
<link type="text/css" href="/lib/jquery.ui/css/custom-theme/jquery-ui.css"
rel="Stylesheet" />
<link href="/css/style.css" rel="Stylesheet" type="text/css" />
<script type="text/javascript" src="/js/jquery.js"></script>
<script type="text/javascript" src="/lib/jquery.ui/js/jquery-ui.js"></script>
</head>
<body>
}
source /mod/webif/html/lib/topbar.jim
puts "<div id=restart_block>"
source /mod/webif/include/restart.jim
puts "</div>"
puts {
<div style="clear: both">
<!-- end of header -->
}
set renderstart [clock milliseconds]

View File

@@ -1 +0,0 @@
<!--#exec cmd="/mod/webif/html/lib/header.jim" -->

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
jquery.mobile-1.2.0.min.css

View File

@@ -1 +0,0 @@
jquery.mobile-1.2.0.min.js

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 180 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 180 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

View File

@@ -1,563 +0,0 @@
/*!
* jQuery UI CSS Framework 1.8.24
*
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Theming/API
*/
/* Layout helpers
----------------------------------*/
.ui-helper-hidden { display: none; }
.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
.ui-helper-clearfix:after { clear: both; }
.ui-helper-clearfix { zoom: 1; }
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
/* Interaction Cues
----------------------------------*/
.ui-state-disabled { cursor: default !important; }
/* Icons
----------------------------------*/
/* states and images */
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
/* Misc visuals
----------------------------------*/
/* Overlays */
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
/*!
* jQuery UI CSS Framework 1.8.24
*
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Theming/API
*
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ctl=themeroller&ffDefault=Segoe%20UI,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=8px&bgColorHeader=ccff99&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=45&borderColorHeader=494437&fcHeader=000000&iconColorHeader=554e34&bgColorContent=ffffcc&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=8e846b&fcContent=383838&iconColorContent=d19405&bgColorDefault=fece2f&bgTextureDefault=12_gloss_wave.png&bgImgOpacityDefault=60&borderColorDefault=d19405&fcDefault=4c3000&iconColorDefault=3d3d3d&bgColorHover=ffdd57&bgTextureHover=12_gloss_wave.png&bgImgOpacityHover=70&borderColorHover=a45b13&fcHover=381f00&iconColorHover=bd7b00&bgColorActive=ffffff&bgTextureActive=05_inset_soft.png&bgImgOpacityActive=30&borderColorActive=655e4e&fcActive=0074c7&iconColorActive=eb990f&bgColorHighlight=fff9e5&bgTextureHighlight=12_gloss_wave.png&bgImgOpacityHighlight=90&borderColorHighlight=eeb420&fcHighlight=1f1f1f&iconColorHighlight=ed9f26&bgColorError=d34d17&bgTextureError=07_diagonals_medium.png&bgImgOpacityError=20&borderColorError=ffb73d&fcError=ffffff&iconColorError=ffe180&bgColorOverlay=5c5c5c&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=50&opacityOverlay=80&bgColorShadow=cccccc&bgTextureShadow=01_flat.png&bgImgOpacityShadow=30&opacityShadow=60&thicknessShadow=7px&offsetTopShadow=-7px&offsetLeftShadow=-7px&cornerRadiusShadow=8px
*/
/* Component containers
----------------------------------*/
.ui-widget { font-family: Segoe UI, Arial, sans-serif; font-size: 1.1em; }
.ui-widget .ui-widget { font-size: 1em; }
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Segoe UI, Arial, sans-serif; font-size: 1em; }
.ui-widget-content { border: 1px solid #8e846b; background: #ffffcc url(images/ui-bg_highlight-soft_100_ffffcc_1x100.png) 50% top repeat-x; color: #383838; }
.ui-widget-content a { color: #383838; }
.ui-widget-header { border: 1px solid #494437; background: #ccff99 url(images/ui-bg_gloss-wave_45_ccff99_500x100.png) 50% 50% repeat-x; color: #000000; font-weight: bold; }
.ui-widget-header a { color: #000000; }
/* Interaction states
----------------------------------*/
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d19405; background: #fece2f url(images/ui-bg_gloss-wave_60_fece2f_500x100.png) 50% 50% repeat-x; font-weight: bold; color: #4c3000; }
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #4c3000; text-decoration: none; }
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #a45b13; background: #ffdd57 url(images/ui-bg_gloss-wave_70_ffdd57_500x100.png) 50% 50% repeat-x; font-weight: bold; color: #381f00; }
.ui-state-hover a, .ui-state-hover a:hover { color: #381f00; text-decoration: none; }
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #655e4e; background: #ffffff url(images/ui-bg_inset-soft_30_ffffff_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #0074c7; }
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #0074c7; text-decoration: none; }
.ui-widget :active { outline: none; }
/* Interaction Cues
----------------------------------*/
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #eeb420; background: #fff9e5 url(images/ui-bg_gloss-wave_90_fff9e5_500x100.png) 50% top repeat-x; color: #1f1f1f; }
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #1f1f1f; }
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #ffb73d; background: #d34d17 url(images/ui-bg_diagonals-medium_20_d34d17_40x40.png) 50% 50% repeat; color: #ffffff; }
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
/* Icons
----------------------------------*/
/* states and images */
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_d19405_256x240.png); }
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_d19405_256x240.png); }
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_554e34_256x240.png); }
.ui-state-default .ui-icon { background-image: url(images/ui-icons_3d3d3d_256x240.png); }
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_bd7b00_256x240.png); }
.ui-state-active .ui-icon {background-image: url(images/ui-icons_eb990f_256x240.png); }
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_ed9f26_256x240.png); }
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffe180_256x240.png); }
/* positioning */
.ui-icon-carat-1-n { background-position: 0 0; }
.ui-icon-carat-1-ne { background-position: -16px 0; }
.ui-icon-carat-1-e { background-position: -32px 0; }
.ui-icon-carat-1-se { background-position: -48px 0; }
.ui-icon-carat-1-s { background-position: -64px 0; }
.ui-icon-carat-1-sw { background-position: -80px 0; }
.ui-icon-carat-1-w { background-position: -96px 0; }
.ui-icon-carat-1-nw { background-position: -112px 0; }
.ui-icon-carat-2-n-s { background-position: -128px 0; }
.ui-icon-carat-2-e-w { background-position: -144px 0; }
.ui-icon-triangle-1-n { background-position: 0 -16px; }
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
.ui-icon-triangle-1-e { background-position: -32px -16px; }
.ui-icon-triangle-1-se { background-position: -48px -16px; }
.ui-icon-triangle-1-s { background-position: -64px -16px; }
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
.ui-icon-triangle-1-w { background-position: -96px -16px; }
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
.ui-icon-arrow-1-n { background-position: 0 -32px; }
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
.ui-icon-arrow-1-e { background-position: -32px -32px; }
.ui-icon-arrow-1-se { background-position: -48px -32px; }
.ui-icon-arrow-1-s { background-position: -64px -32px; }
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
.ui-icon-arrow-1-w { background-position: -96px -32px; }
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
.ui-icon-arrow-4 { background-position: 0 -80px; }
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
.ui-icon-extlink { background-position: -32px -80px; }
.ui-icon-newwin { background-position: -48px -80px; }
.ui-icon-refresh { background-position: -64px -80px; }
.ui-icon-shuffle { background-position: -80px -80px; }
.ui-icon-transfer-e-w { background-position: -96px -80px; }
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
.ui-icon-folder-collapsed { background-position: 0 -96px; }
.ui-icon-folder-open { background-position: -16px -96px; }
.ui-icon-document { background-position: -32px -96px; }
.ui-icon-document-b { background-position: -48px -96px; }
.ui-icon-note { background-position: -64px -96px; }
.ui-icon-mail-closed { background-position: -80px -96px; }
.ui-icon-mail-open { background-position: -96px -96px; }
.ui-icon-suitcase { background-position: -112px -96px; }
.ui-icon-comment { background-position: -128px -96px; }
.ui-icon-person { background-position: -144px -96px; }
.ui-icon-print { background-position: -160px -96px; }
.ui-icon-trash { background-position: -176px -96px; }
.ui-icon-locked { background-position: -192px -96px; }
.ui-icon-unlocked { background-position: -208px -96px; }
.ui-icon-bookmark { background-position: -224px -96px; }
.ui-icon-tag { background-position: -240px -96px; }
.ui-icon-home { background-position: 0 -112px; }
.ui-icon-flag { background-position: -16px -112px; }
.ui-icon-calendar { background-position: -32px -112px; }
.ui-icon-cart { background-position: -48px -112px; }
.ui-icon-pencil { background-position: -64px -112px; }
.ui-icon-clock { background-position: -80px -112px; }
.ui-icon-disk { background-position: -96px -112px; }
.ui-icon-calculator { background-position: -112px -112px; }
.ui-icon-zoomin { background-position: -128px -112px; }
.ui-icon-zoomout { background-position: -144px -112px; }
.ui-icon-search { background-position: -160px -112px; }
.ui-icon-wrench { background-position: -176px -112px; }
.ui-icon-gear { background-position: -192px -112px; }
.ui-icon-heart { background-position: -208px -112px; }
.ui-icon-star { background-position: -224px -112px; }
.ui-icon-link { background-position: -240px -112px; }
.ui-icon-cancel { background-position: 0 -128px; }
.ui-icon-plus { background-position: -16px -128px; }
.ui-icon-plusthick { background-position: -32px -128px; }
.ui-icon-minus { background-position: -48px -128px; }
.ui-icon-minusthick { background-position: -64px -128px; }
.ui-icon-close { background-position: -80px -128px; }
.ui-icon-closethick { background-position: -96px -128px; }
.ui-icon-key { background-position: -112px -128px; }
.ui-icon-lightbulb { background-position: -128px -128px; }
.ui-icon-scissors { background-position: -144px -128px; }
.ui-icon-clipboard { background-position: -160px -128px; }
.ui-icon-copy { background-position: -176px -128px; }
.ui-icon-contact { background-position: -192px -128px; }
.ui-icon-image { background-position: -208px -128px; }
.ui-icon-video { background-position: -224px -128px; }
.ui-icon-script { background-position: -240px -128px; }
.ui-icon-alert { background-position: 0 -144px; }
.ui-icon-info { background-position: -16px -144px; }
.ui-icon-notice { background-position: -32px -144px; }
.ui-icon-help { background-position: -48px -144px; }
.ui-icon-check { background-position: -64px -144px; }
.ui-icon-bullet { background-position: -80px -144px; }
.ui-icon-radio-off { background-position: -96px -144px; }
.ui-icon-radio-on { background-position: -112px -144px; }
.ui-icon-pin-w { background-position: -128px -144px; }
.ui-icon-pin-s { background-position: -144px -144px; }
.ui-icon-play { background-position: 0 -160px; }
.ui-icon-pause { background-position: -16px -160px; }
.ui-icon-seek-next { background-position: -32px -160px; }
.ui-icon-seek-prev { background-position: -48px -160px; }
.ui-icon-seek-end { background-position: -64px -160px; }
.ui-icon-seek-start { background-position: -80px -160px; }
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
.ui-icon-seek-first { background-position: -80px -160px; }
.ui-icon-stop { background-position: -96px -160px; }
.ui-icon-eject { background-position: -112px -160px; }
.ui-icon-volume-off { background-position: -128px -160px; }
.ui-icon-volume-on { background-position: -144px -160px; }
.ui-icon-power { background-position: 0 -176px; }
.ui-icon-signal-diag { background-position: -16px -176px; }
.ui-icon-signal { background-position: -32px -176px; }
.ui-icon-battery-0 { background-position: -48px -176px; }
.ui-icon-battery-1 { background-position: -64px -176px; }
.ui-icon-battery-2 { background-position: -80px -176px; }
.ui-icon-battery-3 { background-position: -96px -176px; }
.ui-icon-circle-plus { background-position: 0 -192px; }
.ui-icon-circle-minus { background-position: -16px -192px; }
.ui-icon-circle-close { background-position: -32px -192px; }
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
.ui-icon-circle-zoomin { background-position: -176px -192px; }
.ui-icon-circle-zoomout { background-position: -192px -192px; }
.ui-icon-circle-check { background-position: -208px -192px; }
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
.ui-icon-circlesmall-close { background-position: -32px -208px; }
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
.ui-icon-squaresmall-close { background-position: -80px -208px; }
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
/* Misc visuals
----------------------------------*/
/* Corner radius */
.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 8px; -webkit-border-top-left-radius: 8px; -khtml-border-top-left-radius: 8px; border-top-left-radius: 8px; }
.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 8px; -webkit-border-top-right-radius: 8px; -khtml-border-top-right-radius: 8px; border-top-right-radius: 8px; }
.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 8px; -webkit-border-bottom-left-radius: 8px; -khtml-border-bottom-left-radius: 8px; border-bottom-left-radius: 8px; }
.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 8px; -webkit-border-bottom-right-radius: 8px; -khtml-border-bottom-right-radius: 8px; border-bottom-right-radius: 8px; }
/* Overlays */
.ui-widget-overlay { background: #5c5c5c url(images/ui-bg_flat_50_5c5c5c_40x100.png) 50% 50% repeat-x; opacity: .80;filter:Alpha(Opacity=80); }
.ui-widget-shadow { margin: -7px 0 0 -7px; padding: 7px; background: #cccccc url(images/ui-bg_flat_30_cccccc_40x100.png) 50% 50% repeat-x; opacity: .60;filter:Alpha(Opacity=60); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*!
* jQuery UI Resizable 1.8.24
*
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Resizable#theming
*/
.ui-resizable { position: relative;}
.ui-resizable-handle { position: absolute;font-size: 0.1px; display: block; }
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*!
* jQuery UI Selectable 1.8.24
*
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Selectable#theming
*/
.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
/*!
* jQuery UI Accordion 1.8.24
*
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Accordion#theming
*/
/* IE/Win - Fix animation bug - #4615 */
.ui-accordion { width: 100%; }
.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
.ui-accordion .ui-accordion-li-fix { display: inline; }
.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
.ui-accordion .ui-accordion-content-active { display: block; }
/*!
* jQuery UI Autocomplete 1.8.24
*
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Autocomplete#theming
*/
.ui-autocomplete { position: absolute; cursor: default; }
/* workarounds */
* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
/*
* jQuery UI Menu 1.8.24
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Menu#theming
*/
.ui-menu {
list-style:none;
padding: 2px;
margin: 0;
display:block;
float: left;
}
.ui-menu .ui-menu {
margin-top: -3px;
}
.ui-menu .ui-menu-item {
margin:0;
padding: 0;
zoom: 1;
float: left;
clear: left;
width: 100%;
}
.ui-menu .ui-menu-item a {
text-decoration:none;
display:block;
padding:.2em .4em;
line-height:1.5;
zoom:1;
}
.ui-menu .ui-menu-item a.ui-state-hover,
.ui-menu .ui-menu-item a.ui-state-active {
font-weight: normal;
margin: -1px;
}
/*!
* jQuery UI Button 1.8.24
*
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Button#theming
*/
.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
.ui-button-icons-only { width: 3.4em; }
button.ui-button-icons-only { width: 3.7em; }
/*button text element */
.ui-button .ui-button-text { display: block; line-height: 1.4; }
.ui-button-text-only .ui-button-text { padding: .4em 1em; }
.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
/* no icon support for input elements, provide padding by default */
input.ui-button { padding: .4em 1em; }
/*button icon element(s) */
.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
/*button sets*/
.ui-buttonset { margin-right: 7px; }
.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
/* workarounds */
button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
/*!
* jQuery UI Dialog 1.8.24
*
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Dialog#theming
*/
.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
.ui-draggable .ui-dialog-titlebar { cursor: move; }
/*!
* jQuery UI Slider 1.8.24
*
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Slider#theming
*/
.ui-slider { position: relative; text-align: left; }
.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
.ui-slider-horizontal { height: .8em; }
.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
.ui-slider-horizontal .ui-slider-range-min { left: 0; }
.ui-slider-horizontal .ui-slider-range-max { right: 0; }
.ui-slider-vertical { width: .8em; height: 100px; }
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
.ui-slider-vertical .ui-slider-range-max { top: 0; }/*!
* jQuery UI Tabs 1.8.24
*
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Tabs#theming
*/
.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
.ui-tabs .ui-tabs-hide { display: none !important; }
/*!
* jQuery UI Datepicker 1.8.24
*
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Datepicker#theming
*/
.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
.ui-datepicker .ui-datepicker-prev { left:2px; }
.ui-datepicker .ui-datepicker-next { right:2px; }
.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
.ui-datepicker .ui-datepicker-next-hover { right:1px; }
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
.ui-datepicker select.ui-datepicker-month,
.ui-datepicker select.ui-datepicker-year { width: 49%;}
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
.ui-datepicker td { border: 0; padding: 1px; }
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
/* with multiple calendars */
.ui-datepicker.ui-datepicker-multi { width:auto; }
.ui-datepicker-multi .ui-datepicker-group { float:left; }
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
/* RTL support */
.ui-datepicker-rtl { direction: rtl; }
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
.ui-datepicker-cover {
position: absolute; /*must have*/
z-index: -1; /*must have*/
filter: mask(); /*must have*/
top: -4px; /*must have*/
left: -4px; /*must have*/
width: 200px; /*must have*/
height: 200px; /*must have*/
}/*!
* jQuery UI Progressbar 1.8.24
*
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Progressbar#theming
*/
.ui-progressbar { height:2em; text-align: left; overflow: hidden; }
.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }

View File

@@ -1 +0,0 @@
jquery-ui-1.8.24.custom.css

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
jquery-ui-1.8.24.custom.min.js

View File

@@ -1,45 +0,0 @@
<!--#include virtual="/lib/header.shtml" -->
<link href=/css/iphone-style-checkboxes.css rel=stylesheet type=text/css />
<script type="text/javascript" src="/js/iphone-style-checkboxes.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('input:checkbox').iphoneStyle();
// Don't allow turning off the web server from within the web server..
$('input:checkbox[name=mongoose][class=toggle]').attr('disabled', true);
$(':checkbox').change(function() {
var url = '/cgi-bin/service.jim?action=' +
escape($(this).attr('class')) +
'&service=' +
escape($(this).attr('name'));
$('#result_txt').load(url, function() {
if ($('#results').is(":visible") == false)
{
$('#results').show('slow');
$('#results').delay(3000).hide('slow');
}
});
});
});
</script>
<h1>Service Management</h1>
<div id=results class=shadowbox style="width: 90%; display: none; margin: 1 0 1em 0">
<div>
<pre id=result_txt>
Results...
</pre>
</div>
</div>
<table class=borders cellpadding=5>
<tr class=greenshade>
<th>Service</th>
<th>Auto Startup</th>
<th>Status</th>
</tr>
<!--#exec cmd="/mod/webif/include/services.jim" -->
</table>
<!--#include virtual="/lib/footer.shtml" -->

View File

@@ -1,64 +0,0 @@
#!/mod/bin/jimsh
source /mod/webif/lib/setup
require settings.class
proc menuitem {title icon link {width 217} {height 0} {extra ""}} {{num 0}} {
incr num
if {$title eq ""} return
if {$num > 4} {
puts {</div><div style="clear: both; padding-top: 1em">}
set num 0
}
if {$extra ne ""} { append extra " " }
puts -nonewline "
<div class=left>
<center>
<a href=$link>
<img src=$icon ${extra}border=0 width=$width"
if {$height} { puts -nonewline " height=$height" }
puts -nonewline ">
</a>
<br>
<a href=$link>
<b>$title</b>
</a>
<br>
</center>
</div>
"
}
if {[[settings] epg_style] eq "grid"} {
set epglink "/cgi-bin/xepg.jim"
} else {
set epglink "/epg.shtml"
}
puts {<div style="clear: both">}
menuitem "Browse Media Files" "/images/323_1_10_Menu_Video.png" \
/cgi-bin/browse.jim 217 228
menuitem "Scheduled Events" "/images/321_1_00_Menu_CHList.png" \
/sched/sched.jim 217 228
menuitem "EPG" "/images/328_1_26_Menu_TV_Guide.png" \
$epglink 217 228
if {[file exists "/mod/bin/ir"]} {
menuitem "Remote" "/img/remote.png" /plugin/ir/remote.jim 217 228
}
if {[[settings] nomobile] eq "0"} {
menuitem "Mobile Version" "/img/mobile.png" /m/ 217 228
}
menuitem "Service Management" "/img/spanner.png" \
/services.shtml 217 228
menuitem "Package Management" "/img/packages.png" \
/pkg/index.shtml 217 228
menuitem "Settings" "/images/326_1_00_Menu_Settings.png" \
/cgi-bin/settings.jim 217 228
menuitem "Diagnostics" "/img/diagnostics.png" \
/diag/diag.jim 217 228

View File

@@ -1,15 +0,0 @@
#!/mod/bin/jimsh
source /mod/webif/lib/setup
require system.class
puts "<font class=blood style=\"font-size: 0.9em; float: right; clear: right\">
Web interface version: [system pkgver webif]<br>
Custom firmware version: [system modversion]
"
if {![catch {set fhtcpversion [system fhtcpversion]}]} {
puts "<br>Humax Version: $fhtcpversion"
}
puts "</font>"

View File

@@ -1,46 +0,0 @@
#!/mod/bin/jimsh
source /mod/webif/lib/setup
puts {
<script type=text/javascript src=/js/packages.js></script>
<style type=text/css>
button.install
{
display: none;
background-image: none;
background: #ccff99;
}
button.remove
{
display: none;
background-image: none;
background: #ff6666;
}
button.upgrade
{
display: none;
}
</style>
<div id=pkgtabs>
<ul>
<li>
<a href=/cgi-bin/pkg.jim?type=inst>
<span>Installed</span>
</a>
</li><li>
<a href=/cgi-bin/pkg.jim?type=upgr>
<span>Upgrades</span>
</a>
</li><li>
<a href=/cgi-bin/pkg.jim?type=avail>
<span>Available</span>
</a>
</li>
</ul>
</div>
}

View File

@@ -1,24 +0,0 @@
#!/mod/bin/jimsh
set services [split [exec /mod/bin/service mlist]]
foreach service $services {
lassign [split $service ":"] name installed auto running
puts "<tr><td class=even>$name</td>"
if (!$installed) {
puts "<td colspan=3><i>Not installed</i></td></tr>"
continue
}
puts -nonewline "<td><input type=checkbox class=auto name=\"$name\""
if ($auto) { puts -nonewline " checked" }
puts "></td>"
puts -nonewline "<td><input type=checkbox class=toggle name=\"$name\""
if ($running) { puts -nonewline " checked" }
puts "></td>"
puts "</tr>"
}

View File

@@ -1,17 +0,0 @@
if {![exists -proc altrow]} {
proc altrow {{attrs ""}} {{i 0}} {
puts -nonewline "<tr class="
if { $i == 0 } {
puts -nonewline "odd"
} else {
puts -nonewline "even"
}
if {$attrs ne ""} {
puts -nonewline " $attrs"
}
puts ">";
set i [expr ! $i]
}
}

View File

@@ -1,228 +0,0 @@
#!/mod/bin/jimsh
source /mod/webif/lib/setup
require lock system.class ts.class tdelete
proc dsc {} {
lassign [system diskspace] x x perc
if {$perc > 90} {
puts "Insufficient disk space, terminating."
exit
}
}
dsc
if {![acquire_lock webif_auto]} {
puts "Cannot acquire exclusive lock, terminating."
exit
}
set tmp "/mod/tmp/webif_auto"
if {![file exists $tmp]} {
if {[catch {file mkdir $tmp} msg]} {
puts "Cannot create temporary directory - $tmp ($msg)"
exit
}
} elseif {![file isdirectory $tmp]} {
puts "Cannot create temporary directory - $tmp (file exists)"
exit
}
# Clean-up the temporary directory
foreach file [readdir -nocomplain $tmp] { tdelete "$tmp/$file" }
if {[system pkginst undelete]} {
set dustbin "[system dustbin]"
} else {
set dustbin ""
}
proc bindir {file binroot} {
set dir [file dirname $file]
regsub "^[system mediaroot]" $dir $binroot ndir
if {$dir eq $ndir} { set ndir $binroot }
system mkdir_p $ndir
return $ndir
}
proc dedup {dir} {
#puts "DEDUP: \[$dir]"
puts [exec /mod/webif/html/dedup/dedup -yes $dir]
exec /mod/webif/html/dedup/dedup -yes $dir
}
proc do_shrink {ts} {
global tmp dustbin tsgroup
set file [file rootname [$ts get file]]
if {[catch {
set perc [exec /mod/bin/stripts -aq $file]
} msg]} {
puts " Error: $msg"
return
}
if {[string match {*%} $perc]} {
set perc [string range $perc 0 end-1]
} else {
set perc 0
}
if {$perc == 0} {
#puts " Already shrunk."
return
}
puts " SHRINK: $file"
puts " Estimate $perc% saving."
puts " Shrinking..."
if {[catch {
puts [exec /mod/bin/stripts -q $file $tmp/shrunk]
} msg]} {
puts "Error during shrink: $msg"
return
}
# The following steps are structured to minimise the risk of
# things being left in an inconsistent state if the system goes
# into standby. Renames within the same filesystem are very
# quick so the risk is small, but even so...
# Move the shrunken version back to the local directory.
foreach f [glob "$tmp/shrunk.*"] {
set ext [file extension $f]
file rename $f "${file}_shrunk${ext}"
}
# Move the old recording to the bin if undelete is installed.
if {$dustbin ne ""} {
$ts move [bindir $file "$dustbin/webif_autoshrink"] 1 1
} else {
# Delete otherwise.
if {[$ts delete]} {
puts "Successfully deleted $file."
} else {
puts "Problem deleting $file, [$ts get error]"
return
}
}
# Finally, rename the shrunken recording again.
foreach ext $tsgroup {
set f "${file}_shrunk.$ext"
if {[file exists $f]} {
file rename $f "${file}.$ext"
}
}
}
proc do_decrypt {ts} {
global tmp dustbin
set file [$ts get file]
set rfile [file rootname $file]
set bfile [file tail $file]
if {![$ts flag "ODEncrypted"]} {
#puts " Already decrypted."
return
}
lassign [$ts dlnaloc] url
if {$url eq ""} {
#puts " Not yet indexed."
return
}
puts " DECRYPT: $rfile"
puts " DLNA: $url"
exec wget -O "$tmp/$bfile" $url
if {[file size $file] != [file size "$tmp/$bfile"]} {
puts " File size mismatch."
return
}
# Move the encrypted file out of the way.
file rename $file "$rfile.encrypted"
# Move the decrypted copy into place.
file rename "$tmp/$bfile" $file
# Patch the HMT - quickest way to get back to a playable file.
exec /mod/bin/hmt -encrypted "$rfile.hmt"
puts " Removing/binning old copy."
# Move the old recording to the bin if undelete is installed.
if {$dustbin ne ""} {
set bin [bindir $file "$dustbin/webif_autodecrypt"]
set tail [file tail $rfile]
file rename "$rfile.encrypted" "$bin/$tail.ts"
foreach ext {nts hmt thm} {
if {[file exists "$rfile.$ext"]} {
file copy $rfile.$ext "$bin/$tail.$ext"
if {$ext eq "hmt"} {
# Patch the binned HMT back
exec /mod/bin/hmt +encrypted \
"$bin/$tail.hmt"
}
}
}
} else {
tdelete "$rfile.encrypted"
}
puts " Done."
}
proc entries {dir callback} {
foreach entry [readdir -nocomplain $dir] {
dsc
if {![string match {*.ts} $entry} continue
if {[catch {set ts [ts fetch "$dir/$entry"]}]} continue
if {$ts == 0} continue
if {[system inuse [file rootname "$dir/$entry"]]} {
puts "$entry - in use\n"
continue
}
$callback $ts
}
}
proc shrink {dir} {
puts "SHRINK: \[$dir]"
entries $dir do_shrink
}
proc decrypt {dir} {
puts "DECRYPT: \[$dir]"
entries $dir do_decrypt
}
proc scan {dir attr} {{indent 0}} {
incr indent 2
#puts "[string repeat " " $indent]\[$dir]"
if {[string match {\[*} $dir]} continue
dsc
if {[file exists "$dir/.auto$attr"]} { $attr $dir }
foreach entry [readdir -nocomplain $dir] {
if {[file isdirectory "$dir/$entry"]} {
scan "$dir/$entry" $attr
}
}
incr indent -2
}
set root [system mediaroot]
if {[llength $argv] > 0} {
foreach arg $argv { scan $root $arg }
} else {
foreach arg {dedup decrypt shrink} {
scan $root $arg
}
}
release_lock webif_auto

View File

@@ -1,54 +0,0 @@
require system.class
#if {![exists -proc class]} { package require oo }
#class browse {}
set _flatten [system pkginst flatten]
proc _addicon {img {hover ""} {class va}} {
set icon "<img src=$img class=\"$class\" height=21"
if {$hover ne ""} {
append icon " alt=\"$hover\" title=\"$hover\""
}
append icon ">"
return $icon
}
proc {dir iconset} {dir} {
set icons {}
set attrs {}
set noflat 0
if $::_flatten {
if {[string match {\[*\]} [file tail $dir]]} { set noflat 1 }
if {[file exists "$dir/.noflatten"]} { set noflat 1 }
if $noflat { lappend icons \
[_addicon "/img/flat-tyre.png" "No-flatten" }
lappend attrs "noflat=$noflat"
}
set autoshrink 0
if {[file exists "$dir/.autoshrink"]} {
set autoshrink 1
lappend icons [_addicon "/img/compress.png" "Auto-shrink"]
lappend attrs "autoshrink=$autoshrink"
}
set autodedup 0
if {[file exists "$dir/.autodedup"]} {
set autodedup 1
lappend icons [_addicon "/img/dedup.png" "Auto-dedup"]
lappend attrs "autodedup=$autodedup"
}
set autodecrypt 0
if {[file exists "$dir/.autodecrypt"]} {
set autodecrypt 1
lappend icons [_addicon "/img/decrypt.png" "Auto-decrypt"]
lappend attrs "autodecrypt=$autodecrypt"
}
return [list $icons $attrs]
}

View File

@@ -1,21 +0,0 @@
proc {file copy} {{force {}} source target} {
try {
if {$force ni {{} -force}} {
error "bad option \"$force\": should be -force"
}
if {![file exists $source]} {
error "source file does not exist."
}
if {$force eq "" && [file exists $target]} {
error "error copying \"$source\" to \"$target\": file already exists"
}
exec /mod/bin/busybox/cp $source $target
} on error {msg opts} {
incr opts(-level)
return {*}$opts $msg
}
}

View File

@@ -1,30 +0,0 @@
package require binary
proc hexdump {str} {
set s ""
set addr 0
append s "[format "%07x" $addr]: "
set t ""
for {set i 0} {$i < [string length $str]} {incr i} {
if {$i > 0 && [expr $i % 16] == 0} {
append s " $t\n"
append s "[format "%07x" $addr]: "
incr addr 16
set t ""
} elseif {$i > 0 && [expr $i % 2] == 0} {
append s " "
}
set char [string index $str $i]
binary scan $char H2 cc
append s $cc
if {[string is print $char]} {
append t $char
} else {
append t "."
}
}
puts $s
}

View File

@@ -1,33 +0,0 @@
if {![exists -proc require]} {
proc require {args} {{done {}}} {
foreach file $args {
if {$file ni $done} {
uplevel source "/mod/webif/lib/$file"
lappend $done $file
}
}
}
proc header {} {
uplevel source /mod/webif/html/lib/header.jim
}
proc footer {} {
uplevel source /mod/webif/html/lib/footer.jim
}
proc mheader {} {
uplevel source /mod/webif/html/m/lib/header.jim
}
proc mfooter {} {
uplevel source /mod/webif/html/m/lib/footer.jim
}
# Replace the built-in jim {file copy} command with one that is
# largefile safe.
require filecopy
}

1
webif
View File

@@ -1 +0,0 @@
var/mongoose

View File

@@ -2,7 +2,7 @@
package require cgi
source /mod/webif/lib/setup
require system.class chunked pretty_size
require system.class pretty_size
cgi_input
#cgi_dump
@@ -10,16 +10,14 @@ cgi_input
set file [cgi_get file "-"]
if {$file eq "-"} { exit }
start_chunked
httpheader "text/plain"
if {![file exists $file]} {
chunk ">>> File $file does not exist.\r\n"
puts ">>> File $file does not exist.\r\n"
} else {
chunk ">>> Contents of $file [pretty_size [file size $file]]\r\n"
puts ">>> Contents of $file [pretty_size [file size $file]]\r\n"
set fp [open $file r]
chunk [read $fp]
puts [read $fp]
close $fp
}
end_chunked

View File

@@ -6,7 +6,12 @@ echo "Content-Type: text/plain"
echo
if [ "$rma" = 1 ]; then
touch /var/lib/humaxtv/.rma
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

View File

@@ -5,13 +5,8 @@ package require sqlite3
source /mod/webif/lib/setup
require altrow progressbar epg.class
puts "Content-Type: text/html"
puts ""
header
cgi_input
proc f2c {frequency} {
set ch int($((($frequency / 1000) - 303.25) / 8))
return [expr int($ch)]
@@ -34,20 +29,23 @@ puts "
<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
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 tsIdx x netName x usTsID x ulFrequency x ucLevel x ucQuality \
x eTransMode
altrow
puts "
<tr class=odd>
<td>[f2c $ulFrequency]</td>
<td>[expr $ulFrequency / 1000.0] MHz</td>
"
@@ -69,16 +67,23 @@ foreach tw [$db query {
set name [string range $name 1 end]
if {$lcn >= 800} { incr ehs }
switch $name {
"BBC ONE" { set mux "PSB1/BBC A" }
"BBC THREE" { set mux "PSB1/BBC A" }
"ITV1" { set mux "PSB2/D3&amp;4" }
"BBC One HD" { set mux "PSB3/BBC B (HD)" }
"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" { set mux "COM6/ARQ B" }
"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=#>
@@ -96,6 +101,7 @@ foreach tw [$db query {
<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]

View File

@@ -5,17 +5,12 @@ package require sqlite3
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]
@@ -24,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 }
@@ -68,7 +63,7 @@ proc db_info {db_file} {
if {$fdb == 0} {
puts "Please choose database to view:<ul>"
foreach db $databases {
puts "<li><a href=$::env(REQUEST_URI)?db=[file tail $db]>
puts "<li><a href=$::env(SCRIPT_NAME)?db=[file tail $db]>
$db</a></li>"
}
puts "</ul>"

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

@@ -0,0 +1,9 @@
#!/mod/bin/jimsh
source /mod/webif/lib/setup
httpheader
puts "<pre>"
parray env
puts "</pre>"

View File

@@ -4,26 +4,16 @@ package require cgi
source /mod/webif/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] }
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(REQUEST_URI)?$env(QUERY_STRING)&raw=1>
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]

View File

@@ -2,22 +2,27 @@
package require cgi
source /mod/webif/lib/setup
require epg.class
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 [cgi_get service 0]
set event [cgi_get event 0]
if {! [dict exists $_cgi bare]} { header }
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]
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 "
<table class=keyval>
<tr>
@@ -120,7 +125,14 @@ 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>
@@ -135,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

@@ -4,22 +4,17 @@ package require cgi
source /mod/webif/lib/setup
require epg.class system.class
puts "Content-Type: text/html"
puts ""
httpheader
cgi_input
#cgi_dump
set service [cgi_get service -]
set event [cgi_get event -]
set type [cgi_get type 1]
if {![dict exists $_cgi service] || ![dict exists $_cgi event]} {
if {$service eq "-" || $event eq "-"} {
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."

View File

@@ -2,29 +2,19 @@
package require cgi
source /mod/webif/lib/setup
require epg.class spinner.class altrow
puts "Content-Type: text/html"
puts ""
require epg.class spinner.class altrow settings.class
jqplugin highlight
header
require totop
puts "<script type=text/javascript src=/js/jquery.highlight.js></script>"
set ct [cgi_get ct 0]
set crid [cgi_get crid ""]
set scrid [cgi_get scrid ""]
cgi_input
#cgi_dump
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]
@@ -47,14 +37,13 @@ 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 ""} {
@@ -66,6 +55,12 @@ if {$ct > 0 } {
}
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 {
@@ -90,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
}
@@ -108,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

@@ -2,7 +2,7 @@
package require cgi
source /mod/webif/lib/setup
require pkg.class chunked
require pkg.class
cgi_input
#cgi_dump
@@ -10,27 +10,27 @@ cgi_input
set cmd [cgi_get cmd update]
proc opkg {cmd} {
chunk ">>> opkg $cmd\r\n"
puts ">>> opkg $cmd\r\n"
set bcmd "|/mod/webif/lib/bin/opkg $cmd"
set fd [open $bcmd r]
while {[gets $fd line] >= 0} {
chunk "$line\r\n"
#chunk_pad
puts "$line\r\n"
}
close $fd
chunk "\r\n"
puts "\r\n"
}
start_chunked
httpheader "text/plain"
if {$cmd eq "upgrade"} { opkg update }
opkg $cmd
if {$cmd eq "update" || $cmd eq "upgrade"} {
chunk "Updating package meta information\r\n"
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

@@ -4,13 +4,10 @@ package require cgi
source /mod/webif/lib/setup
require rsv.class system.class
puts "Content-Type: text/html"
puts ""
cgi_input
httpheader
if {[cgi_get act] eq "cancel"} {
file delete /tmp/.restartpending
system restartpending 0
exit
}
@@ -21,7 +18,8 @@ if {[cgi_get now] eq "yes"} {
exit
}
file delete /tmp/.restartpending
system restartpending 0
jqplugin progressbar
header
# Commit pending reservations on older mod versions.
@@ -30,8 +28,6 @@ if {![file exists /sbin/rsvsync] && ![file exists /mod/boot/rsvsync]} {
}
puts {
<link href=/css/jquery.progressbar.css rel=stylesheet type=text/css />
<script type="text/javascript" src="/js/jquery.progressbar.js"></script>
<script type=text/javascript>
var handle = 0;

View File

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

12
webif/cgi-bin/service.jim Executable file
View File

@@ -0,0 +1,12 @@
#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
httpheader
set service [cgi_get service]
set action [cgi_get action]
catch { puts [exec /mod/bin/service $action $service] }

View File

@@ -2,23 +2,24 @@
package require cgi
source /mod/webif/lib/setup
require system.class findhsvc epg.class
require system.class findhsvc epg.class rsv.class
set runmode cli
if {[string match {*jim} $argv0]} { set runmode cgi }
cgi_input
set type [cgi_get type "full"]
if {$runmode eq "cgi"} {
puts "Content-Type: text/html"
puts "Pragma: no-cache"
puts "Expires: Thu, 01 Jan 1970 00:00:00 GMT"
puts ""
set schedtime 1200
switch $runmode {
cgi {
set type [cgi_get type "full"]
httpheader
}
cli {
set type "full"
if {"-X" in $argv} { set schedtime 7200 }
}
}
if {[catch {set pid [exec pgrep humaxtv]}]} {
if {[catch {set pid [exec pgrep -n humaxtv]}]} {
puts "Cannot find humaxtv process."
exit
}
@@ -62,7 +63,10 @@ if {[llength $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 {$ndata($name) == -1} {
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"
@@ -146,6 +150,29 @@ if {[system instandby]} {
}
}
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]} {
if {$runmode eq "cgi"} {
puts [join $output "\n<br>\n"]

View File

@@ -2,36 +2,52 @@
package require cgi
source /mod/webif/lib/setup
require settings.class
puts "Content-Type: text/html"
puts ""
jqplugin enadis
jscss xepg.js /css/xepg.css
header
require epg.class spinner.class altrow epg_search totop
require epg.class spinner.class altrow epg_search totop system.class
cgi_input
set irinst [system pkginst ir]
puts {<link type="text/css" href="/css/xepg.css" rel="Stylesheet" />}
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 Now/Next Information..."
text "Loading EPG Information..."
size "1.2em"
style "margin: 1em;"
}] start
require epg_popup
set stt [cgi_get stt [clock seconds]]
if {$stt <= [clock seconds]} {
set stt [clock seconds]
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 [[settings] channel_group]
set favgroup [$s channel_group]
set hours 4.0
set hours [expr 1.0 * [[settings] xepghours]]
if {$hours == 0} { set hours 4.0 }
set seconds $($hours * 3600)
set ostt $stt
@@ -40,7 +56,7 @@ set stt [expr int($stt / 1800.0) * 1800]
set ett $(int($stt + $seconds))
set offset $(($ostt - $stt) / 1800.0)
set chanpx 120
set chanpx 160
set eventpx 1000
set totalpx $($chanpx + $eventpx)
set contwidth $($totalpx + 50)
@@ -64,21 +80,43 @@ if {$::qepg} {
}
set got [clock milliseconds]
puts "<div id=buttons style=\"width: $eventpx; margin-left: ${chanpx}px;\">"
if {$stt > [clock seconds]} {
puts "<button id=earlier>&lt;&lt;&lt; Earlier</button>"
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 "<button id=later>Later &gt;&gt;&gt;</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}]
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>"
@@ -99,9 +137,13 @@ foreach e $records {
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=/cgi-bin/epg/service.jim?service=[$e get service_id]
<a href=\"/epg/$surl.jim?service=[$e get service_id]\"
title=\"[$e get channel_name]\">
[$e get channel_name]
</a></div>"
@@ -151,7 +193,10 @@ foreach e $records {
clock format $ee -format "%H:%M"])"
if {$showing} { append hxt " ($perc%)" }
puts "<div class=\"xeprog $bg\"
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]
@@ -173,22 +218,13 @@ puts "
Switch to standard now/next display.
</button></small>
</div>
<script type=text/javascript>
\$(document).ready(function() {
\$('#epgswitch').button().click(function() {
window.location = '/epg.shtml';
});
\$('#earlier').button().click(function() {
window.location = '/cgi-bin/xepg.jim?stt=$earlier';
});
\$('#later').button().click(function() {
window.location = '/cgi-bin/xepg.jim?stt=$ett';
});
"
if {$current} {
puts "
<script type=text/javascript>
\$(function() {
"
puts {
var kt = $('#xe0');
@@ -199,20 +235,18 @@ var height = $('#keypos').position().top - ktpos.top;
}
puts "var nowpos = ktpos.left + (kt.width() * $offset);"
puts {
if (window.console)
console.log('NOWPOS: %d', nowpos);
$('#xepgnow')
.css('left', nowpos + 'px')
.css('top', ktpos.top)
.height(height)
.show('slow');
}
}
puts "
});
</script>
"
puts "
});
</script>
"
}
puts "
<a href=/cgi-bin/settings.jim>

38
webif/cgi-bin/xepg.js Normal file
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'); }
);
});

37
webif/html/backup/backup.jim Executable file
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,7 +1,7 @@
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);
@@ -20,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();
@@ -32,7 +32,7 @@ $(document).ready(function() {
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();
@@ -42,7 +42,7 @@ $(document).ready(function() {
});
$('#view_button').click(function() {
var backup = $('input.restore:checked').val();
$('#results').load('/cgi-bin/backup/view.jim?' +
$('#results').load('view.jim?' +
$('input.restore').serialize(), function() {
$('#results').slideDown(function() {
refresh_files();
@@ -54,7 +54,7 @@ $(document).ready(function() {
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

@@ -5,20 +5,14 @@ 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"

View File

@@ -3,17 +3,20 @@
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.
</div>
</div></div>
<div style="clear: both; float: left; width: 40%; border: 1px solid grey;
padding: 1em">
@@ -63,3 +66,5 @@ puts {
</div>
}
footer

21
webif/html/backup/restore.jim Executable file
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

@@ -7,20 +7,14 @@ require rsv.class findhsvc
set dir /mod/var/backup
puts "Content-Type: text/html"
puts ""
httpheader
cgi_input
#cgi_dump
#set _cgi(restore_file) "backup-2011-Jul-09-20:37"
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]} {

24
webif/html/browse/aexpiry.jim Executable file
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

@@ -21,10 +21,14 @@ if {$model eq "HDR"} {
}
if {[system pkginst ffmpeg]} {
puts {
<li><a href=#audio>Extract Audio</a></li>
<li><a href=#mpg>Extract to MPG</a></li>
<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>
@@ -45,7 +49,15 @@ puts {
<li><a href=#download>Download</a></li>
</ul>
<ul id=doptmenu class=contextMenu style="width: 180px">
<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>
@@ -53,22 +65,37 @@ puts {
<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> }
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="renameorig" id="renameorig" value="">
<input type=hidden name="titleorig" id="titleorig" value="">
<input type=hidden name="renamefile" id="renamefile" value="">
<table border=0>
<tr>
<th>
@@ -82,28 +109,86 @@ puts {
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">
<label for="rename_title" style="padding-top: 0.5em">
<b>New Medialist Title</b>
</label>
</th>
<td>
<input type=text name="renametitle" id="renametitle"
<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>
<td colspan=2 id=synopsis style="font-style: italic"></td>
<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="renameorig" id="drenameorig" value="">
<input type=hidden name="renamefile" id="drenameorig" value="">
<table border=0>
<tr>
<th>
@@ -124,7 +209,10 @@ puts {
<div id=savestreamform title="Save streamed content"
style="display: none">
<div class=pre id=savestream_detail></div>
<form id=savestream_form>
<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 {
@@ -132,7 +220,7 @@ puts {
<tr>
<th>
<label for="savestream_name">
<b>Filename</b>
<b>Enter Filename</b>
</label>
</th>
<td>
@@ -140,7 +228,9 @@ puts {
id="savestream_name"
value="" size=70 maxlength=255
class="text ui-widget-content ui-corner-all">
<img id=savestream_spin src=/img/loading.gif>
<span id=savestream_spin>
<img src=/img/loading.gif> Saving...
</span>
</td>
</tr>
</table>
@@ -169,6 +259,32 @@ puts {
</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">
@@ -180,5 +296,9 @@ Please wait...
</center>
</div>
<div id=bmpdialogue title="Recording Thumbnail" class=hidden>
<img id=thmbmp class=doublebmp src="about:blank">
</div>
}

View File

@@ -3,24 +3,21 @@
package require sqlite3
package require cgi
source /mod/webif/lib/setup
require ts.class system.class
require ts.class system.class settings.class
puts "Content-Type: text/html\r\n\r\n"
jqplugin progressbar
jscss audio.js
header
cgi_input
#cgi_dump
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]
header
puts "
<link href=/css/jquery.progressbar.css rel=stylesheet type=text/css />
<script type=text/javascript src=/js/jquery.progressbar.js></script>
<script type=text/javascript src=audio.js></script>
<fieldset class=cleft>
<legend>Audio Extraction</legend>
@@ -36,7 +33,7 @@ puts "
></span>
<div id=audiodiv style=\"padding: 1em\">
<button id=audioit>Perform audio extraction</button>
<button id=audioit>Perform audio extraction - $type</button>
</div>
<div id=progressdiv class=hidden>

View File

@@ -15,7 +15,7 @@ $(document).ready(function() {
$('#progressbar').reportprogress(0);
$('#back').button().click(function() {
window.location = '/cgi-bin/browse.jim?dir=' + $('#params').attr('dir');
window.location = '../index.jim?dir=' + $('#params').attr('dir');
});
$('#audioit').button().click(function() {

View File

@@ -3,12 +3,9 @@
package require sqlite3
package require cgi
source /mod/webif/lib/setup
require ts.class system.class
require ts.class system.class settings.class
puts "Content-Type: text/html\r\n\r\n"
cgi_input
#cgi_dump
httpheader
set rfile [cgi_get file]
set ts [ts fetch $rfile]
@@ -21,9 +18,15 @@ set base [file rootname $rfile]
set shname [file tail $base]
puts "Processing $shname"
puts [exec /mod/bin/ffmpeg -y -benchmark -v 0 \
-i $rfile -f mp3 \
-vn -acodec copy "${base}.mp3"]
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 \

View File

@@ -4,10 +4,7 @@ package require cgi
source /mod/webif/lib/setup
require ts.class
puts "Content-Type: text/html\r\n\r\n"
cgi_input
#cgi_dump
httpheader
set tsfile [cgi_get file]
set rfile [file normalize $tsfile]

19
webif/html/browse/bmp.jim Executable file
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

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