Compare commits

...

908 Commits

Author SHA1 Message Date
stax76
2f735215e0 v7.1.1.0 2024-02-03 06:03:54 +01:00
stax76
23ed1457d5 Japanese translation updated 2024-01-20 22:06:15 +01:00
stax76
52214c1e15 new screenshots 2024-01-20 01:10:18 +01:00
stax76
09de4a5e05 Chinese translation updated 2024-01-19 09:05:32 +01:00
stax76
69a6754483 Merge branch 'main' of https://github.com/mpvnet-player/mpv.net 2024-01-13 14:05:59 +01:00
stax76
078756600e misc 2024-01-13 14:05:55 +01:00
stax76
5e2c7055d4 Merge pull request #648 from andywowws/patch-1
Update changelog.md
2024-01-13 14:05:37 +01:00
Andywoww
eb265be0a4 Update changelog.md
Wrong date
2024-01-13 19:33:38 +08:00
stax76
ad74acae0f v7.1.0.0 2024-01-12 11:29:47 +01:00
stax76
d325cf1165 Japanese translation added 2024-01-08 05:42:24 +01:00
stax76
39bace76d3 removal of hidden mouse exit feature 2024-01-07 11:20:10 +01:00
stax76
44e8ef7cd8 fix #639 2024-01-06 23:13:33 +01:00
stax76
85e4e3f9df fix geometry 2024-01-06 12:03:28 +01:00
stax76
ad94042a2c Chinese translation updated 2024-01-06 10:45:14 +01:00
stax76
304fe58f27 misc 2024-01-04 03:53:24 +01:00
stax76
edcd8be662 improved audio device support 2024-01-03 06:39:25 +01:00
stax76
3970d5c0c2 v7.0.0.6 Beta 2024-01-02 09:09:16 +01:00
stax76
4451eafe71 Merge branch 'main' of https://github.com/mpvnet-player/mpv.net 2023-12-28 06:18:10 +01:00
stax76
1c799fd474 hwdec description 2023-12-28 06:17:57 +01:00
stax76
17e25619da Merge pull request #626 from nkh0472/patch-3
change screenshot-tag-colorspace default value to `yes`
2023-12-28 06:16:06 +01:00
stax76
a4376b1492 Merge pull request #627 from nkh0472/patch-4
Detailed description for hwdec
2023-12-28 06:13:37 +01:00
stax76
d41faad9d9 v7.0.0.5 Beta 2023-12-28 06:11:42 +01:00
nkh0472
0e6116b478 Detailed description for hwdec 2023-12-27 22:29:31 +08:00
nkh0472
789127e8ff change screenshot-tag-colorspace default value to yes 2023-12-27 22:17:45 +08:00
stax76
6ef9f32d4f misc 2023-12-26 16:58:12 +01:00
stax76
1048dbed40 New menu item and binding: File > Add files to playlist from clipboard (Ctrl+Shift+v) 2023-12-26 09:22:27 +01:00
stax76
86c823bfde misc 2023-12-24 07:34:12 +01:00
stax76
764f00ed3a misc 2023-12-23 10:20:57 +01:00
stax76
3e4ea03437 Support of the mpv option title-bar 2023-12-22 18:35:07 +01:00
stax76
0ef679e00d argh 2023-12-21 10:01:59 +01:00
stax76
7f2bf2e905 misc 2023-12-20 05:19:50 +01:00
stax76
ab8a8d5a35 Command line parser fix using list options with -add suffix 2023-12-19 12:12:34 +01:00
stax76
a3b9c653fa v7.0.0.4 Beta 2023-12-19 09:37:46 +01:00
stax76
ed48f5c559 Command line parser supports list options with -add suffix. Fixex #619. 2023-12-19 03:18:55 +01:00
stax76
d328f6b7ec Main window: Limited geometry support 2023-12-17 19:08:55 +01:00
stax76
16ba94d67d updated manual and new libplacebo GUI options 2023-12-16 13:48:27 +01:00
stax76
7978170133 Merge pull request #617 from FantasqueX/fix-typo-1
fix typo in changelog
2023-12-16 08:44:03 +01:00
stax76
ab313eb442 new libplacebo options 2023-12-16 08:43:22 +01:00
Letu Ren
f40008d94a fix typo in changelog 2023-12-16 15:31:50 +08:00
stax76
75e19d8d18 newly developed combo box control 2023-12-16 04:57:49 +01:00
stax76
9bb978f612 new combo box control 2023-12-16 04:52:16 +01:00
stax76
7ea3fbc917 v7.0.0.3 2023-12-15 15:21:35 +01:00
stax76
3af5b458ba misc 2023-12-15 14:58:32 +01:00
stax76
b23542d681 Conf editor crash fixed 2023-12-15 08:35:01 +01:00
stax76
e0616dee76 misc 2023-12-15 01:24:43 +01:00
stax76
cd54e67b87 new menu items and bindings to open mpv.conf and input.conf with a text editor 2023-12-14 13:48:23 +01:00
stax76
9d4779fd96 Conf editor support for: reset-on-next-file, input-ipc-server, background, title 2023-12-14 11:08:36 +01:00
stax76
d4d147e5fc Improved conf file reader/writer. 2023-12-14 07:31:39 +01:00
stax76
35b17bc620 New menu item added to add mpv.net to the path environment variable. 2023-12-13 09:46:17 +01:00
stax76
3eb4af5e75 v7.0.0.2 2023-12-13 08:45:20 +01:00
stax76
49f22a1f81 misc 2023-12-13 03:38:23 +01:00
stax76
7cd5686488 Trying getting decent menu input display 2023-12-13 00:57:59 +01:00
stax76
0d63feec57 Remove MS Store package from solution 2023-12-12 18:29:35 +01:00
stax76
0ee8318ca4 some bug fixes 2023-12-12 18:15:20 +01:00
stax76
8e45cdb47d release v7.0.0.1 Beta 2023-12-11 11:38:36 +01:00
stax76
a61a0506fd Merge branch 'main' of https://github.com/mpvnet-player/mpv.net 2023-12-10 16:57:01 +01:00
stax76
b3877492dd Support for encoding mode and thumbfast and some other new features and improvements 2023-12-10 16:56:51 +01:00
stax76
090f15fc47 Merge pull request #605 from dyphire/workflows
auto build: create .mo files & update binary files
2023-12-09 08:18:09 +01:00
dyphire
d57692c5d1 auto build: create .mo files & update binary files 2023-12-09 14:44:40 +08:00
stax76
60dfbee16d auto build fix 2023-12-09 05:16:10 +01:00
stax76
74f586744f auto build: try installing gettext tools 2023-12-09 05:07:27 +01:00
stax76
9b93eaa9e9 auto build: next try running create-mo-files.ps1 2023-12-09 04:46:05 +01:00
stax76
a4eed2d939 auto build fix 2023-12-09 04:20:17 +01:00
stax76
34a3855941 build workflow: fix bug using Resolve-Path 2023-12-09 04:08:18 +01:00
stax76
dfd9abeba4 github-actions: fix missing mpvnet.com and .mo files 2023-12-09 03:41:28 +01:00
stax76
f937273fe3 Support Chinese language 2023-12-08 21:33:10 +01:00
stax76
8d601525b5 problems with git... 2023-12-08 06:31:29 +01:00
stax76
5dd3716012 translation using NGettext.Wpf 2023-12-08 06:23:17 +01:00
stax76
a4709de918 Merge pull request #582 from mpvnet-player/translations_9c125c506e307f2b98fdac75d949d462_en
Updates for file lang/po/pt.po in en
2023-12-03 12:41:39 +01:00
stax76
c24b9b2c83 Merge pull request #583 from mpvnet-player/translations_cb0bed8dab91634f794f5a23524fa876_en
Updates for file lang/po/ja.po in en
2023-12-03 12:40:59 +01:00
stax76
3686231cf2 Merge pull request #584 from mpvnet-player/translations_f354967270a86e8ac05644d3af39dff2_en
Updates for file lang/po/pt_BR.po in en
2023-12-03 12:40:43 +01:00
stax76
4c12097063 Merge pull request #585 from mpvnet-player/translations_7374abb4a065a5f2250a4345bf850955_en
Updates for file lang/po/es.po in en
2023-12-03 12:40:28 +01:00
stax76
da7f877f2a Merge pull request #586 from mpvnet-player/translations_47f53a5158a97e34f7699cb9c92005db_en
Updates for file lang/po/pl.po in en
2023-12-03 12:40:14 +01:00
stax76
1dbb1e4af9 Merge pull request #587 from mpvnet-player/translations_de116bdefbd68024f939486579a0bf34_en
Updates for file lang/po/fr.po in en
2023-12-03 12:39:49 +01:00
stax76
abea225b54 Merge pull request #588 from mpvnet-player/translations_23b6678292a30949b0d8a8d599868d5d_en
Updates for file lang/po/tr.po in en
2023-12-03 12:39:33 +01:00
stax76
2053042e19 Merge pull request #589 from mpvnet-player/translations_e92bfa4d6572333c19dbcab4a4ab4bbe_en
Updates for file lang/po/sr_RS.po in en
2023-12-03 12:39:17 +01:00
stax76
a3046258d4 Merge pull request #590 from mpvnet-player/translations_f83e45ef994d055f2b090d977216a5fb_en
Updates for file lang/po/zh_CN.po in en
2023-12-03 12:39:02 +01:00
stax76
207da8d0a6 Merge pull request #591 from mpvnet-player/translations_41f08823f5f6c2445144e0aae8b06b81_en
Updates for file lang/po/sr_RS@latin.po in en
2023-12-03 12:38:46 +01:00
stax76
f7ed3bf01f Merge pull request #593 from mpvnet-player/translations_9f67269b1373c2b3292aeda6ac2b1019_en
Updates for file lang/po/ca.po in en
2023-12-03 12:38:17 +01:00
stax76
3c8cd407e1 Merge pull request #594 from mpvnet-player/translations_765a3e6f67b71925d1e3478e1228f11d_en
Updates for file lang/po/ro.po in en
2023-12-03 12:38:02 +01:00
stax76
ea56b6d06c Merge pull request #595 from mpvnet-player/translations_59e6e0afcffac2572403a1017f5482bd_en
Updates for file lang/po/zh_SG.po in en
2023-12-03 12:37:39 +01:00
stax76
d4c4296196 Merge pull request #596 from mpvnet-player/translations_8dbfcaf9173f9f0d65c02542c00f9fdb_en
Updates for file lang/po/nl.po in en
2023-12-03 12:37:23 +01:00
stax76
1b4be52ce6 Merge pull request #597 from mpvnet-player/translations_0ebcb9906ede175c218105251b276144_en
Updates for file lang/po/sv.po in en
2023-12-03 12:37:10 +01:00
stax76
286686f8c4 Merge pull request #598 from mpvnet-player/translations_0f9f4cd43bc9918bd5133f6b515de91b_en
Updates for file lang/po/lt.po in en
2023-12-03 12:36:57 +01:00
stax76
146852ca19 Merge pull request #599 from mpvnet-player/translations_38a6dd3b6bc9b159b9af29f1f01155ac_en
Updates for file lang/po/cs.po in en
2023-12-03 12:36:39 +01:00
stax76
3f6181f77b Merge pull request #600 from mpvnet-player/translations_89409671ec1a0a5131a4284c6ebea30c_en
Updates for file lang/po/bg.po in en
2023-12-03 12:36:20 +01:00
stax76
8997a2eacb Merge pull request #592 from mpvnet-player/translations_555b7665d32e34263edee646f45402cc_en
Updates for file lang/po/de.po in en
2023-11-29 13:27:50 +01:00
transifex-integration[bot]
a6642a4db8 translation-update Updating lang/po/bg.po
source file: 'lang/po/bg.po' updated.
2023-11-29 11:12:04 +00:00
transifex-integration[bot]
8a8ac75b29 translation-update Updating lang/po/sv.po
source file: 'lang/po/sv.po' updated.
2023-11-29 11:12:03 +00:00
transifex-integration[bot]
1cc2422117 translation-update Updating lang/po/lt.po
source file: 'lang/po/lt.po' updated.
2023-11-29 11:12:03 +00:00
transifex-integration[bot]
0fa3feef1f translation-update Updating lang/po/cs.po
source file: 'lang/po/cs.po' updated.
2023-11-29 11:12:03 +00:00
transifex-integration[bot]
3ae923ba0e translation-update Updating lang/po/sr_RS.po
source file: 'lang/po/sr_RS.po' updated.
2023-11-29 11:12:02 +00:00
transifex-integration[bot]
11e150b0f9 translation-update Updating lang/po/ca.po
source file: 'lang/po/ca.po' updated.
2023-11-29 11:12:02 +00:00
transifex-integration[bot]
1ed8c234a3 translation-update Updating lang/po/ro.po
source file: 'lang/po/ro.po' updated.
2023-11-29 11:12:02 +00:00
transifex-integration[bot]
948e600f96 translation-update Updating lang/po/zh_SG.po
source file: 'lang/po/zh_SG.po' updated.
2023-11-29 11:12:02 +00:00
transifex-integration[bot]
1050e7d25f translation-update Updating lang/po/nl.po
source file: 'lang/po/nl.po' updated.
2023-11-29 11:12:02 +00:00
transifex-integration[bot]
2ff1b07449 translation-update Updating lang/po/fr.po
source file: 'lang/po/fr.po' updated.
2023-11-29 11:12:01 +00:00
transifex-integration[bot]
4466217063 translation-update Updating lang/po/zh_CN.po
source file: 'lang/po/zh_CN.po' updated.
2023-11-29 11:12:01 +00:00
transifex-integration[bot]
01adf213bc translation-update Updating lang/po/sr_RS@latin.po
source file: 'lang/po/sr_RS@latin.po' updated.
2023-11-29 11:12:01 +00:00
transifex-integration[bot]
c1308434b1 translation-update Updating lang/po/de.po
source file: 'lang/po/de.po' updated.
2023-11-29 11:12:01 +00:00
transifex-integration[bot]
e854598cd2 translation-update Updating lang/po/es.po
source file: 'lang/po/es.po' updated.
2023-11-29 11:12:00 +00:00
transifex-integration[bot]
f6ca5a3b96 translation-update Updating lang/po/tr.po
source file: 'lang/po/tr.po' updated.
2023-11-29 11:12:00 +00:00
transifex-integration[bot]
8fe196bf8a translation-update Updating lang/po/pt_BR.po
source file: 'lang/po/pt_BR.po' updated.
2023-11-29 11:11:59 +00:00
transifex-integration[bot]
3abb3c32f0 translation-update Updating lang/po/pl.po
source file: 'lang/po/pl.po' updated.
2023-11-29 11:11:59 +00:00
transifex-integration[bot]
867c9c2989 translation-update Updating lang/po/pt.po
source file: 'lang/po/pt.po' updated.
2023-11-29 11:11:57 +00:00
transifex-integration[bot]
c1c8e08c9d translation-update Updating lang/po/ja.po
source file: 'lang/po/ja.po' updated.
2023-11-29 11:11:57 +00:00
stax76
bdcfa4e722 translation files 2023-11-29 10:38:02 +01:00
stax76
7879bda5c1 manual update 2023-11-19 10:39:27 +01:00
stax76
ef062d1b10 file casing 2023-11-19 09:56:11 +01:00
stax76
8b6204ed2b Merge branch 'main' of https://github.com/mpvnet-player/mpv.net 2023-11-06 09:19:23 +01:00
stax76
f14d1a98f9 Merge pull request #577 from sakhezech/main
fix readme typos
2023-11-06 09:19:12 +01:00
stax76
9ec518a952 uosc menu syntax fix 2023-11-06 09:17:53 +01:00
sakhezech
8ee67f832c fix reamde typos 2023-11-05 19:53:25 +03:00
stax76
684e103e12 fix dark mode window title bar color and support uosc exclamation mark menu syntax 2023-11-05 11:15:35 +01:00
stax76
1d3fe0a924 work on menu and bindings 2023-11-04 20:24:10 +01:00
stax76
b41ca3cd89 misc 2023-11-03 17:04:26 +01:00
stax76
aa0e88129b input learn window fix 2023-11-01 08:16:37 +01:00
stax76
4baa26d7a0 Fix Ctrl+Alt and right mouse button usage in input learn window 2023-10-31 12:30:28 +01:00
stax76
4c4088b28a environment variables and more 2023-10-31 09:44:20 +01:00
stax76
ea8944c1cc change build.yml and support window-dragging=no 2023-10-26 17:23:38 +02:00
stax76
d7e1e32654 Merge pull request #570 from dyphire/workflows
add build workflow
2023-10-26 07:40:27 +02:00
dyphire
9878e6da46 add build workflow 2023-10-25 20:10:51 +08:00
stax76
37320fb975 conf editor bug fix 2023-10-25 09:35:36 +02:00
stax76
0148a71281 fix dead links and dead manual topics 2023-10-24 11:50:09 +02:00
stax76
9f4baa9d99 change solution name 2023-10-24 11:31:45 +02:00
stax76
5706d7b66d replace v6 with experimental v7 code 2023-10-24 11:17:45 +02:00
stax76
fb27bb8727 move FileAssociation class to FileAssociation.cs 2023-10-24 10:00:40 +02:00
stax76
80c827974a v6.0.4.0 Stable 2023-08-17 02:50:45 +02:00
stax76
d2e7d4551f v6.0.4.0 Stable 2023-08-17 02:38:41 +02:00
stax76
308e3ed044 Merge pull request #541 from soredake/sub-override-keybind
input.conf.txt: add binding for overriding sub styles
2023-08-17 02:31:42 +02:00
soredake
f563342eb5 input.conf.txt: add binding for overriding sub styles 2023-05-07 19:56:30 +03:00
stax76
16d6e4d471 Merge pull request #517 from Torben2000/feature/playlist-titles
Use item title in playlist command palette if set
2023-01-21 08:12:56 +01:00
stax76
030aa930a1 Merge pull request #529 from hooke007/dll
relink to libmpv-2
2023-01-21 08:12:01 +01:00
hooke007
3a6df857da relink to libmpv-2 2023-01-20 15:35:59 +00:00
Torben2000
7d9340d9d5 Use item title in playlist command palette if set
Fixes https://github.com/mpvnet-player/mpv.net/issues/509
2022-12-03 19:30:37 +01:00
stax76
9dca27c941 Merge pull request #510 from soredake/screenshot-without-subtitles
input.conf.txt: add binding for screenshot without subtitles
2022-11-27 07:41:31 +01:00
soredake
6f2b30f762 input.conf.txt: add binding for screenshot without subtitles 2022-11-15 11:57:49 +02:00
stax76
89be723132 Merge pull request #505 from nkh0472/patch-2
fix typo
2022-10-20 17:29:37 +02:00
nkh0472
ec1dde650f fix typo 2022-10-20 23:12:35 +08:00
stax76
dbf1a32580 v6.0.3.2 2022-10-14 12:18:12 +02:00
stax76
a81ed58983 finish repo transfer 2022-10-12 12:40:40 +02:00
stax76
33df960d04 Merge branch 'master' of https://github.com/stax76/mpv.net 2022-10-02 15:40:55 +02:00
stax76
337bee9f28 fix severe termination bug 2022-10-02 15:40:53 +02:00
stax76
e57c41a254 Merge pull request #495 from nkh0472/patch-1
Update Manual_chs.md
2022-10-01 10:19:41 +02:00
nkh0472
62d06c65ab Update Manual_chs.md
Co-authored-by: hooke007 <hooke007@qq.com>
2022-09-25 19:21:22 +08:00
nkh0472
e70a935d7a Update Manual_chs.md
Add more info about translations update this time
2022-09-19 21:14:48 +08:00
nkh0472
c8e6ce678a Update Manual_chs.md
Translations for b73d2e7107 and 1f6025a10f
2022-09-18 23:03:37 +08:00
stax76
22960af78b mouse cursor auto-hide behavior 2022-08-19 07:13:07 +02:00
stax76
95e31a1d3f Improved mouse cursor hide behavior 2022-08-19 06:53:49 +02:00
stax76
06ff83b75c shorter OSD media info 2022-08-18 09:44:52 +02:00
stax76
1f6025a10f New command to move the Window to the screen edge 2022-08-18 09:31:23 +02:00
stax76
00bfa20fac improved OSD media info 2022-08-08 03:19:11 +02:00
stax76
1475d5ee66 conf editor option definition simplyfication 2022-08-07 14:21:11 +02:00
stax76
b73d2e7107 new history-filter option added 2022-08-07 13:50:29 +02:00
stax76
a7fa76d63a relative path fix 2022-08-05 07:11:50 +02:00
stax76
e2c720346a fix #480 2022-08-05 06:29:49 +02:00
stax76
01a853e865 Merge pull request #475 from hooke007/doc
bump Manual_chs v6.0.3.1
2022-07-31 06:47:19 +02:00
hooke007
6510de2bd8 bump Manual_chs v6.0.3.1 2022-07-31 01:01:58 +01:00
stax76
7fc1de2ce3 update process-instance description 2022-07-30 13:35:17 +02:00
stax76
b0d399e9ee update changelog 2022-07-30 13:20:39 +02:00
stax76
7f680829ef update changelog 2022-07-30 13:05:30 +02:00
stax76
603f956261 update changelog 2022-07-30 12:55:32 +02:00
stax76
6d06df9004 6.0.3.1 2022-07-30 12:52:19 +02:00
stax76
5ea086d05b Support --audio-file and --sub-file aliases 2022-07-30 11:45:07 +02:00
stax76
1ad819fa9d Fix external audio tracks not shown correctly in tracks context menu 2022-07-30 11:26:45 +02:00
stax76
f2dd6205b5 Merge branch 'master' of https://github.com/stax76/mpv.net 2022-07-27 09:42:02 +02:00
stax76
b2a3c231ff command line syntax is supported in mpv.conf 2022-07-27 09:42:00 +02:00
stax76
f6c223a411 Update issue templates 2022-07-25 09:51:28 +02:00
stax76
e7a2ba6805 Update issue templates 2022-07-25 09:43:58 +02:00
stax76
5a08d9ccd6 Shift key enables process-instance=multi 2022-07-23 08:50:07 +02:00
stax76
5714a5e62a Merge branch 'master' of https://github.com/stax76/mpv.net 2022-07-17 08:04:43 +02:00
stax76
def7e5ac5a misc 2022-07-17 08:04:32 +02:00
stax76
601bb20492 Update FUNDING.yml 2022-07-14 04:31:20 +02:00
stax76
59600df977 update manual 2022-07-13 09:02:51 +02:00
stax76
e1b9730e9b use mpv.net to cycle subtitles 2022-07-12 05:49:05 +02:00
stax76
e378551938 misc 2022-07-11 13:14:26 +02:00
stax76
a82b2ef571 disable unused mpv events 2022-07-11 07:05:50 +02:00
stax76
6157a01701 disable unused mpv events 2022-07-11 06:57:10 +02:00
stax76
ec17ae8ce9 support shortcuts with media file target 2022-07-11 06:14:01 +02:00
stax76
f719528017 fix #293 2022-07-10 10:30:01 +02:00
stax76
966b45eb65 shorten annoying media info titles 2022-07-10 00:49:56 +02:00
stax76
eeae6994a2 remove basic view and enhance advanced view of show-info command 2022-07-09 17:26:49 +02:00
stax76
07809d882f use mpvnet instead of mpv to create playlist from folder 2022-07-08 12:20:36 +02:00
stax76
e970f0b4e4 libmpv shinchiro 2022-07-02 2022-07-08 05:51:06 +02:00
stax76
a36b6a3fdf misc 2022-07-04 08:45:37 +02:00
stax76
4febca257f properly fix OSC hide behavior 2022-07-04 08:32:53 +02:00
stax76
9d493b4d08 store package update 2022-07-03 10:49:13 +02:00
stax76
9a6bf5a481 v6.0.3.0 update changelog 2022-07-03 10:35:39 +02:00
stax76
40565e8b3d fix possible race condition 2022-07-02 15:10:22 +02:00
stax76
fb294c441d 6.0.2.0 2022-07-02 10:19:19 +02:00
stax76
03b775370b window title fix 2022-07-02 09:35:15 +02:00
stax76
1015f87533 changelog fix 2022-06-30 15:19:42 +02:00
stax76
cadc5d65cf 6.0.1.0 2022-06-30 15:00:07 +02:00
stax76
3e2f104aa7 fix #449 2022-06-28 15:17:35 +02:00
stax76
c87ce3b66f fix #449 2022-06-28 07:53:48 +02:00
stax76
3093dd43a4 add smart-volume script to changelog 2022-06-27 15:03:26 +02:00
stax76
061bb39b60 improve changlog 2022-06-25 16:22:05 +02:00
stax76
d994c79d5d fix #372 2022-06-25 16:18:16 +02:00
stax76
9ca66db07b Merge pull request #448 from soredake/patch-1
Add two new keybinds for controlling volume
2022-06-25 16:02:22 +02:00
stax76
4a382d4e29 border issue 2022-06-25 13:56:45 +02:00
stax76
69a5ba4470 Fix #445 chapters that are script created after the media file is loaded 2022-06-25 13:07:17 +02:00
soredake
4a890a4da7 Add two new keybinds for controlling volume
This keybinds is used in mpv, - + are intuitive for controlling volume, but i have compact keyboard without numpad, and pressing + in number row requires me to press it with shift, which i want to avoid.
2022-06-23 21:23:29 +03:00
stax76
023c1db417 recent list path normalization 2022-06-20 19:29:39 +02:00
stax76
7ef1f9315e Width of command palette slightly increased 2022-06-20 19:24:24 +02:00
stax76
a148c88435 new option minimum-aspect-ratio-audio 2022-06-19 18:06:08 +02:00
stax76
f6ad169f9d show Default only when track count is > 1 2022-06-19 08:21:31 +02:00
stax76
e69a5559e8 Fix start-size=session not working 2022-06-19 07:51:30 +02:00
stax76
500fe9abc4 #442 show chapters in the command palette 2022-06-19 05:23:10 +02:00
stax76
55f4a340af setting env var MPVNET_VERSION 2022-06-14 15:09:56 +02:00
stax76
b17ed3675e #334 New support of the mpv option snap-window 2022-06-11 09:32:02 +02:00
stax76
34031fa15d Fix borderless window not resizable with mouse 2022-06-09 21:48:35 +02:00
stax76
d6d31d8ae9 Fix compatibility with mpv-osc-tethys 2022-06-09 19:37:42 +02:00
stax76
0bfee26418 logo change 2022-06-09 10:25:06 +02:00
stax76
71d6b96c10 Fix logo overlap using mordenx.lua 2022-06-09 08:27:45 +02:00
stax76
d1b7250a7a changelog update 2022-06-08 21:39:36 +02:00
stax76
39b81d0664 manual update 2022-06-08 21:05:42 +02:00
stax76
6337818dbc New options autofit-image and autofit-audio 2022-06-08 10:16:40 +02:00
stax76
2257af6294 change minimum-aspect-ratio default value to 0 2022-06-07 23:00:10 +02:00
stax76
572257b645 change minimum-aspect-ratio default value to 1 2022-06-07 22:51:52 +02:00
stax76
6eb82b6b7e Merge pull request #437 from hooke007/doc
bump Manual_chs v6.0.0.0
2022-06-06 19:30:56 +02:00
hooke007
7ef703da42 bump Manual_chs v6.0.0.0 2022-06-06 17:12:09 +01:00
stax76
f7f8aa550a use filtered-metadata option for music osd 2022-06-05 18:55:08 +02:00
stax76
8d693b5e01 fix minor conf editor issue 2022-06-05 17:26:44 +02:00
stax76
e8bc8311e6 add header format to changelog 2022-06-05 16:45:11 +02:00
stax76
19c4a1d6c1 6.0.0.0 Beta 2022-06-05 16:42:47 +02:00
stax76
a53fa7178f libmpv update changelog 2022-06-05 13:09:43 +02:00
stax76
09aee26cd4 Fix logo not hiding sometimes using gpu-api=vulkan 2022-06-05 12:55:53 +02:00
stax76
0c6e486eb0 #435 Fix mpv options not working in case of existing same line comments 2022-06-05 06:40:42 +02:00
stax76
1561ed90f6 remove 'mpv.net' from conf editor definitions that are not specific to mpv.net 2022-06-04 10:31:52 +02:00
stax76
c2f965ced9 improved changelog 2022-06-04 10:06:48 +02:00
stax76
aed524bbc5 Merge pull request #434 from dyphire/track_menu
optimize subtitle format information
2022-06-04 08:42:53 +02:00
dyphire
8cf7e4fd71 optimize subtitle format information 2022-06-04 11:21:06 +08:00
stax76
0ebcf12502 update changelog 2022-06-04 00:32:45 +02:00
stax76
2af13e995f using media info by default 2022-06-04 00:27:17 +02:00
stax76
2e2562fefc shorter media info to better fit on screen 2022-06-04 00:17:56 +02:00
stax76
1860c42114 Merge pull request #433 from dyphire/track_menu
Minor changes to track menu
2022-06-03 23:10:22 +02:00
dyphire
8782ae8ad2 Minor changes 2022-06-04 04:21:07 +08:00
stax76
5d9cde10ce fix issue using external tracks 2022-06-03 21:08:30 +02:00
stax76
2ee2b31bc0 menu fix 2022-06-03 21:02:29 +02:00
stax76
4cd92db141 use new msg model everywhere 2022-06-03 20:23:05 +02:00
stax76
8ee389e8cb misc 2022-06-03 18:38:53 +02:00
stax76
971fe1fe7c - 2022-06-03 15:47:21 +02:00
stax76
e9df0f9f99 - 2022-06-02 20:16:13 +02:00
stax76
d465b13a03 Merge branch 'master' into no-mediainfo 2022-06-02 14:18:07 +02:00
stax76
412d4d7238 Merge pull request #432 from dyphire/track_menu
Optimize track menu.
2022-06-02 14:17:04 +02:00
stax76
1dd93bfcff - 2022-06-02 14:15:02 +02:00
stax76
4ebf241306 shorten mpv.conf preview 2022-06-02 12:37:56 +02:00
dyphire
1a714a39df Optimize track menu
Add encoding information to subtitles

Add title for external tracks, match and replace the filename to avoid too long characters
2022-06-02 11:33:18 +08:00
stax76
b2b387c017 #344 cache and demuxer-max-bytes option added to conf editor 2022-06-01 14:55:04 +02:00
stax76
bf43328e7a require at least 2 characters in conf editor search 2022-06-01 10:16:36 +02:00
stax76
4cba6bb03c fix changelog 2022-05-28 00:54:33 +02:00
stax76
72f9f156b8 fix external tracks 2022-05-27 16:21:42 +02:00
stax76
c78719c3bf Fix #426 external audio and subtitle tracks 2022-05-27 14:07:04 +02:00
stax76
7e4ea640cf Command messages are dispatched with script-message-to mpvnet 2022-05-27 12:20:37 +02:00
stax76
6ddca6d608 minor rewrite 2022-05-26 19:06:32 +02:00
stax76
0fae17b42a support idlelogo 2022-05-26 18:39:44 +02:00
stax76
7e834cea6d Fix #424 media title issues 2022-05-26 11:36:24 +02:00
stax76
6fc546c69c auto-load-folder threading stability 2022-05-22 15:49:25 +02:00
stax76
e8baa21d42 Fix auto-load-folder not working with user scripts 2022-05-22 14:35:43 +02:00
stax76
4c3c65dded #423 Fix chapter time display in menu 2022-05-22 11:48:35 +02:00
stax76
843f7d1a41 manual fix 2022-05-22 09:10:10 +02:00
stax76
673d5a8c0e manual improvement 2022-05-22 09:07:36 +02:00
stax76
6bd4540106 Fix #422 slow startup using osd-scale-by-window=no 2022-05-22 08:22:49 +02:00
stax76
5b57e6214e change profile using command palette 2022-05-22 08:07:48 +02:00
stax76
27f7935127 misc 2022-05-21 10:58:39 +02:00
stax76
cd84819a03 New show-santa-logo (green and grumpy) option 2022-05-21 08:52:44 +02:00
stax76
0efc335232 new quick bookmark feature 2022-05-21 08:31:06 +02:00
stax76
b04fb9b789 input conf use 'V' for 'Open URL or file from clipboard' 2022-05-20 18:18:56 +02:00
stax76
354d5493c4 improved error handling 2022-05-20 14:50:56 +02:00
stax76
3e499befbc Fix #421 crash choosing Matroska edition in the menu. 2022-05-20 14:29:21 +02:00
stax76
bc0fc2a29d Fix auto-play not working with user scripts 2022-05-19 23:17:23 +02:00
stax76
229ace708d minor input.conf change 2022-05-18 11:54:34 +02:00
stax76
2708937554 input.conf duplicate fix 2022-05-17 18:37:31 +02:00
stax76
66654537fe idle fix 2022-05-17 17:10:45 +02:00
stax76
5d16d7b2d1 support mpv idle property partly 2022-05-17 15:05:00 +02:00
stax76
b3ebf85772 Merge pull request #419 from hooke007/doc
bump Manual_chs v5.9.0.0
2022-05-14 14:24:11 +02:00
hooke007
733f0999e1 bump Manual_chs v5.9.0.0 2022-05-13 21:28:25 +01:00
stax76
2aec8856c7 script-opts defaults 2022-05-13 13:39:40 +02:00
stax76
a0d5a6f234 libmpv update 2022-05-08 15:08:32 +02:00
stax76
d9afd172f9 5.9.0.0 Beta 2022-05-08 15:01:45 +02:00
stax76
3b9368230c fix #414 2022-05-05 12:31:13 +02:00
stax76
7d510a8ba7 update about 2022-05-04 15:25:51 +02:00
stax76
e7f08bf0a7 about update 2022-05-04 13:12:33 +02:00
stax76
ad3235bb96 update project description 2022-05-04 12:33:47 +02:00
stax76
b5b18f2a1a try to fix #413 2022-05-04 12:06:20 +02:00
stax76
28f9df1cee New mpv.net specific option keep-open-exit added 2022-05-03 15:18:42 +02:00
stax76
cd2f2aeec8 Fix config editor handling keep-open incorrectly 2022-05-03 14:25:15 +02:00
stax76
a15d2cdbbe playlist-add command added 2022-05-01 01:01:51 +02:00
stax76
f489d59168 Fix multi monitor setup with different DPI values 2022-04-28 21:53:50 +02:00
stax76
309ddbf08e Fix #398 keyboard layout change not working 2022-04-08 19:16:18 +02:00
stax76
1bc6fb9509 Merge pull request #400 from hooke007/dev
update manual_chs for v5.8.0.0
2022-04-05 19:55:19 +02:00
hooke007
88e5628d7b update manual_chs for v5.8.0.0 2022-04-03 21:29:07 +01:00
stax76
27dc98af21 v5.8.0.0 2022-04-02 15:14:36 +02:00
stax76
ce12eb61fd Info command shows the length 2022-04-02 11:40:40 +02:00
stax76
8ed62df8e2 workaround not reproducible logo drawing crash 2022-04-02 11:15:04 +02:00
stax76
f4b4be5466 add show-menu to changelog and manual 2022-03-31 16:41:23 +02:00
stax76
9a33bea7e7 context menu issue fix #396 2022-03-31 16:22:54 +02:00
stax76
3f469897b0 Fix crash on Windows 7 systems without PowerShell. 2022-03-24 18:32:32 +01:00
stax76
1aa380f768 manual 2022-03-13 14:15:24 +01:00
stax76
b0c3988a9d improved manual 2022-03-13 14:00:26 +01:00
stax76
8c02bb59ee Media Info is shown using command palette 2022-03-12 21:27:07 +01:00
stax76
d60bf050cf show commands with text editor 2022-03-12 14:26:00 +01:00
stax76
a0f2e8bd92 Merge pull request #386 from hooke007/doc
update Manual_chs for v5.7.0.0
2022-03-11 22:05:51 +01:00
stax76
63db623d07 2 fixes 2022-03-11 22:02:54 +01:00
hooke007
ab0b2c4da2 update Manual_chs for v5.7.0.0 2022-03-12 03:35:18 +08:00
stax76
091e159d10 fix MS Store page displaying non existing ARM and x86 support 2022-03-11 15:31:11 +01:00
stax76
91fa89b058 Fix showing incorrect timestamps in About dialog of Store version 2022-03-10 18:27:33 +01:00
stax76
36d3543852 5.7.0.0 Stable 2022-03-09 12:48:52 +01:00
stax76
72ed687390 minor things 2022-03-05 22:06:20 +01:00
stax76
c56855bbc7 5.6.2.0 Beta 2022-03-05 21:05:50 +01:00
stax76
9377804b06 fixing reintroduced osc issue, sorry 2022-03-05 15:39:56 +01:00
stax76
c50ac7a53b manual update again 2022-03-05 15:23:23 +01:00
stax76
677e7b5a59 manual update 2022-03-05 15:21:33 +01:00
stax76
8066d07a76 5.6.1.0 Beta 2022-03-05 14:59:05 +01:00
stax76
e8d6081f9f ms store issue fix 2022-03-05 09:51:39 +01:00
stax76
5fb888262e Merge pull request #370 from KaranKad/conf
Added config location for Microsoft Store version
2022-03-05 08:32:13 +01:00
stax76
a4ffab7b50 misc 2022-03-05 07:55:34 +01:00
stax76
8d25803b71 #369 #367 protocol registration 2022-03-05 04:36:09 +01:00
stax76
df4baca6bc protocol fix 2022-03-05 04:05:04 +01:00
stax76
dc43ab4c8f rtsp protocol support 2022-03-05 03:48:47 +01:00
stax76
2249174f96 misc... 2022-03-04 21:49:05 +01:00
stax76
6916a63de6 several improvements 2022-03-02 21:19:55 +01:00
stax76
1064a80dad gpu-next fix 2022-03-02 14:33:47 +01:00
Karan09
4844215462 Add config location for msstore 2022-02-15 21:08:02 +05:30
stax76
b84889b03d manual download instruction updated 2022-01-03 20:57:54 +01:00
stax76
b38bfd9c65 Fix libmpv API changes 2021-12-19 18:40:34 +01:00
stax76
b807ad8002 Merge pull request #357 from hooke007/libmpv
support mpv-2
2021-12-19 16:01:57 +01:00
hooke007
f5854cde1b support mpv-2
drop the support of mpv-1
2021-12-17 07:43:31 +08:00
stax76
bde4849465 menu issue fix 2021-12-01 14:09:31 +01:00
stax76
8677efdb06 Update Main.webp 2021-11-20 21:29:22 +01:00
stax76
2bbd5705c2 readme update 2021-11-20 21:02:04 +01:00
stax76
0bf9b73ba8 manual update 2021-11-19 16:12:10 +01:00
stax76
42fd54269e improved manual 2021-11-19 14:04:46 +01:00
stax76
28f1c5c132 register ytdl protocol with file associations 2021-11-19 12:48:12 +01:00
stax76
30b60a5b4e Merge pull request #343 from hooke007/dev
Update doc
2021-11-18 10:44:50 +01:00
stax76
f0c9dd7956 docs improvement 2021-11-18 10:36:32 +01:00
hooke007
78ee4fbba2 Update Manual_chs.md
follow orginal commit 243b45326e
2021-11-17 02:54:24 +08:00
stax76
243b45326e Auto update feature removed 2021-11-14 00:05:31 +01:00
stax76
4efe85aad7 misc... 2021-11-13 23:43:47 +01:00
stax76
975f918703 changelog update 2021-11-06 16:15:05 +01:00
stax76
d9f4218bb4 Merge pull request #336 from hooke007/dev
update editor
2021-11-06 16:03:36 +01:00
stax76
671c15385a manual fix 2021-11-05 15:58:25 +01:00
stax76
091b9aad5b manual fix 2021-11-05 15:56:14 +01:00
stax76
e51b745a13 5.5.0.4 Beta 2021-11-05 15:53:57 +01:00
stax76
ad1ea92cbd window-scale property support 2021-11-05 15:23:47 +01:00
hooke007
66bfb80f3c update editor
mainly support `gpu-next`
2021-11-04 08:13:28 +08:00
stax76
ef6b453673 readme update 2021-11-02 11:47:32 +01:00
stax76
5496d22c48 readme update 2021-11-02 11:45:20 +01:00
stax76
7cd3a8276d WPF blur issue fix? 2021-10-26 12:24:23 +02:00
stax76
99ea7285ba manual fix 2021-10-24 17:19:47 +02:00
stax76
9722d46d00 support input-default-bindings 2021-10-24 17:08:07 +02:00
stax76
b115cf82d9 manual fix 2021-10-21 00:24:45 +02:00
stax76
f4e72b5a99 typo 2021-10-11 12:50:27 +02:00
stax76
24596626bd misc 2021-10-11 12:29:30 +02:00
stax76
6e761c0a4e minor change 2021-10-10 15:55:51 +02:00
stax76
2a3738f79e Improved handling of default options. 2021-10-10 15:20:12 +02:00
stax76
1a475f9fe8 Support input-builtin-bindings 2021-10-09 14:31:34 +02:00
Frank Skare
819b026ec7 Window size flicker issue fix when changing files 2021-09-23 19:46:38 +02:00
Frank Skare
38a816a255 5.5.0.3 Beta 2021-09-23 12:45:09 +02:00
Frank Skare
e8af1d2ccf cosmetic 2021-09-16 16:13:06 +02:00
Frank Skare
33cd881ae6 #321 new auto-play option 2021-09-16 16:02:59 +02:00
Frank Skare
a3b6af9f22 5.5.0.2 Beta 2021-09-15 13:25:58 +02:00
Frank Skare
458007862e 5.5.0.1 Beta 2021-09-15 11:57:01 +02:00
Frank Skare
2fac5d76e9 5.4.9.9 Beta 2021-09-14 17:26:05 +02:00
Frank Skare
1e886fc124 remove console-scale fix 2021-09-05 22:51:09 +02:00
Frank Skare
c075278180 5.4.9.8 Beta 2021-09-05 22:27:01 +02:00
Frank Skare
333d0ee62f better folder browser code 2021-09-05 21:59:05 +02:00
Frank Skare
7a6b2011e4 improved menu performance and folder browser fix 2021-09-05 08:23:42 +02:00
Frank Skare
e4c65cd84e Use Vista folder browser 2021-09-05 06:06:15 +02:00
Frank Skare
10e2a2cf3b #318 Fix message box not working when ontop is enabled 2021-09-04 12:39:28 +02:00
Frank Skare
0d72731ce7 PS ConvertFrom-Json replaced with JSONParser 2021-09-03 13:04:06 +02:00
Frank Skare
33fb645694 fix watch-later-options default 2021-09-02 15:01:11 +02:00
Frank Skare
d369c9db8e Merge branch 'master' of https://github.com/stax76/mpv.net 2021-09-02 14:42:56 +02:00
Frank Skare
a935cac791 misc 2021-09-02 14:42:53 +02:00
stax76
a08a4b4f92 Merge pull request #317 from hooke007/dev
update misc
2021-09-02 14:42:18 +02:00
hooke007
bd2ba612de a tiny optimize for console output 2021-09-02 19:45:04 +08:00
hooke007
306d186bef revert keep-open 2021-09-02 19:24:17 +08:00
hooke007
da67d62946 fix mpvconf
disable `start`
2021-09-02 00:35:49 +08:00
hooke007
50cc295e9e fix editor 2021-09-01 01:06:38 +08:00
hooke007
bec97545d1 Update CorePlayer.cs 2021-08-30 21:01:00 +08:00
hooke007
db5f0334c4 update&fix manuals 2021-08-30 02:41:06 +08:00
Frank Skare
42c623c8ca 5.4.9.7 Beta 2021-08-28 12:47:24 +02:00
Frank Skare
d3c1e2ab56 5.4.9.6 Beta 2021-08-26 13:11:07 +02:00
Frank Skare
57e60287ff msgbox fix 2021-08-26 12:51:20 +02:00
Frank Skare
007fbf8be5 5.4.9.5 Beta 2021-08-25 14:12:45 +02:00
Frank Skare
d3baa47f93 Message boxes are themed 2021-08-25 11:31:20 +02:00
Frank Skare
225905ebff menu fix 2021-08-24 16:00:16 +02:00
Frank Skare
c08ddd5057 menu performance 2021-08-24 15:20:54 +02:00
Frank Skare
970dfc069d 5.4.9.4 Beta 2021-08-24 08:22:59 +02:00
Frank Skare
9b5f9a64fd readme fix 2021-08-23 01:19:02 +02:00
Frank Skare
6720e2429e Button style in input editor. 2021-08-23 01:14:25 +02:00
Frank Skare
5070b166d9 new images 2021-08-23 00:15:17 +02:00
Frank Skare
8b6d12d57b new image 2021-08-23 00:10:45 +02:00
Frank Skare
8888747137 new images 2021-08-23 00:02:58 +02:00
Frank Skare
d83b5b14a8 5.4.9.3 Beta 2021-08-22 23:50:42 +02:00
Frank Skare
17ecd9cb82 Major UI rework! 2021-08-22 18:50:11 +02:00
Frank Skare
0829b4bd9e lua string escape fix 2021-08-16 22:28:02 +02:00
Frank Skare
fbc9652f20 update changelog 2021-08-16 11:18:42 +02:00
Frank Skare
c7d9d658f2 libmpv shinchiro 2021-08-15 2021-08-16 11:18:00 +02:00
Frank Skare
1c525618e2 #291 Leaving fullscreen using keepaspect-window=no restores the correct size 2021-08-16 11:12:53 +02:00
Frank Skare
9ead5dbd19 #309 support hwdec=auto-safe 2021-08-16 09:07:33 +02:00
Frank Skare
625e887dc1 string escape issue fix 2021-08-15 20:21:43 +02:00
Frank Skare
60cbf894e5 5.4.9.2 Beta 2021-08-08 15:26:54 +02:00
Frank Skare
95a3403898 5.4.9.2 Beta 2021-08-08 14:31:43 +02:00
Frank Skare
fbf50e7466 themed scroll bars, rounded courners, libmpv update 2021-08-08 11:55:43 +02:00
Frank Skare
e9b6988a69 window fix 2021-07-30 08:57:52 +02:00
Frank Skare
8d49c96c57 Drawing flicker in the command palette (playlist) was fixed 2021-07-29 14:25:37 +02:00
Frank Skare
ea56dcdda8 conf editor support for keepaspect-window 2021-07-28 12:28:43 +02:00
stax76
5ef8340ba3 Merge pull request #290 from hooke007/dev
fix a potential bug when switching back to `auto`
2021-07-28 11:37:07 +02:00
hooke007
51e1e85867 fix a potential bug when switching back to auto 2021-07-27 19:08:47 +08:00
Frank Skare
b24f740129 Merge branch 'master' of https://github.com/stax76/mpv.net 2021-07-27 08:50:21 +02:00
Frank Skare
653d66c343 #289 fix line break issue in conf editor 2021-07-27 08:50:19 +02:00
stax76
3dd4ae1bfc Create FUNDING.yml 2021-07-24 10:16:31 +02:00
Frank Skare
27c8ae79e0 update readme 2021-07-24 08:32:43 +02:00
Frank Skare
53e3231452 update readme 2021-07-24 08:31:30 +02:00
Frank Skare
bcf98d847a update readme 2021-07-24 08:28:51 +02:00
Frank Skare
b6ee67d506 Delete License.txt 2021-07-22 19:05:29 +02:00
Frank Skare
3f13747413 Change license from MIT to GPL v2 2021-07-22 17:50:40 +02:00
Frank Skare
54046d5c9d Merge branch 'master' of https://github.com/stax76/mpv.net 2021-07-22 08:43:12 +02:00
Frank Skare
8966f25e06 watch-later-options support added to conf editor 2021-07-22 08:43:09 +02:00
stax76
27fca2cb82 Merge pull request #286 from hooke007/dev
add watch-later-options
2021-07-22 08:41:44 +02:00
hooke007
0d1a17a41a add watch-later-options 2021-07-21 23:06:48 +08:00
Frank Skare
517e4a1142 update changelog 2021-07-19 16:15:16 +02:00
Frank Skare
a380f87b5f Profile selection in the context menu 2021-07-19 15:22:36 +02:00
Frank Skare
35d9d29d40 Support for --keep-open=no 2021-07-19 10:29:13 +02:00
Frank Skare
e1c9d81496 misc 2021-07-19 02:33:32 +02:00
Frank Skare
fbeeb3f015 manual update 2021-07-18 14:54:07 +02:00
Frank Skare
48735a602a #281 handling settings.xml crash 2021-07-17 16:45:34 +02:00
Frank Skare
886f3349ae use pascal casing everywhere 2021-07-15 14:40:59 +02:00
Frank Skare
43c150a18b set pause no before loading file 2021-07-12 00:58:16 +02:00
Frank Skare
33bbc4a2c4 Update delete-current-file.lua 2021-07-11 22:37:37 +02:00
Frank Skare
6c4a014e57 Update delete-current-file.lua 2021-07-02 16:27:25 +02:00
Frank Skare
ce0dd9ceec globalization bug fix 2021-07-01 16:30:55 +02:00
Frank Skare
3520ce6a3f script update 2021-07-01 14:16:05 +02:00
Frank Skare
376f8226ab playlist shows current file 2021-06-28 23:09:09 +02:00
Frank Skare
6b6ae6bfef Changelog update 2021-06-28 10:42:25 +02:00
stax76
b13dbf0b59 Merge pull request #278 from hooke007/dev
doc-manual:chs
2021-06-28 10:37:54 +02:00
stax76
0f7ac5c0ba Merge pull request #277 from soredake/master
Swap screenshot and stop bindings
2021-06-28 10:28:05 +02:00
Frank Skare
25b94bc2c1 new script delete-current-file.lua 2021-06-28 10:27:24 +02:00
hooke007
445730a833 follow upstream's commit 2021-06-27 20:44:01 +08:00
Frank Skare
fd1590142e toml parser replaced with own conf parser 2021-06-27 13:11:34 +02:00
hooke007
c41adc54c5 tiny fix on orig manual & fully translation 2021-06-27 16:21:52 +08:00
hooke007
a3f6b105de doc-manual:chs 2021-06-27 01:26:39 +08:00
soredake
6e402d4931 Swap screenshot and stop bindings 2021-06-26 13:10:37 +03:00
Frank Skare
c40a0d8835 Merge branch 'master' of https://github.com/stax76/mpv.net 2021-06-24 17:22:33 +02:00
Frank Skare
28416dc3d2 Merge branch 'pr/272-improvements-to-input-conf' 2021-06-24 17:20:03 +02:00
Frank Skare
1bde5b6836 misc 2021-06-24 17:19:20 +02:00
stax76
d1619bca22 Merge pull request #276 from hooke007/patch-2
update editor
2021-06-24 16:37:14 +02:00
hooke007
a123c38dfd update editor 2021-06-24 14:05:05 +08:00
stax76
e02d1850a2 Merge pull request #273 from hooke007/patch-1
fix editor's error
2021-06-23 11:54:10 +02:00
Frank Skare
bd37761fc5 readme update 2021-06-23 11:52:59 +02:00
hooke007
897b901c7c fix editor's error
"If this option is unset, the filter implied by scale will be applied."
2021-06-23 15:32:38 +08:00
Frank Skare
da882c3c11 updating screenshots 2021-06-23 09:01:00 +02:00
Frank Skare
bd1a46d18d 5.4.9.1 2021-06-23 07:28:29 +02:00
Frank Skare
1c23c10c81 #268 Fix exception using named pipes 2021-06-23 06:02:02 +02:00
Frank Skare
55f16d2c53 fancy new command palette 2021-06-22 20:54:14 +02:00
Frank Skare
bac8b2b96c misc 2021-06-22 19:10:27 +02:00
soredake
08328c91c4 Improvements to input.conf 2021-06-22 15:11:10 +03:00
Frank Skare
6634ef094c misc 2021-06-20 16:01:04 +02:00
Frank Skare
3b6e6167b0 misc 2021-06-20 11:34:57 +02:00
Frank Skare
f55dfa7a73 misc 2021-06-20 11:29:58 +02:00
Frank Skare
93f0c970da misc 2021-06-20 11:11:51 +02:00
Frank Skare
aa94da9767 #263 enhancing mpv.net option process-instance 2021-06-18 19:43:30 +02:00
Frank Skare
8340c18257 docs 2021-06-17 23:52:25 +02:00
Frank Skare
075e238c46 docs 2021-06-17 23:51:37 +02:00
Frank Skare
6e6b5ae98c docs 2021-06-17 23:49:00 +02:00
Frank Skare
2078ff867b docs 2021-06-17 23:45:58 +02:00
Frank Skare
446d88e16a trying to fix window issues 2021-06-17 17:46:17 +02:00
Frank Skare
ebacaa0341 #140 Fix window size not being saved 2021-06-17 16:32:35 +02:00
Frank Skare
8420abd915 external audio and subtitle tracks 2021-05-31 10:17:55 +02:00
Frank Skare
650c41eb8a Context menu font render quality fix 2021-05-30 19:42:41 +02:00
Frank Skare
db3018bbf5 Show error message box on main window thread. 2021-05-30 15:08:44 +02:00
Frank Skare
539f94d1c9 New media info command 2021-05-30 14:39:15 +02:00
Frank Skare
f56502d8f3 do not load extensions from startup directory 2021-05-30 12:25:57 +02:00
Frank Skare
57ae0d008b 5.4.9.0 2021-05-29 12:17:20 +02:00
Frank Skare
e128a4868b Improved input editor theming 2021-05-28 21:58:32 +02:00
Frank Skare
3875e1c1bf docs 2021-05-28 12:06:34 +02:00
stax76
dd508907eb Merge pull request #253 from hooke007/master
fix some links
2021-05-28 11:47:58 +02:00
Frank Skare
765854cd10 After using the config editor it's no longer necessary to restart mpv.net. 2021-05-28 11:38:36 +02:00
hooke007
69fe7c091a fix some links 2021-05-26 20:31:09 +08:00
Frank Skare
45a2b7f976 AR fix 2021-05-24 21:31:35 +02:00
Frank Skare
a8cf3407e7 #245 Video rotation support added 2021-05-24 20:06:30 +02:00
Frank Skare
b8163c3c3e logo issue fix 2021-05-24 11:13:49 +02:00
Frank Skare
9d27465492 Store settings in settings.xml instead of registry. 2021-05-24 03:09:23 +02:00
Frank Skare
bba71c3782 fix #249 2021-05-23 22:21:59 +02:00
Frank Skare
eaa8a3ca6c removal of TaskDialog usage... 2021-05-23 19:30:21 +02:00
Frank Skare
0b28770d1a - 2021-05-16 16:49:43 +02:00
Frank Skare
45d3386a88 Improved cycle-audio OSD info 2021-05-13 23:10:45 +02:00
Frank Skare
8df330b7aa High DPI multi monitor fix 2021-05-13 11:53:36 +02:00
Frank Skare
69857e0548 new window features 2021-05-11 17:55:37 +02:00
Frank Skare
b1388e10e5 working on start-size option 2021-05-11 10:19:14 +02:00
Frank Skare
6f7f127279 reworked start-size option 2021-05-10 13:11:39 +02:00
Frank Skare
18c8f5783b 5.4.8.8 Beta 2021-05-09 15:50:09 +02:00
Frank Skare
cdf3eb1373 docs 2021-05-07 11:19:09 +02:00
Frank Skare
e5bcd0fc29 argh 2021-05-07 11:14:53 +02:00
Frank Skare
b0dc44a98e argh 2021-05-07 11:14:32 +02:00
Frank Skare
41a14cd3b7 argh 2021-05-07 11:12:59 +02:00
Frank Skare
b38c7cf834 argh 2021-05-07 11:12:25 +02:00
Frank Skare
2ee4c1e647 manual 2021-05-07 11:04:24 +02:00
Frank Skare
2bcf97a97a option --command to send input commands 2021-05-07 10:55:41 +02:00
Frank Skare
8eaec77b0c manual update 2021-05-06 16:45:55 +02:00
Frank Skare
3161ba1022 rating extension update 2021-05-06 16:42:07 +02:00
Frank Skare
496bba71d4 manual URL fixes 2021-05-06 16:30:09 +02:00
Frank Skare
3e1e822e56 docs URL fix 2021-05-06 16:08:09 +02:00
Frank Skare
b1ea6da39b URL fix 2021-05-06 15:52:26 +02:00
Frank Skare
8d54abae4c URL fix 2021-05-06 15:44:19 +02:00
Frank Skare
3583aa11ed new folder structure and new C# script host 2021-05-06 15:23:28 +02:00
Frank Skare
642c36bacf wpf error handling 2021-04-30 15:09:31 +02:00
Frank Skare
0343b32847 proper mpv title property implementation 2021-04-30 14:53:41 +02:00
Frank Skare
6e2d11952f misc... 2021-04-30 11:50:41 +02:00
Frank Skare
d0ad69656a Command palette shows commands without assigned menu item 2021-03-10 16:40:31 +01:00
Frank Skare
62789fa036 Implementation for the mpv title property.
mpv window-scale property works now exactly like in mpv.
2021-03-10 13:28:39 +01:00
Frank Skare
a7fe444067 manual update 2021-03-09 10:37:59 +01:00
Frank Skare
1ef4740b09 mpv.net specific options added to manual 2021-03-09 10:28:04 +01:00
Frank Skare
c5e445da17 error message removal and release script fix 2021-03-09 09:15:47 +01:00
Frank Skare
a52de9039d 5.4.8.7 Beta 2021-03-09 07:23:26 +01:00
Frank Skare
8db8e497a5 File associations and auto-load-folder can be customized 2021-03-09 06:56:55 +01:00
Frank Skare
28c9b2710c Support of --version command 2021-02-16 10:03:35 +01:00
Frank Skare
6ba9b1f05a Win 10 default code page changed to UTF8 2020-12-30 01:01:48 +01:00
Frank Skare
ea5d3e64ee Web stream audio and subtitle track selection 2020-12-29 06:00:06 +01:00
Frank Skare
636d28ac54 history feature can be configured 2020-12-28 02:30:45 +01:00
Frank Skare
6e54286a60 5.4.8.6 Beta 2020-12-24 11:39:20 +01:00
Frank Skare
b396012934 Santa hat shown in december 2020-12-24 11:24:03 +01:00
Frank Skare
f3909acdfe #218 2020-12-15 18:13:38 +01:00
Frank Skare
3ed71444a7 fix setup dialog issue 2020-12-15 18:12:10 +01:00
Frank Skare
cab7c6d49b update manual 2020-12-15 17:28:53 +01:00
Frank Skare
368641523a new menu image 2020-12-14 20:29:46 +01:00
Frank Skare
42c76d25c6 update readme 2020-12-14 00:52:06 +01:00
Frank Skare
3968fa50f5 #214 Filename not being always shown in title bar. 2020-12-13 23:08:16 +01:00
Frank Skare
4d985c7b7c misc... 2020-12-13 08:12:50 +01:00
Frank Skare
235a52a701 remove 7z from release 2020-12-11 17:54:02 +01:00
Frank Skare
9a63b660de 5.4.8.5 Beta 2020-12-11 17:49:51 +01:00
Frank Skare
8eb0222873 setup redesign 2020-12-10 15:54:32 +01:00
Frank Skare
bf8636135a setup redesign 2020-12-09 22:01:33 +01:00
Frank Skare
33cdee5497 show setup dialog on new startup location 2020-12-09 09:56:51 +01:00
Frank Skare
564d7b10a0 improved setup dialog 2020-12-08 18:54:50 +01:00
Frank Skare
a1a408da1d improved setup dialog 2020-12-06 16:54:06 +01:00
Frank Skare
85a3506403 misc... 2020-12-02 03:40:38 +01:00
Frank Skare
e860cf52c4 Merge branch 'master' of https://github.com/stax76/mpv.net 2020-11-25 16:21:55 +01:00
Frank Skare
32a46e47e2 New feature for rating extension 2020-11-25 16:21:53 +01:00
stax76
538e91aaa9 New option global-media-keys 2020-10-08 18:07:23 +02:00
stax76
94eaf8144f cleanup 2020-10-08 17:56:49 +02:00
stax76
404a8f110d global media keys 2020-10-08 17:34:27 +02:00
Frank Skare
14f5228754 AviSynth portable mode 2020-08-03 20:42:48 +02:00
Frank Skare
5ec2d1b436 Merge branch 'master' of https://github.com/stax76/mpv.net 2020-07-28 15:38:21 +02:00
Frank Skare
32c6ce3a44 docs update 2020-07-28 15:36:57 +02:00
stax76
b86148dfb3 Update issue templates 2020-07-28 15:11:46 +02:00
stax76
26e94fad2b Update issue templates 2020-07-28 15:10:35 +02:00
Frank Skare
c306eb032f 5.4.8.4 Beta 2020-07-26 04:04:35 +02:00
Frank Skare
09944583dd message asking if image is BD or DVD 2020-07-26 04:03:56 +02:00
Frank Skare
8f4ad52469 Cycle audio was not working for BluRay 2020-07-26 03:34:57 +02:00
Frank Skare
5f4eca21e5 BluRay folder path auto detection 2020-07-26 03:19:35 +02:00
Frank Skare
b4632a0b6e fix slow BluRay menu 2020-07-26 02:19:29 +02:00
Frank Skare
c14a11170d 5.4.8.3 Beta 2020-07-25 12:51:16 +02:00
Frank Skare
723005b28f fix issue 188 2020-07-25 12:45:47 +02:00
Frank Skare
72f25a686e default screen and mouse wheel fix 2020-07-25 11:40:33 +02:00
stax76
b1fb940759 Merge pull request #184 from arnesacnussem/master
fix for #124
2020-07-02 14:37:11 +02:00
Arne
1020cd70d1 fix for #124
wheel_left and wheel_right still can't be detected in `Learn Input` window.
2020-06-30 20:41:05 +08:00
Frank Skare
50a2f13dbe 5.4.8.2 Beta 2020-06-23 02:41:29 +02:00
Frank Skare
b1ffb8291f Merge branch 'master' of https://github.com/stax76/mpv.net 2020-06-20 03:35:29 +02:00
Frank Skare
dbc8ddaf2b misc 2020-06-20 03:35:27 +02:00
stax76
b42cb6be05 Merge pull request #170 from Naomi010Sentzke/patch-1
Manual.md : Remove Chocolatey and Appget
2020-05-21 20:43:09 +02:00
Naomi Sentzke
b63363336f Update Manual.md 2020-05-19 10:38:34 +05:30
Frank Skare
b0ef161ed9 fix stdin support 2020-05-12 18:18:04 +02:00
Frank Skare
7d31237d5f fix release script 2020-05-11 17:14:23 +02:00
Frank Skare
3705e2abbf 5.4.8.0 2020-05-11 17:08:01 +02:00
Frank Skare
7d73529c83 fix beep sound when closed from taskbar 2020-05-11 12:16:40 +02:00
Frank Skare
2e59d49ad1 2 bugs fixed 2020-05-11 03:51:52 +02:00
Frank Skare
f61eef8961 5.4.7.4 Beta 2020-05-10 07:01:59 +02:00
Frank Skare
efb4c085d5 fix release script 2020-05-08 15:56:54 +02:00
Frank Skare
4a045d6a91 setting media-keys added 2020-05-08 15:32:47 +02:00
Frank Skare
da1a78cfa3 5.4.7.2 Beta 2020-05-08 09:22:19 +02:00
Frank Skare
5b3697fbde built-in WM_APPCOMMAND support 2020-05-08 08:26:44 +02:00
Frank Skare
726d759589 misc 2020-05-07 13:32:23 +02:00
Frank Skare
ed614332f7 misc 2020-05-07 13:21:59 +02:00
Frank Skare
9d46064dca 5.4.7.1 Beta 2020-05-07 11:47:09 +02:00
Frank Skare
407b49b3ad 5.4.7.0 2020-05-06 18:51:38 +02:00
Frank Skare
0e92d4ec0c 5.4.7.0 2020-05-06 18:43:20 +02:00
Frank Skare
4f96835e19 support avisynth portable 2020-05-06 11:11:09 +02:00
Frank Skare
56d954d94e manual 2020-05-04 16:30:39 +02:00
Frank Skare
a8aeb1e3e9 manual 2020-05-04 16:28:59 +02:00
Frank Skare
415fd266a2 log error fix 2020-05-04 15:15:40 +02:00
Frank Skare
51f9e17380 5.4.6.0 2020-05-04 05:50:29 +02:00
Frank Skare
28045ad33e 5.4.5.1 Beta 2020-05-03 11:10:56 +02:00
Frank Skare
e1bd44cd00 5.4.5.0 2020-05-01 22:02:03 +02:00
Frank Skare
27d6026213 misc 2020-04-27 15:41:16 +02:00
Frank Skare
c67d5f10f8 manual 2020-04-25 23:59:05 +02:00
Frank Skare
5f73be07e8 URL fix 2020-04-25 15:59:51 +02:00
Frank Skare
0cad09d2bb 5.4.4.6 Beta 2020-04-25 15:56:34 +02:00
Frank Skare
54b2612bb8 5.4.4.6 Beta 2020-04-25 15:36:56 +02:00
Frank Skare
82b4d19282 5.4.4.5 Beta 2020-04-23 22:55:45 +02:00
Frank Skare
23a587c819 manual 2020-04-23 12:55:02 +02:00
Frank Skare
d69eecd494 readme 2020-04-23 12:27:43 +02:00
Frank Skare
0d4cc59f9a manual 2020-04-23 12:15:12 +02:00
Frank Skare
a394536a8c readme and manual 2020-04-23 11:35:44 +02:00
Frank Skare
ebcd20ceb5 manual 2020-04-22 19:41:50 +02:00
Frank Skare
964c2f4dd2 manual 2020-04-22 19:39:17 +02:00
Frank Skare
e985047a54 manual 2020-04-22 19:33:58 +02:00
Frank Skare
bafc09a948 manual 2020-04-22 19:24:34 +02:00
Frank Skare
14a172b78b scripting docs 2020-04-22 19:17:12 +02:00
Frank Skare
2eb324bf41 manual 2020-04-22 08:25:31 +02:00
Frank Skare
afe9ad5128 misc 2020-04-22 08:15:28 +02:00
Frank Skare
cc657d4ec2 misc 2020-04-22 08:14:55 +02:00
Frank Skare
1270dd474e 5.4.4.4 Beta 2020-04-22 08:04:26 +02:00
stax76
e9ea70838d Merge pull request #152 from Restia666Ashdoll/patch-1
Update Manual.md - Replace External Application Button with Open With
2020-04-22 05:54:49 +02:00
Frank Skare
e7fde60150 full implementation for window-minimized and window-maximized 2020-04-22 05:52:11 +02:00
Restia666Ashdoll
2028113d58 Update Manual.md 2020-04-21 18:41:57 +05:30
Frank Skare
4d55423fc7 scripts moved from wiki to folder 2020-04-21 04:31:10 +02:00
Frank Skare
d82874409d rename scripts folder 2020-04-21 04:02:25 +02:00
Frank Skare
930ba2b0e7 crash fixed when PowerShell 5.1 is not available 2020-04-21 03:39:31 +02:00
Frank Skare
4743f365a1 readme 2020-04-19 20:43:09 +02:00
Frank Skare
194ff5d62b 5.4.4.3 Beta 2020-04-19 20:40:26 +02:00
Frank Skare
5a726a01e0 window maximized issue 2020-04-19 20:14:46 +02:00
Frank Skare
fee13353ec seek-show-position script removed 2020-04-19 18:51:54 +02:00
Frank Skare
cd3543fff4 misc 2020-04-19 03:16:00 +02:00
Frank Skare
c54f240346 docs 2020-04-15 20:28:30 +02:00
Frank Skare
7f55ad908a start-size supports always 2020-04-15 14:25:45 +02:00
Frank Skare
d586a82e37 changelog 2020-04-15 04:03:06 +02:00
Frank Skare
722e06a02b window-maximized support added 2020-04-13 03:42:36 +02:00
Frank Skare
2f76d2b775 Merge branch 'master' of https://github.com/stax76/mpv.net 2020-04-12 21:54:44 +02:00
Frank Skare
7519977124 misc 2020-04-12 21:54:41 +02:00
stax76
2e65b9ceb8 Update issue templates 2020-04-12 21:53:26 +02:00
stax76
04bffca206 Update issue templates 2020-04-12 21:52:11 +02:00
Frank Skare
ff5a164c69 cleanup MediaInfo class 2020-03-22 00:55:33 +01:00
Frank Skare
26b391a8d9 5.4.4.2 2020-03-21 08:28:37 +01:00
Frank Skare
32eed33c82 misc 2020-03-21 06:43:54 +01:00
Frank Skare
639893f2e7 misc 2020-03-20 17:47:46 +01:00
Frank Skare
42b0cc1a64 5.4.4.2 2020-03-20 01:22:26 +01:00
Frank Skare
6f7fa6c9d6 readme fix 2020-03-17 19:41:33 +01:00
Frank Skare
e6fb775dcd 5.4.4.1 2020-03-17 19:36:07 +01:00
Frank Skare
ece15ca9bb fix issue enlarging or shrinking the window size via keyboard 2020-03-17 00:18:09 +01:00
Frank Skare
6b3c2788df new: blue color in dark theme is now less intense 2020-03-16 03:50:18 +01:00
Frank Skare
067bdd20d7 minor changes 2020-03-16 03:31:26 +01:00
Frank Skare
97ce08c4c7 script-message mpv.net playlist-first 2020-03-07 14:12:02 +01:00
Frank Skare
fbb9cbdc33 docs 2020-03-03 23:43:49 +01:00
Frank Skare
815adca198 Merge branch 'master' of https://github.com/stax76/mpv.net 2020-03-03 23:03:03 +01:00
Frank Skare
ce3d5792ad readme update 2020-03-03 23:02:40 +01:00
stax76
74fc0b3ed7 Merge pull request #126 from Restia666Ashdoll/patch-1
Add AppGet to README
2019-12-05 13:51:57 +01:00
Restia666Ashdoll
604a1e8499 Update README.md 2019-12-05 16:00:42 +05:30
stax76
56ade0a0d1 Merge pull request #118 from Restia666Ashdoll/patch-1
External Application Button is also on Firefox
2019-12-02 01:25:01 +01:00
Frank Skare
6294a96aea fix update routine 2019-12-02 01:22:12 +01:00
Restia666Ashdoll
9a95953a04 Update Manual.md 2019-11-18 21:05:57 +05:30
Frank Skare
8d9c0c9092 readme update 2019-11-17 16:02:16 +01:00
Frank Skare
e399ca672f update readme 2019-11-17 15:52:56 +01:00
Frank Skare
660345d18a update script change 2019-11-17 14:49:42 +01:00
Frank Skare
3844db6e79 5.4.4.0 2019-11-17 14:40:08 +01:00
Frank Skare
5374e20757 update changelog 2019-11-15 16:44:20 +01:00
Frank Skare
bc6167c4ee new libmpv added to changelog 2019-11-15 16:41:37 +01:00
stax76
7979f77284 Merge pull request #117 from Restia666Ashdoll/patch-2
Update Changelog.md
2019-11-14 14:22:57 +01:00
Restia666Ashdoll
71b90ed5cb Update Changelog.md 2019-11-13 21:29:08 +00:00
Frank Skare
9d2e236b3e update csproj 2019-11-13 18:33:20 +01:00
Frank Skare
d42657a3f0 release script added 2019-11-13 18:23:55 +01:00
Frank Skare
e4818fae18 update script added to csproj 2019-11-13 15:01:08 +01:00
Frank Skare
7b39bfcbc4 forecolors in the dark theme are slightly darker now 2019-11-13 14:56:36 +01:00
Frank Skare
fd6f3c94dd manual update 2019-11-13 13:55:50 +01:00
Frank Skare
dd10c07fb5 manual update 2019-11-13 13:41:14 +01:00
Frank Skare
3bbfdcffdd manual update 2019-11-13 13:36:21 +01:00
Frank Skare
6b7c4e1724 readme and manual update 2019-11-13 13:28:06 +01:00
Frank Skare
d3ad1091ec manual update 2019-11-12 22:03:05 +01:00
Frank Skare
65177c448b update manual 2019-11-12 21:57:07 +01:00
Frank Skare
1cdecb3810 manual update 2019-11-12 21:52:38 +01:00
Frank Skare
20ea755a93 update check and update routine 2019-11-12 21:50:38 +01:00
stax76
3b7bc95869 Merge pull request #115 from Restia666Ashdoll/patch-1
Wrong Chocolatey install method
2019-11-10 23:25:34 +01:00
Frank Skare
5380daad53 Merge branch 'master' of https://github.com/stax76/mpv.net 2019-11-10 23:22:23 +01:00
Frank Skare
a5f4d848d4 changelog and update check 2019-11-10 23:22:20 +01:00
Restia666Ashdoll
cf0f9bfa01 Update README.md 2019-11-10 22:20:09 +00:00
stax76
68461e05da Merge pull request #114 from Restia666Ashdoll/patch-2
Scoop and Chocolatey installation method in README.md
2019-11-10 23:13:59 +01:00
Restia666Ashdoll
397b988851 Update README.md 2019-11-11 03:29:14 +05:30
Frank Skare
eddb95e791 often the OSC was shown when fullscreen was entered 2019-11-02 11:39:15 +01:00
Frank Skare
fa1183710b fix theme issue 2019-11-01 17:16:34 +01:00
Frank Skare
f468fd9c56 manual update 2019-11-01 16:54:17 +01:00
Frank Skare
22f2aa93a8 manual update 2019-11-01 16:44:48 +01:00
Frank Skare
c2c0a8f190 5.4.3.0 2019-11-01 16:38:54 +01:00
Frank Skare
da3e6655c6 manual improvement 2019-11-01 16:18:27 +01:00
Frank Skare
856959a4d1 manual improvement 2019-11-01 16:15:59 +01:00
Frank Skare
9053ecb4ee clear button style 2019-11-01 14:01:03 +01:00
Frank Skare
33fd7fc09b manual improvement 2019-11-01 13:07:20 +01:00
Frank Skare
d005f19755 manual improvement 2019-11-01 13:02:57 +01:00
Frank Skare
1081007009 manual improvement 2019-11-01 13:01:37 +01:00
Frank Skare
e6c0a67483 manual improvement 2019-11-01 12:57:27 +01:00
Frank Skare
265e18985d theme docs 2019-11-01 12:31:47 +01:00
Frank Skare
8dc204e81a new theme feature 2019-11-01 12:16:20 +01:00
Frank Skare
b9b604bfe3 multi select files in File Explorer fix 2019-10-30 17:31:19 +01:00
Frank Skare
05027cd458 fix: window restore was broken 2019-10-29 14:34:51 +01:00
Frank Skare
9bbde49a5c design improvement 2019-10-15 19:01:56 +02:00
Frank Skare
cfca7786f3 changelog update 2019-10-15 05:58:31 +02:00
Frank Skare
be57edf2c5 5.4.2.1 2019-10-15 05:58:00 +02:00
Frank Skare
f48901355a - 2019-10-15 05:01:09 +02:00
Frank Skare
ca153fecfc update readme 2019-10-15 04:58:52 +02:00
Frank Skare
e3227de8b4 changelog updated 2019-10-14 16:02:24 +02:00
Frank Skare
4a202245b5 window-size mpv property support added 2019-10-14 15:50:20 +02:00
Frank Skare
b94f9de582 switch --queue added 2019-10-14 12:10:30 +02:00
Frank Skare
7371949730 pressing shift key suppresses auto-load-folder 2019-10-14 11:47:22 +02:00
Frank Skare
857926696c update changelog 2019-10-13 05:47:09 +02:00
Frank Skare
4451a6c185 5.4.2 2019-10-13 05:45:50 +02:00
Frank Skare
ea6a71b7c3 restore resulted in collapsed window when maximized = yes was used 2019-10-13 05:15:41 +02:00
Frank Skare
625dddcfbb clipboard monitoring feature removed because it was causing to many issues 2019-10-13 04:37:18 +02:00
Frank Skare
0cd769fc0c the log feature was not working 2019-10-13 04:12:48 +02:00
Frank Skare
f5e0c92824 new screenshot 2019-10-09 07:05:46 +02:00
Frank Skare
327a097bcf there was a sound when closed from taskbar due to a exception 2019-10-04 17:36:14 +02:00
Frank Skare
68626fa536 for URLs the media title is shown in the title bar 2019-10-01 01:19:01 +02:00
Frank Skare
8935101058 fix issue with clipboard url detection 2019-09-28 04:01:10 +02:00
Frank Skare
6947c925b9 Toggle Shuffle has been added to the menu defaults 2019-09-27 22:41:36 +02:00
Frank Skare
4562131078 support added for --list-properties 2019-09-20 04:45:24 +02:00
Frank Skare
21188f0942 test 2019-09-11 11:04:10 +02:00
Frank Skare
1316559ebc test 1 2019-09-11 11:02:43 +02:00
Frank Skare
cd576f9211 manual updated 2019-09-11 10:26:42 +02:00
Frank Skare
1bac8e8937 update changelog 2019-09-09 07:37:02 +02:00
Frank Skare
e6d0449f8f update changelog 2019-09-09 07:13:19 +02:00
Frank Skare
e0e40b7918 improved python error messages 2019-09-09 07:09:10 +02:00
Frank Skare
b59f16a425 improved PowerShell scrip host 2019-09-09 05:56:08 +02:00
Frank Skare
46b110d93b improved PowerShell scrip host 2019-09-09 00:46:08 +02:00
Frank Skare
7e8a654ada improved PowerShell scrip host 2019-09-08 22:16:58 +02:00
Frank Skare
c2c33228a0 a issue with the taskbar-progress feature was fixed 2019-09-06 04:32:39 +02:00
Frank Skare
0a28f13d51 5.4 Release 2019-09-05 19:00:54 +02:00
Frank Skare
9f3a1da931 fix relative file path not found 2019-09-05 09:12:19 +02:00
Frank Skare
05874ad6be update changelog 2019-09-05 08:15:13 +02:00
Frank Skare
078e8046bd added taskbar-progress implementation 2019-09-05 06:20:44 +02:00
Frank Skare
b07901485e fixed history being written even when history file wasn't created prior 2019-08-28 09:36:10 +02:00
Frank Skare
a37cbef8a8 long file names work now even if not enabled by the OS 2019-08-21 17:21:04 +02:00
Frank Skare
8debcc171c added new setting to start with maximized window 2019-08-21 16:52:09 +02:00
Frank Skare
e230f0f474 osc=yes and input-media-keys=yes was enforced, can now be disabled in mpv.conf 2019-08-16 19:37:07 +02:00
Frank Skare
558bd67591 update readme 2019-08-11 05:53:42 +02:00
Frank Skare
a7e4892acf update readme 2019-08-11 05:53:05 +02:00
Frank Skare
a0ba69c1aa readme update 2019-08-11 05:52:22 +02:00
Frank Skare
1e7e80577d 5.3 Release 2019-08-11 05:47:17 +02:00
Frank Skare
2177308b02 new config setting recent-count added 2019-08-11 04:58:42 +02:00
Frank Skare
a8c2409ed1 new menu items added to navigate to the first and last playlist position 2019-08-09 01:59:20 +02:00
Frank Skare
1ef9e64a41 scale, cscale, dscale defaults have been set to spline36 2019-08-08 19:07:27 +02:00
Frank Skare
f0546485cf Open > Open DVD/Blu-ray Drive/Folder 2019-08-08 18:45:34 +02:00
Frank Skare
032e91e4b4 mpv setting osd-scale-by-window added to config dialog 2019-08-08 03:31:57 +02:00
Frank Skare
1447636eb7 fixed race condition causing various features to fail 2019-08-07 13:16:05 +02:00
Frank Skare
966f96a02b 5.2 Release 2019-08-06 18:44:40 +02:00
Frank Skare
954c014708 bug fix for logo not shown on start 2019-08-06 01:49:51 +02:00
Frank Skare
ad30dc5ae2 command line processing was improved 2019-08-05 03:06:40 +02:00
Frank Skare
3f74344b99 terminal screenshot 2019-08-01 20:29:43 +02:00
Frank Skare
96d8d88d09 readme update 2019-08-01 12:54:15 +02:00
Frank Skare
8626b8283f improved error handling 2019-08-01 11:47:01 +02:00
Frank Skare
d90025e8fe misc 2019-08-01 04:45:11 +02:00
Frank Skare
a572bd8553 new setting remember-volume added 2019-07-31 08:01:03 +02:00
Frank Skare
0f5146e58c startup folder and config folder beeing identical is no longer a supported scenaria 2019-07-29 22:48:08 +02:00
Frank Skare
9c6c0f3506 fix issue with startup folder and config folder beeing identical 2019-07-29 22:05:06 +02:00
Frank Skare
8c36cc8b8c improved error handling 2019-07-29 14:14:23 +02:00
Frank Skare
44435057d7 improved error handling, new setup dialog 2019-07-29 13:59:30 +02:00
Frank Skare
135bdeb638 fixed issue in file associations causing mpv.net not to appear in OS default apps 2019-07-28 23:03:38 +02:00
Frank Skare
93c93b620d update readme 2019-07-28 01:24:17 +02:00
stax76
247aefbf07 update readme.md 2019-07-28 01:08:44 +02:00
Frank Skare
0a8397652f input editor improvements 2019-07-27 23:46:53 +02:00
Frank Skare
ecd5b01161 Merge branch 'master' of https://github.com/stax76/mpv.net 2019-07-27 19:23:44 +02:00
Frank Skare
1e9893977d refactoring 2019-07-27 19:23:42 +02:00
stax76
4fd6b13e0f Update ScriptingExtension.cs 2019-07-27 04:54:00 +02:00
stax76
d21d36c196 Update ScriptingExtension.cs 2019-07-27 04:51:05 +02:00
stax76
fbffbea641 Update RatingExtension.cs 2019-07-27 04:41:18 +02:00
Frank Skare
9899c2cd27 readme update 2019-07-27 03:02:02 +02:00
Frank Skare
10370e9ae2 removed 'Tools > Execute mpv command', mpv-repl is better 2019-07-27 02:28:30 +02:00
Frank Skare
d391e24784 5.0 Release 2019-07-27 01:53:30 +02:00
Frank Skare
430fef0ac4 default colors for dark-color and light-color added 2019-07-27 01:33:59 +02:00
Frank Skare
8430842679 misc 2019-07-27 01:17:25 +02:00
Frank Skare
9d37e67901 terminal support added via mpvnet.com 2019-07-26 18:32:42 +02:00
Frank Skare
e98ff53058 Merge branch 'master' of https://github.com/stax76/mpv.net 2019-07-26 03:22:20 +02:00
Frank Skare
b47d3c34f2 mpv.net attaches now to the parent terminal 2019-07-26 03:22:17 +02:00
stax76
54dd261df0 Merge pull request #56 from floppyD/patch-1
Fixed typo
2019-07-26 03:20:51 +02:00
floppyD
8eb7e41d16 Fixed typo 2019-07-25 20:43:48 -03:00
Frank Skare
2068bfb6fa new JavaScript added to show playlist with small font size 2019-07-25 12:27:13 +02:00
Frank Skare
dfc1ac712e extension changes 2019-07-25 02:22:16 +02:00
Frank Skare
d96587cb7b Addon renamed to Extension everywhere 2019-07-25 01:34:36 +02:00
Frank Skare
005550af55 changelog update 2019-07-24 20:11:40 +02:00
Frank Skare
543e2905cc mpv.conf preview feature added to config editor 2019-07-24 20:02:45 +02:00
Frank Skare
a49b9bea61 config editor support for all screenshot settings 2019-07-24 19:04:04 +02:00
Frank Skare
9ea9cb2757 - 2019-07-23 08:36:49 +02:00
Frank Skare
5543381a14 - 2019-07-23 08:36:34 +02:00
Frank Skare
cd6dcf4640 modified icon 2019-07-23 08:28:52 +02:00
Frank Skare
d321ab477f key binding MBTN_Mid 2019-07-21 20:31:47 +02:00
Frank Skare
1cd0f87278 readme, manual and AssemblyInfo.cs updated 2019-07-21 20:10:35 +02:00
Frank Skare
936274fc3b new main screenshot, about dialog for rating addon 2019-07-21 19:56:19 +02:00
Frank Skare
2bbaa30322 options autofit-smaller, autofit-larger added 2019-07-21 19:22:17 +02:00
Frank Skare
cedd54d64d start-threshold setting added 2019-07-21 17:06:55 +02:00
Frank Skare
38604459a6 update changelog 2019-07-20 17:54:52 +02:00
Frank Skare
0a48a0dc6f new logic to find the settings folder 2019-07-20 17:53:34 +02:00
Frank Skare
85a23fbae1 tweaks and refactoring 2019-07-18 05:47:16 +02:00
Frank Skare
01da76bdc4 fix changelog 2019-07-17 19:22:47 +02:00
Frank Skare
1f1553e159 - 2019-07-17 19:04:24 +02:00
Frank Skare
2af84941ca color theme related improvements 2019-07-17 18:18:33 +02:00
Frank Skare
a82f558acf - 2019-07-14 12:22:50 +02:00
Frank Skare
d13f7201ba - 2019-07-14 06:16:52 +02:00
Frank Skare
89aa0c6133 added image format support to the info command, to file association management, to folder loading, to Everything 2019-07-14 06:07:25 +02:00
Frank Skare
1699467e0d added image format support for the info command 2019-07-14 05:52:23 +02:00
Frank Skare
7a27ab0513 added file size to info command using audio files 2019-07-14 05:38:53 +02:00
Frank Skare
2a0c68e4ec - 2019-07-14 05:15:59 +02:00
Frank Skare
91c42d4d3f - 2019-07-14 05:04:22 +02:00
Frank Skare
49d56166d7 - 2019-07-14 04:34:45 +02:00
Frank Skare
1ac603b904 - 2019-07-14 04:03:58 +02:00
Frank Skare
d5b2923c68 reorganize code for easier scripting 2019-07-14 02:06:23 +02:00
Frank Skare
b80b375df1 move code before base.OnShown so scripts can use the ContextMenu 2019-07-14 01:40:13 +02:00
Frank Skare
2b2b60b90f fix rotating cursor 2019-07-13 19:22:51 +02:00
Frank Skare
3977283ecb minor tweak 2019-07-13 17:49:39 +02:00
Frank Skare
d27778775d few layout problems were fixed, autosize for instance did not work 2019-07-13 16:35:42 +02:00
Frank Skare
5c053bb5eb fix borderless window not minimizable from taskbar 2019-07-13 03:24:15 +02:00
Frank Skare
83658aa476 - 2019-07-12 23:53:43 +02:00
Frank Skare
e0111b6f12 - 2019-07-12 06:23:53 +02:00
Frank Skare
e308bbf928 - 2019-07-11 23:55:07 +02:00
Frank Skare
1817fbc0fd - 2019-07-09 09:17:35 +02:00
Frank Skare
3b149aea54 - 2019-07-08 18:18:55 +02:00
Frank Skare
7575a2d736 - 2019-07-06 23:51:28 +02:00
Frank Skare
17c198e711 - 2019-07-06 23:46:14 +02:00
Frank Skare
1f8635e9c4 - 2019-07-06 09:35:14 +02:00
Frank Skare
37e6c198a1 - 2019-07-06 03:46:36 +02:00
Frank Skare
751c8779f4 - 2019-07-06 02:39:25 +02:00
Frank Skare
9e2bf46636 - 2019-07-05 07:17:58 +02:00
Frank Skare
3529323d93 - 2019-07-05 06:36:15 +02:00
Frank Skare
ba52c1f8b5 - 2019-07-05 05:40:14 +02:00
Frank Skare
bf2070d758 - 2019-07-05 05:38:52 +02:00
Frank Skare
7a1de4cf0f - 2019-07-05 05:05:37 +02:00
Frank Skare
caf0bee161 - 2019-07-01 04:17:16 +02:00
Frank Skare
cedd694e8e - 2019-07-01 02:45:22 +02:00
Frank Skare
d1c58585f5 - 2019-06-30 07:16:28 +02:00
Frank Skare
0fce626c46 - 2019-06-30 07:14:13 +02:00
Frank Skare
adb8f38c0d - 2019-06-30 02:09:30 +02:00
Frank Skare
735ee42580 - 2019-06-30 02:07:16 +02:00
Frank Skare
103ae81b8b - 2019-06-29 12:36:35 +02:00
Frank Skare
8e351193e1 - 2019-06-27 10:35:37 +02:00
Frank Skare
d57b9281a1 - 2019-06-27 07:51:19 +02:00
Frank Skare
e07627377e - 2019-06-27 07:44:23 +02:00
Frank Skare
8899f4b772 - 2019-06-27 06:59:34 +02:00
Frank Skare
e7fd268927 - 2019-06-27 02:43:17 +02:00
Frank Skare
c8fe3a4c43 - 2019-06-26 16:06:41 +02:00
Frank Skare
19c2502c31 - 2019-06-26 03:23:40 +02:00
Frank Skare
56dae4babd - 2019-06-26 03:16:40 +02:00
Frank Skare
bc20d7527c - 2019-06-26 02:54:59 +02:00
Frank Skare
3d325d4fe5 - 2019-06-25 05:14:58 +02:00
Frank Skare
ba0141cfb1 - 2019-06-24 09:04:18 +02:00
Frank Skare
d32c7b4056 - 2019-06-24 09:00:01 +02:00
Frank Skare
63f064ba1c - 2019-06-24 07:52:30 +02:00
Frank Skare
e5c9df31e4 - 2019-06-22 06:27:22 +02:00
Frank Skare
c0a8e895f7 - 2019-06-19 18:22:40 +02:00
Frank Skare
064ae44ecf - 2019-06-19 18:03:14 +02:00
Frank Skare
005ba6e5ea - 2019-06-18 16:20:02 +02:00
Frank Skare
9f6aba6cbd - 2019-06-18 16:08:28 +02:00
Frank Skare
87e3d9ca3e - 2019-06-17 21:35:14 +02:00
Frank Skare
29a0eae3d5 - 2019-06-16 12:46:04 +02:00
Frank Skare
01b2492cde - 2019-06-16 12:28:15 +02:00
Frank Skare
d2b1ca0c69 - 2019-06-16 12:18:36 +02:00
Frank Skare
91b429e6b0 4.2 2019-06-16 12:12:51 +02:00
Frank Skare
fa05e95892 - 2019-06-16 12:02:46 +02:00
Frank Skare
701a58a4bf - 2019-06-16 11:53:28 +02:00
Frank Skare
387c3f7896 - 2019-06-16 11:48:15 +02:00
Frank Skare
eeb0189577 - 2019-06-16 11:47:03 +02:00
Frank Skare
de4c2d6d70 - 2019-06-16 11:44:41 +02:00
Frank Skare
63ee598ebd support added to force single instance 2019-06-16 10:00:14 +02:00
Frank Skare
1bf8e568c5 - 2019-06-14 01:03:18 +02:00
Frank Skare
f8f58dba5e - 2019-06-14 00:23:51 +02:00
Frank Skare
ebb8ad351a - 2019-06-13 22:29:23 +02:00
Frank Skare
0202c34c6f - 2019-06-07 23:58:25 +02:00
Frank Skare
c3f2b22ff5 - 2019-06-01 15:15:41 +02:00
Frank Skare
c1a03c3e4b - 2019-05-31 04:19:41 +02:00
Frank Skare
e041908f04 drag & drop support for subtitles added 2019-05-31 04:18:05 +02:00
Frank Skare
270559c3f7 - 2019-05-27 18:53:27 +02:00
Frank Skare
0dfd19eb45 - 2019-05-27 18:48:12 +02:00
Frank Skare
9cdba6d2f2 - 2019-05-27 18:43:23 +02:00
Frank Skare
50bf09ff8d - 2019-05-27 18:37:59 +02:00
Frank Skare
c54fa708f8 - 2019-05-27 16:29:44 +02:00
Frank Skare
7698e873ca - 2019-05-27 16:06:21 +02:00
Frank Skare
89b8de2c40 - 2019-05-27 15:51:15 +02:00
Frank Skare
259d2d882a - 2019-05-27 15:33:24 +02:00
Frank Skare
b7fbef5a88 - 2019-05-27 15:29:45 +02:00
Frank Skare
0ca9ac93f1 - 2019-05-27 05:10:38 +02:00
Frank Skare
f7b3900a0a - 2019-05-27 04:53:47 +02:00
Frank Skare
c98036dc42 - 2019-05-27 04:48:09 +02:00
Frank Skare
a9e7ae4b97 - 2019-05-27 04:45:35 +02:00
Frank Skare
30fb744114 - 2019-05-27 04:39:52 +02:00
Frank Skare
d465516a6a - 2019-05-27 04:34:59 +02:00
Frank Skare
0b951875e6 - 2019-05-27 01:45:37 +02:00
Frank Skare
5ed65733a0 - 2019-05-27 01:44:56 +02:00
Frank Skare
caac45a871 - 2019-05-27 01:41:04 +02:00
Frank Skare
f4f69816a7 - 2019-05-27 01:20:45 +02:00
Frank Skare
1dddf129df - 2019-05-27 01:19:44 +02:00
Frank Skare
ca9690c3b3 - 2019-05-26 06:23:47 +02:00
Frank Skare
3b0b098bda - 2019-05-26 06:21:43 +02:00
Frank Skare
c72080e92c - 2019-05-26 06:18:21 +02:00
Frank Skare
237a3cf132 - 2019-05-26 06:01:31 +02:00
Frank Skare
562f149fff - 2019-05-26 05:54:21 +02:00
Frank Skare
dc85372c36 - 2019-05-26 05:53:10 +02:00
Frank Skare
2595465ec7 - 2019-05-26 05:51:31 +02:00
Frank Skare
1db733ae13 - 2019-05-26 05:39:00 +02:00
Frank Skare
ba3bc48297 - 2019-05-26 05:34:52 +02:00
Frank Skare
5e16c47100 - 2019-05-26 05:32:23 +02:00
Frank Skare
a13c6648a3 - 2019-05-26 04:54:17 +02:00
Frank Skare
5dc244d6f6 - 2019-05-26 04:47:23 +02:00
Frank Skare
da9bc4199b - 2019-05-26 04:45:28 +02:00
Frank Skare
1868957388 - 2019-05-26 04:36:04 +02:00
Frank Skare
0139a1ef70 - 2019-05-26 04:32:19 +02:00
Frank Skare
0989b7ef95 - 2019-05-26 04:30:24 +02:00
Frank Skare
16924e5a3b - 2019-05-26 04:28:11 +02:00
Frank Skare
502e1a9651 - 2019-05-26 04:07:26 +02:00
Frank Skare
36a7bbcfab - 2019-05-26 03:48:06 +02:00
Frank Skare
8fda90e09a - 2019-05-26 03:10:28 +02:00
Frank Skare
269457dbde - 2019-05-26 00:38:00 +02:00
Frank Skare
c93647841e - 2019-05-25 23:54:53 +02:00
Frank Skare
0f78ea38ac - 2019-05-25 14:24:18 +02:00
Frank Skare
7eb60f3e4c - 2019-05-25 04:41:16 +02:00
Frank Skare
2636da446e - 2019-05-25 04:40:03 +02:00
Frank Skare
c7fab24044 - 2019-05-25 04:16:14 +02:00
Frank Skare
2ce1f3d9c1 - 2019-05-25 03:40:14 +02:00
Frank Skare
d2f9108c22 - 2019-05-25 03:33:33 +02:00
Frank Skare
3a2b9ee542 - 2019-05-25 03:20:35 +02:00
Frank Skare
5c93bc00f7 - 2019-05-25 03:09:15 +02:00
Frank Skare
19c09da4e1 - 2019-05-25 02:01:17 +02:00
Frank Skare
95c9c115b2 - 2019-05-23 03:35:10 +02:00
255 changed files with 30867 additions and 9766 deletions

2
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,2 @@
github: stax76
ko_fi: stax76

View File

@@ -0,0 +1,40 @@
---
name: Ask a question
about: Ask a question about mpv.net
title: ''
labels: question
assignees: stax76
---
This template is meant for usage questions of mpv.net.
Some type of questions like questions about a problem require filling out an issue template:
**Describe the problem**
A clear and concise description of what the problem is.
**To Reproduce**
To reproduce, try the last beta version using the CLI option `--config=no`.
In case of an audio or video problem, try to reproduce the problem using mpv instead of mpv.net.
If it can be reproduced with mpv, use the [mpv issue tracker](https://github.com/mpv-player/mpv/issues).
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Additional context**
Add any other context about the problem here.
1. mpv.net version
2. Windows version
3. GPU name
4. Media info

36
.github/ISSUE_TEMPLATE/report-a-bug.md vendored Normal file
View File

@@ -0,0 +1,36 @@
---
name: Report a bug
about: Create a report to help us improve
title: ''
labels: bug
assignees: stax76
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
To reproduce, try the last beta version using the CLI option `--config=no`.
In case of an audio or video issue, try to reproduce the issue using mpv instead of mpv.net.
If it can be reproduced with mpv, use the [mpv issue tracker](https://github.com/mpv-player/mpv/issues).
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Additional context**
Add any other context about the problem here.
1. mpv.net version
2. Windows version
3. GPU name
4. Media info

View File

@@ -0,0 +1,20 @@
---
name: Request a feature
about: Suggest an idea for this project
title: ''
labels: feature request
assignees: stax76
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

75
.github/workflows/build.yml vendored Normal file
View File

@@ -0,0 +1,75 @@
name: mpvnet build
on:
workflow_dispatch:
push:
branches:
- main
- ci
paths-ignore:
- '*.md'
- 'LICENSE'
- '.gitignore'
- '.gitattributes'
- 'docs/**'
- '.github/**'
- 'src/Extensions/**'
pull_request:
branches: [main]
paths-ignore:
- '*.md'
- 'LICENSE'
- '.gitignore'
- '.gitattributes'
- 'docs/**'
- '.github/**'
- 'src/Extensions/**'
jobs:
windows:
name: Windows build
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v1.1
- uses: msys2/setup-msys2@v2
with:
msystem: mingw64
update: true
install: >-
base-devel
wget
p7zip
- name: Build
shell: cmd
run: |
cd src
nuget restore
msbuild -restore
msbuild MpvNet.sln /m /p:Configuration=Debug
- name: Create .mo files for localization
shell: pwsh
run: Install-Package Gettext.Tools -Force; .\lang\create-mo-files.ps1
- name: Download libmpv # In principle, only update this binary file when significant feature changes occur in mpv/mpv.net
shell: msys2 {0}
run: |
wget -nv -O libmpv.7z https://github.com/zhongfly/mpv-winbuild/releases/download/2024-01-02-ab5b250/mpv-dev-x86_64-20240102-git-ab5b250.7z
7z x -y libmpv.7z -olibmpv
cp -f libmpv/libmpv-2.dll src/MpvNet.Windows/bin/Debug/ || true
- name: Download MediaInfo
shell: msys2 {0}
run: |
wget -nv -O MediaInfo.7z https://mediaarea.net/download/binary/libmediainfo0/23.11/MediaInfo_DLL_23.11_Windows_x64_WithoutInstaller.7z
7z x -y MediaInfo.7z -oMediaInfo
cp -f MediaInfo/MediaInfo.dll src/MpvNet.Windows/bin/Debug/ || true
- name: Download mpvnet.com file
shell: msys2 {0}
run: |
wget -nv -O mpvnet.com https://github.com/mpvnet-player/file-host/releases/download/tag/mpvnet.com.txt
cp -f mpvnet.com src/MpvNet.Windows/bin/Debug/ || true
- name: Upload
uses: actions/upload-artifact@v3
with:
name: "mpv.net-win64"
path: src/MpvNet.Windows/bin/Debug/

9
.tx/config Normal file
View File

@@ -0,0 +1,9 @@
[main]
host = https://app.transifex.com
[o:stax76:p:mpvnet:r:mpvnet]
file_filter = lang/po/<lang>.po
source_file = lang/source.pot
source_lang = en
type = PO

View File

@@ -1,21 +0,0 @@
MIT License
Copyright (c) 2017-2019 Frank Skare (stax76)
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and ssociated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH
THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

340
License.txt Normal file
View File

@@ -0,0 +1,340 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

257
README.md
View File

@@ -1,226 +1,133 @@
# mpv.net
mpv.net is a modern media player for Windows that looks and works just like [mpv](https://mpv.io).
![](docs/img/mpvnet.png)
#### Based on libmpv
![GitHub closed pull requests](https://img.shields.io/github/issues-pr-closed/stax76/mpv.net) ![GitHub closed issues](https://img.shields.io/github/issues-closed/stax76/mpv.net) ![GitHub All Releases](https://img.shields.io/github/downloads/stax76/mpv.net/total) ![GitHub tag (latest by date)](https://img.shields.io/github/tag-date/stax76/mpv.net) ![GitHub stars](https://img.shields.io/github/stars/stax76/mpv.net)
mpv.net is based on libmpv which offers a straightforward C API that was designed from the ground up to make mpv usable as a library and facilitate easy integration into other applications.
🎞 mpv.net
==========
#### CLI options
mpv.net is a media player for Windows with a modern GUI.
The player is based on the popular [mpv](https://mpv.io) media player.
mpv.net is designed to be mpv compatible, almost all mpv features are available,
this means the official [mpv manual](https://mpv.io/manual/master/) applies to mpv.net,
differences are documented in the [mpv.net manual](docs/manual.md#differences-compared-to-mpv).
#### Graphical User Interface
Modern GUI with customizable color themes.
#### Command Line Interface
mpv.net supports mpvs command line interface.
mpv.net has the same [CLI options](https://mpv.io/manual/master/#options) as mpv.
#### High quality video output
mpv/libmpv has an OpenGL based video output that is capable of many features loved by videophiles, such as video scaling with popular high quality algorithms, color management, frame timing, interpolation, HDR, and more.
Video output that is capable of many features loved by videophiles,
such as video scaling with popular high quality algorithms,
color management, frame timing, interpolation, HDR, and more.
#### On Screen Controller
mpv.net uses the OSC of mpv/libmpv offering play controls with a modern flat design.
Play controls with a modern flat design.
#### GPU video decoding
mpv/libmpv leverages the FFmpeg hwaccel APIs to support DXVA2 video decoding acceleration.
Leverages the FFmpeg hwaccel APIs to support DXVA2 video decoding acceleration.
#### Active development
mpv.net is under active development. Want a feature? Post a [patch](https://github.com/stax76/mpv.net/pulls) or [request it](https://github.com/stax76/mpv.net/issues)!
#### Based on libmpv
mpv.net is based on libmpv which offers a straightforward C API that
was designed from the ground up to make mpv usable as a library and
facilitate easy integration into other applications.
mpv is like VLC not based on DirectShow or Media Foundation.
Table of contents
-----------------
- [Features](#features)
- [Screenshots](#screenshots)
- [Context Menu](#context-menu)
- [Settings](#settings)
- [Scripting](#scripting)
- [Add-ons](#add-ons)
- [Architecture](#architecture)
- [Features](#features-that-mpv-and-mpvnet-have-in-common)
- [Support](#support)
- [Links](#links)
- [Download](#download)
- [Changelog](#changelog)
- [Manual](#manual)
- [Screenshots](#screenshots)
### Features
- Customizable context menu defined in the same file as the key bindings ([Screenshot](#context-menu-screenshot))
- Searchable config dialog ([Screenshot](#config-editor-screenshot))
- Searchable input (key/mouse) binding editor ([Screenshot](#input-editor-screenshot))
- Searchable command palette to quickly launch commands and look for keys ([Screenshot](#command-palette-screenshot))
- Modern UI with dark mode ([Screenshot](#config-editor-screenshot))
- Addon/extension API for .NET languages
- Scripting API for Python, C#, Lua, JavaScript and PowerShell ([wiki](https://github.com/stax76/mpv.net/wiki/Scripting))
- mpv's OSC, IPC and conf files
- Support of the same [CLI options](https://mpv.io/manual/master/#options) as mpv
Features that mpv and mpv.net have in common
--------------------------------------------
- Lua and JavaScript Scripting ([awesome-mpv lists a large collection of available user scripts](https://github.com/stax76/awesome-mpv))
- Simple config files that are easy to read and edit
- JSON IPC to control the player with a external programs
- On Screen Controller (OSC, play control buttons) with modern flat design
- Command Line Interface
- Started from a terminal, status, error and debug output is printed on the terminal
- DXVA2 video decoding acceleration
- OpenGL based video output capable of features loved by videophiles, such as video scaling with popular high quality algorithms, color management, frame timing, interpolation, HDR, and more
- Search feature powered by [Everything](https://www.voidtools.com) to find and play media ([Screenshot](#media-search-screenshot))
- Video output capable of features loved by videophiles, such as video scaling with popular high quality algorithms, color management, frame timing, interpolation, HDR, and more
- Browser extensions to start mpv.net from the browser
- Fast seek performance
- Fast startup performance
- Usable as video player, audio player and image viewer with a wide range of supported formats
- Built-in decoders, no external codecs have to be installed
- Build-in media streaming (requires yt-dlp being installed)
- External audio and subtitle files can be loaded manually or automatically
- Screenshot feature
- Internationalization using gettext and transifex
### Screenshots
#### Main Window Screenshot
Features exclusive to mpv.net
----------------------------
![Main Window](https://raw.githubusercontent.com/stax76/mpv.net/master/img/Main.png)
- Very high degree of mpv compatibility, almost all mpv features are available
- Modern graphical user interface with customizable color themes
- Customizable context menu
- Searchable config editor
- Searchable input (shorcut keys) editor
- Global keyboard shortcuts
- Extension API for .NET languages (C#, VB.NET and F#)
- Files can be enqueued from File Explorer
#### Context Menu Screenshot
Context menu defined in the input.conf file with dark mode support.
## [Support](docs/manual.md#support)
![Context Menu](https://raw.githubusercontent.com/stax76/mpv.net/master/img/Menu.png)
[Support section of the manual.](docs/manual.md#support)
#### Config Editor Screenshot
A searchable config editor as alternative to edit the mpv.conf file manually.
## [Download](docs/manual.md#download)
![](https://raw.githubusercontent.com/stax76/mpv.net/master/img/ConfEditor.png)
[Download section of the manual.](docs/manual.md#download)
#### Input Editor Screenshot
A searchable key and mouse binding editor.
## [Manual](docs/manual.md)
![Input Editor](https://raw.githubusercontent.com/stax76/mpv.net/master/img/InputEditor.png)
[The mpv.net documentation.](docs/manual.md)
#### Command Palette Screenshot
Forgot where a command in the menu is located or what shortcut key it has?
Just press Ctrl+Shift+P and find it easily in the searchable command palette.
Screenshots
-----------
![Command Palette](https://raw.githubusercontent.com/stax76/mpv.net/master/img/CommandPalette.png)
#### Main Window
#### Media Search Screenshot
![Main Window](docs/img/Main.webp)
Media search feature powered by [Everything](https://www.voidtools.com) to find and play media.
![Media Search](https://raw.githubusercontent.com/stax76/mpv.net/master/img/MediaSearch.png)
#### Context Menu
### Context Menu
![Context Menu](docs/img/Menu.webp)
The context menu can be customized via input.conf file located in the config directory:
```Text
C:\Users\%username%\AppData\Roaming\mpv\input.conf
```
#### Config Editor
if it's missing mpv.net generates it with the following defaults:
Searchable config editor as alternative to edit the conf file manually.
<https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/inputConf.txt>
![](docs/img/ConfEditor.webp)
input.conf defines mpv's key and mouse bindings and mpv.net uses comments to define the context menu.
### Settings
#### Terminal
mpv.net is able to share the settings with mpv and mpv.net uses the same logic to decide from where the settings are loaded. The default location is:
```Text
C:\Users\%username%\AppData\Roaming\mpv\mpv.conf
```
If a directory named portable_config next to the mpvnet.exe exists, all config will be loaded from this directory only.
```Text
<startup>\portable_config\mpv.conf
```
In case there isn't any config folder mpv.net asks where to create it. If no mpv.conf file exists mpv.net generates it with the following defaults:
<https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/mpvConf.txt>
Config files located in the same directory as mpvnet.exe are loaded with lower priority. Some config files are loaded only once, which means that e.g. of 2 input.conf files located in two config directories, only the one from the directory with higher priority will be loaded.
### Scripting
[Scripting wiki page](https://github.com/stax76/mpv.net/wiki/Scripting)
### Add-ons
[Add-on wiki page](https://github.com/stax76/mpv.net/wiki/Addons)
### Architecture
mpv.net is written in C# 7.0 and runs on the .NET framework 4.7 or higher.
The Add-on implementation is based on the Managed Extensibility Framework,
the entire application code is accessible for add-ons and Python scripts.
Python scripting is implemented with IronPython which uses Python 2.7.
The main/video window is WinForms based, other windows are WPF based.
The config editor adds it's controls dynamically and uses TOML to define it's
content, there are only two simple types, StringSetting and OptionSetting.
mpv.net was started 2017 and consists of about 9000 lines of code.
Third party components are:
- [libmpv](https://mpv.io/)
- [MediaInfo](https://mediaarea.net/en/MediaInfo)
- [Tommy (TOML parser)](https://github.com/dezhidki/Tommy)
- [IronPython](https://ironpython.net/)
- [CS-Script](http://www.csscript.net/)
### Support
[Support thread in Doom9 forum](https://forum.doom9.org/showthread.php?t=174841)
[Support thread in VideoHelp forum](https://forum.videohelp.com/threads/392514-mpv-net-a-extendable-media-player-for-windows)
[Issue tracker to report bugs and request features](https://github.com/stax76/mpv.net/issues)
### Links
mpv manual: <https://mpv.io/manual/master/>
mpv wiki: <https://github.com/mpv-player/mpv/wiki>
mpv.net wiki: <https://github.com/stax76/mpv.net/wiki>
mpv apps: <https://github.com/mpv-player/mpv/wiki/Applications-using-mpv>
mpv user scripts: <https://github.com/mpv-player/mpv/wiki/User-Scripts>
mpv default key bindings: <https://github.com/mpv-player/mpv/blob/master/etc/input.conf>
mpv.net default key bindings: <https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/inputConf.txt>
mpv download: <https://mpv.io/installation/>
mpv.net download: <https://github.com/stax76/mpv.net/releases>
mpv bugs and requests: <https://mpv.io/bug-reports/>
mpv.net bugs and requests: <https://github.com/stax76/mpv.net/issues>
### Download
<https://github.com/stax76/mpv.net/releases>
### Changelog
### 3.6.1
- there was a bug causing an exception if both the input editor and config editor
is opened, as soon as one is opened, the other can't be opened
### 3.6
- playing files from rar archives caused an exception
- there was a bug that caused underscores beeing removed from input like MBTN_LEFT_DBL
- the search clear button in the input editor had a render issue in dark mode
- new search feature added to search and play media files, requires
[Everything](https://www.voidtools.com) to be installed. [Default Binding](https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/inputConf.txt#L29)
### 3.5
- when the main windows gets activated and the clipboard content starts with http
mpv.net will ask to play the URL, previously this was restricted to YouTube URLs
- Python script errors show line and column whenever it is supported by IronPython
- if conf files exist in the startup directory mpv.net will use the startup
directory as config directory instead of creating default conf files in appdata
- renamed commands are handled now by migration code instead of being broken
### 3.4
- new feature added to manage file associations from within the app. It can be found in the menu at: Tools > Manage... [Default Binding](https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/inputConf.txt#L149)
- new zip download option added
- new x86 download option added
![](docs/img/Terminal.webp)

View File

@@ -1,35 +0,0 @@
Imports System.ComponentModel.Composition
Imports System.IO
Imports System.Windows.Forms
Imports mpvnet
Imports CSScriptLibrary
<Export(GetType(IAddon))>
Public Class CSScriptAddon
Implements IAddon
Sub New()
Dim scriptFiles As New List(Of String)
If Directory.Exists(mp.MpvConfFolder + "scripts") Then
scriptFiles.AddRange(Directory.GetFiles(mp.MpvConfFolder + "scripts", "*.cs"))
End If
If Directory.Exists(Application.StartupPath + "\scripts") Then
scriptFiles.AddRange(Directory.GetFiles(Application.StartupPath + "\scripts", "*.cs"))
End If
If scriptFiles.Count = 0 Then Return
CSScriptLibrary.CSScript.EvaluatorConfig.Engine = EvaluatorEngine.CodeDom
For Each i In scriptFiles
Try
CSScriptLibrary.CSScript.Evaluator.LoadCode(File.ReadAllText(i))
Catch ex As Exception
Msg.ShowException(ex)
End Try
Next
End Sub
End Class

View File

@@ -1,166 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{71808A87-8B1C-4DF8-957C-D79C3B164CCA}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>CSScriptAddon</RootNamespace>
<AssemblyName>CSScriptAddon</AssemblyName>
<FileAlignment>512</FileAlignment>
<MyType>Windows</MyType>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>..\mpv.net\bin\Addons\CSScriptAddon\</OutputPath>
<DocumentationFile>
</DocumentationFile>
<NoWarn>42105,42106,42107,42353,42354,42355</NoWarn>
<WarningsAsErrors>41999,42016,42017,42018,42019,42020,42021,42022,42032,42036</WarningsAsErrors>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<Optimize>true</Optimize>
<OutputPath>..\mpv.net\bin\Addons\CSScriptAddon\</OutputPath>
<DocumentationFile>
</DocumentationFile>
<NoWarn>42105,42106,42107,42353,42354,42355</NoWarn>
<WarningsAsErrors>41999,42016,42017,42018,42019,42020,42021,42022,42032,42036</WarningsAsErrors>
</PropertyGroup>
<PropertyGroup>
<OptionExplicit>On</OptionExplicit>
</PropertyGroup>
<PropertyGroup>
<OptionCompare>Binary</OptionCompare>
</PropertyGroup>
<PropertyGroup>
<OptionStrict>On</OptionStrict>
</PropertyGroup>
<PropertyGroup>
<OptionInfer>On</OptionInfer>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>..\..\mpv.net\bin\x86\Addons\CSScriptAddon\</OutputPath>
<NoWarn>42105,42106,42107,42353,42354,42355</NoWarn>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<WarningsAsErrors>41999,42016,42017,42018,42019,42020,42021,42022,42032,42036</WarningsAsErrors>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<DefineTrace>true</DefineTrace>
<OutputPath>..\mpv.net\bin\x86\Addons\CSScriptAddon\</OutputPath>
<Optimize>true</Optimize>
<NoWarn>42105,42106,42107,42353,42354,42355</NoWarn>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<WarningsAsErrors>41999,42016,42017,42018,42019,42020,42021,42022,42032,42036</WarningsAsErrors>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>..\..\mpv.net\bin\x64\Addons\CSScriptAddon\</OutputPath>
<NoWarn>42105,42106,42107,42353,42354,42355</NoWarn>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<WarningsAsErrors>41999,42016,42017,42018,42019,42020,42021,42022,42032,42036</WarningsAsErrors>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<DefineTrace>true</DefineTrace>
<OutputPath>..\mpv.net\bin\x64\Addons\CSScriptAddon\</OutputPath>
<Optimize>true</Optimize>
<NoWarn>42105,42106,42107,42353,42354,42355</NoWarn>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<WarningsAsErrors>41999,42016,42017,42018,42019,42020,42021,42022,42032,42036</WarningsAsErrors>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="CSScriptLibrary, Version=3.27.5.0, Culture=neutral, PublicKeyToken=70fcc3d18c749033, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>.\CSScriptLibrary.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Data" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Net.Http" />
</ItemGroup>
<ItemGroup>
<Import Include="Microsoft.VisualBasic" />
<Import Include="System" />
<Import Include="System.Collections" />
<Import Include="System.Collections.Generic" />
<Import Include="System.Data" />
<Import Include="System.Diagnostics" />
<Import Include="System.Linq" />
<Import Include="System.Xml.Linq" />
<Import Include="System.Threading.Tasks" />
</ItemGroup>
<ItemGroup>
<Compile Include="CSScriptAddon.vb" />
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Application.myapp</DependentUpon>
</Compile>
<Compile Include="My Project\Resources.Designer.vb">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="My Project\Settings.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="My Project\Resources.resx">
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
<CustomToolNamespace>My.Resources</CustomToolNamespace>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="My Project\Application.myapp">
<Generator>MyApplicationCodeGenerator</Generator>
<LastGenOutput>Application.Designer.vb</LastGenOutput>
</None>
<None Include="My Project\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<CustomToolNamespace>My</CustomToolNamespace>
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
</None>
</ItemGroup>
<ItemGroup>
<Content Include="CSScriptLibrary.dll" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\mpv.net\mpv.net.csproj">
<Project>{1751f378-8edf-4b62-be6d-304c7c287089}</Project>
<Name>mpv.net</Name>
<Private>False</Private>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
</Project>

View File

@@ -1,13 +0,0 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On

View File

@@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MySubMain>false</MySubMain>
<SingleInstance>false</SingleInstance>
<ShutdownMode>0</ShutdownMode>
<EnableVisualStyles>true</EnableVisualStyles>
<AuthenticationMode>0</AuthenticationMode>
<ApplicationType>1</ApplicationType>
<SaveMySettingsOnExit>true</SaveMySettingsOnExit>
</MyApplicationData>

View File

@@ -1,35 +0,0 @@
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
' General Information about an assembly is controlled through the following
' set of attributes. Change these attribute values to modify the information
' associated with an assembly.
' Review the values of the assembly attributes
<Assembly: AssemblyTitle("CSScriptAddon")>
<Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("")>
<Assembly: AssemblyProduct("CSScriptAddon")>
<Assembly: AssemblyCopyright("Copyright © 2019")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)>
'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("4a748201-3948-497d-b156-7d172a332bd6")>
' Version information for an assembly consists of the following four values:
'
' Major Version
' Minor Version
' Build Number
' Revision
'
' You can specify all the values or you can default the Build and Revision Numbers
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.0.0.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")>

View File

@@ -1,63 +0,0 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Imports System
Namespace My.Resources
'This class was auto-generated by the StronglyTypedResourceBuilder
'class via a tool like ResGen or Visual Studio.
'To add or remove a member, edit your .ResX file then rerun ResGen
'with the /str option, or rebuild your VS project.
'''<summary>
''' A strongly-typed resource class, for looking up localized strings, etc.
'''</summary>
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0"), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
Friend Module Resources
Private resourceMan As Global.System.Resources.ResourceManager
Private resourceCulture As Global.System.Globalization.CultureInfo
'''<summary>
''' Returns the cached ResourceManager instance used by this class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CSScriptAddon.Resources", GetType(Resources).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
'''<summary>
''' Overrides the current thread's CurrentUICulture property for all
''' resource lookups using this strongly typed resource class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Property Culture() As Global.System.Globalization.CultureInfo
Get
Return resourceCulture
End Get
Set
resourceCulture = value
End Set
End Property
End Module
End Namespace

View File

@@ -1,117 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -1,73 +0,0 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0"), _
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase
Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings)
#Region "My.Settings Auto-Save Functionality"
#If _MyType = "WindowsForms" Then
Private Shared addedHandler As Boolean
Private Shared addedHandlerLockObject As New Object
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs)
If My.Application.SaveMySettingsOnExit Then
My.Settings.Save()
End If
End Sub
#End If
#End Region
Public Shared ReadOnly Property [Default]() As MySettings
Get
#If _MyType = "WindowsForms" Then
If Not addedHandler Then
SyncLock addedHandlerLockObject
If Not addedHandler Then
AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
addedHandler = True
End If
End SyncLock
End If
#End If
Return defaultInstance
End Get
End Property
End Class
End Namespace
Namespace My
<Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
Friend Module MySettingsProperty
<Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
Friend ReadOnly Property Settings() As Global.CSScriptAddon.My.MySettings
Get
Return Global.CSScriptAddon.My.MySettings.Default
End Get
End Property
End Module
End Namespace

View File

@@ -1,7 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

View File

@@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("RatingAddon")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("RatingAddon")]
[assembly: AssemblyCopyright("Copyright © 2017")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("55c88710-539d-4402-84c8-31694841c731")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -1,58 +0,0 @@
using System;
using System.ComponentModel.Composition;
using System.Collections.Generic;
using System.IO;
using mpvnet;
namespace RatingAddon
{
[Export(typeof(IAddon))]
public class RatingAddon : IAddon
{
Dictionary<string, int> Dic = new Dictionary<string, int>();
public RatingAddon()
{
mp.ClientMessage += mpv_ClientMessage;
mp.Shutdown += mpv_Shutdown;
}
void mpv_Shutdown()
{
foreach (var i in Dic)
{
string filepath = i.Key;
int rating = i.Value;
if (String.IsNullOrEmpty(filepath) || ! File.Exists(filepath))
return;
string basename = Path.GetFileNameWithoutExtension(filepath);
for (int x = 0; x < 6; x++)
if (basename.Contains(" (" + x.ToString() + "stars)"))
basename = basename.Replace(" (" + x.ToString() + "stars)", "");
basename += $" ({rating}stars)";
string newPath = Path.Combine(Path.GetDirectoryName(filepath), basename + Path.GetExtension(filepath));
if (filepath.ToLower() != newPath.ToLower())
File.Move(filepath, newPath);
File.SetLastWriteTime(newPath, DateTime.Now);
}
}
void mpv_ClientMessage(string[] args)
{
int rating;
if (args?.Length != 2 || args[0] != "rate-file" || ! int.TryParse(args[1], out rating))
return;
Dic[mp.get_property_string("path")] = rating;
mp.commandv("show-text", $"Rating: {rating}");
}
}
}

View File

@@ -1,92 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{55C88710-539D-4402-84C8-31694841C731}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>RatingAddon</RootNamespace>
<AssemblyName>RatingAddon</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\mpv.net\bin\Addons\RatingAddon\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\mpv.net\bin\Addons\RatingAddon\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>..\..\mpv.net\bin\x86\Addons\RatingAddon\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>..\mpv.net\bin\x86\Addons\RatingAddon\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>..\..\mpv.net\bin\x64\Addons\RatingAddon\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>..\mpv.net\bin\x64\Addons\RatingAddon\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="RatingAddon.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\mpv.net\mpv.net.csproj">
<Project>{1751f378-8edf-4b62-be6d-304c7c287089}</Project>
<Name>mpv.net</Name>
<Private>False</Private>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -1,27 +0,0 @@
using System.ComponentModel.Composition;
using mpvnet;
namespace TestAddon
{
[Export(typeof(IAddon))]
public class TestAddon : IAddon
{
// do some init work in constructor
public TestAddon()
{
// Observe changes of the fullscreen property.
// You can find a list of available mpv properties
// in mpv.net's wiki on github or use mpv --list-properties.
// You can test properties in mpv.net in the menu at:
// Tools > Execute mpv command
// where you can enter: show-text ${fullscreen}
mp.observe_property_bool("fullscreen", OnFullscreenChange);
}
void OnFullscreenChange(bool val)
{
mp.commandv("show-text", "fullscreen: " + val.ToString());
}
}
}

View File

@@ -1,56 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{06F854B0-00F9-4B53-94D9-0BE65A7C55D8}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>TestAddon</RootNamespace>
<AssemblyName>TestAddon</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="TestAddon.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\mpv.net\mpv.net.csproj">
<Project>{1751f378-8edf-4b62-be6d-304c7c287089}</Project>
<Name>mpv.net</Name>
<Private>False</Private>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

1085
docs/changelog.md Normal file

File diff suppressed because it is too large Load Diff

BIN
docs/img/ConfEditor.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

BIN
docs/img/Main.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 429 KiB

BIN
docs/img/Menu.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

BIN
docs/img/Terminal.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

1440
docs/manual.md Normal file

File diff suppressed because it is too large Load Diff

1516
docs/manual_chs.md Normal file

File diff suppressed because it is too large Load Diff

2
docs/privacy.md Normal file
View File

@@ -0,0 +1,2 @@
mpv.net does not collect any personal information.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 238 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 277 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

35
lang/create-mo-files.ps1 Normal file
View File

@@ -0,0 +1,35 @@
$ErrorActionPreference = 'Stop'
$PoFiles = Get-ChildItem $PSScriptRoot/po
$ExeFolder = "$PSScriptRoot/../src/MpvNet.Windows/bin/Debug"
function CreateFolder
{
param($path)
if (-not (Test-Path $path))
{
mkdir $path
}
if (-not (Test-Path $path))
{
throw
}
}
foreach ($it in $PoFiles)
{
$folder = "$ExeFolder/Locale/$($it.BaseName)/LC_MESSAGES"
if (-not (Test-Path $folder))
{
New-Item -ItemType Directory -Path $folder
}
$moPath = "$folder/mpvnet.mo"
msgfmt --output-file=$moPath $it.FullName
if ($LastExitCode) { throw $LastExitCode }
$moPath
}

114
lang/cs-files.txt Normal file
View File

@@ -0,0 +1,114 @@
D:\Projects\CS\mpv.net\src\MpvNet\App.cs
D:\Projects\CS\mpv.net\src\MpvNet\AppInfo.cs
D:\Projects\CS\mpv.net\src\MpvNet\Binding.cs
D:\Projects\CS\mpv.net\src\MpvNet\Chapter.cs
D:\Projects\CS\mpv.net\src\MpvNet\Command.cs
D:\Projects\CS\mpv.net\src\MpvNet\CommandLine.cs
D:\Projects\CS\mpv.net\src\MpvNet\ExtensionLoader.cs
D:\Projects\CS\mpv.net\src\MpvNet\FileTypes.cs
D:\Projects\CS\mpv.net\src\MpvNet\Folder.cs
D:\Projects\CS\mpv.net\src\MpvNet\Global.cs
D:\Projects\CS\mpv.net\src\MpvNet\GlobalUsings.cs
D:\Projects\CS\mpv.net\src\MpvNet\InputConf.cs
D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs
D:\Projects\CS\mpv.net\src\MpvNet\MediaTrack.cs
D:\Projects\CS\mpv.net\src\MpvNet\MpvClient.cs
D:\Projects\CS\mpv.net\src\MpvNet\Player.cs
D:\Projects\CS\mpv.net\src\MpvNet\Settings.cs
D:\Projects\CS\mpv.net\src\MpvNet\StringPair.cs
D:\Projects\CS\mpv.net\src\MpvNet\Terminal.cs
D:\Projects\CS\mpv.net\src\MpvNet\Translator.cs
D:\Projects\CS\mpv.net\src\MpvNet\ExtensionMethod\ObjectExtension.cs
D:\Projects\CS\mpv.net\src\MpvNet\ExtensionMethod\PathStringExtension.cs
D:\Projects\CS\mpv.net\src\MpvNet\ExtensionMethod\StringExtension.cs
D:\Projects\CS\mpv.net\src\MpvNet\Help\FileHelp.cs
D:\Projects\CS\mpv.net\src\MpvNet\Help\MpvHelp.cs
D:\Projects\CS\mpv.net\src\MpvNet\Help\ProcessHelp.cs
D:\Projects\CS\mpv.net\src\MpvNet\Help\StringHelp.cs
D:\Projects\CS\mpv.net\src\MpvNet\Help\TaskHelp.cs
D:\Projects\CS\mpv.net\src\MpvNet\MVVM\Messages.cs
D:\Projects\CS\mpv.net\src\MpvNet\Native\LibMpv.cs
D:\Projects\CS\mpv.net\src\MpvNet\Native\MediaInfo.cs
D:\Projects\CS\mpv.net\src\MpvNet\Native\StringLogicalComparer.cs
D:\Projects\CS\mpv.net\src\MpvNet.Extension\ExampleExtension\ExampleExtension.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\Conf.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\FileAssociation.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\GlobalUsings.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\Program.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\Settings.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\Help\RegistryHelp.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\Help\WinApiHelp.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\Native\StockIcon.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\Native\Taskbar.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\Native\WinApi.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\Properties\Resources.Designer.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\UI\CommandPalette.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\UI\CommandPaletteItem.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\UI\GlobalHotkey.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\UI\Theme.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\UI\TreeNode.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.Designer.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\SnapManager.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\BindingProxy.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\ComboBoxTemplateSelector.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\ConfWindow.xaml.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\InputWindow.xaml.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\ISettingControl.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\LearnWindow.xaml.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\MenuHelp.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\Msg.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\WpfApplication.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\WpfTranslator.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\Controls\ComboBoxSettingControl.xaml.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\Controls\CommandPaletteControl.xaml.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\Controls\HyperlinkEx.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\Controls\OptionSettingControl.xaml.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\Controls\SearchControl.xaml.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\Controls\StringSettingControl.xaml.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\HandyControl\Controls\ScrollViewer.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\HandyControl\Controls\SimplePanel.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\HandyControl\Controls\Attach\BorderElement.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\HandyControl\Controls\Attach\IconElement.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\HandyControl\Controls\Attach\MenuTopLineAttach.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\HandyControl\Controls\Attach\ScrollViewerAttach.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\HandyControl\Data\ValueBoxes.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\HandyControl\Tools\AnimationHelper.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\HandyControl\Tools\RegexPatterns.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\HandyControl\Tools\Converter\BorderCircularConverter.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\HandyControl\Tools\Extension\StringExtension.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\HandyControl\Tools\Helper\ScreenHelper.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\HandyControl\Tools\Helper\VisualHelper.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\HandyControl\Tools\Interop\InteropMethods.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\HandyControl\Tools\Interop\InteropValues.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\HandyControl\Tools\Interop\Handle\BitmapHandle.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\HandyControl\Tools\Interop\Handle\CommonHandles.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\HandyControl\Tools\Interop\Handle\HandleCollector.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\HandyControl\Tools\Interop\Handle\WpfSafeHandle.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\MsgBox\MessageBoxEx.xaml.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\MsgBox\MsgBoxExCheckBoxData.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\MsgBox\MsgBoxExDelegate.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\MsgBox\MsgBoxExStatic.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\MsgBox\MsgBoxExtendedFunctionality.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\MsgBox\MsgBoxUrl.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\MsgBox\MsgEnum.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\ViewModels\AboutViewModel.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\ViewModels\NodeViewModel.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\ViewModels\ViewModelBase.cs
D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\Views\AboutWindow.xaml.cs
D:\Projects\CS\mpv.net\src\NGettext.Wpf\ChangeCultureCommand.cs
D:\Projects\CS\mpv.net\src\NGettext.Wpf\CompositionRoot.cs
D:\Projects\CS\mpv.net\src\NGettext.Wpf\CultureEventArgs.cs
D:\Projects\CS\mpv.net\src\NGettext.Wpf\CultureTracker.cs
D:\Projects\CS\mpv.net\src\NGettext.Wpf\GettextExtension.cs
D:\Projects\CS\mpv.net\src\NGettext.Wpf\GettextFormatConverterExtension.cs
D:\Projects\CS\mpv.net\src\NGettext.Wpf\IWeakCultureObserver.cs
D:\Projects\CS\mpv.net\src\NGettext.Wpf\Localizer.cs
D:\Projects\CS\mpv.net\src\NGettext.Wpf\TrackCurrentCultureBehavior.cs
D:\Projects\CS\mpv.net\src\NGettext.Wpf\Translation.cs
D:\Projects\CS\mpv.net\src\NGettext.Wpf\Common\GettextStringFormatConverter.cs
D:\Projects\CS\mpv.net\src\NGettext.Wpf\EnumTranslation\EnumLocalizer.cs
D:\Projects\CS\mpv.net\src\NGettext.Wpf\EnumTranslation\EnumMsgIdAttribute.cs
D:\Projects\CS\mpv.net\src\NGettext.Wpf\EnumTranslation\LocalizeEnumConverter.cs
D:\Projects\CS\mpv.net\src\NGettext.Wpf\Properties\AssemblyInfo.cs

898
lang/po/de.po Normal file
View File

@@ -0,0 +1,898 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
# Translators:
# Frank Skare, 2024
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-13 13:46+0100\n"
"PO-Revision-Date: 2023-12-08 00:34+0000\n"
"Last-Translator: Frank Skare, 2024\n"
"Language-Team: German (https://app.transifex.com/stax76/teams/179964/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:12
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:13
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:14
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:15
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:16
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:17
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:18
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:19
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:20
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:21
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:22
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:23
msgid "File"
msgstr "Datei"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:12
msgid "Open Files..."
msgstr "Dateien öffnen..."
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:13
msgid "Open URL or file from clipboard"
msgstr "URL oder Datei aus der Zwischenablage öffnen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:14
msgid "Open DVD/Blu-ray Drive/Folder..."
msgstr "DVD/Blu-ray-Laufwerk/Ordner öffnen..."
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:16
msgid "Add external audio files..."
msgstr "Externe Audiodateien hinzufügen..."
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:17
msgid "Add external subtitle files..."
msgstr "Externe Untertiteldateien hinzufügen..."
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:19
msgid "Add files to playlist..."
msgstr "Dateien zur Wiedergabeliste hinzufügen..."
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:20
msgid "Add files/URLs to playlist from clipboard"
msgstr "Dateien/URLs zur Wiedergabeliste aus der Zwischenablage hinzufügen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:22
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:379
msgid "Recent Files"
msgstr "Zuletzt geöffnete Dateien"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:23
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:186
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:218
msgid "Exit"
msgstr "Beenden"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:25
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:26
msgid "Playback"
msgstr "Wiedergabe"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:25
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:188
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:189
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:190
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:191
msgid "Play/Pause"
msgstr "Wiedergabe/Pause"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:26
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:192
msgid "Stop"
msgstr "Stopp"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:28
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:29
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:30
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:31
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:32
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:34
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:35
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:36
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:37
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:38
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:39
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:40
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:41
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:42
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:43
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:44
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:45
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:46
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:47
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:48
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:49
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:50
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:51
msgid "Navigate"
msgstr "Navigieren"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:28
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:199
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:201
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:203
msgid "Previous File"
msgstr "Vorherige Datei"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:29
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:200
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:202
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:204
msgid "Next File"
msgstr "Nächste Datei"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:31
msgid "First File"
msgstr "Erste Datei"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:32
msgid "Last File"
msgstr "Letzte Datei"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:35
msgid "Next Chapter"
msgstr "Nächstes Kapitel"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:36
msgid "Previous Chapter"
msgstr "Vorheriges Kapitel"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:38
msgid "Jump To Next Frame"
msgstr "Zum nächsten Bild springen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:39
msgid "Jump To Previous Frame"
msgstr "Zum vorherigen Bild springen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:41
msgid "Jump 5 sec forward"
msgstr "5 Sekunden vorwärts springen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:42
msgid "Jump 5 sec backward"
msgstr "5 Sekunden rückwärts springen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:44
msgid "Jump 30 sec forward"
msgstr "30 Sekunden vorwärts springen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:45
msgid "Jump 30 sec backward"
msgstr "30 Sekunden rückwärts springen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:47
msgid "Jump 5 min forward"
msgstr "5 Minuten vorwärts springen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:48
msgid "Jump 5 min backward"
msgstr "5 Minuten rückwärts springen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:50
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:400
msgid "Title"
msgstr "Titel"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:51
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:358
msgid "Chapter"
msgstr "Kapitel"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:53
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:54
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:55
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:56
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:57
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:58
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:59
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:60
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:61
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:62
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:63
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:64
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:65
msgid "Pan & Scan"
msgstr "Pan & Scan"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:53
msgid "Decrease Size"
msgstr "Größe verringern"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:54
msgid "Increase Size"
msgstr "Größe erhöhen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:56
msgid "Move Left"
msgstr "Nach links bewegen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:57
msgid "Move Right"
msgstr "Nach rechts bewegen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:59
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:97
msgid "Move Up"
msgstr "Nach oben bewegen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:60
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:98
msgid "Move Down"
msgstr "Nach unten bewegen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:62
msgid "Decrease Height"
msgstr "Höhe verringern"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:63
msgid "Increase Height"
msgstr "Höhe erhöhen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:65
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:118
msgid "Reset"
msgstr "Zurücksetzen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:67
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:68
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:69
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:70
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:71
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:72
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:73
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:74
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:75
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:76
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:77
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:78
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:79
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:80
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:81
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:82
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:83
msgid "Video"
msgstr "Video"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:67
msgid "Decrease Contrast"
msgstr "Kontrast verringern"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:68
msgid "Increase Contrast"
msgstr "Kontrast erhöhen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:70
msgid "Decrease Brightness"
msgstr "Helligkeit verringern"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:71
msgid "Increase Brightness"
msgstr "Helligkeit erhöhen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:73
msgid "Decrease Gamma"
msgstr "Gamma verringern"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:74
msgid "Increase Gamma"
msgstr "Gamma erhöhen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:76
msgid "Decrease Saturation"
msgstr "Sättigung verringern"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:77
msgid "Increase Saturation"
msgstr "Sättigung erhöhen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:79
msgid "Take Screenshot"
msgstr "Bildschirmfoto machen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:80
msgid "Take Screenshot without subtitles"
msgstr "Bildschirmfoto ohne Untertitel machen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:81
msgid "Toggle Deinterlace"
msgstr "Deinterlace umschalten"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:82
msgid "Change Aspect Ratio"
msgstr "Seitenverhältnis ändern"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:83
msgid "Rotate Video"
msgstr "Video drehen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:85
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:86
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:87
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:88
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:89
msgid "Audio"
msgstr "Audio"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:85
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:460
msgid "Audio Device"
msgstr "Audiogerät"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:86
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:91
msgid "Next Track"
msgstr "Nächster Titel"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:88
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:95
msgid "Delay +0.1"
msgstr "Verzögerung +0.1"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:89
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:94
msgid "Delay -0.1"
msgstr "Verzögerung -0.1"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:91
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:92
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:93
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:94
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:95
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:96
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:97
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:98
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:99
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:100
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:101
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:102
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:103
msgid "Subtitle"
msgstr "Untertitel"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:92
msgid "Toggle Visibility"
msgstr "Sichtbarkeit umschalten"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:100
msgid "Decrease Font Size"
msgstr "Schriftgröße verringern"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:101
msgid "Increase Font Size"
msgstr "Schriftgröße erhöhen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:103
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:126
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:127
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:128
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:129
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:130
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:131
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:132
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:133
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:134
msgid "More"
msgstr "Mehr"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:103
msgid "Toggle overriding SSA/ASS styles with normal styles"
msgstr "Überschreiben von SSA/ASS-Stilen mit normalen Stilen umschalten"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:105
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:296
msgid "Track"
msgstr "Spur"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:107
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:108
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:109
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:110
msgid "Volume"
msgstr "Lautstärke"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:107
msgctxt "Volume"
msgid "Up"
msgstr "Hoch"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:108
msgctxt "Volume"
msgid "Down"
msgstr "Runter"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:110
msgid "Mute"
msgstr "Stumm"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:112
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:113
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:114
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:115
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:116
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:117
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:118
msgid "Speed"
msgstr "Geschwindigkeit"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:112
msgid "-10%"
msgstr "-10%"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:113
msgid "+10%"
msgstr "+10%"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:115
msgid "Half"
msgstr "Halb"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:116
msgid "Double"
msgstr "Doppelt"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:120
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:121
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:122
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:123
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:124
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:125
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:126
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:127
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:128
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:129
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:130
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:131
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:132
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:133
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:134
msgid "View"
msgstr "Ansicht"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:120
msgid "Show Playlist"
msgstr "Wiedergabeliste anzeigen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:121
msgid "Toggle Statistics"
msgstr "Statistiken umschalten"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:122
msgid "Toggle OSC Visibility"
msgstr "Bildschirmschaltflächen-Sichtbarkeit umschalten"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:123
msgid "Show Media Info On-Screen"
msgstr "Medieninformationen auf dem Bildschirm anzeigen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:124
msgid "Show Media Info Message Box"
msgstr "Medieninformation in Nachrichtenbox anzeigen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:125
msgid "Show Progress"
msgstr "Fortschritt anzeigen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:126
msgid "Show Console"
msgstr "Konsole anzeigen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:127
msgid "Show Audio Devices"
msgstr "Audio-Geräte anzeigen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:128
msgid "Show Commands"
msgstr "Befehle anzeigen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:129
msgid "Show Bindings"
msgstr "Tastenkombinationen anzeigen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:130
msgid "Show Properties"
msgstr "Eigenschaften anzeigen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:131
msgid "Show Keys"
msgstr "Tastenkombinationen anzeigen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:132
msgid "Show Protocols"
msgstr "Protokolle anzeigen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:133
msgid "Show Decoders"
msgstr "Decoder anzeigen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:134
msgid "Show Demuxers"
msgstr "Demuxer anzeigen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:136
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:137
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:138
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:139
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:140
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:141
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:142
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:143
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:144
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:145
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:146
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:147
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:148
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:149
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:150
msgid "Window"
msgstr "Fenster"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:136
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:206
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:207
msgid "Fullscreen"
msgstr "Vollbild"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:137
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:138
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:139
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:140
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:141
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:142
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:143
msgid "Zoom"
msgstr "Zoom"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:137
msgid "Enlarge"
msgstr "Vergrößern"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:138
msgid "Shrink"
msgstr "Verkleinern"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:140
msgid "50 %"
msgstr "50 %"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:141
msgid "100 %"
msgstr "100 %"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:142
msgid "200 %"
msgstr "200 %"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:143
msgid "300 %"
msgstr "300 %"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:144
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:145
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:146
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:147
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:148
msgid "Move"
msgstr "Verschieben"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:144
msgctxt "Move"
msgid "Left"
msgstr "Links"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:145
msgctxt "Move"
msgid "Right"
msgstr "Rechts"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:146
msgctxt "Move"
msgid "Up"
msgstr "Hoch"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:147
msgctxt "Move"
msgid "Down"
msgstr "Runter"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:148
msgctxt "Move"
msgid "Center"
msgstr "Mitte"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:149
msgid "Toggle Border"
msgstr "Rahmen umschalten"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:150
msgid "Toggle On Top"
msgstr "Fenster im Vordergrund umschalten"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:152
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:433
msgid "Profile"
msgstr "Profil"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:154
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:155
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:156
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:157
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:158
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:159
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:160
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:161
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:162
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:163
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:164
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:165
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:166
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:167
msgid "Settings"
msgstr "Einstellungen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:154
msgid "Show Config Editor"
msgstr "Konfigurationseditor anzeigen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:155
msgid "Show Input Editor"
msgstr "Tastenkombinationeneditor anzeigen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:157
msgid "Edit mpv.conf"
msgstr "mpv.conf bearbeiten"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:158
msgid "Edit input.conf"
msgstr "input.conf bearbeiten"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:160
msgid "Open Config Folder"
msgstr "Konfigurationsordner öffnen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:161
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:162
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:163
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:164
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:165
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:166
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:167
msgid "Setup"
msgstr "Einrichten"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:161
msgid "Register video file associations"
msgstr "Video-Dateizuordnungen registrieren"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:162
msgid "Register audio file associations"
msgstr "Audio-Dateizuordnungen registrieren"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:163
msgid "Register image file associations"
msgstr "Bild-Dateizuordnungen registrieren"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:164
msgid "Unregister file associations"
msgstr "Dateizuordnungen entfernen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:166
msgid "Add mpv.net to Path environment variable"
msgstr "mpv.net zur Umgebungsvariable Path hinzufügen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:167
msgid "Remove mpv.net from Path environment variable"
msgstr "mpv.net aus der Umgebungsvariablen 'Path' entfernen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:169
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:170
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:171
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:172
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:173
msgid "Tools"
msgstr "Werkzeuge"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:169
msgid "Set/clear A-B loop points"
msgstr "Setzen/Löschen von A-B Schleifenpunkten"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:170
msgid "Toggle infinite file looping"
msgstr "Unendliche Dateischleife umschalten"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:171
msgid "Shuffle Playlist"
msgstr "Wiedergabeliste mischen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:172
msgid "Toggle Hardware Decoding"
msgstr "Hardware-Decodierung umschalten"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:173
msgid "Exit Watch Later"
msgstr "Beenden und später anschauen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:175
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:484
msgid "Custom"
msgstr "Benutzerdefiniert"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:177
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:178
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:179
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:180
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:181
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:182
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:183
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:184
msgid "Help"
msgstr "Hilfe"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:177
msgid "Website mpv"
msgstr "Webseite mpv"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:178
msgid "Website mpv.net"
msgstr "Webseite mpv.net"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:180
msgid "Manual mpv"
msgstr "Handbuch mpv"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:181
msgid "Manual mpv.net"
msgstr "Handbuch mpv.net"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:183
msgid "awesome-mpv"
msgstr "awesome-mpv"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:184
msgid "About mpv.net"
msgstr "Über mpv.net"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:187
msgid "Show Menu"
msgstr "Menü anzeigen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:193
msgid "Forward"
msgstr "Vorwärts"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:194
msgid "Backward"
msgstr "Rückwärts"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:195
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:197
msgid "Volume Up"
msgstr "Lautstärke erhöhen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:196
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:198
msgid "Volume Down"
msgstr "Lautstärke verringern"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:205
msgid "Ignore left mouse butten"
msgstr "Ignoriere die linke Maustaste"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:208
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:210
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:216
msgid "Seek Forward"
msgstr "Suchen vorwärts"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:209
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:211
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:217
msgid "Seek Backward"
msgstr "Suchen rückwärts"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:212
msgid "Undo previous (or marked) seek"
msgstr "Rückgängig machen vorherige (oder markierte) Suche"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:213
msgid "Mark position for revert-seek"
msgstr "Markieren der Position für die Rückwärtssuche"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:214
msgid "Seek to previous subtitle"
msgstr "Zum vorherigen Untertitel springen"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:215
msgid "Seek to next subtitle"
msgstr "Zum nächsten Untertitel springen"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:189
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:209
msgid "Files/URLs were added to the playlist"
msgstr "Dateien/URLs wurden zur Wiedergabeliste hinzugefügt"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:202
msgid "The clipboard does not contain a valid URL or file."
msgstr "Die Zwischenablage enthält keine gültige URL oder Datei."
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:253
msgid "File Explorer icons will refresh after process restart."
msgstr ""
"Datei-Explorer-Symbole werden nach dem Neustart des Prozesses aktualisiert."
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:256
msgid "File associations were successfully removed."
msgstr "Dateizuordnungen wurden erfolgreich entfernt."
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:258
msgid "File associations were successfully created."
msgstr "Dateizuordnungen wurden erfolgreich erstellt."
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:261
msgid "Error creating file associations."
msgstr "Fehler beim Erstellen von Dateizuordnungen."
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:358
msgid "mpv.net is already in the Path environment variable."
msgstr "mpv.net ist bereits in der 'Path' Umgebungsvariable enthalten."
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:366
msgid "mpv.net was successfully added to the Path environment variable."
msgstr "mpv.net wurde erfolgreich zur 'Path' Umgebungsvariable hinzugefügt."
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:375
msgid "mpv.net was not found in the Path environment variable."
msgstr "mpv.net wurde nicht in der 'Path' Umgebungsvariable gefunden."
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:384
msgid "mpv.net was successfully removed from the Path environment variable."
msgstr "mpv.net wurde erfolgreich aus der 'Path' Umgebungsvariable entfernt."
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:389
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:396
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:404
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:411
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:416
msgid "This feature was removed, but there are user scripts:"
msgstr "Diese Funktion wurde entfernt, aber es gibt Benutzerskripte:"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:420
msgid "This feature was removed."
msgstr "Diese Funktion wurde entfernt."
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\Properties\Resources.Designer.cs:79
msgid "editor_conf"
msgstr "editor_conf"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\Properties\Resources.Designer.cs:114
msgid "theme"
msgstr "theme"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:395
msgid "Clear List"
msgstr "Liste löschen"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:455
msgid "Show Profiles"
msgstr "Profile anzeigen"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:1424
msgid "Shutdown thread failed to complete within 10 seconds."
msgstr ""
"Shutdown-Thread konnte nicht innerhalb von 10 Sekunden abgeschlossen werden."
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\InputWindow.xaml.cs:116
msgid "Changes will be available on next startup."
msgstr "Änderungen werden beim nächsten Start verfügbar sein."

896
lang/po/ja.po Normal file
View File

@@ -0,0 +1,896 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
# Translators:
# ever_green, 2024
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-13 13:46+0100\n"
"PO-Revision-Date: 2023-12-08 00:34+0000\n"
"Last-Translator: ever_green, 2024\n"
"Language-Team: Japanese (https://app.transifex.com/stax76/teams/179964/ja/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ja\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:12
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:13
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:14
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:15
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:16
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:17
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:18
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:19
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:20
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:21
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:22
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:23
msgid "File"
msgstr "ファイル"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:12
msgid "Open Files..."
msgstr "ファイルを開く..."
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:13
msgid "Open URL or file from clipboard"
msgstr "クリップボードから URL またはファイルを開く"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:14
msgid "Open DVD/Blu-ray Drive/Folder..."
msgstr "DVD/Blu-ray ドライブ/フォルダを開く..."
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:16
msgid "Add external audio files..."
msgstr "外部オーディオファイルを追加..."
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:17
msgid "Add external subtitle files..."
msgstr "外部字幕ファイルを追加..."
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:19
msgid "Add files to playlist..."
msgstr "プレイリストへファイルを追加..."
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:20
msgid "Add files/URLs to playlist from clipboard"
msgstr "クリップボードからプレイリストへファイル/URL を追加"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:22
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:379
msgid "Recent Files"
msgstr "最近のファイル"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:23
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:186
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:218
msgid "Exit"
msgstr "終了"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:25
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:26
msgid "Playback"
msgstr "再生"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:25
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:188
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:189
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:190
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:191
msgid "Play/Pause"
msgstr "再生/一時停止"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:26
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:192
msgid "Stop"
msgstr "停止"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:28
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:29
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:30
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:31
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:32
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:34
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:35
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:36
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:37
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:38
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:39
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:40
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:41
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:42
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:43
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:44
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:45
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:46
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:47
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:48
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:49
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:50
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:51
msgid "Navigate"
msgstr "操作"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:28
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:199
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:201
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:203
msgid "Previous File"
msgstr "前のファイル"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:29
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:200
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:202
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:204
msgid "Next File"
msgstr "次のファイル"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:31
msgid "First File"
msgstr "最初のファイル"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:32
msgid "Last File"
msgstr "最後のファイル"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:35
msgid "Next Chapter"
msgstr "次のチャプター"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:36
msgid "Previous Chapter"
msgstr "前のチャプター"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:38
msgid "Jump To Next Frame"
msgstr "次のフレームへジャンプ"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:39
msgid "Jump To Previous Frame"
msgstr "前のフレームへジャンプ"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:41
msgid "Jump 5 sec forward"
msgstr "5 秒前方へジャンプ"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:42
msgid "Jump 5 sec backward"
msgstr "5 秒後方へジャンプ"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:44
msgid "Jump 30 sec forward"
msgstr "30 秒前方へジャンプ"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:45
msgid "Jump 30 sec backward"
msgstr "30 秒後方へジャンプ"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:47
msgid "Jump 5 min forward"
msgstr "5 分前方へジャンプ"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:48
msgid "Jump 5 min backward"
msgstr "5 分後方へジャンプ"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:50
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:400
msgid "Title"
msgstr "タイトル"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:51
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:358
msgid "Chapter"
msgstr "チャプター"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:53
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:54
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:55
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:56
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:57
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:58
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:59
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:60
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:61
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:62
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:63
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:64
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:65
msgid "Pan & Scan"
msgstr "パン&スキャン"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:53
msgid "Decrease Size"
msgstr "サイズを縮小"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:54
msgid "Increase Size"
msgstr "サイズを拡大"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:56
msgid "Move Left"
msgstr "左へ移動"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:57
msgid "Move Right"
msgstr "右へ移動"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:59
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:97
msgid "Move Up"
msgstr "上へ移動"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:60
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:98
msgid "Move Down"
msgstr "下へ移動"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:62
msgid "Decrease Height"
msgstr "高さを縮小"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:63
msgid "Increase Height"
msgstr "高さを拡大"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:65
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:118
msgid "Reset"
msgstr "リセット"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:67
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:68
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:69
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:70
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:71
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:72
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:73
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:74
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:75
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:76
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:77
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:78
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:79
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:80
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:81
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:82
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:83
msgid "Video"
msgstr "ビデオ"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:67
msgid "Decrease Contrast"
msgstr "コントラストを下げる"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:68
msgid "Increase Contrast"
msgstr "コントラストを上げる"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:70
msgid "Decrease Brightness"
msgstr "明るさを下げる"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:71
msgid "Increase Brightness"
msgstr "明るさを上げる"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:73
msgid "Decrease Gamma"
msgstr "ガンマ値を下げる"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:74
msgid "Increase Gamma"
msgstr "ガンマ値を上げる"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:76
msgid "Decrease Saturation"
msgstr "彩度を下げる"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:77
msgid "Increase Saturation"
msgstr "彩度を上げる"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:79
msgid "Take Screenshot"
msgstr "スクリーンショットを撮る"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:80
msgid "Take Screenshot without subtitles"
msgstr "字幕なしでスクリーンショットを撮る"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:81
msgid "Toggle Deinterlace"
msgstr "インターレース解除の切り替え"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:82
msgid "Change Aspect Ratio"
msgstr "アスペクト比を変更"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:83
msgid "Rotate Video"
msgstr "ビデオを回転"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:85
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:86
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:87
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:88
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:89
msgid "Audio"
msgstr "オーディオ"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:85
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:460
msgid "Audio Device"
msgstr "オーディオデバイス"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:86
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:91
msgid "Next Track"
msgstr "次のトラック"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:88
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:95
msgid "Delay +0.1"
msgstr "遅延 +0.1"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:89
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:94
msgid "Delay -0.1"
msgstr "遅延 -0.1"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:91
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:92
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:93
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:94
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:95
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:96
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:97
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:98
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:99
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:100
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:101
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:102
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:103
msgid "Subtitle"
msgstr "字幕"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:92
msgid "Toggle Visibility"
msgstr "表示の切り替え"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:100
msgid "Decrease Font Size"
msgstr "フォントサイズを小さくする"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:101
msgid "Increase Font Size"
msgstr "フォントサイズを大きくする"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:103
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:126
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:127
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:128
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:129
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:130
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:131
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:132
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:133
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:134
msgid "More"
msgstr "詳細"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:103
msgid "Toggle overriding SSA/ASS styles with normal styles"
msgstr "SSA/ASS スタイルを通常のスタイルで上書きする"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:105
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:296
msgid "Track"
msgstr "トラック"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:107
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:108
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:109
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:110
msgid "Volume"
msgstr "音量"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:107
msgctxt "Volume"
msgid "Up"
msgstr "上げる"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:108
msgctxt "Volume"
msgid "Down"
msgstr "下げる"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:110
msgid "Mute"
msgstr "ミュート"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:112
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:113
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:114
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:115
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:116
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:117
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:118
msgid "Speed"
msgstr "再生速度"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:112
msgid "-10%"
msgstr "-10%"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:113
msgid "+10%"
msgstr "+10%"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:115
msgid "Half"
msgstr "1/2"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:116
msgid "Double"
msgstr "2 倍"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:120
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:121
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:122
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:123
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:124
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:125
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:126
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:127
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:128
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:129
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:130
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:131
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:132
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:133
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:134
msgid "View"
msgstr "表示"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:120
msgid "Show Playlist"
msgstr "プレイリストを表示"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:121
msgid "Toggle Statistics"
msgstr "統計情報の切り替え"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:122
msgid "Toggle OSC Visibility"
msgstr "OSC 表示の切り替え"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:123
msgid "Show Media Info On-Screen"
msgstr "画面上にメディア情報を表示"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:124
msgid "Show Media Info Message Box"
msgstr "メディア情報メッセージボックスを表示"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:125
msgid "Show Progress"
msgstr "進行状況を表示"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:126
msgid "Show Console"
msgstr "コンソールを表示"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:127
msgid "Show Audio Devices"
msgstr "オーディオデバイスを表示"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:128
msgid "Show Commands"
msgstr "コマンドを表示"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:129
msgid "Show Bindings"
msgstr "バインディングを表示"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:130
msgid "Show Properties"
msgstr "プロパティを表示"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:131
msgid "Show Keys"
msgstr "キーを表示"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:132
msgid "Show Protocols"
msgstr "プロトコルを表示"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:133
msgid "Show Decoders"
msgstr "デコーダを表示"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:134
msgid "Show Demuxers"
msgstr "デマルチプレクサを表示"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:136
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:137
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:138
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:139
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:140
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:141
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:142
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:143
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:144
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:145
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:146
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:147
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:148
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:149
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:150
msgid "Window"
msgstr "ウィンドウ"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:136
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:206
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:207
msgid "Fullscreen"
msgstr "フルスクリーン"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:137
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:138
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:139
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:140
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:141
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:142
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:143
msgid "Zoom"
msgstr "ズーム"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:137
msgid "Enlarge"
msgstr "拡大"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:138
msgid "Shrink"
msgstr "縮小"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:140
msgid "50 %"
msgstr "50 %"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:141
msgid "100 %"
msgstr "100 %"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:142
msgid "200 %"
msgstr "200 %"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:143
msgid "300 %"
msgstr "300 %"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:144
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:145
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:146
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:147
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:148
msgid "Move"
msgstr "移動"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:144
msgctxt "Move"
msgid "Left"
msgstr "左へ"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:145
msgctxt "Move"
msgid "Right"
msgstr "右へ"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:146
msgctxt "Move"
msgid "Up"
msgstr "上へ"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:147
msgctxt "Move"
msgid "Down"
msgstr "下へ"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:148
msgctxt "Move"
msgid "Center"
msgstr "中央"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:149
msgid "Toggle Border"
msgstr "ボーダーの切り替え"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:150
msgid "Toggle On Top"
msgstr "常に手前に表示"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:152
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:433
msgid "Profile"
msgstr "プロファイル"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:154
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:155
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:156
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:157
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:158
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:159
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:160
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:161
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:162
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:163
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:164
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:165
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:166
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:167
msgid "Settings"
msgstr "設定"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:154
msgid "Show Config Editor"
msgstr "構成エディターを表示"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:155
msgid "Show Input Editor"
msgstr "入力エディターを表示"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:157
msgid "Edit mpv.conf"
msgstr "mpv.conf の編集"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:158
msgid "Edit input.conf"
msgstr "input.conf の編集"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:160
msgid "Open Config Folder"
msgstr "構成フォルダを開く"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:161
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:162
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:163
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:164
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:165
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:166
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:167
msgid "Setup"
msgstr "セットアップ"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:161
msgid "Register video file associations"
msgstr "ビデオファイルの関連付けを登録"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:162
msgid "Register audio file associations"
msgstr "オーディオファイルの関連付けを登録"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:163
msgid "Register image file associations"
msgstr "画像ファイルの関連付けを登録"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:164
msgid "Unregister file associations"
msgstr "ファイルの関連付けの登録解除"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:166
msgid "Add mpv.net to Path environment variable"
msgstr "mpv.net を Path 環境変数へ追加"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:167
msgid "Remove mpv.net from Path environment variable"
msgstr "mpv.net を Path 環境変数から削除"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:169
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:170
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:171
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:172
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:173
msgid "Tools"
msgstr "ツール"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:169
msgid "Set/clear A-B loop points"
msgstr "A-B 区間ループの設定/解除"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:170
msgid "Toggle infinite file looping"
msgstr "無限ファイルループの切り替え"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:171
msgid "Shuffle Playlist"
msgstr "プレイリストをシャッフル"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:172
msgid "Toggle Hardware Decoding"
msgstr "ハードウェアデコードの切り替え"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:173
msgid "Exit Watch Later"
msgstr "後で見るから終了"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:175
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:484
msgid "Custom"
msgstr "カスタム"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:177
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:178
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:179
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:180
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:181
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:182
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:183
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:184
msgid "Help"
msgstr "ヘルプ"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:177
msgid "Website mpv"
msgstr "mpv ウェブサイト"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:178
msgid "Website mpv.net"
msgstr "mpv.net ウェブサイト"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:180
msgid "Manual mpv"
msgstr "mpv マニュアル"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:181
msgid "Manual mpv.net"
msgstr "mpv.net マニュアル"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:183
msgid "awesome-mpv"
msgstr "awesome-mpv"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:184
msgid "About mpv.net"
msgstr "mpv.net のバージョン情報"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:187
msgid "Show Menu"
msgstr "メニューを表示"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:193
msgid "Forward"
msgstr "進む"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:194
msgid "Backward"
msgstr "戻る"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:195
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:197
msgid "Volume Up"
msgstr "音量を上げる"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:196
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:198
msgid "Volume Down"
msgstr "音量を下げる"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:205
msgid "Ignore left mouse butten"
msgstr "マウスの左ボタンを無視"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:208
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:210
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:216
msgid "Seek Forward"
msgstr "前方へシーク"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:209
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:211
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:217
msgid "Seek Backward"
msgstr "後方へシーク"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:212
msgid "Undo previous (or marked) seek"
msgstr "直前の (またはマークした) シークを元に戻す"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:213
msgid "Mark position for revert-seek"
msgstr "復帰シークの位置をマーク"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:214
msgid "Seek to previous subtitle"
msgstr "前の字幕へシーク"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:215
msgid "Seek to next subtitle"
msgstr "次の字幕へシーク"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:189
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:209
msgid "Files/URLs were added to the playlist"
msgstr "ファイル/URL がプレイリストへ追加されました"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:202
msgid "The clipboard does not contain a valid URL or file."
msgstr "クリップボードに有効な URL またはファイルが含まれていません。"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:253
msgid "File Explorer icons will refresh after process restart."
msgstr "ファイルエクスプローラーのアイコンは、プロセスの再起動後に更新されます。"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:256
msgid "File associations were successfully removed."
msgstr "ファイルの関連付けは正常に削除されました。"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:258
msgid "File associations were successfully created."
msgstr "ファイルの関連付けが正常に作成されました。"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:261
msgid "Error creating file associations."
msgstr "ファイルの関連付けの作成中にエラーが発生しました。"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:358
msgid "mpv.net is already in the Path environment variable."
msgstr "mpv.net は既に Path 環境変数にあります。"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:366
msgid "mpv.net was successfully added to the Path environment variable."
msgstr "mpv.net が Path 環境変数へ正常に追加されました。"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:375
msgid "mpv.net was not found in the Path environment variable."
msgstr "mpv.net が Path 環境変数に見つかりませんでした。"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:384
msgid "mpv.net was successfully removed from the Path environment variable."
msgstr "mpv.net は Path 環境変数から正常に削除されました。"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:389
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:396
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:404
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:411
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:416
msgid "This feature was removed, but there are user scripts:"
msgstr "この機能は削除されましたが、ユーザースクリプトがあります:"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:420
msgid "This feature was removed."
msgstr "この機能は削除されました。"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\Properties\Resources.Designer.cs:79
msgid "editor_conf"
msgstr "editor_conf"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\Properties\Resources.Designer.cs:114
msgid "theme"
msgstr "テーマ"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:395
msgid "Clear List"
msgstr "リストをクリア"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:455
msgid "Show Profiles"
msgstr "プロファイルを表示"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:1424
msgid "Shutdown thread failed to complete within 10 seconds."
msgstr "シャットダウン スレッドが 10 秒以内に完了しませんでした。"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\InputWindow.xaml.cs:116
msgid "Changes will be available on next startup."
msgstr "変更は次回の起動時に利用可能になります。"

897
lang/po/zh_CN.po Normal file
View File

@@ -0,0 +1,897 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
# Translators:
# dyphire, 2023
# nkh0472 <nkh0472@hotmail.com>, 2024
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-13 13:46+0100\n"
"PO-Revision-Date: 2023-12-08 00:34+0000\n"
"Last-Translator: nkh0472 <nkh0472@hotmail.com>, 2024\n"
"Language-Team: Chinese (China) (https://app.transifex.com/stax76/teams/179964/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:12
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:13
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:14
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:15
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:16
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:17
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:18
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:19
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:20
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:21
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:22
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:23
msgid "File"
msgstr "文件"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:12
msgid "Open Files..."
msgstr "打开文件..."
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:13
msgid "Open URL or file from clipboard"
msgstr "从剪贴板打开 URL 或文件"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:14
msgid "Open DVD/Blu-ray Drive/Folder..."
msgstr "打开 DVD/蓝光驱动器/文件夹..."
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:16
msgid "Add external audio files..."
msgstr "添加外部音频文件..."
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:17
msgid "Add external subtitle files..."
msgstr "添加外部字幕文件..."
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:19
msgid "Add files to playlist..."
msgstr "添加文件到播放列表..."
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:20
msgid "Add files/URLs to playlist from clipboard"
msgstr "将 文件/URL 从剪贴板添加到播放列表"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:22
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:379
msgid "Recent Files"
msgstr "近期文件"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:23
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:186
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:218
msgid "Exit"
msgstr "退出"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:25
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:26
msgid "Playback"
msgstr "回放"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:25
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:188
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:189
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:190
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:191
msgid "Play/Pause"
msgstr "播放/暂停"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:26
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:192
msgid "Stop"
msgstr "停止"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:28
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:29
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:30
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:31
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:32
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:34
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:35
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:36
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:37
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:38
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:39
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:40
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:41
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:42
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:43
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:44
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:45
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:46
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:47
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:48
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:49
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:50
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:51
msgid "Navigate"
msgstr "导航"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:28
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:199
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:201
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:203
msgid "Previous File"
msgstr "上一个文件"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:29
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:200
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:202
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:204
msgid "Next File"
msgstr "下一个文件"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:31
msgid "First File"
msgstr "第一个文件"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:32
msgid "Last File"
msgstr "最后一个文件"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:35
msgid "Next Chapter"
msgstr "下一个章节"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:36
msgid "Previous Chapter"
msgstr "上一个章节"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:38
msgid "Jump To Next Frame"
msgstr "跳至下一帧"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:39
msgid "Jump To Previous Frame"
msgstr "跳至上一帧"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:41
msgid "Jump 5 sec forward"
msgstr "快进 5 秒"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:42
msgid "Jump 5 sec backward"
msgstr "快退 5 秒"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:44
msgid "Jump 30 sec forward"
msgstr "快进 30 秒"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:45
msgid "Jump 30 sec backward"
msgstr "快退 30 秒"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:47
msgid "Jump 5 min forward"
msgstr "快进 5 分钟"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:48
msgid "Jump 5 min backward"
msgstr "快退 5 分钟"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:50
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:400
msgid "Title"
msgstr "标题"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:51
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:358
msgid "Chapter"
msgstr "章节"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:53
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:54
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:55
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:56
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:57
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:58
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:59
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:60
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:61
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:62
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:63
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:64
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:65
msgid "Pan & Scan"
msgstr "平移&扫描"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:53
msgid "Decrease Size"
msgstr "缩减大小"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:54
msgid "Increase Size"
msgstr "增加大小"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:56
msgid "Move Left"
msgstr "左移"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:57
msgid "Move Right"
msgstr "右移"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:59
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:97
msgid "Move Up"
msgstr "上移"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:60
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:98
msgid "Move Down"
msgstr "下移"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:62
msgid "Decrease Height"
msgstr "降低高度"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:63
msgid "Increase Height"
msgstr "增加高度"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:65
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:118
msgid "Reset"
msgstr "重置"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:67
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:68
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:69
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:70
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:71
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:72
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:73
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:74
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:75
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:76
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:77
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:78
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:79
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:80
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:81
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:82
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:83
msgid "Video"
msgstr "视频"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:67
msgid "Decrease Contrast"
msgstr "降低对比度"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:68
msgid "Increase Contrast"
msgstr "增加对比度"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:70
msgid "Decrease Brightness"
msgstr "降低亮度"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:71
msgid "Increase Brightness"
msgstr "增加亮度"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:73
msgid "Decrease Gamma"
msgstr "降低伽马"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:74
msgid "Increase Gamma"
msgstr "增加伽马"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:76
msgid "Decrease Saturation"
msgstr "降低饱和度"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:77
msgid "Increase Saturation"
msgstr "增加饱和度"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:79
msgid "Take Screenshot"
msgstr "截屏"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:80
msgid "Take Screenshot without subtitles"
msgstr "截图(无字幕)"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:81
msgid "Toggle Deinterlace"
msgstr "切换 去隔行"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:82
msgid "Change Aspect Ratio"
msgstr "更改纵横比"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:83
msgid "Rotate Video"
msgstr "旋转视频"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:85
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:86
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:87
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:88
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:89
msgid "Audio"
msgstr "音频"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:85
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:460
msgid "Audio Device"
msgstr "音频设备"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:86
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:91
msgid "Next Track"
msgstr "下一个轨道"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:88
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:95
msgid "Delay +0.1"
msgstr "延迟 +0.1"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:89
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:94
msgid "Delay -0.1"
msgstr "延迟 -0.1"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:91
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:92
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:93
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:94
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:95
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:96
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:97
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:98
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:99
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:100
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:101
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:102
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:103
msgid "Subtitle"
msgstr "字幕"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:92
msgid "Toggle Visibility"
msgstr "切换 可见性"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:100
msgid "Decrease Font Size"
msgstr "减小字体大小"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:101
msgid "Increase Font Size"
msgstr "增加字体大小"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:103
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:126
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:127
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:128
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:129
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:130
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:131
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:132
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:133
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:134
msgid "More"
msgstr "更多"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:103
msgid "Toggle overriding SSA/ASS styles with normal styles"
msgstr "切换 使用常规样式覆盖 SSA/ASS 样式"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:105
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:296
msgid "Track"
msgstr "轨道"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:107
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:108
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:109
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:110
msgid "Volume"
msgstr "音量"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:107
msgctxt "Volume"
msgid "Up"
msgstr "增大"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:108
msgctxt "Volume"
msgid "Down"
msgstr "减小"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:110
msgid "Mute"
msgstr "静音"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:112
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:113
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:114
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:115
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:116
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:117
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:118
msgid "Speed"
msgstr "速度"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:112
msgid "-10%"
msgstr "-10%"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:113
msgid "+10%"
msgstr "+10%"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:115
msgid "Half"
msgstr "减半"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:116
msgid "Double"
msgstr "翻倍"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:120
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:121
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:122
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:123
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:124
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:125
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:126
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:127
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:128
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:129
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:130
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:131
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:132
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:133
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:134
msgid "View"
msgstr "查看"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:120
msgid "Show Playlist"
msgstr "显示播放列表"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:121
msgid "Toggle Statistics"
msgstr "切换 统计信息"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:122
msgid "Toggle OSC Visibility"
msgstr "切换 OSC 可见性"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:123
msgid "Show Media Info On-Screen"
msgstr "在 OSD 上显示媒体信息"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:124
msgid "Show Media Info Message Box"
msgstr "显示媒体信息消息框"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:125
msgid "Show Progress"
msgstr "显示进度"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:126
msgid "Show Console"
msgstr "显示控制台"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:127
msgid "Show Audio Devices"
msgstr "显示音频设备"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:128
msgid "Show Commands"
msgstr "显示命令"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:129
msgid "Show Bindings"
msgstr "显示键位绑定"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:130
msgid "Show Properties"
msgstr "显示属性"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:131
msgid "Show Keys"
msgstr "显示按键"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:132
msgid "Show Protocols"
msgstr "显示协议"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:133
msgid "Show Decoders"
msgstr "显示解码器"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:134
msgid "Show Demuxers"
msgstr "显示解复用器"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:136
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:137
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:138
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:139
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:140
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:141
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:142
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:143
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:144
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:145
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:146
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:147
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:148
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:149
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:150
msgid "Window"
msgstr "窗口"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:136
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:206
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:207
msgid "Fullscreen"
msgstr "全屏"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:137
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:138
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:139
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:140
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:141
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:142
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:143
msgid "Zoom"
msgstr "缩放"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:137
msgid "Enlarge"
msgstr "放大"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:138
msgid "Shrink"
msgstr "缩小"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:140
msgid "50 %"
msgstr "50 %"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:141
msgid "100 %"
msgstr "100 %"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:142
msgid "200 %"
msgstr "200 %"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:143
msgid "300 %"
msgstr "300 %"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:144
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:145
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:146
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:147
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:148
msgid "Move"
msgstr "移动"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:144
msgctxt "Move"
msgid "Left"
msgstr "左移"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:145
msgctxt "Move"
msgid "Right"
msgstr "右移"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:146
msgctxt "Move"
msgid "Up"
msgstr "上移"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:147
msgctxt "Move"
msgid "Down"
msgstr "下移"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:148
msgctxt "Move"
msgid "Center"
msgstr "居中"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:149
msgid "Toggle Border"
msgstr "切换 边框"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:150
msgid "Toggle On Top"
msgstr "切换 置顶"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:152
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:433
msgid "Profile"
msgstr "配置文件"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:154
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:155
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:156
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:157
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:158
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:159
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:160
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:161
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:162
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:163
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:164
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:165
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:166
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:167
msgid "Settings"
msgstr "设置"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:154
msgid "Show Config Editor"
msgstr "显示配置编辑器"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:155
msgid "Show Input Editor"
msgstr "显示输入编辑器"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:157
msgid "Edit mpv.conf"
msgstr "编辑 mpv.conf"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:158
msgid "Edit input.conf"
msgstr "编辑 input.conf"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:160
msgid "Open Config Folder"
msgstr "打开配置文件夹"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:161
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:162
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:163
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:164
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:165
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:166
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:167
msgid "Setup"
msgstr "设置"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:161
msgid "Register video file associations"
msgstr "注册视频文件关联"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:162
msgid "Register audio file associations"
msgstr "注册音频文件关联"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:163
msgid "Register image file associations"
msgstr "注册图像文件关联"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:164
msgid "Unregister file associations"
msgstr "注销文件关联"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:166
msgid "Add mpv.net to Path environment variable"
msgstr "将 mpv.net 添加到环境变量"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:167
msgid "Remove mpv.net from Path environment variable"
msgstr "将 mpv.net 从环境变量中移除"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:169
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:170
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:171
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:172
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:173
msgid "Tools"
msgstr "工具"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:169
msgid "Set/clear A-B loop points"
msgstr "设置/清除 A-B 循环点"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:170
msgid "Toggle infinite file looping"
msgstr "切换 无限文件循环"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:171
msgid "Shuffle Playlist"
msgstr "随机播放列表"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:172
msgid "Toggle Hardware Decoding"
msgstr "切换 硬件解码"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:173
msgid "Exit Watch Later"
msgstr "退出(稍后观看)"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:175
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:484
msgid "Custom"
msgstr "自定义"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:177
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:178
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:179
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:180
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:181
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:182
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:183
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:184
msgid "Help"
msgstr "帮助"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:177
msgid "Website mpv"
msgstr "mpv 网址"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:178
msgid "Website mpv.net"
msgstr "mpv.net 网址"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:180
msgid "Manual mpv"
msgstr "mpv 手册"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:181
msgid "Manual mpv.net"
msgstr "mpv.net 手册"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:183
msgid "awesome-mpv"
msgstr "awesome-mpv"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:184
msgid "About mpv.net"
msgstr "关于 mpv.net"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:187
msgid "Show Menu"
msgstr "显示菜单"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:193
msgid "Forward"
msgstr "前进"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:194
msgid "Backward"
msgstr "后退"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:195
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:197
msgid "Volume Up"
msgstr "增加 音量"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:196
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:198
msgid "Volume Down"
msgstr "降低 音量"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:205
msgid "Ignore left mouse butten"
msgstr "忽略左键"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:208
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:210
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:216
msgid "Seek Forward"
msgstr "向前跳转"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:209
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:211
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:217
msgid "Seek Backward"
msgstr "向后跳转"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:212
msgid "Undo previous (or marked) seek"
msgstr "撤销之前(或标记的)跳转"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:213
msgid "Mark position for revert-seek"
msgstr "标记回退查找的位置"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:214
msgid "Seek to previous subtitle"
msgstr "跳至上一条字幕"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:215
msgid "Seek to next subtitle"
msgstr "跳至下一条字幕"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:189
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:209
msgid "Files/URLs were added to the playlist"
msgstr "已添加 文件/URL 到播放列表"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:202
msgid "The clipboard does not contain a valid URL or file."
msgstr "剪贴板中未包含有效的 URL 或文件。"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:253
msgid "File Explorer icons will refresh after process restart."
msgstr "文件资源管理器图标将在进程重新启动后刷新"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:256
msgid "File associations were successfully removed."
msgstr "文件关联已成功删除"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:258
msgid "File associations were successfully created."
msgstr "文件关联已成功创建"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:261
msgid "Error creating file associations."
msgstr "创建文件关联时出错"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:358
msgid "mpv.net is already in the Path environment variable."
msgstr "mpv.net 已存在于环境变量。"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:366
msgid "mpv.net was successfully added to the Path environment variable."
msgstr "成功添加 mpv.net 至环境变量。"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:375
msgid "mpv.net was not found in the Path environment variable."
msgstr "环境变量中不存在 mpv.net。"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:384
msgid "mpv.net was successfully removed from the Path environment variable."
msgstr "成功从环境变量中移除 mpv.net 。"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:389
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:396
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:404
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:411
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:416
msgid "This feature was removed, but there are user scripts:"
msgstr "该功能已被移除,但有用户脚本:"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:420
msgid "This feature was removed."
msgstr "该功能已被移除。"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\Properties\Resources.Designer.cs:79
msgid "editor_conf"
msgstr "editor_conf"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\Properties\Resources.Designer.cs:114
msgid "theme"
msgstr "主题"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:395
msgid "Clear List"
msgstr "清空列表"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:455
msgid "Show Profiles"
msgstr "显示配置文件"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:1424
msgid "Shutdown thread failed to complete within 10 seconds."
msgstr "线程关闭未能在 10 秒内完成"
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\InputWindow.xaml.cs:116
msgid "Changes will be available on next startup."
msgstr "更改将在下次启动时应用"

892
lang/source.pot Normal file
View File

@@ -0,0 +1,892 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-13 13:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:12
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:13
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:14
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:15
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:16
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:17
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:18
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:19
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:20
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:21
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:22
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:23
msgid "File"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:12
msgid "Open Files..."
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:13
msgid "Open URL or file from clipboard"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:14
msgid "Open DVD/Blu-ray Drive/Folder..."
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:16
msgid "Add external audio files..."
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:17
msgid "Add external subtitle files..."
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:19
msgid "Add files to playlist..."
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:20
msgid "Add files/URLs to playlist from clipboard"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:22
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:379
msgid "Recent Files"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:23
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:186
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:218
msgid "Exit"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:25
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:26
msgid "Playback"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:25
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:188
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:189
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:190
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:191
msgid "Play/Pause"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:26
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:192
msgid "Stop"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:28
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:29
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:30
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:31
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:32
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:34
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:35
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:36
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:37
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:38
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:39
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:40
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:41
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:42
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:43
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:44
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:45
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:46
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:47
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:48
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:49
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:50
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:51
msgid "Navigate"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:28
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:199
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:201
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:203
msgid "Previous File"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:29
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:200
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:202
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:204
msgid "Next File"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:31
msgid "First File"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:32
msgid "Last File"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:35
msgid "Next Chapter"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:36
msgid "Previous Chapter"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:38
msgid "Jump To Next Frame"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:39
msgid "Jump To Previous Frame"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:41
msgid "Jump 5 sec forward"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:42
msgid "Jump 5 sec backward"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:44
msgid "Jump 30 sec forward"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:45
msgid "Jump 30 sec backward"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:47
msgid "Jump 5 min forward"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:48
msgid "Jump 5 min backward"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:50
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:400
msgid "Title"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:51
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:358
msgid "Chapter"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:53
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:54
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:55
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:56
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:57
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:58
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:59
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:60
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:61
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:62
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:63
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:64
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:65
msgid "Pan & Scan"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:53
msgid "Decrease Size"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:54
msgid "Increase Size"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:56
msgid "Move Left"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:57
msgid "Move Right"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:59
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:97
msgid "Move Up"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:60
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:98
msgid "Move Down"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:62
msgid "Decrease Height"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:63
msgid "Increase Height"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:65
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:118
msgid "Reset"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:67
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:68
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:69
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:70
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:71
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:72
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:73
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:74
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:75
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:76
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:77
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:78
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:79
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:80
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:81
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:82
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:83
msgid "Video"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:67
msgid "Decrease Contrast"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:68
msgid "Increase Contrast"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:70
msgid "Decrease Brightness"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:71
msgid "Increase Brightness"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:73
msgid "Decrease Gamma"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:74
msgid "Increase Gamma"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:76
msgid "Decrease Saturation"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:77
msgid "Increase Saturation"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:79
msgid "Take Screenshot"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:80
msgid "Take Screenshot without subtitles"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:81
msgid "Toggle Deinterlace"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:82
msgid "Change Aspect Ratio"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:83
msgid "Rotate Video"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:85
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:86
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:87
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:88
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:89
msgid "Audio"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:85
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:460
msgid "Audio Device"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:86
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:91
msgid "Next Track"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:88
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:95
msgid "Delay +0.1"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:89
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:94
msgid "Delay -0.1"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:91
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:92
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:93
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:94
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:95
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:96
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:97
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:98
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:99
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:100
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:101
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:102
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:103
msgid "Subtitle"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:92
msgid "Toggle Visibility"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:100
msgid "Decrease Font Size"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:101
msgid "Increase Font Size"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:103
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:126
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:127
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:128
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:129
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:130
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:131
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:132
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:133
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:134
msgid "More"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:103
msgid "Toggle overriding SSA/ASS styles with normal styles"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:105
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:296
msgid "Track"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:107
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:108
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:109
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:110
msgid "Volume"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:107
msgctxt "Volume"
msgid "Up"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:108
msgctxt "Volume"
msgid "Down"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:110
msgid "Mute"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:112
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:113
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:114
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:115
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:116
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:117
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:118
msgid "Speed"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:112
msgid "-10%"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:113
msgid "+10%"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:115
msgid "Half"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:116
msgid "Double"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:120
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:121
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:122
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:123
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:124
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:125
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:126
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:127
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:128
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:129
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:130
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:131
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:132
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:133
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:134
msgid "View"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:120
msgid "Show Playlist"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:121
msgid "Toggle Statistics"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:122
msgid "Toggle OSC Visibility"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:123
msgid "Show Media Info On-Screen"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:124
msgid "Show Media Info Message Box"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:125
msgid "Show Progress"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:126
msgid "Show Console"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:127
msgid "Show Audio Devices"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:128
msgid "Show Commands"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:129
msgid "Show Bindings"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:130
msgid "Show Properties"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:131
msgid "Show Keys"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:132
msgid "Show Protocols"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:133
msgid "Show Decoders"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:134
msgid "Show Demuxers"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:136
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:137
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:138
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:139
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:140
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:141
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:142
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:143
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:144
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:145
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:146
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:147
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:148
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:149
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:150
msgid "Window"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:136
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:206
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:207
msgid "Fullscreen"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:137
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:138
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:139
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:140
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:141
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:142
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:143
msgid "Zoom"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:137
msgid "Enlarge"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:138
msgid "Shrink"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:140
msgid "50 %"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:141
msgid "100 %"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:142
msgid "200 %"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:143
msgid "300 %"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:144
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:145
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:146
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:147
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:148
msgid "Move"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:144
msgctxt "Move"
msgid "Left"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:145
msgctxt "Move"
msgid "Right"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:146
msgctxt "Move"
msgid "Up"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:147
msgctxt "Move"
msgid "Down"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:148
msgctxt "Move"
msgid "Center"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:149
msgid "Toggle Border"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:150
msgid "Toggle On Top"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:152
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:433
msgid "Profile"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:154
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:155
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:156
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:157
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:158
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:159
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:160
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:161
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:162
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:163
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:164
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:165
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:166
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:167
msgid "Settings"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:154
msgid "Show Config Editor"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:155
msgid "Show Input Editor"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:157
msgid "Edit mpv.conf"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:158
msgid "Edit input.conf"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:160
msgid "Open Config Folder"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:161
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:162
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:163
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:164
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:165
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:166
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:167
msgid "Setup"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:161
msgid "Register video file associations"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:162
msgid "Register audio file associations"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:163
msgid "Register image file associations"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:164
msgid "Unregister file associations"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:166
msgid "Add mpv.net to Path environment variable"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:167
msgid "Remove mpv.net from Path environment variable"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:169
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:170
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:171
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:172
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:173
msgid "Tools"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:169
msgid "Set/clear A-B loop points"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:170
msgid "Toggle infinite file looping"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:171
msgid "Shuffle Playlist"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:172
msgid "Toggle Hardware Decoding"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:173
msgid "Exit Watch Later"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:175
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:484
msgid "Custom"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:177
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:178
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:179
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:180
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:181
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:182
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:183
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:184
msgid "Help"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:177
msgid "Website mpv"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:178
msgid "Website mpv.net"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:180
msgid "Manual mpv"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:181
msgid "Manual mpv.net"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:183
msgid "awesome-mpv"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:184
msgid "About mpv.net"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:187
msgid "Show Menu"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:193
msgid "Forward"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:194
msgid "Backward"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:195
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:197
msgid "Volume Up"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:196
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:198
msgid "Volume Down"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:205
msgid "Ignore left mouse butten"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:208
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:210
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:216
msgid "Seek Forward"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:209
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:211
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:217
msgid "Seek Backward"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:212
msgid "Undo previous (or marked) seek"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:213
msgid "Mark position for revert-seek"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:214
msgid "Seek to previous subtitle"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet\InputHelp.cs:215
msgid "Seek to next subtitle"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:189
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:209
msgid "Files/URLs were added to the playlist"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:202
msgid "The clipboard does not contain a valid URL or file."
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:253
msgid "File Explorer icons will refresh after process restart."
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:256
msgid "File associations were successfully removed."
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:258
msgid "File associations were successfully created."
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:261
msgid "Error creating file associations."
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:358
msgid "mpv.net is already in the Path environment variable."
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:366
msgid "mpv.net was successfully added to the Path environment variable."
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:375
msgid "mpv.net was not found in the Path environment variable."
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:384
msgid "mpv.net was successfully removed from the Path environment variable."
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:389
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:396
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:404
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:411
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:416
msgid "This feature was removed, but there are user scripts:"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\GuiCommand.cs:420
msgid "This feature was removed."
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\Properties\Resources.Designer.cs:79
msgid "editor_conf"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\Properties\Resources.Designer.cs:114
msgid "theme"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:395
msgid "Clear List"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:455
msgid "Show Profiles"
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WinForms\MainForm.cs:1424
msgid "Shutdown thread failed to complete within 10 seconds."
msgstr ""
#: D:\Projects\CS\mpv.net\src\MpvNet.Windows\WPF\InputWindow.xaml.cs:116
msgid "Changes will be available on next startup."
msgstr ""

View File

@@ -0,0 +1,23 @@
$ErrorActionPreference = 'Stop'
# Write list of .cs files into cs-files.txt file
Get-ChildItem $PSScriptRoot/.. -Recurse -File -Filter '*.cs' |
Where-Object { $_ -notmatch '[/\\]obj[/\\]' } |
ForEach-Object { $_.FullName } |
Out-File $PSScriptRoot/cs-files.txt
# Create .pot file
xgettext -k_ -k_n:1,2 -k_p:1c,2 -k_pn:1c,2,3 --force-po --from-code=UTF-8 '--language=c#' -o $PSScriptRoot/source.pot --files-from=$PSScriptRoot/cs-files.txt --keyword=_
if ($LastExitCode) { throw $LastExitCode }
# Backup .po files
$BackupTargetFolder = $env:TEMP + '/mpv.net po backup ' + (Get-Date -Format 'yyyy-MM-dd HH_mm_ss')
Copy-Item $PSScriptRoot/po $BackupTargetFolder -Force -Recurse
'PO file backup: ' + (Resolve-Path $BackupTargetFolder)
# Update .po files
(Get-ChildItem $PSScriptRoot/PO -Filter '*.po').FullName |
ForEach-Object { msgmerge --sort-output --backup=none --update $_ $PSScriptRoot/source.pot }
if ($LastExitCode) { throw $LastExitCode }

View File

@@ -1,79 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.28729.10
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mpv.net", "mpv.net\mpv.net.csproj", "{1751F378-8EDF-4B62-BE6D-304C7C287089}"
EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CSScriptAddon", "addons\CSScriptAddon\CSScriptAddon.vbproj", "{71808A87-8B1C-4DF8-957C-D79C3B164CCA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RatingAddon", "addons\RatingAddon\RatingAddon.csproj", "{55C88710-539D-4402-84C8-31694841C731}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestAddon", "addons\TestAddon\TestAddon.csproj", "{06F854B0-00F9-4B53-94D9-0BE65A7C55D8}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1751F378-8EDF-4B62-BE6D-304C7C287089}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1751F378-8EDF-4B62-BE6D-304C7C287089}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1751F378-8EDF-4B62-BE6D-304C7C287089}.Debug|x64.ActiveCfg = Debug|x64
{1751F378-8EDF-4B62-BE6D-304C7C287089}.Debug|x64.Build.0 = Debug|x64
{1751F378-8EDF-4B62-BE6D-304C7C287089}.Debug|x86.ActiveCfg = Debug|x86
{1751F378-8EDF-4B62-BE6D-304C7C287089}.Debug|x86.Build.0 = Debug|x86
{1751F378-8EDF-4B62-BE6D-304C7C287089}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1751F378-8EDF-4B62-BE6D-304C7C287089}.Release|Any CPU.Build.0 = Release|Any CPU
{1751F378-8EDF-4B62-BE6D-304C7C287089}.Release|x64.ActiveCfg = Release|x64
{1751F378-8EDF-4B62-BE6D-304C7C287089}.Release|x64.Build.0 = Release|x64
{1751F378-8EDF-4B62-BE6D-304C7C287089}.Release|x86.ActiveCfg = Release|x86
{1751F378-8EDF-4B62-BE6D-304C7C287089}.Release|x86.Build.0 = Release|x86
{71808A87-8B1C-4DF8-957C-D79C3B164CCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{71808A87-8B1C-4DF8-957C-D79C3B164CCA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{71808A87-8B1C-4DF8-957C-D79C3B164CCA}.Debug|x64.ActiveCfg = Debug|x64
{71808A87-8B1C-4DF8-957C-D79C3B164CCA}.Debug|x64.Build.0 = Debug|x64
{71808A87-8B1C-4DF8-957C-D79C3B164CCA}.Debug|x86.ActiveCfg = Debug|x86
{71808A87-8B1C-4DF8-957C-D79C3B164CCA}.Debug|x86.Build.0 = Debug|x86
{71808A87-8B1C-4DF8-957C-D79C3B164CCA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{71808A87-8B1C-4DF8-957C-D79C3B164CCA}.Release|Any CPU.Build.0 = Release|Any CPU
{71808A87-8B1C-4DF8-957C-D79C3B164CCA}.Release|x64.ActiveCfg = Release|x64
{71808A87-8B1C-4DF8-957C-D79C3B164CCA}.Release|x64.Build.0 = Release|x64
{71808A87-8B1C-4DF8-957C-D79C3B164CCA}.Release|x86.ActiveCfg = Release|x86
{71808A87-8B1C-4DF8-957C-D79C3B164CCA}.Release|x86.Build.0 = Release|x86
{55C88710-539D-4402-84C8-31694841C731}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{55C88710-539D-4402-84C8-31694841C731}.Debug|Any CPU.Build.0 = Debug|Any CPU
{55C88710-539D-4402-84C8-31694841C731}.Debug|x64.ActiveCfg = Debug|x64
{55C88710-539D-4402-84C8-31694841C731}.Debug|x64.Build.0 = Debug|x64
{55C88710-539D-4402-84C8-31694841C731}.Debug|x86.ActiveCfg = Debug|x86
{55C88710-539D-4402-84C8-31694841C731}.Debug|x86.Build.0 = Debug|x86
{55C88710-539D-4402-84C8-31694841C731}.Release|Any CPU.ActiveCfg = Release|Any CPU
{55C88710-539D-4402-84C8-31694841C731}.Release|Any CPU.Build.0 = Release|Any CPU
{55C88710-539D-4402-84C8-31694841C731}.Release|x64.ActiveCfg = Release|x64
{55C88710-539D-4402-84C8-31694841C731}.Release|x64.Build.0 = Release|x64
{55C88710-539D-4402-84C8-31694841C731}.Release|x86.ActiveCfg = Release|x86
{55C88710-539D-4402-84C8-31694841C731}.Release|x86.Build.0 = Release|x86
{06F854B0-00F9-4B53-94D9-0BE65A7C55D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{06F854B0-00F9-4B53-94D9-0BE65A7C55D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{06F854B0-00F9-4B53-94D9-0BE65A7C55D8}.Debug|x64.ActiveCfg = Debug|Any CPU
{06F854B0-00F9-4B53-94D9-0BE65A7C55D8}.Debug|x64.Build.0 = Debug|Any CPU
{06F854B0-00F9-4B53-94D9-0BE65A7C55D8}.Debug|x86.ActiveCfg = Debug|Any CPU
{06F854B0-00F9-4B53-94D9-0BE65A7C55D8}.Debug|x86.Build.0 = Debug|Any CPU
{06F854B0-00F9-4B53-94D9-0BE65A7C55D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{06F854B0-00F9-4B53-94D9-0BE65A7C55D8}.Release|Any CPU.Build.0 = Release|Any CPU
{06F854B0-00F9-4B53-94D9-0BE65A7C55D8}.Release|x64.ActiveCfg = Release|Any CPU
{06F854B0-00F9-4B53-94D9-0BE65A7C55D8}.Release|x64.Build.0 = Release|Any CPU
{06F854B0-00F9-4B53-94D9-0BE65A7C55D8}.Release|x86.ActiveCfg = Release|Any CPU
{06F854B0-00F9-4B53-94D9-0BE65A7C55D8}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8DE9E796-619E-44B8-9576-F4DE028701BF}
EndGlobalSection
EndGlobal

View File

@@ -1,51 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
using System.IO;
using System.Windows.Forms;
namespace mpvnet
{
public class Addon
{
[ImportMany]
public IEnumerable<IAddon> Addons = null;
readonly CompositionContainer CompositionContainer;
public Addon()
{
try
{
AggregateCatalog catalog = new AggregateCatalog();
string dir = Application.StartupPath + "\\Addons";
if (Directory.Exists(dir))
foreach (string i in Directory.GetDirectories(dir))
catalog.Catalogs.Add(new DirectoryCatalog(i, "*Addon.dll"));
dir = mp.MpvConfFolder + "\\Addons";
if (Directory.Exists(dir))
foreach (string i in Directory.GetDirectories(dir))
catalog.Catalogs.Add(new DirectoryCatalog(i, "*Addon.dll"));
if (catalog.Catalogs.Count > 0)
{
CompositionContainer = new CompositionContainer(catalog);
CompositionContainer.ComposeParts(this);
}
}
catch (Exception ex)
{
Msg.ShowException(ex);
}
}
}
public interface IAddon
{
}
}

View File

@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/>
</startup>
</configuration>

View File

@@ -1,275 +0,0 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Windows.Forms;
using System.Windows.Interop;
namespace mpvnet
{
public class Command
{
public string Name { get; set; }
public Action<string[]> Action { get; set; }
static List<Command> commands;
public static List<Command> Commands
{
get
{
if (commands == null)
{
commands = new List<Command>();
Type type = typeof(Command);
MethodInfo[] methods = type.GetMethods(System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
foreach (MethodInfo i in methods)
{
ParameterInfo[] parameters = i.GetParameters();
if (parameters == null || parameters.Length != 1 || parameters[0].ParameterType != typeof(string[]))
continue;
Command cmd = new Command() { Name = i.Name.Replace("_","-"), Action = (Action<string[]>)i.CreateDelegate(typeof(Action<string[]>)) };
commands.Add(cmd);
}
}
return commands;
}
}
public static void open_files(string[] args)
{
MainForm.Instance.Invoke(new Action(() => {
using (var d = new OpenFileDialog() { Multiselect = true })
if (d.ShowDialog() == DialogResult.OK)
mp.LoadFiles(d.FileNames);
}));
}
public static void open_conf_folder(string[] args)
{
Process.Start(mp.MpvConfFolder);
}
public static void show_input_editor(string[] args)
{
MainForm.Instance.Invoke(new Action(() => {
InputWindow w = new InputWindow();
new WindowInteropHelper(w).Owner = MainForm.Instance.Handle;
w.ShowDialog();
}));
}
public static void show_conf_editor(string[] args)
{
MainForm.Instance.Invoke(new Action(() => {
ConfWindow w = new ConfWindow();
new WindowInteropHelper(w).Owner = MainForm.Instance.Handle;
w.ShowDialog();
}));
}
public static void show_about(string[] args)
{
MainForm.Instance.Invoke(new Action(() => {
AboutWindow w = new AboutWindow();
new WindowInteropHelper(w).Owner = MainForm.Instance.Handle;
w.ShowDialog();
}));
}
public static void show_command_palette(string[] args)
{
MainForm.Instance.Invoke(new Action(() => {
var w = new CommandPaletteWindow();
new WindowInteropHelper(w).Owner = MainForm.Instance.Handle;
w.ShowDialog();
}));
}
public static void show_media_search(string[] args)
{
MainForm.Instance.Invoke(new Action(() => {
var w = new EverythingWindow();
new WindowInteropHelper(w).Owner = MainForm.Instance.Handle;
w.ShowDialog();
}));
}
public static void show_history(string[] args)
{
var fp = mp.MpvConfFolder + "history.txt";
if (File.Exists(fp))
Process.Start(fp);
else
if (Msg.ShowQuestion("Create history.txt file in config folder?",
"mpv.net will write the date, time and filename of opened files to it.") == MsgResult.OK)
File.WriteAllText(fp, "");
}
public static void shell_execute(string[] args) => Process.Start(args[0]);
public static void show_info(string[] args)
{
try
{
string performer, title, album, genre, date, duration, text = "";
long fileSize = 0;
string path = mp.get_property_string("path");
int width = mp.get_property_int("video-params/w");
int height = mp.get_property_int("video-params/h");
if (File.Exists(path))
{
fileSize = new FileInfo(path).Length;
if (App.AudioTypes.Contains(Path.GetExtension(path).ToLower().TrimStart('.')))
{
using (MediaInfo mediaInfo = new MediaInfo(path))
{
performer = mediaInfo.GetInfo(MediaInfoStreamKind.General, "Performer");
title = mediaInfo.GetInfo(MediaInfoStreamKind.General, "Title");
album = mediaInfo.GetInfo(MediaInfoStreamKind.General, "Album");
genre = mediaInfo.GetInfo(MediaInfoStreamKind.General, "Genre");
date = mediaInfo.GetInfo(MediaInfoStreamKind.General, "Recorded_Date");
duration = mediaInfo.GetInfo(MediaInfoStreamKind.Audio, "Duration/String");
if (performer != "") text += "Artist: " + performer + "\n";
if (title != "") text += "Title: " + title + "\n";
if (album != "") text += "Album: " + album + "\n";
if (genre != "") text += "Genre: " + genre + "\n";
if (date != "") text += "Year: " + date + "\n";
if (duration != "") text += "Length: " + duration + "\n";
mp.commandv("show-text", text, "5000");
return;
}
}
}
TimeSpan position = TimeSpan.FromSeconds(mp.get_property_number("time-pos"));
TimeSpan duration2 = TimeSpan.FromSeconds(mp.get_property_number("duration"));
string videoCodec = mp.get_property_string("video-format").ToUpper();
text = Path.GetFileName(path) + "\n" +
FormatTime(position.TotalMinutes) + ":" +
FormatTime(position.Seconds) + " / " +
FormatTime(duration2.TotalMinutes) + ":" +
FormatTime(duration2.Seconds) + "\n" +
$"{width} x {height}\n";
if (fileSize > 0)
text += Convert.ToInt32(fileSize / 1024.0 / 1024.0).ToString() + " MB\n";
text += $"{videoCodec}\n";
mp.commandv("show-text", text, "5000");
string FormatTime(double value) => ((int)value).ToString("00");
}
catch (Exception)
{
}
}
public static void execute_mpv_command(string[] args)
{
MainForm.Instance.Invoke(new Action(() => {
string command = Microsoft.VisualBasic.Interaction.InputBox("Enter a mpv command to be executed.", "Execute Command", RegistryHelp.GetString("HKCU\\Software\\" + Application.ProductName, "RecentExecutedCommand"));
if (string.IsNullOrEmpty(command)) return;
RegistryHelp.SetObject("HKCU\\Software\\" + Application.ProductName, "RecentExecutedCommand", command);
mp.command_string(command, false);
}));
}
public static void open_url(string[] args)
{
MainForm.Instance.Invoke(new Action(() => {
string command = Microsoft.VisualBasic.Interaction.InputBox("Enter URL to be opened.");
if (string.IsNullOrEmpty(command)) return;
mp.LoadFiles(command);
}));
}
public static void load_sub(string[] args)
{
MainForm.Instance.Invoke(new Action(() => {
using (var d = new OpenFileDialog())
{
d.InitialDirectory = Path.GetDirectoryName(mp.get_property_string("path", false));
d.Multiselect = true;
if (d.ShowDialog() == DialogResult.OK)
foreach (string i in d.FileNames)
mp.commandv("sub-add", i);
}
}));
}
public static void load_audio(string[] args)
{
MainForm.Instance.Invoke(new Action(() => {
using (var d = new OpenFileDialog())
{
d.InitialDirectory = Path.GetDirectoryName(mp.get_property_string("path", false));
d.Multiselect = true;
if (d.ShowDialog() == DialogResult.OK)
foreach (string i in d.FileNames)
mp.commandv("audio-add", i);
}
}));
}
public static void cycle_audio(string[] args)
{
string filePath = mp.get_property_string("path", false);
if (!File.Exists(filePath)) return;
using (MediaInfo mi = new MediaInfo(filePath))
{
MediaTrack[] audTracks = mp.MediaTracks.Where(track => track.Type == "a").ToArray();
if (audTracks.Length < 2) return;
int aid = mp.get_property_int("aid");
aid += 1;
if (aid > audTracks.Length) aid = 1;
mp.commandv("set", "aid", aid.ToString());
mp.commandv("show-text", audTracks[aid - 1].Text.Substring(3), "5000");
}
}
public static void manage_file_associations(string[] args)
{
using (var td = new TaskDialog<string>())
{
td.MainInstruction = "Choose an option.";
td.MainIcon = MsgIcon.Shield;
td.AddCommandLink("Register video file extensions", "video");
td.AddCommandLink("Register audio file extensions", "audio");
td.AddCommandLink("Unregister file extensions", "unreg");
string result = td.Show();
if (!string.IsNullOrEmpty(result))
{
using (var proc = new Process())
{
proc.StartInfo.FileName = Application.ExecutablePath;
proc.StartInfo.Arguments = "--reg-file-assoc " + result;
proc.StartInfo.Verb = "runas";
try {
proc.Start();
}
catch (Exception)
{ }
}
}
}
}
}
}

View File

@@ -1,13 +0,0 @@
<UserControl x:Class="Controls.SearchTextBoxUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid x:Name="SearchTextBoxUserControl1" Background="{Binding Path=Background, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}">
<TextBlock x:Name="HintTextBlock" Margin="5,2" Text="Find a setting" Foreground="LightSteelBlue" VerticalAlignment="Center" Background="{Binding Path=Background, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" />
<TextBox Name="SearchTextBox" Height="25" Padding="1,2,0,0" BorderThickness="2" Background="Transparent" TextChanged="SearchTextBox_TextChanged" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" CaretBrush="{Binding Path=Foreground, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" />
<Button x:Name="SearchClearButton" Background="Transparent" HorizontalAlignment="Right" Margin="2,0,4,0" FontSize="10" Width="17" Height="17" Visibility="Hidden" Click="SearchClearButton_Click" FontFamily="Marlett" Foreground="{Binding Path=Foreground2, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}">r</Button>
</Grid>
</UserControl>

View File

@@ -1,47 +0,0 @@
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
namespace Controls
{
public partial class SearchTextBoxUserControl : UserControl
{
public SearchTextBoxUserControl()
{
InitializeComponent();
}
public string Text { get => SearchTextBox.Text; set => SearchTextBox.Text = value; }
private string _HintText;
public string HintText {
get => _HintText;
set {
_HintText = value;
UpdateControls();
}
}
private void SearchClearButton_Click(object sender, RoutedEventArgs e)
{
SearchTextBox.Text = "";
Keyboard.Focus(SearchTextBox);
}
private void SearchTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
UpdateControls();
}
void UpdateControls()
{
HintTextBlock.Text = SearchTextBox.Text == "" ? HintText : "";
if (SearchTextBox.Text == "")
SearchClearButton.Visibility = Visibility.Hidden;
else
SearchClearButton.Visibility = Visibility.Visible;
}
}
}

View File

@@ -1,135 +0,0 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Windows.Documents;
using System.Windows.Navigation;
using Tommy;
namespace DynamicGUI
{
public class Settings
{
public static List<SettingBase> LoadSettings(string content)
{
TomlTable table;
using (StringReader reader = new StringReader(content))
table = TOML.Parse(reader);
List<SettingBase> settingsList = new List<SettingBase>();
foreach (TomlTable setting in table["settings"])
{
SettingBase baseSetting = null;
if (setting.HasKey("options"))
{
OptionSetting optionSetting = new OptionSetting();
baseSetting = optionSetting;
optionSetting.Default = setting["default"];
optionSetting.Value = optionSetting.Default;
optionSetting.StartValue = optionSetting.Default;
foreach (TomlTable option in setting["options"])
{
var opt = new OptionSettingOption();
opt.Name = option["name"];
if (option.HasKey("help"))
opt.Help = option["help"];
if (option.HasKey("text"))
opt.Text = option["text"];
else if (opt.Name == optionSetting.Default)
opt.Text = opt.Name + " (Default)";
opt.OptionSetting = optionSetting;
optionSetting.Options.Add(opt);
}
}
else if (setting["default"].IsString)
{
StringSetting stringSetting = new StringSetting();
baseSetting = stringSetting;
stringSetting.Default = setting["default"];
if (setting.HasKey("folder")) stringSetting.IsFolder = true;
}
baseSetting.Name = setting["name"];
baseSetting.Filter = setting["filter"];
if (setting.HasKey("help")) baseSetting.Help = setting["help"];
if (setting.HasKey("helpurl")) baseSetting.HelpURL = setting["helpurl"];
if (setting.HasKey("width")) baseSetting.Width = setting["width"];
settingsList.Add(baseSetting);
}
return settingsList;
}
}
public abstract class SettingBase
{
public string Name { get; set; }
public string Value { get; set; }
public string StartValue { get; set; }
public string Help { get; set; }
public string Default { get; set; }
public string HelpURL { get; set; }
public string Filter { get; set; }
public int Width { get; set; }
}
public class StringSetting : SettingBase
{
public bool IsFolder { get; set; }
}
public class OptionSetting : SettingBase
{
public List<OptionSettingOption> Options = new List<OptionSettingOption>();
}
public class OptionSettingOption
{
public string Name { get; set; }
public string Help { get; set; }
public OptionSetting OptionSetting { get; set; }
private string _Text;
public string Text
{
get => string.IsNullOrEmpty(_Text) ? Name : _Text;
set => _Text = value;
}
public bool IsChecked
{
get => OptionSetting.Value == Name ;
set {
if (value)
OptionSetting.Value = Name;
}
}
}
interface ISettingControl
{
bool Contains(string searchString);
SettingBase SettingBase { get; }
}
public class HyperlinkEx : Hyperlink
{
private void HyperLinkEx_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
Process.Start(e.Uri.AbsoluteUri);
}
public void SetURL(string url)
{
if (string.IsNullOrEmpty(url)) return;
NavigateUri = new Uri(url);
RequestNavigate += HyperLinkEx_RequestNavigate;
Inlines.Clear();
Inlines.Add(url);
}
}
}

View File

@@ -1,28 +0,0 @@
<UserControl x:Name="OptionSettingControl1" x:Class="DynamicGUI.OptionSettingControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:DynamicGUI"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid Margin="20,0">
<StackPanel>
<TextBox x:Name="TitleTextBox" FontSize="24" Margin="0,10" BorderThickness="0" IsReadOnly="True" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" Background="{Binding Path=Background, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"></TextBox>
<ItemsControl x:Name="ItemsControl">
<ItemsControl.ItemTemplate>
<DataTemplate>
<WrapPanel Orientation="Vertical">
<RadioButton x:Name="RadioButton" VerticalContentAlignment="Center" IsChecked="{Binding IsChecked}" GroupName="{Binding OptionSetting.Name}" Content="{Binding Text}" FontSize="16" FontWeight="Normal" VerticalAlignment="Top" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"></RadioButton>
<TextBox x:Name="ItemHelpTextBox" TextWrapping="WrapWithOverflow" Text="{Binding Help}" Margin="10,0,0,0" BorderThickness="0" IsReadOnly="True" Padding="7,0,0,0" MinHeight="0" Foreground="{Binding Path=Foreground2, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" Background="{Binding Path=Background, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"></TextBox>
</WrapPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<TextBox x:Name="HelpTextBox" TextWrapping="WrapWithOverflow" BorderThickness="0" IsReadOnly="True" Margin="0,10,0,0" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}" Background="{Binding Path=Background, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}"></TextBox>
<TextBlock x:Name="LinkTextBlock" Margin="0,10">
<local:HyperlinkEx x:Name="Link"></local:HyperlinkEx>
</TextBlock>
</StackPanel>
</Grid>
</UserControl>

View File

@@ -1,40 +0,0 @@
using System.Windows;
using System.Windows.Controls;
namespace DynamicGUI
{
public partial class OptionSettingControl : UserControl, ISettingControl
{
private OptionSetting OptionSetting;
public OptionSettingControl(OptionSetting optionSetting)
{
OptionSetting = optionSetting;
InitializeComponent();
TitleTextBox.Text = optionSetting.Name;
HelpTextBox.Text = optionSetting.Help;
ItemsControl.ItemsSource = optionSetting.Options;
Link.SetURL(optionSetting.HelpURL);
if (string.IsNullOrEmpty(optionSetting.HelpURL))
LinkTextBlock.Visibility = Visibility.Collapsed;
}
private string _SearchableText;
public string SearchableText {
get {
if (_SearchableText is null)
{
_SearchableText = TitleTextBox.Text + HelpTextBox.Text;
foreach (var i in OptionSetting.Options)
_SearchableText += i.Text + i.Help + i.Name;
_SearchableText = _SearchableText.ToLower();
}
return _SearchableText;
}
}
public SettingBase SettingBase => OptionSetting;
public bool Contains(string searchString) => SearchableText.Contains(searchString.ToLower());
}
}

View File

@@ -1,27 +0,0 @@
<UserControl x:Name="StringSettingControl1" x:Class="DynamicGUI.StringSettingControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:DynamicGUI"
mc:Ignorable="d"
d:DesignHeight="450"
d:DesignWidth="800" >
<Grid Margin="20,0">
<StackPanel>
<TextBox x:Name="TitleTextBox" FontSize="24" Margin="0,10" BorderThickness="0" IsReadOnly="True" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" Background="{Binding Path=Background, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"></TextBox>
<Grid Margin="0,0,0,10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBox x:Name="ValueTextBox" Text="{Binding Path=Text, ElementName=StringSettingControl1, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="150" HorizontalAlignment="Left" Height="20" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" Background="{Binding Path=Background, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"/>
<Button x:Name="Button" Height="20" Grid.Column="1" Visibility="{Binding Path=Text, ElementName=StringSettingControl1}" Margin="5,0,0,0" Width="20" Click="Button_Click">...</Button>
</Grid>
<TextBox x:Name="HelpTextBox" TextWrapping="WrapWithOverflow" Margin="0,0,0,10" BorderThickness="0" IsReadOnly="True" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" Background="{Binding Path=Background, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"></TextBox>
<TextBlock x:Name="LinkTextBlock" Margin="0,10">
<local:HyperlinkEx x:Name="Link"></local:HyperlinkEx>
</TextBlock>
</StackPanel>
</Grid>
</UserControl>

View File

@@ -1,57 +0,0 @@
using System.Windows;
using System.Windows.Controls;
namespace DynamicGUI
{
public partial class StringSettingControl : UserControl, ISettingControl
{
private StringSetting StringSetting;
public StringSettingControl(StringSetting stringSetting)
{
StringSetting = stringSetting;
InitializeComponent();
TitleTextBox.Text = stringSetting.Name;
HelpTextBox.Text = stringSetting.Help;
ValueTextBox.Text = stringSetting.Value;
if (stringSetting.Width > 0)
ValueTextBox.Width = stringSetting.Width;
if (!StringSetting.IsFolder)
Button.Visibility = Visibility.Hidden;
Link.SetURL(StringSetting.HelpURL);
if (string.IsNullOrEmpty(stringSetting.HelpURL))
LinkTextBlock.Visibility = Visibility.Collapsed;
}
private string _SearchableText;
public string SearchableText {
get {
if (_SearchableText is null)
_SearchableText = (TitleTextBox.Text + HelpTextBox.Text +ValueTextBox.Text).ToLower();
return _SearchableText;
}
}
public bool Contains(string searchString) => SearchableText.Contains(searchString.ToLower());
public SettingBase SettingBase => StringSetting;
public string Text
{
get => StringSetting.Value;
set => StringSetting.Value = value;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
using (var d = new System.Windows.Forms.FolderBrowserDialog())
{
d.Description = "Choose a folder.";
d.SelectedPath = ValueTextBox.Text;
if (d.ShowDialog() == System.Windows.Forms.DialogResult.OK)
ValueTextBox.Text = d.SelectedPath;
}
}
}
}

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -1,63 +0,0 @@
namespace mpvnet
{
partial class MainForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
this.Timer = new System.Windows.Forms.Timer(this.components);
this.SuspendLayout();
//
// Timer
//
this.Timer.Enabled = true;
this.Timer.Interval = 1000;
this.Timer.Tick += new System.EventHandler(this.Timer_Tick);
//
// MainForm
//
this.AllowDrop = true;
this.AutoScaleDimensions = new System.Drawing.SizeF(288F, 288F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.BackColor = System.Drawing.Color.Black;
this.ClientSize = new System.Drawing.Size(606, 368);
this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
this.Name = "MainForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "mpv.net";
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Timer Timer;
}
}

View File

@@ -1,587 +0,0 @@
using System;
using System.Drawing;
using System.IO;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Forms;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Diagnostics;
namespace mpvnet
{
public partial class MainForm : Form
{
public static MainForm Instance { get; set; }
public static IntPtr Hwnd { get; set; }
public new ContextMenuStripEx ContextMenu { get; set; }
Point LastCursorPosChanged;
int LastCursorChangedTickCount;
bool IgnoreDpiChanged = true;
List<string> RecentFiles;
public string MpvNetDarkMode { get; set; } = "always";
public bool MpvFullscreen { get; set; }
public float MpvAutofit { get; set; } = 0.50f;
public int MpvScreen { get; set; } = -1;
public string MpvSid { get; set; } = "";
public string MpvAid { get; set; } = "";
public string MpvVid { get; set; } = "";
public int MpvEdition { get; set; }
public MainForm()
{
InitializeComponent();
try
{
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Application.ThreadException += Application_ThreadException;
Msg.SupportURL = "https://github.com/stax76/mpv.net#support";
Instance = this;
WPF.WPF.Init();
System.Windows.Application.Current.ShutdownMode = System.Windows.ShutdownMode.OnExplicitShutdown;
Hwnd = Handle;
MinimumSize = new Size(FontHeight * 16, FontHeight * 9);
Text += " " + Application.ProductVersion;
object recent = RegistryHelp.GetObject("HKCU\\Software\\" + Application.ProductName, "Recent");
if (recent is string[] r)
RecentFiles = new List<string>(r);
else
RecentFiles = new List<string>();
foreach (var i in mp.mpvConf)
ProcessMpvProperty(i.Key, i.Value);
foreach (var i in mp.mpvNetConf)
ProcessMpvNetProperty(i.Key, i.Value);
ProcessCommandLineEarly();
if (MpvScreen == -1) MpvScreen = Array.IndexOf(Screen.AllScreens, Screen.PrimaryScreen);
SetScreen(MpvScreen);
ChangeFullscreen(MpvFullscreen);
}
catch (Exception ex)
{
Msg.ShowException(ex);
}
}
void ContextMenu_Opening(object sender, CancelEventArgs e)
{
lock (mp.MediaTracks)
{
MenuItem trackMenuItem = FindMenuItem("Track");
if (trackMenuItem != null)
{
trackMenuItem.DropDownItems.Clear();
MediaTrack[] audTracks = mp.MediaTracks.Where(track => track.Type == "a").ToArray();
MediaTrack[] subTracks = mp.MediaTracks.Where(track => track.Type == "s").ToArray();
MediaTrack[] vidTracks = mp.MediaTracks.Where(track => track.Type == "v").ToArray();
MediaTrack[] ediTracks = mp.MediaTracks.Where(track => track.Type == "e").ToArray();
foreach (MediaTrack track in vidTracks)
{
MenuItem mi = new MenuItem(track.Text);
mi.Action = () => { mp.commandv("set", "vid", track.ID.ToString()); };
mi.Checked = MpvVid == track.ID.ToString();
trackMenuItem.DropDownItems.Add(mi);
}
if (vidTracks.Length > 0)
trackMenuItem.DropDownItems.Add(new ToolStripSeparator());
foreach (MediaTrack track in audTracks)
{
MenuItem mi = new MenuItem(track.Text);
mi.Action = () => { mp.commandv("set", "aid", track.ID.ToString()); };
mi.Checked = MpvAid == track.ID.ToString();
trackMenuItem.DropDownItems.Add(mi);
}
if (subTracks.Length > 0)
trackMenuItem.DropDownItems.Add(new ToolStripSeparator());
foreach (MediaTrack track in subTracks)
{
MenuItem mi = new MenuItem(track.Text);
mi.Action = () => { mp.commandv("set", "sid", track.ID.ToString()); };
mi.Checked = MpvSid == track.ID.ToString();
trackMenuItem.DropDownItems.Add(mi);
}
if (subTracks.Length > 0)
{
MenuItem mi = new MenuItem("S: No subtitles");
mi.Action = () => { mp.commandv("set", "sid", "no"); };
mi.Checked = MpvSid == "no";
trackMenuItem.DropDownItems.Add(mi);
}
if (ediTracks.Length > 0)
trackMenuItem.DropDownItems.Add(new ToolStripSeparator());
foreach (MediaTrack track in ediTracks)
{
MenuItem mi = new MenuItem(track.Text);
mi.Action = () => { mp.commandv("set", "edition", track.ID.ToString()); };
mi.Checked = MpvEdition == track.ID;
trackMenuItem.DropDownItems.Add(mi);
}
}
}
lock (mp.Chapters)
{
MenuItem chaptersMenuItem = FindMenuItem("Chapters");
if (chaptersMenuItem != null)
{
chaptersMenuItem.DropDownItems.Clear();
foreach (var i in mp.Chapters)
{
MenuItem mi = new MenuItem(i.Key);
mi.ShortcutKeyDisplayString = TimeSpan.FromSeconds(i.Value).ToString().Substring(0, 8) + " ";
mi.Action = () => { mp.commandv("seek", i.Value.ToString(CultureInfo.InvariantCulture), "absolute"); };
chaptersMenuItem.DropDownItems.Add(mi);
}
}
}
MenuItem recent = FindMenuItem("Recent");
if (recent != null)
{
recent.DropDownItems.Clear();
foreach (string path in RecentFiles)
MenuItem.Add(recent.DropDownItems, path, () => mp.LoadFiles(path));
recent.DropDownItems.Add(new ToolStripSeparator());
MenuItem mi = new MenuItem("Clear List");
mi.Action = () => RecentFiles.Clear();
recent.DropDownItems.Add(mi);
}
}
public MenuItem FindMenuItem(string text) => FindMenuItem(text, ContextMenu.Items);
MenuItem FindMenuItem(string text, ToolStripItemCollection items)
{
foreach (var item in items)
{
if (item is MenuItem mi)
{
if (mi.Text.StartsWith(text) && mi.Text.Trim() == text)
return mi;
if (mi.DropDownItems.Count > 0)
{
MenuItem val = FindMenuItem(text, mi.DropDownItems);
if (val != null) return val;
}
}
}
return null;
}
protected void SetScreen(int targetIndex)
{
Screen[] screens = Screen.AllScreens;
if (targetIndex < 0) targetIndex = 0;
if (targetIndex > screens.Length - 1) targetIndex = screens.Length - 1;
SetScreen(screens[Array.IndexOf(screens, screens[targetIndex])]);
}
protected void SetScreen(Screen screen)
{
Rectangle target = screen.Bounds;
Left = target.X + Convert.ToInt32((target.Width - Width) / 2.0);
Top = target.Y + Convert.ToInt32((target.Height - Height) / 2.0);
SetStartFormPositionAndSize();
}
void SetStartFormPositionAndSize()
{
if (IsFullscreen || mp.VideoSize.Width == 0) return;
Screen screen = Screen.FromControl(this);
int height = Convert.ToInt32(screen.Bounds.Height * MpvAutofit);
int width = Convert.ToInt32(height * mp.VideoSize.Width / (double)mp.VideoSize.Height);
Point middlePos = new Point(Left + Width / 2, Top + Height / 2);
var rect = new Native.RECT(new Rectangle(screen.Bounds.X, screen.Bounds.Y, width, height));
NativeHelp.AddWindowBorders(Handle, ref rect);
int left = middlePos.X - rect.Width / 2;
int top = middlePos.Y - rect.Height / 2;
Native.SetWindowPos(Handle, IntPtr.Zero /* HWND_TOP */, left, top, rect.Width, rect.Height, 4 /* SWP_NOZORDER */);
}
void SetFormPositionAndSizeKeepHeight()
{
if (IsFullscreen || mp.VideoSize.Width == 0) return;
Screen screen = Screen.FromControl(this);
int height = ClientSize.Height;
if (height > screen.Bounds.Height * 0.9) height = Convert.ToInt32(screen.Bounds.Height * MpvAutofit);
int width = Convert.ToInt32(height * mp.VideoSize.Width / (double)mp.VideoSize.Height);
Point middlePos = new Point(Left + Width / 2, Top + Height / 2);
var rect = new Native.RECT(new Rectangle(screen.Bounds.X, screen.Bounds.Y, width, height));
NativeHelp.AddWindowBorders(Handle, ref rect);
int left = middlePos.X - rect.Width / 2;
int top = middlePos.Y - rect.Height / 2;
Screen[] screens = Screen.AllScreens;
if (left < screens[0].Bounds.Left) left = screens[0].Bounds.Left;
int maxLeft = screens[0].Bounds.Left + screens.Select((sc) => sc.Bounds.Width).Sum() - rect.Width - SystemInformation.CaptionHeight;
if (left > maxLeft) left = maxLeft;
Native.SetWindowPos(Handle, IntPtr.Zero /* HWND_TOP */, left, top, rect.Width, rect.Height, 4 /* SWP_NOZORDER */);
}
protected void ProcessCommandLineEarly()
{
var args = Environment.GetCommandLineArgs().Skip(1);
foreach (string i in args)
{
if (i.StartsWith("--"))
{
if (i.Contains("="))
{
string left = i.Substring(2, i.IndexOf("=") - 2);
string right = i.Substring(left.Length + 3);
ProcessMpvProperty(left, right);
ProcessMpvNetProperty(left, right);
}
else
{
string switchName = i.Substring(2);
switch (switchName)
{
case "fs":
case "fullscreen":
MpvFullscreen = true;
break;
}
}
}
}
}
void ProcessMpvProperty(string name, string value)
{
switch (name)
{
case "autofit":
if (value.Length == 3 && value.EndsWith("%"))
if (int.TryParse(value.Substring(0, 2), out int result))
MpvAutofit = result / 100f;
break;
case "fs":
case "fullscreen":
MpvFullscreen = value == "yes";
break;
case "screen":
MpvScreen = Convert.ToInt32(value);
break;
}
}
void ProcessMpvNetProperty(string name, string value)
{
switch (name)
{
case "dark-mode":
MpvNetDarkMode = value;
break;
}
}
public void BuildMenu()
{
string content = File.ReadAllText(mp.InputConfPath);
var items = CommandItem.GetItems(content);
if (!content.Contains("#menu:"))
{
var defaultItems = CommandItem.GetItems(Properties.Resources.inputConf);
foreach (CommandItem item in items)
foreach (CommandItem defaultItem in defaultItems)
if (item.Command == defaultItem.Command)
defaultItem.Input = item.Input;
items = defaultItems;
}
foreach (CommandItem item in items)
{
if (string.IsNullOrEmpty(item.Path))
continue;
string path = item.Path.Replace("&", "&&");
MenuItem menuItem = ContextMenu.Add(path, () => {
try {
mp.command_string(item.Command);
} catch (Exception ex) {
Msg.ShowException(ex);
}
});
if (menuItem != null)
menuItem.ShortcutKeyDisplayString = item.Input + " ";
}
}
void ContextMenu_Opened(object sender, EventArgs e) => CursorHelp.Show();
private void Mp_FileLoaded()
{
string path = mp.get_property_string("path");
BeginInvoke(new Action(() => {
if (File.Exists(path) || path.StartsWith("http"))
Text = Path.GetFileName(path) + " - mpv.net " + Application.ProductVersion;
else
Text = "mpv.net " + Application.ProductVersion;
}));
if (RecentFiles.Contains(path)) RecentFiles.Remove(path);
RecentFiles.Insert(0, path);
if (RecentFiles.Count > 15) RecentFiles.RemoveAt(15);
}
void Mp_Idle() => BeginInvoke(new Action(() => { Text = "mpv.net " + Application.ProductVersion; }));
void CM_Popup(object sender, EventArgs e) => CursorHelp.Show();
void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
Msg.ShowException(e.Exception);
}
void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Msg.ShowError(e.ExceptionObject.ToString());
}
void mp_VideoSizeChanged()
{
BeginInvoke(new Action(() => SetFormPositionAndSizeKeepHeight()));
}
void mp_Shutdown()
{
BeginInvoke(new Action(() => Close()));
}
public bool IsFullscreen => WindowState == FormWindowState.Maximized;
void mpPropChangeFullscreen(bool value)
{
BeginInvoke(new Action(() => ChangeFullscreen(value)));
}
void ChangeFullscreen(bool value)
{
if (value)
{
if (FormBorderStyle != FormBorderStyle.None)
{
FormBorderStyle = FormBorderStyle.None;
WindowState = FormWindowState.Maximized;
}
}
else
{
WindowState = FormWindowState.Normal;
FormBorderStyle = FormBorderStyle.Sizable;
SetFormPositionAndSizeKeepHeight();
}
}
protected override void WndProc(ref Message m)
{
//Debug.WriteLine(m);
switch (m.Msg)
{
case 0x0201: // WM_LBUTTONDOWN
case 0x0202: // WM_LBUTTONUP
case 0x0100: // WM_KEYDOWN
case 0x0101: // WM_KEYUP
case 0x0104: // WM_SYSKEYDOWN
case 0x0105: // WM_SYSKEYUP
case 0x020A: // WM_MOUSEWHEEL
if (mp.MpvWindowHandle != IntPtr.Zero)
Native.SendMessage(mp.MpvWindowHandle, m.Msg, m.WParam, m.LParam);
break;
case 0x319: // WM_APPCOMMAND
if (mp.MpvWindowHandle != IntPtr.Zero)
Native.PostMessage(mp.MpvWindowHandle, m.Msg, m.WParam, m.LParam);
break;
case 0x203: // Native.WM.LBUTTONDBLCLK
if (!IsMouseInOSC())
mp.command_string("cycle fullscreen");
break;
case 0x02E0: // WM_DPICHANGED
if (IgnoreDpiChanged) break;
var r2 = Marshal.PtrToStructure<Native.RECT>(m.LParam);
Native.SetWindowPos(Handle, IntPtr.Zero, r2.Left, r2.Top, r2.Width, r2.Height, 0);
break;
case 0x0214: // WM_SIZING
var rc = Marshal.PtrToStructure<Native.RECT>(m.LParam);
var r = rc;
NativeHelp.SubtractWindowBorders(Handle, ref r);
int c_w = r.Right - r.Left, c_h = r.Bottom - r.Top;
float aspect = mp.VideoSize.Width / (float)mp.VideoSize.Height;
int d_w = Convert.ToInt32(c_h * aspect - c_w);
int d_h = Convert.ToInt32(c_w / aspect - c_h);
int[] d_corners = { d_w, d_h, -d_w, -d_h };
int[] corners = { rc.Left, rc.Top, rc.Right, rc.Bottom };
int corner = NativeHelp.GetResizeBorder(m.WParam.ToInt32());
if (corner >= 0)
corners[corner] -= d_corners[corner];
Marshal.StructureToPtr<Native.RECT>(new Native.RECT(corners[0], corners[1], corners[2], corners[3]), m.LParam, false);
m.Result = new IntPtr(1);
return;
}
base.WndProc(ref m);
}
protected override void OnDragEnter(DragEventArgs e)
{
base.OnDragEnter(e);
if (e.Data.GetDataPresent(DataFormats.FileDrop) || e.Data.GetDataPresent(DataFormats.Text))
e.Effect = DragDropEffects.Copy;
}
protected override void OnDragDrop(DragEventArgs e)
{
base.OnDragDrop(e);
if (e.Data.GetDataPresent(DataFormats.FileDrop))
mp.LoadFiles(e.Data.GetData(DataFormats.FileDrop) as String[]);
if (e.Data.GetDataPresent(DataFormats.Text))
mp.LoadFiles(e.Data.GetData(DataFormats.Text).ToString());
}
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
if (WindowState == FormWindowState.Normal &&
e.Button == MouseButtons.Left &&
e.Y < ClientSize.Height * 0.9)
{
var HTCAPTION = new IntPtr(2);
Native.ReleaseCapture();
Native.PostMessage(Handle, 0xA1 /* WM_NCLBUTTONDOWN */, HTCAPTION, IntPtr.Zero);
}
if (Width - e.Location.X < 10 && e.Location.Y < 10)
mp.commandv("quit");
}
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
mp.command_string($"mouse {e.X} {e.Y}");
if (CursorHelp.IsPosDifferent(LastCursorPosChanged))
CursorHelp.Show();
}
bool IsMouseInOSC() => PointToClient(Control.MousePosition).Y > ClientSize.Height * 0.9;
void Timer_Tick(object sender, EventArgs e)
{
if (CursorHelp.IsPosDifferent(LastCursorPosChanged))
{
LastCursorPosChanged = Control.MousePosition;
LastCursorChangedTickCount = Environment.TickCount;
}
else if (Environment.TickCount - LastCursorChangedTickCount > 1500 &&
!IsMouseInOSC() && ClientRectangle.Contains(PointToClient(MousePosition)) &&
Form.ActiveForm == this && !ContextMenu.Visible)
{
CursorHelp.Hide();
}
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
mp.Init();
mp.observe_property_bool("fullscreen", mpPropChangeFullscreen);
mp.observe_property_bool("ontop", mpPropChangeOnTop);
mp.observe_property_string("sid", mpPropChangeSid);
mp.observe_property_string("aid", mpPropChangeAid);
mp.observe_property_string("vid", mpPropChangeVid);
mp.observe_property_int("edition", mpPropChangeEdition);
mp.Shutdown += mp_Shutdown;
mp.VideoSizeChanged += mp_VideoSizeChanged;
mp.FileLoaded += Mp_FileLoaded;
mp.Idle += Mp_Idle;
}
void mpPropChangeOnTop(bool value) => BeginInvoke(new Action(() => TopMost = value));
void mpPropChangeAid(string value) => MpvAid = value;
void mpPropChangeSid(string value) => MpvSid = value;
void mpPropChangeVid(string value) => MpvVid = value;
void mpPropChangeEdition(int value) => MpvEdition = value;
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
if ((MpvNetDarkMode == "system" && Sys.IsDarkTheme) || MpvNetDarkMode == "always")
ToolStripRendererEx.ColorTheme = Color.Black;
ContextMenu = new ContextMenuStripEx(components);
ContextMenu.Opened += ContextMenu_Opened;
ContextMenu.Opening += ContextMenu_Opening;
BuildMenu();
ContextMenuStrip = ContextMenu;
IgnoreDpiChanged = false;
CheckURL();
}
protected override void OnFormClosed(FormClosedEventArgs e)
{
base.OnFormClosed(e);
RegistryHelp.SetObject("HKCU\\Software\\" + Application.ProductName, "Recent", RecentFiles.ToArray());
mp.commandv("quit");
mp.AutoResetEvent.WaitOne(3000);
}
protected override void OnLostFocus(EventArgs e)
{
base.OnLostFocus(e);
CursorHelp.Show();
}
protected override void OnActivated(EventArgs e)
{
base.OnActivated(e);
CheckURL();
}
void CheckURL()
{
string clipboard = Clipboard.GetText();
if (clipboard.StartsWith("http") && RegistryHelp.GetString("HKCU\\Software\\" + Application.ProductName, "LastURL") != clipboard && Visible)
{
RegistryHelp.SetObject("HKCU\\Software\\" + Application.ProductName, "LastURL", clipboard);
if (Msg.ShowQuestion("Play URL?", clipboard) == MsgResult.OK)
mp.LoadFiles(clipboard);
}
}
}
}

View File

@@ -1,505 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="Timer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>30, 12</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAQAEBAAAAEAIABoBAAARgAAACAgAAABACAAqBAAAK4EAAAwMAAAAQAgAKglAABWFQAAAAAAAAEA
IABKHQAA/joAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAMMOAADDDgAAAAAAAAAAAAAAAAAAAAAAAP/c
uQD/3LgH/968SP/ct6j/16rk/9Kf+//Sn/v/16rj/9y3qP/evEj/3LgH/9y5AAAAAAAAAAAA/9u1AP/c
uQD/3bkY/9y3kv/Ole7/t1j//6Us//+eGv//nhr//6Us//+3WP//zpXu/9y3kv/duRj/3LkA/9u1AP/b
tgD/3bkY/9qysP/AcP//nRf//5MA//+TAP//kgD//5IA//+SAP//kwD//50X///AcP//2rKw/925GP/b
tgD/3LgG/9y3kv/AcP//lwr//5MA//+UAf//mxL//6Us//+mLv//nBb//5QB//+TAP//lwr//8Bw///c
t5L/3LgG/968Sf/OlO3/nRj//5MA//+VBP//sEf//8+X///ZsP//2a///9Gc//+1U///lwj//5MA//+d
GP//zpTt/968Sf/ct6f/tlj//5MA//+TAP//r0X//9mv///Xq///0Zz//9y3///cuP//2rP//7ZW//+U
Af//kwD//7ZY///ct6f/16ri/6Us//+TAP//mg///82S///duv//zZH//6Ij//+9aP//16v//9y4///S
n///nhn//5IA//+lLP//16rj/9Kf+/+eGv//kgD//6Ml///Xq///3Lj//82R//+YC///lAL//6gy///P
lv//2rP//6k2//+SAP//nhr//9Kf+//Sn/v/nhr//5IA//+jJf//16v//9y4///Nkv//mAv//5YH//+v
RP//0p7//9qz//+pNv//kgD//54a///Sn/v/16ri/6Us//+TAP//mg///82S///duv//zpP//6Yu///D
d///2bH//9y4///Sn///nhn//5IA//+lLP//16ri/9y3p/+2WP//kwD//5MA//+vRf//2a///9iu///V
pP//3Lf//9y3///as///tlb//5QB//+TAP//tlj//9y3p//evEn/zpTt/50Y//+TAP//lQT//7BH///P
lv//2a///9mv///RnP//tVP//5cI//+TAP//nRj//86U7f/evEn/3LgG/9y3kf/AcP//lwr//5MA//+U
Af//mxL//6Us//+mLv//nBX//5QB//+TAP//lwr//8Bw///ct5L/3LgG/9u2AP/duRj/2rKw/8Bw//+d
F///kwD//5MA//+SAP//kgD//5IA//+TAP//nRf//8Bw///asrD/3bkY/9u2AP/btQD/3LkA/925GP/c
t5L/zpXu/7dY//+lLP//nhr//54a//+lLP//t1j//86V7v/ct5L/3bkY/9y5AP/btQAAAAAAAAAAAP/c
uQD/3LcH/968SP/ct6j/16rk/9Kf+//Sn/v/16rk/9y3qP/evEj/3LcH/9y5AAAAAAAAAAAA4AcAAMAD
AACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIABAADAAwAA4AcAACgA
AAAgAAAAQAAAAAEAIAAAAAAAABAAAMMOAADDDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAP/btQD/27UE/9u1Kf/btWz/27Ws/9u12f/btvH/3Lf9/9y3/f/btvH/27XY/9u1q//b
tWz/27Up/9u1BP/btQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAP/btQD/27UD/9u1N//btZf/27bf/9y4+//ctv//2bD//9Wn///ToP//06D//9Wn///Z
sP//3Lb//9y4+//btt//27WX/9u1N//btQP/27UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAP/btQD/27UA/9u1Gf/btYn/27bq/9y3///WqP//xoD//7RT//+nMv//oCD//50X//+d
F///oCD//6cy//+0U///xoD//9ao///ct///27bq/9u1if/btRn/27UA/9u1AAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAD/27UA/9u1AP/btTX/27XC/9y3/v/Wqf//vmv//6Mn//+WBv//kwD//5MA//+T
AP//kwD//5MA//+TAP//kwD//5MA//+WBv//oyf//75r///Wqf//3Lf+/9u1wv/btTX/27UA/9u1AAAA
AAAAAAAAAAAAAAAAAAAAAAAA/9u1AP/btQD/27VB/9u12P/btv//y4z//6cw//+VA///kwD//5QA//+U
AP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+TAP//lQP//6cw///LjP//27b//9u12P/b
tUH/27UA/9u1AAAAAAAAAAAAAAAAAP/btQD/27UA/9u1Nv/btdj/27X//8N4//+cFf//kwD//5QA//+U
AP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//kwD//5wV///D
eP//27X//9u12P/btTb/27UA/9u1AAAAAAAAAAAA/9u1AP/btRr/27XB/9u2///DeP//mQ7//5MA//+U
AP//lAD//5QA//+UAP//lAD//5MA//+TAP//kwD//5MA//+TAP//kwD//5QA//+UAP//lAD//5QA//+U
AP//kwD//5kO///DeP//27b//9u1wf/btRr/27UAAAAAAP/btQD/27UC/9u1if/ct///y4z//5wV//+T
AP//lAD//5QA//+UAP//lAD//5MA//+VBP//oB7//60///+1VP//tlf//7BG//+jJ///lwn//5MA//+U
AP//lAD//5QA//+UAP//kwD//5wV///LjP//3Lf//9u1if/btQL/27UA/9u1AP/btTf/27bo/9ap//+n
Mf//kwD//5QA//+UAP//lAD//5QA//+UAf//oyf//8F0///UpP//2rT//9y3///ct///27X//9eq///I
hP//qzr//5UF//+UAP//lAD//5QA//+UAP//kwD//6cx///Wqf//27bp/9u1N//btQD/27UC/9u1l//c
t///vmv//5UC//+UAP//lAD//5QA//+UAP//lQP//7BH///Uo///3Lj//9u2///btf//27X//9u1///b
tf//27b//9y4///Yrv//u2L//5gL//+UAP//lAD//5QA//+UAP//lQL//75r///ct///27WX/9u1A//b
tSr/27be/9ao//+jJ///kwD//5QA//+UAP//lAD//5QA//+vRf//2Kz//9y3///btf//27T//9y2///b
tv//27X//9u1///btf//27X//9u2///btf//vGX//5YF//+UAP//lAD//5QA//+TAP//oyf//9ao///b
tt7/27Uq/9u1bP/cuPv/xoD//5YG//+UAP//lAD//5QA//+TAP//oSL//9Og///ct///27X//9y3///M
kP//wHD//9it///ct///27X//9u1///btf//27X//9u2///ZsP//rUH//5MA//+UAP//lAD//5QA//+W
Bv//xoD//9y4+//btWz/27Wr/9y2//+0U///kwD//5QA//+UAP//lAD//5QB//++av//3Lj//9u1///b
tf//3Lj//8V+//+XCP//qjj//8uN///btf//27b//9u1///btf//27X//9y4///Ljf//mQ3//5QA//+U
AP//lAD//5MA//+0U///3Lb//9u1rP/btdj/2bD//6cy//+TAP//lAD//5QA//+TAP//nBb//9Gc///c
t///27X//9u1///cuP//xn///5UD//+TAP//mxH//7hb///Vpf//3Lf//9u1///btf//27X//9mv//+o
Mv//kwD//5QA//+UAP//kwD//6cy///ZsP//27XY/9u28f/Vp///oCD//5MA//+UAP//lAD//5MA//+n
Mf//2a///9u1///btf//27X//9y4///Hgf//lgT//5QA//+UAP//lAH//6Qo///Ffv//2rH//9u2///b
tf//3Lf//7ZW//+TAP//lAD//5QA//+TAP//oCD//9Wn///btvH/3Lf9/9Og//+dF///kwD//5QA//+U
AP//kwD//65C///btf//27X//9u1///btf//3Lj//8eB//+WBP//lAD//5QA//+UAP//kwD//5cI//+z
T///16v//9u2///cuP//vmr//5QA//+UAP//lAD//5MA//+dF///06D//9y3/f/ct/3/06D//50X//+T
AP//lAD//5QA//+TAP//rkL//9u1///btf//27X//9u1///cuP//x4L//5YE//+UAP//lAD//5QA//+T
AP//oB7//8Fy///ZsP//27X//9y4//++av//lAD//5QA//+UAP//kwD//50X///ToP//3Lf9/9u28f/V
p///oCD//5MA//+UAP//lAD//5MA//+nMf//2a///9u1///btf//27X//9y4///Hg///lgX//5QA//+T
AP//lwn//7FK///RnP//3Lf//9u1///btf//3Lf//7ZW//+TAP//lAD//5QA//+TAP//oCD//9Wn///b
tvH/27XY/9mw//+nMv//kwD//5QA//+UAP//kwD//5wV///RnP//3Lf//9u1///btf//3Lj//8eD//+V
Bf//lAH//6Mm///FfP//2rL//9y3///btf//27X//9u1///Zr///qDL//5MA//+UAP//lAD//5MA//+n
Mv//2bD//9u12P/btav/3Lb//7RT//+TAP//lAD//5QA//+UAP//lAH//75q///cuP//27X//9u1///c
uP//yIT//5sS//+1VP//1KL//9y3///btf//27X//9u1///btf//3Lj//8uN//+ZDf//lAD//5QA//+U
AP//kwD//7RT///ctv//27Wr/9u1bP/cuPv/xoD//5YG//+UAP//lAD//5QA//+TAP//oSL//9Of///c
t///27X//9y2///RnP//yYj//9u0///ctv//27X//9u1///btf//27X//9u2///ZsP//rUH//5MA//+U
AP//lAD//5QA//+WBv//xoD//9y4+//btWz/27Uq/9u23v/WqP//oyf//5MA//+UAP//lAD//5QA//+U
AP//r0T//9es///ct///27X//9u2///ct///27X//9u1///btf//27X//9u1///btv//27T//7xl//+W
Bf//lAD//5QA//+UAP//kwD//6Mn///WqP//27be/9u1Kv/btQL/27WW/9y3//++a///lQL//5QA//+U
AP//lAD//5QA//+VA///sEf//9Sj///cuP//27b//9u1///btf//27X//9u1///btv//3Lj//9iu//+7
Yv//mAr//5QA//+UAP//lAD//5QA//+VAv//vmv//9y3///btZb/27UC/9u1AP/btTf/27bo/9ap//+n
Mf//kwD//5QA//+UAP//lAD//5QA//+UAf//oyf//8F0///UpP//2rT//9y3///ct///27X//9eq///I
hP//qzr//5UF//+UAP//lAD//5QA//+UAP//kwD//6cx///Wqf//27bp/9u1N//btQD/27UA/9u1Av/b
tYj/3Lf//8uM//+cFf//kwD//5QA//+UAP//lAD//5QA//+TAP//lQT//6Ae//+tP///tVT//7ZX//+w
Rv//oyf//5cJ//+TAP//lAD//5QA//+UAP//lAD//5MA//+cFf//y4z//9y3///btYn/27UC/9u1AAAA
AAD/27UA/9u1Gv/btcH/27b//8N4//+ZDv//kwD//5QA//+UAP//lAD//5QA//+UAP//kwD//5MA//+T
AP//kwD//5MA//+TAP//lAD//5QA//+UAP//lAD//5QA//+TAP//mQ7//8N4///btv//27XB/9u1Gv/b
tQAAAAAAAAAAAP/btQD/27UA/9u1Nf/btdj/27X//8N4//+cFf//kwD//5QA//+UAP//lAD//5QA//+U
AP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//kwD//5wV///DeP//27X//9u12P/b
tTX/27UA/9u1AAAAAAAAAAAAAAAAAP/btQD/27UA/9u1P//btdj/27b//8uM//+nMf//lQP//5MA//+U
AP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//kwD//5UD//+nMf//y4z//9u2///b
tdj/27U//9u1AP/btQAAAAAAAAAAAAAAAAAAAAAAAAAAAP/btQD/27UA/9u1Nf/btcL/3Lf+/9ap//++
a///oyf//5YG//+TAP//kwD//5MA//+TAP//kwD//5MA//+TAP//kwD//5YG//+jJ///vmv//9ap///c
t/7/27XC/9u1Nf/btQD/27UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/btQD/27UA/9u1Gf/b
tYn/27bq/9y3///WqP//xoD//7RT//+nMv//oCD//50X//+dF///oCD//6cy//+0U///xoD//9ao///c
t///27bq/9u1if/btRn/27UA/9u1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAD/27UA/9u1A//btTf/27WX/9u23//cuPv/3Lb//9mw///Vp///06D//9Og///Vp///2bD//9y2///c
uPv/27bf/9u1l//btTf/27UD/9u1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA/9u1AP/btQT/27Up/9u1bP/btaz/27XZ/9u28f/ct/3/3Lf9/9u28f/b
tdn/27Ws/9u1bP/btSn/27UE/9u1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AB//4A
AH/8AAA/+AAAH/AAAA/gAAAHwAAAA4AAAAGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAAcAAAAPgAAAH8AAAD/gAAB/8AAA//gAAf/+A
Af8oAAAAMAAAAGAAAAABACAAAAAAAAAkAADDDgAAww4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/27UA/9u1AP/btQ3/27U2/9u1bf/b
taP/27XL/9u15f/btfX/27X+/9u1/v/btfT/27Xk/9u1y//btaH/27Vs/9u1Nv/btQ3/27UA/9u1AAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9u1AP/btQP/27Un/9u1c//b
tbz/27Xp/9u1/P/btf//27X//9u2///btv//3Lb//9y2///btv//27b//9u1///btf//27X8/9u16f/b
tbz/27Vz/9u1J//btQP/27UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/btQD/27UC/9u1Lf/b
tZD/27Xh/9u1/v/btf//3Lb//9y4///ct///2rP//9es///UpP//06D//9Og///UpP//16z//9qz///c
t///3Lj//9y2///btf//27X+/9u14f/btZD/27Ut/9u1Av/btQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/27UA/9u1AP/b
tRX/27V8/9u14v/btf//27X//9y3///btP//06H//8Z+//+3Wf//qzz//6Qo//+fHf//nRb//50W//+f
Hf//pCj//6s8//+3Wf//xn7//9Oh///btP//3Lf//9u1///btf//27Xi/9u1fP/btRX/27UA/9u1AAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/b
tQD/27UA/9u1Ov/btb7/27X9/9u1///ct///2a///8mG//+xSv//nhv//5YF//+TAP//kwD//5MA//+T
AP//kwD//5MA//+TAP//kwD//5MA//+TAP//lgX//54b//+xSv//yYb//9mv///ct///27X//9u1/f/b
tb7/27U6/9u1AP/btQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA/9u1AP/btQT/27Vc/9u14v/btf//3Lb//9q0///JiP//qzv//5gK//+TAP//kwD//5QA//+U
AP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5MA//+TAP//mAr//6s7///J
iP//2rT//9y2///btf//27Xi/9u1XP/btQT/27UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAD/27UA/9u1Bf/btXD/27Xw/9u1///ct///1KP//7RT//+ZDv//kwD//5QA//+U
AP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+U
AP//lAD//5MA//+ZDv//tFP//9Sj///ct///27X//9u18P/btXD/27UF/9u1AAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/btQD/27UE/9u1cP/btfT/27X//9y3///Mjv//pSv//5QB//+U
AP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+U
AP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAH//6Ur///Mjv//3Lf//9u1///btfT/27Vw/9u1BP/b
tQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9u1AP/btQD/27Ve/9u18f/btf//27b//8eC//+e
Gv//kwD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+U
AP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5MA//+eGv//x4L//9u2///b
tf//27Xx/9u1Xv/btQD/27UAAAAAAAAAAAAAAAAAAAAAAAAAAAD/27UA/9u1AP/btTv/27Xi/9u1///c
t///x4L//5wV//+TAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+U
AP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+T
AP//nBX//8eC///ct///27X//9u14v/btTv/27UA/9u1AAAAAAAAAAAAAAAAAAAAAAD/27UA/9u1Fv/b
tb7/27X//9y3///Mj///nhr//5MA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+U
AP//kwD//5MA//+UAf//lQP//5UD//+UAf//kwD//5MA//+TAP//lAD//5QA//+UAP//lAD//5QA//+U
AP//lAD//5QA//+UAP//kwD//54a///Mjv//3Lf//9u1///btb7/27UW/9u1AAAAAAAAAAAAAAAAAP/b
tQD/27UA/9u1e//btf7/3Lb//9Sj//+lLP//kwD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+U
AP//lAD//5MA//+YC///pSz//7RS//+/bf//xHz//8Z////BdP//uV7//6s8//+dF///lAL//5MA//+U
AP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5MA//+lLP//1KP//9y2///btf7/27V8/9u1AP/b
tQAAAAAAAAAAAP/btQD/27Ut/9u14P/btf//2rP//7RS//+UAP//lAD//5QA//+UAP//lAD//5QA//+U
AP//lAD//5QA//+TAP//mQ7//7FL///Li///2K3//9y2///cuP//3Lj//9y4///cuP//3Lj//9qy///R
nP//vGf//6Eh//+UAf//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//tFL//9qz///b
tf//27Xh/9u1Lv/btQAAAAAA/9u1AP/btQL/27WR/9u1///ct///yYf//5kN//+UAP//lAD//5QA//+U
AP//lAD//5QA//+UAP//lAD//5QB//+mLf//yYj//9u0///ct///27b//9u1///btf//27X//9u1///b
tf//27X//9u1///ct///3Lf//9Og//+zUP//lwj//5MA//+UAP//lAD//5QA//+UAP//lAD//5QA//+U
AP//mQ3//8mH///ct///27X//9u1kf/btQL/27UA/9u1AP/btSj/27Xh/9u1///Zr///qzv//5MA//+U
AP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAL//65C///Uo///3Lj//9u1///btf//27X//9u1///b
tf//27X//9u1///btf//27X//9u1///btf//27X//9y3///asv//v23//5kO//+TAP//lAD//5QA//+U
AP//lAD//5QA//+UAP//kwD//6s7///Zr///27X//9u14f/btSj/27UA/9u1AP/btXL/27X//9y3///J
h///mAr//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//rUD//9eq///ct///27X//9u1///b
tf//27b//9u2///btf//27X//9u1///btf//27X//9u1///btf//27X//9u1///btv//27b//8Bw//+Y
Cv//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5gK///Jhv//3Lf//9u1///btXL/27UA/9u1Df/b
tbv/27X//9u0//+xSv//kwD//5QA//+UAP//lAD//5QA//+UAP//lAD//5MA//+jKP//06D//9y3///b
tf//27X//9u1///btf//1qf//9it///ct///27X//9u1///btf//27X//9u1///btf//27X//9u1///b
tf//27X//9q0//+2WP//lAH//5QA//+UAP//lAD//5QA//+UAP//lAD//5MA//+xSv//27T//9u1///b
tbv/27UN/9u1Nv/bten/3Lb//9Oh//+eG///kwD//5QA//+UAP//lAD//5QA//+UAP//lAD//5gK///G
f///3Lj//9u1///btf//27X//9u1///cuP//wHD//6s8///Nkf//27b//9u2///btf//27X//9u1///b
tf//27X//9u1///btf//27X//9y2///Vpv//pCr//5MA//+UAP//lAD//5QA//+UAP//lAD//5MA//+e
G///06H//9y2///bten/27U2/9u1bP/btfz/3Lj//8Z///+WBf//lAD//5QA//+UAP//lAD//5QA//+U
AP//kwD//6w9///Zsf//27X//9u1///btf//27X//9u1///cuP//vmv//5MA//+cFP//umD//9Wn///c
t///27X//9u1///btf//27X//9u1///btf//27X//9u1///cuP//wnT//5UE//+UAP//lAD//5QA//+U
AP//lAD//5QA//+WBf//xn///9y4///btfz/27Vt/9u1of/btf//3Lf//7dZ//+TAP//lAD//5QA//+U
AP//lAD//5QA//+UAP//lgX//8V8///cuP//27X//9u1///btf//27X//9u1///cuP//vmv//5QA//+T
AP//lAL//6Ut///Hgv//2rP//9y3///btf//27X//9u1///btf//27X//9u1///btv//1ab//6Ej//+T
AP//lAD//5QA//+UAP//lAD//5QA//+TAP//t1n//9y3///btf//27Wi/9u1yv/btf//2rP//6s8//+T
AP//lAD//5QA//+UAP//lAD//5QA//+TAP//nx3//9Sj///btv//27X//9u1///btf//27X//9u1///c
uP//vmz//5QA//+UAP//lAD//5MA//+YC///sk7//9Kd///ct///27b//9u1///btf//27X//9u1///b
tf//27b//7NP//+TAP//lAD//5QA//+UAP//lAD//5QA//+TAP//qzz//9qz///btf//27XK/9u15P/b
tv//16z//6Qo//+TAP//lAD//5QA//+UAP//lAD//5QA//+TAP//qzv//9qy///btf//27X//9u1///b
tf//27X//9u1///cuP//v27//5QA//+UAP//lAD//5QA//+UAP//kwD//6Af///Acf//2K7//9y3///b
tf//27X//9u1///btf//3Lj//8J1//+VAf//lAD//5QA//+UAP//lAD//5QA//+TAP//pCj//9es///b
tv//27Xk/9u19f/btv//1KT//58c//+TAP//lAD//5QA//+UAP//lAD//5QA//+TAP//tVP//9y3///b
tf//27X//9u1///btf//27X//9u1///cuP//v2///5QA//+UAP//lAD//5QA//+UAP//lAD//5MA//+W
Bv//qzz//82Q///btP//27X//9u1///btf//3Lf//8uL//+XCf//lAD//5QA//+UAP//lAD//5QA//+T
AP//nx3//9Sk///btv//27X1/9u1/v/ctv//06D//50W//+TAP//lAD//5QA//+UAP//lAD//5QA//+T
AP//umH//9y4///btf//27X//9u1///btf//27X//9u1///cuP//v2///5QA//+UAP//lAD//5QA//+U
AP//lAD//5QA//+UAP//kwD//5sS///BdP//27X//9u1///btf//3Lf//8+W//+aDv//lAD//5QA//+U
AP//lAD//5QA//+TAP//nRb//9Og///ctv//27X+/9u1/v/ctv//06D//50W//+TAP//lAD//5QA//+U
AP//lAD//5QA//+TAP//umH//9y4///btf//27X//9u1///btf//27X//9u1///cuP//wG///5QA//+U
AP//lAD//5QA//+UAP//lAD//5QA//+TAP//lwj//69E///QmP//27X//9u1///btf//3Lf//8+W//+a
Dv//lAD//5QA//+UAP//lAD//5QA//+TAP//nRb//9Og///ctv//27X+/9u19f/btv//1KT//58d//+T
AP//lAD//5QA//+UAP//lAD//5QA//+TAP//tVP//9y3///btf//27X//9u1///btf//27X//9u1///c
uP//wHL//5QA//+UAP//lAD//5QA//+UAP//lAD//5QB//+hIv//w3f//9mx///ct///27X//9u1///b
tf//3Lf//8uL//+XCf//lAD//5QA//+UAP//lAD//5QA//+TAP//nx3//9Sk///btv//27X1/9u15P/b
tv//16z//6Qo//+TAP//lAD//5QA//+UAP//lAD//5QA//+TAP//qzv//9qy///btf//27X//9u1///b
tf//27X//9u1///cuP//wXL//5QA//+UAP//lAD//5QA//+TAP//mAv//7NP///Sn///3Lf//9u1///b
tf//27X//9u1///btf//3Lj//8J1//+VAf//lAD//5QA//+UAP//lAD//5QA//+TAP//pCj//9es///b
tv//27Xk/9u1yv/btf//2rP//6s8//+TAP//lAD//5QA//+UAP//lAD//5QA//+TAP//nxz//9Sj///b
tv//27X//9u1///btf//27X//9u1///cuP//wXL//5QA//+UAP//lAD//5QB//+kKf//xoH//9qz///c
t///27X//9u1///btf//27X//9u1///btf//27b//7NP//+TAP//lAD//5QA//+UAP//lAD//5QA//+T
AP//qzz//9qz///btf//27XK/9u1of/btf//3Lf//7dZ//+TAP//lAD//5QA//+UAP//lAD//5QA//+U
AP//lgX//8V8///cuP//27X//9u1///btf//27X//9u1///cuP//wXL//5QA//+TAP//mg///7dZ///V
pf//3Lf//9u1///btf//27X//9u1///btf//27X//9u1///btv//1ab//6Ej//+TAP//lAD//5QA//+U
AP//lAD//5QA//+TAP//t1n//9y3///btf//27Wh/9u1bP/btfz/3Lj//8Z///+WBf//lAD//5QA//+U
AP//lAD//5QA//+UAP//kwD//6w9///Zsf//27X//9u1///btf//27X//9u1///cuP//wXX//5UE//+n
Mv//yon//9u1///btv//27X//9u1///btf//27X//9u1///btf//27X//9u1///cuP//wnT//5UE//+U
AP//lAD//5QA//+UAP//lAD//5QA//+WBf//xn///9y4///btfz/27Vs/9u1Nv/bten/3Lb//9Oh//+e
G///kwD//5QA//+UAP//lAD//5QA//+UAP//lAD//5gK///Gf///3Lj//9u1///btf//27X//9u1///c
t///yIX//7tk///Wqf//3Lf//9u1///btf//27X//9u1///btf//27X//9u1///btf//27X//9y2///V
pv//pCr//5MA//+UAP//lAD//5QA//+UAP//lAD//5MA//+eG///06H//9y2///bten/27U2/9u1Df/b
tbv/27X//9u0//+xSv//kwD//5QA//+UAP//lAD//5QA//+UAP//lAD//5MA//+jJ///06D//9y3///b
tf//27X//9u1///btf//2rL//9u1///btv//27X//9u1///btf//27X//9u1///btf//27X//9u1///b
tf//27X//9q0//+2V///lAH//5QA//+UAP//lAD//5QA//+UAP//lAD//5MA//+xSv//27T//9u1///b
tbv/27UN/9u1AP/btXL/27X//9y3///Jh///mAr//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+U
AP//rUD//9ap///ct///27X//9u1///btf//27X//9u1///btf//27X//9u1///btf//27X//9u1///b
tf//27X//9u1///btv//27X//8Bv//+YCv//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5gK///J
h///3Lf//9u1///btXL/27UA/9u1AP/btSf/27Xg/9u1///Zr///qzv//5MA//+UAP//lAD//5QA//+U
AP//lAD//5QA//+UAP//lAL//65C///Uo///3Lj//9u1///btf//27X//9u1///btf//27X//9u1///b
tf//27X//9u1///btf//27X//9y3///asv//vmz//5kO//+TAP//lAD//5QA//+UAP//lAD//5QA//+U
AP//kwD//6s7///Zr///27X//9u14P/btSf/27UA/9u1AP/btQH/27WQ/9u1///ct///yYf//5kN//+U
AP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QB//+mLf//yYj//9u0///ct///27b//9u1///b
tf//27X//9u1///btf//27X//9u1///ct///3Lf//9Og//+zUP//lwj//5MA//+UAP//lAD//5QA//+U
AP//lAD//5QA//+UAP//mQ3//8mH///ct///27X//9u1kP/btQH/27UAAAAAAP/btQD/27Ut/9u14P/b
tf//2rP//7RS//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+TAP//mQ7//7FL///K
i///2Kz//9y2///cuP//3Lj//9y4///cuP//3Lj//9qy///RnP//vGf//6Eh//+UAf//lAD//5QA//+U
AP//lAD//5QA//+UAP//lAD//5QA//+UAP//tFL//9qz///btf//27Xh/9u1Lv/btQAAAAAAAAAAAP/b
tQD/27UA/9u1e//btf3/3Lb//9Sj//+lLP//kwD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+U
AP//lAD//5MA//+YC///pSz//7RS//+/bf//xHz//8Z////BdP//uV7//6s7//+dFv//lAL//5MA//+U
AP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5MA//+lLP//1KP//9y2///btf3/27V8/9u1AP/b
tQAAAAAAAAAAAAAAAAD/27UA/9u1Fv/btb3/27X//9y3///Mj///nhr//5MA//+UAP//lAD//5QA//+U
AP//lAD//5QA//+UAP//lAD//5QA//+UAP//kwD//5MA//+UAf//lQP//5UD//+UAf//kwD//5MA//+T
AP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//kwD//54a///Mjv//3Lf//9u1///b
tb3/27UW/9u1AAAAAAAAAAAAAAAAAAAAAAD/27UA/9u1AP/btTv/27Xh/9u1///ct///x4L//5wV//+T
AP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+U
AP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+TAP//nBX//8eC///c
t///27X//9u14f/btTv/27UA/9u1AAAAAAAAAAAAAAAAAAAAAAAAAAAA/9u1AP/btQD/27Vc/9u18P/b
tf//27b//8eC//+eGv//kwD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+U
AP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5MA//+e
Gv//x4L//9u2///btf//27Xw/9u1XP/btQD/27UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/b
tQD/27UD/9u1b//btfL/27X//9y3///Mjv//pSv//5QB//+UAP//lAD//5QA//+UAP//lAD//5QA//+U
AP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+U
AP//lAH//6Ur///Mjv//3Lf//9u1///btfL/27Vv/9u1A//btQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAD/27UA/9u1Bf/btW7/27Xw/9u1///ct///1KP//7VT//+ZDv//kwD//5QA//+U
AP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+U
AP//lAD//5MA//+ZDv//tVP//9Sj///ct///27X//9u18P/btW7/27UF/9u1AAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9u1AP/btQT/27Vc/9u14v/btf//3Lb//9u0///J
iP//qzv//5gK//+TAP//kwD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+UAP//lAD//5QA//+U
AP//lAD//5MA//+TAP//mAr//6s7///JiP//27T//9y2///btf//27Xi/9u1XP/btQT/27UAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/btQD/27UA/9u1Ov/b
tb7/27X9/9u1///ct///2a///8mG//+xSv//nhv//5YF//+TAP//kwD//5MA//+TAP//kwD//5MA//+T
AP//kwD//5MA//+TAP//lgX//54b//+xSv//yYb//9mv///ct///27X//9u1/f/btb7/27U6/9u1AP/b
tQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAD/27UA/9u1AP/btRX/27V8/9u14v/btf//27X//9y3///btP//06H//8Z+//+3Wf//qzz//6Qo//+f
HP//nRb//50W//+fHf//pCj//6s8//+3Wf//xn7//9Oh///btP//3Lf//9u1///btf//27Xi/9u1fP/b
tRX/27UA/9u1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/btQD/27UC/9u1Lf/btZD/27Xh/9u1/v/btf//3Lb//9y4///c
t///2rP//9es///UpP//06D//9Og///UpP//16z//9qz///ct///3Lj//9y2///btf//27X+/9u14f/b
tZD/27Ut/9u1Av/btQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9u1AP/btQP/27Un/9u1c//b
tbz/27Xp/9u1/P/btf//27X//9u2///btv//3Lb//9y2///btv//27b//9u1///btf//27X8/9u16f/b
tbz/27Vz/9u1J//btQP/27UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAD/27UA/9u1AP/btQ3/27U2/9u1bf/btaP/27XL/9u15f/btfX/27X+/9u1/v/btfX/27Xl/9u1y//b
taP/27Vu/9u1Nv/btQ3/27UA/9u1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD/+AAAH/8AAP/gAAAH/wAA/8AAAAP/AAD/gAAAAf8AAP4A
AAAAfwAA/AAAAAA/AAD4AAAAAB8AAPgAAAAAHwAA8AAAAAAPAADgAAAAAAcAAOAAAAAABwAAwAAAAAAD
AACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAMAA
AAAAAwAA4AAAAAAHAADgAAAAAAcAAPAAAAAADwAA+AAAAAAfAAD4AAAAAB8AAPwAAAAAPwAA/gAAAAB/
AAD/gAAAAf8AAP/AAAAD/wAA/+AAAAf/AAD/+AAAH/8AAP//AAD//wAAiVBORw0KGgoAAAANSUhEUgAA
AQAAAAEACAYAAABccqhmAAAdEUlEQVR42u2dbXBc1XnHf3ZsVi1UsiXjF2L8QmQsmZiYmSTIwYD41JkN
ndrGMA0TmM6UlwKlxAQ6kDqddsJAM5A4mUyghEynJZR0kIP9wdGHdqYIbLIGJsXBgIxRwBgFW2DZkosn
Mg64H85es1rtSrt7nnvPOfc+v5lMJAF3z717///zPM957rnTTp06hRI2vQNcAJxd/HUWcG2Ff+3qOg/b
U+FvTwIjxZ8/yLfzmutzV+yYpgYQBkWRLwMuAxYW/1yvqOMiMotB4DngTTWHMFAD8JDeAbqBFUA3Ruyr
XY+pQQoYU+gDXs+30+d6QMp41AA8oHeAtZiZvYtwxV4rBWAXJlJ4Pt/OB64HlGXUAByQMcFPxWlDyLez
zfVgsoYaQAL0DnA2Jl/vxp+83Vd6MClDj0YH8aMGEBMlov86Oss3SgF4AjWD2FADEERFHytqBjGgBiBA
7wBfAu5Gw/uk6AEezLfzkuuBhI4aQIOUzPb38um6vJIsg8ADaFTQMGoAdVKc7b8GbHQ9FmUcm4Gfa1RQ
H2oANVIU/g/R3N53CsAdagS1oQYwBb0D3IoW9UKkADyRb+dh1wPxGTWAKhSFr/l9+AwCD6gRVEYNoIxi
qP80Kvy0MQis19RgPGoARTTHzwxaIygh8wbQO8A5wBYCF/7oR/DOh+bnAx/CniOf/rPDY7B3tL7jrZk3
/veVrbDoLPPz4rOg5QzXZ2xNAdiQb+c91wNxSWYNoCj8uwhsOe+VI+MFvnPI7Xgio4gM4sJWt+NpgM3A
Q1k1gkwaQCgFvsIQvHrUzOCuhV4va+bBnCb4/GxYPc/+eDGT2UJhpgzA93C/MAR9BxsL2X2no8UYQvcC
rw0hc2lBZgygOOv/2PU4SnmnGMo/8176BD8VHS1wxTkmdVh8luvRTOC2rEQDqTcA36r7+0bh2YOw4xAM
n3A9Gj9oy8Gl8+HyBXB+i+vRnCYTqwWpNgBfZn0Vfe14aAapjgZSaQC+5PrbD2QzvJciShOuXOR6JOmt
DaTOAIr77f0IRxX+aLbf9o7rK5Eu1i52HhUMArenbd/CVBlA7wBP4WhTjsIQbHlbZ/u46WiBDUudriT0
5Nu5xvV1kCIVBlAM+V/Away//QA89Zbm9knTloNrznOWHgwCF6chJQjeAFyF/Cp8P3BoBKlICYI2ABdV
fhW+nzg0gqBXCYI1gKTzfRV+GDgygmDrAsEZQNJLfPtG4dF+Le6FRkcL3NyZ6KpBkEuFQRlAksW+4TF4
er8u54XO2sWwfgm0NSXyccEVB4MxgCSLfYUheKRfw/200JaDWzoTWzoMqjgYhAEUxb817s8ZHoP7d2u4
n1Y6WuBbqxKLBtaFYALeG0BS4n9sr4b7WWHtYrixI5GP8t4EvDaAJMS/bxTue1nD/azRloNNFyVSJPTa
BLw1gCTEr7O+klA04K0JeGkAvQNsBL4f1/E111dKSag2cGe+nc2uz7Uc7wwg7pm/MAT37XZ9loqPbFoV
+0qBd5GAVwYQt/gf2B3e5ppKsqyZB/euivUjvDIBbwwgTvFryK/UQwIpgTcm4IUBxCl+rfIrjZDAKoEX
JuDcAOIUv+b7ii0x1wWcm4BTA4izt3/7AdPOqyi23NIZ29OFzp8dcGYAcYpfi32KNDEWB52awHQXH1pk
Cyp+JRB2Dpl7KwYWYrTgBCcGUNzMQ/x5fhW/EicxmsDqoiYSJ/EUII5tvIbH4Cd7VfxKMqyZBzd1xLJM
mPj2YokaQBwV/+Ex2LhLl/mUZGnLweauWEwg0ZWBxAwgjqKfil9xSUwmkGhRMMkagHjF/yd7VfyKO4ZP
mHtQmIUYrSRCIgZQLHCIil8LfooPxFQYXJhUUTD2FCCOvF/Fr/hGTH0CsdcDYjWAOPJ+Fb/iKzGYQOz1
gLhTANFmn+0HVPyKv+wcMveoILE3CcVmAMX1frFmn2irbkXxmUf6zb0qyOqilmIhlhSgd4AvAS9KHW/f
qFnuU5RQ2Nwl/ijxl/PtvCQ9zrgigB9KHWh4zDzPryghcd/L5t4VRExTpYgbgHTof/9uXetXwmP4hLl3
BYklFRBNAYpV/99JHU+37VZCJ4aVgc9KrgrMED5fsYplYUjFb8vK2XDmTOheMPGfXTq/8n+z49DEv/Ud
hOMnYc9R12cUHjuHzL0suKvQFuArUgcTiwAkG36Gx+D6Z6VOMf00z4QVs43Q5zRB56x4P69/BA6PwZ4j
xjCOnXR9Bfzn8ctFnxkQe2pQ0gDeRWjN/5u7dAffySgVfOcsI3qXHB4zptB3EF4/qoZQiY4W+F6X2OHE
GoREDKB3gO8DGyXOTPP+yjTPNGH7FefEP8Pb0j8Cz7yn0UE5wq8h25xv507bg1gbgGThT9f7J9I1FzYs
9V/01YjM4Jfvuh6JHwj3B1gXBCUM4Cngaomzub5Pl/wAWnOwfgmsW+J6JLJs3Q/PHoQ3j7keiTvacvB4
t9jhCvl2u4KglQFIdvxp6A/LmuGqpdUr9GmhfwQe7c+uEQinAlYdgrYG8CsEmn6yHvova4abO8MN8xsl
y0YgmApYRQENG4Dk7J/V0L81Z95BlzXhl9M/YrrmjmToHhBOBRqOAmxagZ+WGPljGd3W64bl8LNuFT+Y
a/CzbnNNssLwCXPvC9GwFhsygGJPsvWa//BY9vL+Zc3w75enr8Anwbol5tp0zXU9kmTY9o7YA0MLG31O
oNEI4F6JUcewoaK3tObgni/AD1a7b9zxmTlN8O2L4KGLzTVLO4IaaEiTdRuA1Oy/bzQ7u/t0zTVFn7RX
9yXpnGWuWdqjgZ1DRgsCNBQFNBIBfF1itI9mZHefG5abGU1n/fqJooG01wYEtVC3NusygGLl33rZb/uB
9Pf6t+ZMGKu5vj3rlqQ7Jdg7KraX4OqiRmum3ghAZFeSp94SOVlviUJ+rfDLkfaUQFATdWm0ZgOQnP3T
vOzXNVdD/riIUoI0msDwCTdRQD0RwNckRpfm2T8SvxIvaTUBQW3UrNWaDKB3gLMReNw3zbP/V89V8SfJ
ty8y1zxNCEYBG4uanZJaIwCRp/3SOvvf8wW4dYXrUWSPW1eYa58mBDVSk2ZrNQDrxp+0zv73fEHX911y
6fx0mYBgFFCTZqc0gGJBwbrxJ42z/w3LVfw+cOn8dPUKCGllYS3FwFoigLttR1IYSt/s3zVX1/h9Yt2S
9BQGh0+IvV5sSu3WYgDW+f+Wt0VOxhu02u8naVodENLMlNqd1AAk3kSybzRdXX8qfr9JiwnsHZV5RmAq
DU8VAVj3/T97UPS6OKU1B7d0uh6FMhW3dKajbVhIO5NquKoBFNcRrTv/0vS8/7dWaYdfCMxpMt9V6Ahp
Z/VkPQGTRQDWub/QcoYX3LBce/tDonNWOlYGhDRUVcuTGYB1+P+M2CsM3bKsWSv+IZKGlQEhDVXVckUD
kAj/01L8a83BJi36BUvo9QChYmDVNKBaBGAd/qel+HdTh595/0cfux5BGMxpMt9hyAhpqaKmqxlAt+2n
VXrNdGgsa/a30++7r8B/i7yQLf1cOj/sVEBIS92V/hhLBLBvNB2dfz6H/sdPwg9ehXtehKHfux6N/4S8
fDt8QiQNqC0C6B1gre0npSH8v2G5n6F/OXuOws074Rdvw8efuB6Nv8xpCntVQEJTlbRdKQK4zPaDQg//
W3NhVf1PfgL/ug/ufAF+m8HXbNXKuiXhFgSFNDVB25UMoMvmE975MPzwP9QmkoFj8I1d8G/7tEhYjVC/
2+ETRluWTNB2JQOwWv7bcyS5ixIHy5rDbvj55BT0vA23F+CVwL+LOOicZb7jEBHQ1gRtjzMAifw/9Oaf
mwMuFpUyeBzufQke6YcPT7oejV+E+h1LaKtc4+URgHX+H3LzT+izfyW2H4Bbn4cX33c9En8INQoQ0tY4
jZcbgFX+L7SJgTOuWup6BPEwfAL+6WXzCu7Rj1yPxg9C/a4FNDZO4+UGYJX/9wW8/Nea87fpR4rnh+DG
HdpABOa7DnFFQEBj4zR+2gB6B7jA9siHZV517IT1S1yPoD5+32CV//gfTAPR37+kDUShfecgo7FSrZdG
AMtsDxxy/h/Suj/AMctQfvcRUxvIcgNRaN85iGnstNZLDeBamyOGnP+H3Cduw9jHpoHo7hez20AU4ncv
oLXTWi81AKutv1896u6C2LIh0IKQFG+Mmgain72ZvQaiEL97Aa2d1nqpAVgVAEPN/5tnpm/prxE+OQX/
+ZZpIHotYDOvl85Z5h4ICQGtndb6dDi9AYgVOwNNAdJe+a+XwePwdy9mq4EotHtAQmuR5qMI4BLXJ+WK
K85xPQI/yVID0TXnuR6BEy6BTw3AqgMw1J5zDf8nJysNRHOawksDBDR3GXxqAFYFwAP2Tyk5YcVs1yMI
gyw0EIV2LwhobiHU/nbgSQn1CcDuBa5HEA5RA9E//DqdDUSh3QtSmosMwHoT0BDR8L9+fn3Y1Aa27U9X
A1EG74WrQSgCCHEFoHlmGFt++cjYx/DYG6aBaP//uR6NDKHVAaQ0N11iCTBEQsv5fOSNUdM38B8D6Wgg
yto90TvA2dPB7iGgUKvDoeV8vvLJKXjyt8YI9o64Ho0dod0TAtq7wDoFENinzAka/ssyeBy++YJpIPr9
H1yPpjFCuycktDcdmOX6RFyQwaJPImw/YLYpD7GBKIP3xKzpWD4FGGoPgBIfUQPRd38TbooYAgLau9Y6
BQixB2Blxoo9rnjuEPz1zrAaiEK6NyS0J7IMGBpnBrTcEzrHTobVQJS1eyOTBhBatTcNhNJAlLV7I5MG
oLghjQ1EoTMdyzbgELsAFbeUNhD5HA34joD2rtYIIFCOBb5ZR9RAdOuvwm8gCplMGkBoDR+VGEtB6y2Y
BqK7X/SngSgN90Y9ZNIAMtjw4TWfnPJnB6Ks3RuZNADFT94fMw1ED72iDURJoQageMczB00D0f8E/qbp
EFADULzk2En43h74x/8No4EoVNQAFK/59WH4r0HXo0gvM1wPQFGq0d4Mf7MClrW4Hkl6yaQB9I9kr9ob
Ek2fgeva4c8WwWcSjlH7R1yffbJk0gBCfY1ZFuiaC7d0uluPz9q9kUkDUPyjLWeEv3qe65Fki+lAj80B
OjQ/UyyYPg3+fDE8ukbFXy9r7K9Xj3UEMKcJGHV9KZQQWd4Ct62AzzW7Hkl2yWQK0HcwvDfCpokzZ5gi
X/7c5It8U9F30PUIkiWTBnA88CfpQuaSeXBTh78P3WTt3rA2gJWt4e0JsOeo6xFkj7lNpsj35bmuRzI5
Id0bK1vtjzEDeBKLTUEWneX6Mig+M30arF0M134O/iiT8WZ8CGjvyRnAiOsTcYE2A8VPaEW+rDUBASPW
nrw40Aggaw0fSeJzkW8yQrsnJLQ3A3jN5gAtZ7i+DI2hKwHx4HuRbzJCWwEQ0N5rM/LtfNA74PpUkuf1
gIo9IRBKkW8ysnZP5Nv5QCRAE+hISpxjJ8ML+Xxk+jRYvwQeviRs8R8eC2ujVSnNRQZg1Q4cKqEWfXwx
ruUt8KPV8FfLw6/wh3ovWNADQhuCSKxHuiC0nC/i41NuP//MGaa6//0uWPInrq+GDKHdC1Kai3zbas+V
UHsBspbzSXDZfLixA1pzrkciS2j3goDmBuFTA3gO2NjokS4MNAKI6gAhVqyTZm6TmfW/eLbrkcgTWv4P
Ipp7Dj5NAZ53fUKueOot1yPwm+nT4Oql5nHdNIofMnsPPA9FA8i384Ht0UJcCQDYccj1CPwlKvL95flw
xmdcjyY+QrsHJLQWab60dlsAVjd6wFDD6GMntS24nDNnGNHnz3U9kvjpHwkv/BfQWiH6oXQVwKoQ+PnZ
7i6ILVvedj0Cf7hsPvzLmmyIH8L87gW0dlrrpRGA1VOBIW/ntMvx++h8IM1FvskI8bsX0Fpf9ENpBPCm
7VFD3h9w637XI3BDFop81QjxOxfS2OvRD6cNIN9u91AQhFsHAHh6v+sRJE9WinzVCPE7l9BYvr1yBAAl
xYFG6F7g4pLIcOREeNXgRjlzBvztBenq5KuXHYfMdx4aAhobp/FyA9hlc+SQ6wAAvwiwIFQvVyyAxy6F
P13oeiRuCfW7FtDYOI2XG8BztkcPuQ7w5rH0PhSy4I/hvi/CXReGu4eDFP0j5rsODSFtjdP4OAPIt7PN
9uhXnJPkJZHn0X7XI5Bl+jT4i/Pg4a/ARW2uR+MHoX7HEtoq13ilpwGt6gChPhkYkaYoYMUsI/zrlmWz
yFeJUGd/ENHWBG1XMgCrOsDis8x73kLm/t2uR2BHVOR78GI4N9AnNeMi1O+2LSeyB+AEbVcyAOs6QOh7
7R05EeYaMWiRbzK27g+z8g9impqg7QkGIFEHuDzg5cCIn77hz847taBFvsk5PGa+01CR0FQlbVfbEchq
i7DzW8JPAwAeCaBYpEW+2gjhu6xGW85oypKKmq5mAH22nxZ6GgCmT9zn5iAt8tVG/0iYPf8RQlrqq/TH
WCIASEcaAPCTvf6lAjOna5GvVg6PhVv4ixDSUu0RQHGzAKvlwPNbwm4Kijhywr/wsTWnRb5aeaQ/3MIf
GA0JhP+Fapv+TLYr8BO2nxp6U1DErvfDXRXIMlv3hx36g5iGqmp5MgOwTgOuXCR/QVzx0zfS0yCUBfpH
wq76RwhpqKqWqxqARBoA5tXQaeH+3f7VA5SJpCHvB7F9NguT7fk51YtBrNOAtBQDwc96gDKR0PP+iKuW
ihxmUg1PagD5dh62/fS0FAMjdr0P33nZ9SiUanzn5fDzfhAr/sEUqXwtrwazrgVskHEyb1AT8JO0iB/E
NNMz1Zb/tRjAg7ajWD0vHZ2BpfjeJJQ1dhxKj/jbcmKb60yp3SkNIN/OS1huGQ5wzXkiJ+QV//wbNQEf
2HHIfBdpQUgrg0XtTkqtbwd+wHY0Vy5KXxQAagKuSZv423JiS381abZWA7CuA0A6owAwN6A2CiXP1v3p
Ej+IaqQmzdZkAMVCwmbbEaU1CgDTdKKFweT4zsvpaPQpRXD2n7L4F1FrBADwc4mRpTUKAF0dSIo0VftL
EdRGzYX7mg2gWFCw7gxMcxQAn5qAdgzKc3gsveIXnP0LtRT/IuqJAADukBhhmqMAMDfoxl367IAk/SPm
mqZR/CCqibo0Ou3UqVN1Hb13gHcB64dRv7kL9o6KnbS33LAc1i1xPYqw2bo/ffl+KW05eLxb5FCD+Xbq
eq9zvREACCwJAtzcKXLC3hMVBzUlqJ8o5E+z+AE2XSR2qLq1WXcEAHJRwAO7YeeQ2Ml7TWsObupIx1Zp
SdA/Yp7oS8NDPZPR0QLf6xI5VN2zPzQWAYBQFHBTh8iJB8GRE2bN+hsFjQYmI5r173oh/eIH+NYqsUM1
pMmGIgCQiwIe2wvb3hG7CMGgtYGJpD3XL2ftYrhRZhJsaPaHxiMAgPUSI7+xI93LgtX46RtwXZ+uFIC5
Btf1ZUv8bTkx8YOFFhuOAAB6B/gVsNp29PtGzRJPVlnWbIqinbNcjyRZ+kfMizpDfVefDZu7xJ73L+Tb
+Uqj//EMyw+/A3jR9gzObzHhUBZTATACuOsFYwRXLU1/oTDLwgdzrwuJHyx7c6wiAIDeAZ4CrpY4k+v7
YDgDhZ+paM3B+iXpqxFs3Q/PHsyu8EF0zR8sZ3+QMYBzgN9JnE3WU4FKfPVcszV0qOlB/wg88x788l3X
I/EDwdAf4LP5dt6zOYC1AQD0DvB9YKPEGWV1VWAqmmea1OCa82BOk+vRTM7hMfOc/tP7s7GUVyuCVX+A
zfl27rQ9iIgBgNyyIGSnTbhRmmfCitnQvcBEBq4N4fCYmen7DsLrR+HYSddXyD8EG37A7NB1se3sD7IG
sBbYKnGs4TG4/lmRYWWCUkOY0xR/utA/YkS/54j534Hjrq+A/zx+ObTJGfVtEjt2g6ABgNyyIEBhCO7b
LTa0TLJyNpw50xhDOdVWGiptb9Z3EI6fhD1HXZ9RmGxaJbbJJwgU/kqRNgCxgiBoPUAJnzXz4N5Vooe0
LvyVYtMJOIHiwG6TOt6NHel6qYiSLTpaxMV/m6T4QTgCiJAsCA6PmaVB7Q9QQqItZ5b8BPP+hvv9J0M0
AihB5DkBMBdQ8HlpRUmETReJih8ENVVKLAZQ3JNMLBU4v8UUUhQlBDatEm32ARP617zPXz3EkgJESK4K
AGw/oG/nVfzmlk6xzT0jRKv+5cSVAkRsQOC1YhFXLhJ7Z7qiiLNmnrj4BzEaio1YDaBYsbxd8pj3rlIT
UPwjhuU+gNulq/7lxB0BkG9nG0KvFotQE1B8Iibx9xS1Eyux1gBKkVwajMjSpqKKn8Qk/liW/CoRewRQ
wsUI1gPAbCqaxe3EFD9oy8Wyse0gRiuJkJgBxFEPaGsqNluoCSgJE0OjT0TseX8pSUYAUT3A+i3DpUQm
oDUBJSnWzItN/JuTyPtLSawGUIrkNmKlaE1AiZuYcn4wRb9rkj4fJwYA8RQFQU1AiY8YxZ9Y0a+cRFOA
MsSLgqBLhEo8xCl+Eiz6leMsAgD5/QNK0bZhRYoY2ntLEX2+v15cRgDRysC6OI595SJ9gEixZ9OqWMW/
zqX4wXEEECG5n2A5+0bhvpd1PwGlPtpy5pFe4af6SlmXdMW/El4YAMRrAsNj5lXTutOwUgsdLeatvTEs
80V4IX7wyAAgXhMAXSFQpibGYl+EN+IHzwwAoHeAW4Efx3V83W1YqYbw7r2VENvOWwrvDADiaxSK0H0G
lVJibOstxUmjz1R4aQAQfyQAuu24Iv66rmp4N/NHeGsAEH9NAHSVIKskUOWP8CrnL8drA4BkTAA0GsgS
Cc364Ln4IQADgORMYN8oPNqvy4VppaMFbu5MZNaHAMQPgRgAnDaBHxHDA0TlbD8AT72laUFaaMuZ16rH
2NFXyiDmmf5trs+7FoIxADj97MALJGACw2Pm/faaFoTN2sWwfknsFf4Isdd2J0VQBgCnTWALgu8bmAxN
C8Ik4XAfoABsCEn8EKABRMTdK1COpgVhkHC4H+HlGn8tBGsAkEyvQDlqBH7iSPjg8Rp/LQRtAJBscbAU
NQI/cCj8oIp91QjeACDZ4mA5agRucCh8CLDYV41UGEBE0nWBUgpDsOVtLRbGTUcLbFga+0M7kxFsvl+J
VBkAuEsJIvaNwrMHdflQmrWL4fIFiVb1y0lFyF9O6gwAkl8qrMb2A/DMexoVNEpHC1xxjrMwv5Qgl/hq
IZUGEOFilaASUVSw45DWCqaiLQeXznc+25cSdJV/KlJtAAC9A3wJ+CGOo4EINYOJeCh6MLP+Hfl2XnI9
kDhJvQFE+BINlPLOh7DnSDbThCi8X9kKi89yPZoJpHrWLyUzBgD+1AaqURiCvoNweCx9htDRAnOaoHuB
0wr+VKQ2169GpgwgohgN3IujlYJaKQzBq0eNIYS2memaeUbwn5/tteAjBoEHsjLrl5JJA4DT0cBdwEbX
Y6mHV47AgWLqAO6NIXoN28pWWHQWXNjqdjwNsBl4KEuzfimZNYAI39OCWhn9yNQUYLxBRNRrFOXvV4wE
DiZnbznD9Rlbk7lwvxKZN4AI31YLlNjIRHW/VtQAyigawdN4Xh9Q6mYQWK/CH48aQBVCKRQqU5LZAl8t
qAFMQdEIvo6mBqFRAJ5Q4U+OGkCNaI0gGDTHrwM1gDopGsHXCGz5MANsBn6uwq8PNYAG6R3gbMzeA1on
cMcg8ADmGf0PXA8mRNQABChGBXfjaDOSDNIDPKizvT1qAIKURAVaNJSnADyBzvaiqAHEhJqBCCr6mFED
SIASM+hG04Sp6AH6UNEnghqAA4r7Fl4GdKHRQQHYBTyXtv32QkANwAMyZggqeI9QA/CQ3gG6gRWYlGEh
4ZpCAbNU9yTwZr6d11wPSBmPGkAg9A5wAbAMEylEfQe+1BN6iv8/CDwHPK/5exioAaSAojmcXfx1FnBt
hX+tXrPoKfs9EvdI8ffXVOTh8//e05wCkY3eQAAAAABJRU5ErkJggg==
</value>
</data>
</root>

View File

@@ -1,110 +0,0 @@
using System;
using System.Runtime.InteropServices;
public class MediaInfo : IDisposable
{
IntPtr Handle;
static bool Loaded;
public MediaInfo(string sourcepath)
{
if (!Loaded)
{
if (LoadLibrary("MediaInfo.dll") == IntPtr.Zero)
throw new Exception("Failed to load MediaInfo.dll.");
Loaded = true;
}
Handle = MediaInfo_New();
MediaInfo_Open(Handle, sourcepath);
}
public string GetInfo(MediaInfoStreamKind streamKind, string parameter)
{
return Marshal.PtrToStringUni(MediaInfo_Get(Handle, streamKind, 0, parameter, MediaInfoInfoKind.Text, MediaInfoInfoKind.Name));
}
public int GetCount(MediaInfoStreamKind streamKind) => MediaInfo_Count_Get(Handle, streamKind, -1);
public string GetVideo(int streamNumber, string parameter)
{
return Marshal.PtrToStringUni(MediaInfo_Get(Handle, MediaInfoStreamKind.Video, streamNumber, parameter, MediaInfoInfoKind.Text, MediaInfoInfoKind.Name));
}
public string GetAudio(int streamNumber, string parameter)
{
return Marshal.PtrToStringUni(MediaInfo_Get(Handle, MediaInfoStreamKind.Audio, streamNumber, parameter, MediaInfoInfoKind.Text, MediaInfoInfoKind.Name));
}
public string GetText(int streamNumber, string parameter)
{
return Marshal.PtrToStringUni(MediaInfo_Get(Handle, MediaInfoStreamKind.Text, streamNumber, parameter, MediaInfoInfoKind.Text, MediaInfoInfoKind.Name));
}
bool Disposed;
public void Dispose()
{
if (!Disposed)
{
Disposed = true;
MediaInfo_Close(Handle);
MediaInfo_Delete(Handle);
}
}
~MediaInfo() { Dispose(); }
[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
static extern IntPtr LoadLibrary(string path);
[DllImport("MediaInfo.dll")]
static extern IntPtr MediaInfo_New();
[DllImport("MediaInfo.dll")]
static extern void MediaInfo_Delete(IntPtr handle);
[DllImport("MediaInfo.dll", CharSet = CharSet.Unicode)]
static extern int MediaInfo_Open(IntPtr handle, string fileName);
[DllImport("MediaInfo.dll")]
static extern int MediaInfo_Close(IntPtr handle);
[DllImport("MediaInfo.dll", CharSet = CharSet.Unicode)]
static extern IntPtr MediaInfo_Get(IntPtr handle,
MediaInfoStreamKind streamKind,
int streamNumber,
string parameter,
MediaInfoInfoKind kindOfInfo,
MediaInfoInfoKind kindOfSearch);
[DllImport("MediaInfo.dll", CharSet = CharSet.Unicode)]
static extern int MediaInfo_Count_Get(IntPtr handle,
MediaInfoStreamKind streamKind,
int streamNumber);
}
public enum MediaInfoStreamKind
{
General,
Video,
Audio,
Text,
Other,
Image,
Menu,
Max,
}
public enum MediaInfoInfoKind
{
Name,
Text,
Measure,
Options,
NameText,
MeasureText,
Info,
HowTo
}

View File

@@ -1,440 +0,0 @@
using System;
using System.Linq;
using System.ComponentModel;
using System.Drawing.Drawing2D;
using System.Drawing.Text;
using Microsoft.Win32;
using System.Windows.Forms;
using System.Drawing;
public class ContextMenuStripEx : ContextMenuStrip
{
public ContextMenuStripEx()
{
}
public ContextMenuStripEx(IContainer container) : base(container)
{
}
protected override void OnHandleCreated(EventArgs e)
{
base.OnHandleCreated(e);
Renderer = new ToolStripRendererEx();
}
public MenuItem Add(string path)
{
return Add(path, null);
}
public MenuItem Add(string path, Action action, bool enabled = true)
{
MenuItem ret = MenuItem.Add(Items, path, action);
if (ret == null) return null;
ret.Enabled = enabled;
return ret;
}
}
public class MenuItem : ToolStripMenuItem
{
public Action Action { get; set; }
public MenuItem()
{
}
public MenuItem(string text) : base(text)
{
}
public MenuItem(string text, Action action) : base(text)
{
Action = action;
}
protected override void OnClick(EventArgs e)
{
Application.DoEvents();
Action?.Invoke();
base.OnClick(e);
}
public static MenuItem Add(ToolStripItemCollection items, string path, Action action)
{
string[] a = path.Split(new[] { " > ", " | " }, StringSplitOptions.RemoveEmptyEntries);
var itemsCollection = items;
for (int x = 0; x < a.Length; x++)
{
bool found = false;
foreach (var i in itemsCollection.OfType<ToolStripMenuItem>())
{
if (x < a.Length - 1)
{
if (i.Text == a[x] + " ")
{
found = true;
itemsCollection = i.DropDownItems;
}
}
}
if (!found)
{
if (x == a.Length - 1)
{
if (a[x] == "-")
itemsCollection.Add(new ToolStripSeparator());
else
{
MenuItem item = new MenuItem(a[x] + " ", action);
itemsCollection.Add(item);
itemsCollection = item.DropDownItems;
return item;
}
}
else
{
MenuItem item = new MenuItem();
item.Text = a[x] + " ";
itemsCollection.Add(item);
itemsCollection = item.DropDownItems;
}
}
}
return null;
}
public override Size GetPreferredSize(Size constrainingSize)
{
Size size = base.GetPreferredSize(constrainingSize);
size.Height = Convert.ToInt32(Font.Height * 1.4);
return size;
}
public void CloseAll(object item)
{
if (item is ToolStripItem)
CloseAll(((ToolStripItem)item).Owner);
if (item is ToolStripDropDown)
{
var d = (ToolStripDropDown)item;
d.Close();
CloseAll(d.OwnerItem);
}
}
}
public class ToolStripRendererEx : ToolStripSystemRenderer
{
public static Color ColorForeground { get; set; } = Color.Black;
public static Color ColorTheme { get; set; } = Color.Empty;
public static Color ColorChecked { get; set; }
public static Color ColorBorder { get; set; }
public static Color ColorTop { get; set; }
public static Color ColorSelection { get; set; }
public static Color ColorBackground { get; set; }
public static Color ColorToolStrip1 { get; set; }
public static Color ColorToolStrip2 { get; set; }
public static Color ColorToolStrip3 { get; set; }
public static Color ColorToolStrip4 { get; set; }
int TextOffset;
public ToolStripRendererEx()
{
var argb = Convert.ToInt32(Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM", "ColorizationColor", 0));
if (argb == 0)
argb = Color.LightBlue.ToArgb();
if (ColorTheme == Color.Empty)
InitColors(Color.FromArgb(argb));
else
InitColors(ColorTheme);
}
public static void InitColors(Color c)
{
ColorBorder = HSLColor.Convert(c).ToColorSetLuminosity(100);
ColorChecked = HSLColor.Convert(c).ToColorSetLuminosity(160);
ColorSelection = HSLColor.Convert(c).ToColorSetLuminosity(180);
ColorBackground = HSLColor.Convert(c).ToColorSetLuminosity(210);
ColorTop = HSLColor.Convert(c).ToColorSetLuminosity(240);
if (ColorTheme == Color.Black)
{
ColorBorder = Color.White;
ColorBackground = Color.FromArgb(50, 50, 50);
ColorSelection = Color.FromArgb(80, 80, 80);
ColorForeground = Color.White;
ColorChecked = Color.FromArgb(90, 90, 90);
}
ColorToolStrip1 = ControlPaint.LightLight(ControlPaint.LightLight(ControlPaint.Light(ColorBorder, 1)));
ColorToolStrip2 = ControlPaint.LightLight(ControlPaint.LightLight(ControlPaint.Light(ColorBorder, 0.7f)));
ColorToolStrip3 = ControlPaint.LightLight(ControlPaint.LightLight(ControlPaint.Light(ColorBorder, 0.1f)));
ColorToolStrip4 = ControlPaint.LightLight(ControlPaint.LightLight(ControlPaint.Light(ColorBorder, 0.4f)));
}
protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
{
Rectangle r = e.AffectedBounds;
r.Inflate(-1, -1);
ControlPaint.DrawBorder(e.Graphics, r, ColorBackground, ButtonBorderStyle.Solid);
ControlPaint.DrawBorder(e.Graphics, e.AffectedBounds, ColorBorder, ButtonBorderStyle.Solid);
}
protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
{
e.Graphics.TextRenderingHint = TextRenderingHint.AntiAlias;
if (e.Item is ToolStripMenuItem && !(e.Item.Owner is MenuStrip))
{
Rectangle rect = e.TextRectangle;
var dropDown = e.ToolStrip as ToolStripDropDownMenu;
if (dropDown == null || dropDown.ShowImageMargin || dropDown.ShowCheckMargin)
TextOffset = Convert.ToInt32(e.Item.Height * 1.1);
else
TextOffset = Convert.ToInt32(e.Item.Height * 0.2);
e.TextColor = ColorForeground;
e.TextRectangle = new Rectangle(TextOffset, Convert.ToInt32((e.Item.Height - rect.Height) / 2.0), rect.Width, rect.Height);
}
base.OnRenderItemText(e);
}
protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e)
{
if (!(e.ToolStrip is ToolStripDropDownMenu) && !(e.ToolStrip.LayoutStyle == ToolStripLayoutStyle.VerticalStackWithOverflow))
{
Rectangle r = new Rectangle(-1, -1, e.AffectedBounds.Width, e.AffectedBounds.Height);
using (SolidBrush b = new SolidBrush(ColorToolStrip2))
e.Graphics.FillRectangle(b, r);
}
}
protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e)
{
Rectangle rect = new Rectangle(Point.Empty, e.Item.Size);
if (!(e.Item.Owner is MenuStrip))
e.Graphics.Clear(ColorBackground);
if (e.Item.Selected && e.Item.Enabled)
{
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
rect = new Rectangle(rect.X + 2, rect.Y, rect.Width - 4, rect.Height - 1);
rect.Inflate(-1, -1);
using (SolidBrush b = new SolidBrush(ColorSelection))
e.Graphics.FillRectangle(b, rect);
}
}
protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e)
{
if (e.Direction == ArrowDirection.Down) throw new NotImplementedException();
float x1 = e.Item.Width - e.Item.Height * 0.6f;
float y1 = e.Item.Height * 0.25f;
float x2 = x1 + e.Item.Height * 0.25f;
float y2 = e.Item.Height / 2f;
float x3 = x1;
float y3 = e.Item.Height * 0.75f;
e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
using (Brush b = new SolidBrush(ColorForeground))
{
using (Pen p = new Pen(b, Control.DefaultFont.Height / 20f))
{
e.Graphics.DrawLine(p, x1, y1, x2, y2);
e.Graphics.DrawLine(p, x2, y2, x3, y3);
}
}
}
protected override void OnRenderItemCheck(ToolStripItemImageRenderEventArgs e)
{
if (e.Item.GetType() != typeof(MenuItem))
return;
MenuItem item = e.Item as MenuItem;
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
if (!item.Checked)
return;
Rectangle rect = new Rectangle(Point.Empty, e.Item.Size);
rect = new Rectangle(rect.X + 2, rect.Y, rect.Height - 1, rect.Height - 1);
rect.Inflate(-1, -1);
using (Brush brush = new SolidBrush(ColorChecked))
e.Graphics.FillRectangle(brush, rect);
float ellipseWidth = rect.Height / 3f;
RectangleF rectF = new RectangleF(rect.X + rect.Height / 2f - ellipseWidth / 2f,
rect.Y + rect.Height / 2f - ellipseWidth / 2f,
ellipseWidth,
ellipseWidth);
using (Brush brush = new SolidBrush(ColorForeground))
e.Graphics.FillEllipse(brush, rectF);
}
protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e)
{
e.Graphics.Clear(ColorBackground);
int top = e.Item.Height / 2;
top -= 1;
int offset = Convert.ToInt32(e.Item.Font.Height * 0.7);
using (Pen p = new Pen(ColorBorder))
e.Graphics.DrawLine(p,
new Point(offset, top),
new Point(e.Item.Width - offset, top));
}
}
public struct HSLColor
{
public HSLColor(Color color) : this()
{
SetRGB(color.R, color.G, color.B);
}
public HSLColor(int h, int s, int l) : this()
{
Hue = h;
Saturation = s;
Luminosity = l;
}
double _Hue;
public int Hue {
get => System.Convert.ToInt32(_Hue * 240);
set => _Hue = CheckRange(value / 240.0);
}
double _Saturation;
public int Saturation {
get => System.Convert.ToInt32(_Saturation * 240);
set => _Saturation = CheckRange(value / 240.0);
}
double _Luminosity;
public int Luminosity {
get => System.Convert.ToInt32(_Luminosity * 240);
set => _Luminosity = CheckRange(value / 240.0);
}
double CheckRange(double value)
{
if (value < 0)
value = 0;
else if (value > 1)
value = 1;
return value;
}
public Color ToColorAddLuminosity(int luminosity)
{
Luminosity += luminosity;
return ToColor();
}
public Color ToColorSetLuminosity(int luminosity)
{
Luminosity = luminosity;
return ToColor();
}
public Color ToColor()
{
double r = 0, g = 0, b = 0;
if (_Luminosity != 0)
{
if (_Saturation == 0)
{
b = _Luminosity;
g = _Luminosity;
r = _Luminosity;
}
else
{
double temp2 = GetTemp2(this);
double temp1 = 2.0 * _Luminosity - temp2;
r = GetColorComponent(temp1, temp2, _Hue + 1.0 / 3.0);
g = GetColorComponent(temp1, temp2, _Hue);
b = GetColorComponent(temp1, temp2, _Hue - 1.0 / 3.0);
}
}
return Color.FromArgb(
System.Convert.ToInt32(255 * r),
System.Convert.ToInt32(255 * g),
System.Convert.ToInt32(255 * b));
}
static double GetColorComponent(double temp1, double temp2, double temp3)
{
temp3 = MoveIntoRange(temp3);
if (temp3 < 1 / 6.0)
return temp1 + (temp2 - temp1) * 6.0 * temp3;
else if (temp3 < 0.5)
return temp2;
else if (temp3 < 2 / 3.0)
return temp1 + ((temp2 - temp1) * (2 / 3.0 - temp3) * 6);
else
return temp1;
}
static double MoveIntoRange(double temp3)
{
if (temp3 < 0)
temp3 += 1;
else if (temp3 > 1)
temp3 -= 1;
return temp3;
}
static double GetTemp2(HSLColor hslColor)
{
double temp2;
if (hslColor._Luminosity < 0.5)
temp2 = hslColor._Luminosity * (1.0 + hslColor._Saturation);
else
temp2 = hslColor._Luminosity + hslColor._Saturation - (hslColor._Luminosity * hslColor._Saturation);
return temp2;
}
public static HSLColor Convert(Color c)
{
HSLColor r = new HSLColor();
r._Hue = c.GetHue() / 360.0;
r._Luminosity = c.GetBrightness();
r._Saturation = c.GetSaturation();
return r;
}
public void SetRGB(int red, int green, int blue)
{
HSLColor hc = HSLColor.Convert(Color.FromArgb(red, green, blue));
_Hue = hc._Hue;
_Saturation = hc._Saturation;
_Luminosity = hc._Luminosity;
}
}

View File

@@ -1,296 +0,0 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Windows.Forms;
using Microsoft.Win32;
namespace mpvnet
{
public class App
{
public static string[] VideoTypes { get; } = "mkv mp4 mpg avi mov webm vob wmv flv avs 264 h264 asf webm mpeg mpv y4m avc hevc 265 h265 m2v m2ts vpy mts m4v".Split(" ".ToCharArray());
public static string[] AudioTypes { get; } = "mp3 mp2 ac3 ogg opus flac wav w64 m4a dts dtsma dtshr dtshd eac3 thd thd+ac3 mka aac mpa".Split(" ".ToCharArray());
public static bool IsDarkMode {
get {
string darkMode = MainForm.Instance.MpvNetDarkMode;
return (darkMode == "system" && Sys.IsDarkTheme) || darkMode == "always";
}
}
}
public class Sys
{
public static bool IsDarkTheme {
get {
object value = Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize", "AppsUseLightTheme", 1);
if (value is null) value = 1;
return (int)value == 0;
}
}
public static bool IsDirectoryWritable(string dirPath)
{
try
{
using (FileStream fs = File.Create(Path.Combine(dirPath,
Path.GetRandomFileName()), 1, FileOptions.DeleteOnClose))
{ }
return true;
}
catch
{ }
return false;
}
}
public class StringLogicalComparer : IComparer, IComparer<string>
{
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
public static extern int StrCmpLogical(string x, string y);
int IComparer_Compare(object x, object y) => StrCmpLogical(x.ToString(), y.ToString());
int IComparer.Compare(object x, object y) => IComparer_Compare(x, y);
int IComparerOfString_Compare(string x, string y) => StrCmpLogical(x, y);
int IComparer<string>.Compare(string x, string y) => IComparerOfString_Compare(x, y);
}
public class FileAssociation
{
static string ExePath = Application.ExecutablePath;
static string ExeFilename = Path.GetFileName(Application.ExecutablePath);
static string ExeFilenameNoExt = Path.GetFileNameWithoutExtension(Application.ExecutablePath);
static string[] Types;
public static void Register(string[] types)
{
Types = types;
RegistryHelp.SetObject(@"HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\" + ExeFilename, null, ExePath);
RegistryHelp.SetObject($"HKCR\\Applications\\{ExeFilename}", "FriendlyAppName", "mpv.net media player");
RegistryHelp.SetObject($"HKCR\\Applications\\{ExeFilename}\\shell\\open\\command", null, $"\"{ExePath}\" \"%1\"");
RegistryHelp.SetObject(@"HKLM\SOFTWARE\Clients\Media\mpv\Capabilities", "ApplicationDescription", "mpv.net media player");
RegistryHelp.SetObject(@"HKLM\SOFTWARE\Clients\Media\mpv\Capabilities", "ApplicationName", "mpv.net");
RegistryHelp.SetObject($"HKCR\\SystemFileAssociations\\video\\OpenWithList\\{ExeFilename}", null, "");
RegistryHelp.SetObject($"HKCR\\SystemFileAssociations\\audio\\OpenWithList\\{ExeFilename}", null, "");
foreach (string ext in Types)
{
RegistryHelp.SetObject($"HKCR\\Applications\\{ExeFilename}\\SupportedTypes", "." + ext, "");
RegistryHelp.SetObject($"HKCR\\" + "." + ext, null, ExeFilenameNoExt + "." + ext);
RegistryHelp.SetObject($"HKCR\\" + "." + ext + "\\OpenWithProgIDs", ExeFilenameNoExt + "." + ext, "");
if (App.VideoTypes.Contains(ext))
RegistryHelp.SetObject($"HKCR\\" + "." + ext, "PerceivedType", "video");
if (App.AudioTypes.Contains(ext))
RegistryHelp.SetObject($"HKCR\\" + "." + ext, "PerceivedType", "audio");
RegistryHelp.SetObject($"HKCR\\" + ExeFilenameNoExt + "." + ext + "\\shell\\open", null, "Play with " + Application.ProductName);
RegistryHelp.SetObject($"HKCR\\" + ExeFilenameNoExt + "." + ext + "\\shell\\open\\command", null, $"\"{ExePath}\" \"%1\"");
RegistryHelp.SetObject(@"HKLM\SOFTWARE\Clients\Media\mpv.net\Capabilities\FileAssociations", "." + ext, ExeFilenameNoExt + "." + ext);
}
}
public static void Unregister()
{
RegistryHelp.RemoveKey(@"HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\" + ExeFilename);
RegistryHelp.RemoveKey($"HKCR\\Applications\\{ExeFilename}");
RegistryHelp.RemoveKey(@"HKLM\SOFTWARE\Clients\Media\mpv.net");
RegistryHelp.RemoveKey($"HKCR\\SystemFileAssociations\\video\\OpenWithList\\{ExeFilename}");
RegistryHelp.RemoveKey($"HKCR\\SystemFileAssociations\\audio\\OpenWithList\\{ExeFilename}");
foreach (string id in Registry.ClassesRoot.GetSubKeyNames())
{
if (id.StartsWith(ExeFilenameNoExt + "."))
Registry.ClassesRoot.DeleteSubKeyTree(id);
RegistryHelp.RemoveValue($"HKCR\\Software\\Classes\\" + id + "\\OpenWithProgIDs", ExeFilenameNoExt + id);
RegistryHelp.RemoveValue($"HKLM\\Software\\Classes\\" + id + "\\OpenWithProgIDs", ExeFilenameNoExt + id);
}
}
}
public class RegistryHelp
{
public static void SetObject(string path, string name, object value)
{
using (RegistryKey rk = GetRootKey(path).CreateSubKey(path.Substring(5), RegistryKeyPermissionCheck.ReadWriteSubTree))
rk.SetValue(name, value);
}
public static string GetString(string path, string name)
{
object val = GetObject(path, name);
if (val == null || !(val is string)) return "";
return val.ToString();
}
public static object GetObject(string path, string name)
{
using (RegistryKey rk = GetRootKey(path).OpenSubKey(path.Substring(5)))
if (rk != null)
return rk.GetValue(name, "");
else
return null;
}
public static void RemoveKey(string path)
{
GetRootKey(path).DeleteSubKeyTree(path.Substring(5), false);
}
public static void RemoveValue(string path, string name)
{
using (RegistryKey rk = GetRootKey(path).OpenSubKey(path.Substring(5), true))
if (!(rk is null))
rk.DeleteValue(name, false);
}
static RegistryKey GetRootKey(string path)
{
switch (path.Substring(0, 4))
{
case "HKLM": return Registry.LocalMachine;
case "HKCU": return Registry.CurrentUser;
case "HKCR": return Registry.ClassesRoot;
default: throw new Exception();
}
}
}
public class MediaTrack
{
public string Text { get; set; }
public string Type { get; set; }
public int ID { get; set; }
}
public class CommandItem : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public string Path { get; set; } = "";
public string Command { get; set; } = "";
public CommandItem() { }
public CommandItem(SerializationInfo info, StreamingContext context) { }
private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private string _Input = "";
public string Input {
get => _Input;
set {
_Input = value;
NotifyPropertyChanged();
}
}
public static ObservableCollection<CommandItem> GetItems(string content)
{
var items = new ObservableCollection<CommandItem>();
if (!string.IsNullOrEmpty(content))
{
foreach (string line in content.Split('\r', '\n'))
{
string val = line.Trim();
if (val.StartsWith("#")) continue;
if (!val.Contains(" ")) continue;
CommandItem item = new CommandItem();
item.Input = val.Substring(0, val.IndexOf(" "));
if (item.Input == "_") item.Input = "";
val = val.Substring(val.IndexOf(" ") + 1);
if (val.Contains("#menu:"))
{
item.Path = val.Substring(val.IndexOf("#menu:") + 6).Trim();
val = val.Substring(0, val.IndexOf("#menu:"));
if (item.Path.Contains(";"))
item.Path = item.Path.Substring(item.Path.IndexOf(";") + 1).Trim();
}
item.Command = val.Trim();
if (item.Command == "")
continue;
if (item.Command.ToLower() == "ignore")
item.Command = "";
MigrateCommands(item);
items.Add(item);
}
}
return items;
}
private static ObservableCollection<CommandItem> _Items;
public static ObservableCollection<CommandItem> Items {
get {
if (_Items is null)
_Items = GetItems(File.ReadAllText(mp.InputConfPath));
return _Items;
}
}
public static void MigrateCommands(CommandItem item)
{
switch (item.Command)
{
case "script-message mpv.net show-prefs":
item.Command = "script-message mpv.net show-conf-editor";
break;
case "script-message mpv.net show-keys":
item.Command = "script-message mpv.net show-input-editor";
break;
case "script-message mpv.net history":
item.Command = "script-message mpv.net show-history";
break;
case "script-message mpv.net open-config-folder":
item.Command = "script-message open-conf-folder";
break;
}
}
}
public class CursorHelp
{
static bool IsVisible = true;
public static void Show()
{
if (!IsVisible)
{
Cursor.Show();
IsVisible = true;
}
}
public static void Hide()
{
if (IsVisible)
{
Cursor.Hide();
IsVisible = false;
}
}
public static bool IsPosDifferent(Point screenPos)
{
return
Math.Abs(screenPos.X - Control.MousePosition.X) > 10 ||
Math.Abs(screenPos.Y - Control.MousePosition.Y) > 10;
}
}
}

View File

@@ -1,74 +0,0 @@
using System;
using System.Drawing;
using System.Runtime.InteropServices;
namespace mpvnet
{
public class Native
{
[DllImport("kernel32.dll")]
public static extern IntPtr LoadLibrary(string dllToLoad);
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string lclassName, string windowTitle);
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern IntPtr PostMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll")]
public static extern void ReleaseCapture();
[DllImport("user32.dll")]
public static extern bool AdjustWindowRect(ref RECT lpRect, uint dwStyle, bool bMenu);
[DllImport("user32.dll", SetLastError = true)]
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, int uFlags);
[DllImport("user32.dll", EntryPoint = "GetWindowLong")]
private static extern IntPtr GetWindowLong32(IntPtr hWnd, int nIndex);
[DllImport("user32.dll", EntryPoint = "GetWindowLongPtr")]
private static extern IntPtr GetWindowLong64(IntPtr hWnd, int nIndex);
public static IntPtr GetWindowLongPtr(IntPtr hWnd, int nIndex)
{
if (IntPtr.Size == 8)
return GetWindowLong64(hWnd, nIndex);
else
return GetWindowLong32(hWnd, nIndex);
}
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
public RECT(Rectangle r)
{
Left = r.Left;
Top = r.Top;
Right = r.Right;
Bottom = r.Bottom;
}
public RECT(int left, int top, int right, int bottom)
{
Left = left;
Top = top;
Right = right;
Bottom = bottom;
}
public Rectangle ToRectangle() { return Rectangle.FromLTRB(Left, Top, Right, Bottom); }
public Size Size => new Size(Right - Left, Bottom - Top);
public int Width => Right - Left;
public int Height => Bottom - Top;
}
}
}

View File

@@ -1,38 +0,0 @@
using System;
namespace mpvnet
{
public static class NativeHelp
{
public static int GetResizeBorder(int v)
{
switch (v)
{
case 1 /* WMSZ_LEFT */ : return 3;
case 3 /* WMSZ_TOP */ : return 2;
case 2 /* WMSZ_RIGHT */ : return 3;
case 6 /* WMSZ_BOTTOM */ : return 2;
case 4 /* WMSZ_TOPLEFT */ : return 1;
case 5 /* WMSZ_TOPRIGHT */ : return 1;
case 7 /* WMSZ_BOTTOMLEFT */ : return 3;
case 8 /* WMSZ_BOTTOMRIGHT */: return 3;
default: return -1;
}
}
public static void SubtractWindowBorders(IntPtr hwnd, ref Native.RECT rc)
{
var b = new Native.RECT(0, 0, 0, 0);
AddWindowBorders(hwnd, ref b);
rc.Left -= b.Left;
rc.Top -= b.Top;
rc.Right -= b.Right;
rc.Bottom -= b.Bottom;
}
public static void AddWindowBorders(IntPtr hwnd, ref Native.RECT rc)
{
Native.AdjustWindowRect(ref rc, (uint)Native.GetWindowLongPtr(hwnd, -16 /* GWL_STYLE */), false);
}
}
}

View File

@@ -1,127 +0,0 @@
using System;
using System.IO;
using System.Threading;
using System.Management.Automation.Runspaces;
using System.Reflection;
using System.Threading.Tasks;
namespace mpvnet
{
public class PowerShellScript
{
public static object Execute(string code, string[] parameters)
{
using (Runspace runspace = RunspaceFactory.CreateRunspace())
{
runspace.ApartmentState = ApartmentState.STA;
runspace.ThreadOptions = PSThreadOptions.UseCurrentThread;
runspace.Open();
using (Pipeline pipeline = runspace.CreatePipeline())
{
pipeline.Commands.AddScript(
@"Using namespace mpvnet;
Using namespace System;
[System.Reflection.Assembly]::LoadWithPartialName(""mpvnet"")");
pipeline.Commands.AddScript(code);
try
{
var ret = pipeline.Invoke(parameters);
if (ret.Count > 0)
return ret[0];
}
catch (Exception ex)
{
try
{
using (Pipeline pipeline2 = runspace.CreatePipeline())
{
pipeline2.Commands.AddScript("$PSVersionTable.PSVersion.Major * 10 +" +
"$PSVersionTable.PSVersion.Minor");
if (Convert.ToInt32(pipeline2.Invoke()[0].ToString()) < 51)
throw new Exception();
}
}
catch (Exception ex2)
{
Msg.ShowError("PowerShell Setup Problem\n\nEnsure you have at least PowerShell 5.1 installed.", ex2.ToString());
return null;
}
Msg.ShowException(ex);
}
}
}
return null;
}
public static void Init(string filePath)
{
foreach (var eventInfo in typeof(mp).GetEvents())
{
if (eventInfo.Name.ToLower() ==
Path.GetFileNameWithoutExtension(filePath).ToLower().Replace("-", ""))
{
PowerShellEventObject eventObject = new PowerShellEventObject();
MethodInfo mi;
eventObject.FilePath = filePath;
if (eventInfo.EventHandlerType == typeof(Action))
{
mi = eventObject.GetType().GetMethod(nameof(PowerShellEventObject.Invoke));
}
else if (eventInfo.EventHandlerType == typeof(Action<EndFileEventMode>))
{
mi = eventObject.GetType().GetMethod(nameof(PowerShellEventObject.InvokeEndFileEventMode));
}
else if (eventInfo.EventHandlerType == typeof(Action<string[]>))
{
mi = eventObject.GetType().GetMethod(nameof(PowerShellEventObject.InvokeStrings));
}
else
throw new Exception();
eventObject.EventInfo = eventInfo;
Delegate handler = Delegate.CreateDelegate(eventInfo.EventHandlerType, eventObject, mi);
eventObject.Delegate = handler;
eventInfo.AddEventHandler(eventObject, handler);
return;
}
}
Task.Run(() =>
{
PowerShellScript.Execute(File.ReadAllText(filePath), new string[] {});
});
}
}
public class PowerShellEventObject
{
public EventInfo EventInfo { get; set; }
public Delegate Delegate { get; set; }
public string FilePath { get; set; }
public void Invoke()
{
Task.Run(() => { PowerShellScript.Execute(File.ReadAllText(FilePath), new string[] { }); });
}
public void InvokeEndFileEventMode(EndFileEventMode arg)
{
Task.Run(() =>
{
PowerShellScript.Execute(File.ReadAllText(FilePath), new string[] { arg.ToString() });
});
}
public void InvokeStrings(string[] args)
{
Task.Run(() => {
PowerShellScript.Execute(File.ReadAllText(FilePath), args);
});
}
}
}

View File

@@ -1,33 +0,0 @@
using System;
using System.Windows.Forms;
namespace mpvnet
{
static class Program
{
[STAThread]
static void Main()
{
try
{
string[] args = Environment.GetCommandLineArgs();
if (args.Length == 3 && args[1] == "--reg-file-assoc")
{
if (args[2] == "audio") FileAssociation.Register(App.AudioTypes);
if (args[2] == "video") FileAssociation.Register(App.VideoTypes);
if (args[2] == "unreg") FileAssociation.Unregister();
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
catch (Exception ex)
{
Msg.ShowException(ex);
}
}
}
}

View File

@@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("mpv.net")]
[assembly: AssemblyDescription("A lightweight media player")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("mpv.net")]
[assembly: AssemblyCopyright("Copyright © 2017-2019 stax76")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("1751f378-8edf-4b62-be6d-304c7c287089")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("3.6.1.0")]
[assembly: AssemblyFileVersion("3.6.1.0")]

View File

@@ -1,26 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace mpvnet.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

View File

@@ -1,5 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles />
<Settings />
</SettingsFile>

View File

@@ -1,59 +0,0 @@
using System;
using System.Reflection;
using Microsoft.Scripting;
using Microsoft.Scripting.Hosting;
using IronPython.Hosting;
using IronPython.Runtime;
using IronPython.Runtime.Operations;
namespace mpvnet
{
public class PythonScript
{
ScriptEngine engine;
ScriptScope scope;
public PythonScript(string code)
{
try
{
engine = Python.CreateEngine();
scope = engine.CreateScope();
scope.ImportModule("clr");
engine.Execute("import clr", scope);
engine.Execute("clr.AddReference(\"mpvnet\")", scope);
engine.Execute("import mpvnet", scope);
engine.Execute("from mpvnet import *", scope);
engine.Execute(code, scope);
}
catch (Exception ex)
{
if (ex is SyntaxErrorException e)
Msg.ShowError($"{e.Line}, {e.Column}: " + ex.Message);
else
Msg.ShowException(ex);
}
}
}
public class PythonEventObject
{
public PythonFunction PythonFunction { get; set; }
public EventInfo EventInfo { get; set; }
public Delegate Delegate { get; set; }
public void Invoke() => PythonCalls.Call(PythonFunction);
public void InvokeEndFileEventMode(EndFileEventMode arg)
{
PythonCalls.Call(PythonFunction, new[] { arg });
}
public void InvokeStrings(string[] arg)
{
PythonCalls.Call(PythonFunction, new[] { arg });
}
}
}

View File

@@ -1,180 +0,0 @@
# This file defines the input (keys and mouse) bindings of mpv and mpv.net
# and it also defines the context menu of mpv.net. mpv.net has an input
# editor and an config editor as alternative to editing conf text files.
# The input and config editor can be found in mpv.net's context menu at:
# Settings > Show Config Editor
# Settings > Show Input Editor
# The defaults of this file can be found at:
# https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/inputConf.txt
# the defaults of mpv can be found at:
# https://github.com/mpv-player/mpv/blob/master/etc/input.conf
# mpv.net's defaults of mpv.conf contain: 'input-default-bindings = no'
# which disables mpv's input defaults. Every line in this file begins with a
# space character to make it easier to do a text search, so if you want to know
# if 'o' has already a binding you can make a text search on ' o '.
# mpv input commands: https://github.com/stax76/mpv.net/wiki/mpv-input-commands
# mpv input keys: https://github.com/stax76/mpv.net/wiki/mpv-input-keys
o script-message mpv.net open-files #menu: Open > Open Files...
u script-message mpv.net open-url #menu: Open > Open URL...
Ctrl+S script-message mpv.net show-media-search #menu: Open > Show media search...
_ ignore #menu: Open > -
Alt+a script-message mpv.net load-audio #menu: Open > Load external audio files...
Alt+s script-message mpv.net load-sub #menu: Open > Load external subtitle files...
_ ignore #menu: Open > -
_ ignore #menu: Open > Recent
_ ignore #menu: -
Space cycle pause #menu: Play/Pause
s stop #menu: Stop
_ ignore #menu: -
Enter cycle fullscreen #menu: Toggle Fullscreen
F11 playlist-prev #menu: Navigate > Previous File
F12 playlist-next #menu: Navigate > Next File
_ ignore #menu: Navigate > -
PGUP add chapter 1 #menu: Navigate > Next Chapter
PGDWN add chapter -1 #menu: Navigate > Previous Chapter
_ ignore #menu: Navigate > -
. frame-step #menu: Navigate > Jump Next Frame
, frame-back-step #menu: Navigate > Jump Previous Frame
_ ignore #menu: Navigate > -
Right no-osd seek 7 #menu: Navigate > Jump 7 sec forward
Left no-osd seek -7 #menu: Navigate > Jump 7 sec backward
_ ignore #menu: Navigate > -
Up no-osd seek 40 #menu: Navigate > Jump 40 sec forward
Down no-osd seek -40 #menu: Navigate > Jump 40 sec backward
_ ignore #menu: Navigate > -
Ctrl+Right no-osd seek 300 #menu: Navigate > Jump 5 min forward
Ctrl+Left no-osd seek -300 #menu: Navigate > Jump 5 min backward
_ ignore #menu: Navigate > -
_ ignore #menu: Navigate > Chapters
Ctrl++ add video-zoom 0.1 #menu: Pan & Scan > Increase Size
Ctrl+- add video-zoom -0.1 #menu: Pan & Scan > Decrease Size
_ ignore #menu: Pan & Scan > -
Ctrl+KP4 add video-pan-x -0.01 #menu: Pan & Scan > Move Left
Ctrl+KP6 add video-pan-x 0.01 #menu: Pan & Scan > Move Right
_ ignore #menu: Pan & Scan > -
Ctrl+KP8 add video-pan-y -0.01 #menu: Pan & Scan > Move Up
Ctrl+KP2 add video-pan-y 0.01 #menu: Pan & Scan > Move Down
_ ignore #menu: Pan & Scan > -
w add panscan -0.1 #menu: Pan & Scan > Decrease Height
W add panscan 0.1 #menu: Pan & Scan > Increase Height
_ ignore #menu: Pan & Scan > -
Ctrl+BS set video-zoom 0; set video-pan-x 0; set video-pan-y 0 #menu: Pan & Scan > Reset
Ctrl+1 add contrast -1 #menu: Video > Decrease Contrast
Ctrl+2 add contrast #menu: Video > Increase Contrast
_ ignore #menu: Video > -
Ctrl+3 add brightness -1 #menu: Video > Decrease Brightness
Ctrl+4 add brightness 1 #menu: Video > Increase Brightness
_ ignore #menu: Video > -
Ctrl+5 add gamma -1 #menu: Video > Decrease Gamma
Ctrl+6 add gamma 1 #menu: Video > Increase Gamma
_ ignore #menu: Video > -
Ctrl+7 add saturation -1 #menu: Video > Decrease Saturation
Ctrl+8 add saturation 1 #menu: Video > Increase Saturation
_ ignore #menu: Video > -
Ctrl+s async screenshot #menu: Video > Take Screenshot
d cycle deinterlace #menu: Video > Toggle Deinterlace
a cycle-values video-aspect "16:9" "4:3" "2.35:1" "-1" #menu: Video > Cycle Aspect Ratio
KP7 script-message mpv.net cycle-audio #menu: Audio > Cycle/Next
_ ignore #menu: Audio > -
KP6 add audio-delay 0.1 #menu: Audio > Delay +0.1
KP9 add audio-delay -0.1 #menu: Audio > Delay -0.1
KP8 cycle sub #menu: Subtitle > Cycle/Next
v cycle sub-visibility #menu: Subtitle > Toggle Visibility
_ ignore #menu: Subtitle > -
z add sub-delay -0.1 #menu: Subtitle > Delay -0.1
Z add sub-delay 0.1 #menu: Subtitle > Delay +0.1
_ ignore #menu: Subtitle > -
r add sub-pos -1 #menu: Subtitle > Move Up
R add sub-pos +1 #menu: Subtitle > Move Down
_ ignore #menu: Subtitle > -
_ add sub-scale -0.1 #menu: Subtitle > Decrease Subtitle Font Size
_ add sub-scale 0.1 #menu: Subtitle > Increase Subtitle Font Size
_ ignore #menu: Track
+ add volume 10 #menu: Volume > Up
- add volume -10 #menu: Volume > Down
_ ignore #menu: Volume > -
m cycle mute #menu: Volume > Mute
[ multiply speed 1/1.1 #menu: Speed > -10%
] multiply speed 1.1 #menu: Speed > +10%
_ ignore #menu: Speed > -
{ multiply speed 0.5 #menu: Speed > Half
} multiply speed 2.0 #menu: Speed > Double
_ ignore #menu: Speed > -
BS set speed 1 #menu: Speed > Reset
KP0 script-message rate-file 0 #menu: Extensions > Rating > 0stars
KP1 script-message rate-file 1 #menu: Extensions > Rating > 1stars
KP2 script-message rate-file 2 #menu: Extensions > Rating > 2stars
KP3 script-message rate-file 3 #menu: Extensions > Rating > 3stars
KP4 script-message rate-file 4 #menu: Extensions > Rating > 4stars
KP5 script-message rate-file 5 #menu: Extensions > Rating > 5stars
Ctrl+t set ontop yes #menu: View > On Top > Enable
Ctrl+T set ontop no #menu: View > On Top > Disable
i script-message mpv.net show-info #menu: View > File Info
t script-binding stats/display-stats #menu: View > Show Statistics
T script-binding stats/display-stats-toggle #menu: View > Toggle Statistics
Del script-binding osc/visibility #menu: View > Toggle OSC Visibility
F8 show-text ${playlist} 5000 #menu: View > Show Playlist
F9 show-text ${track-list} 5000 #menu: View > Show Audio/Video/Subtitle List
Ctrl+c script-message mpv.net show-conf-editor #menu: Settings > Show Config Editor
Ctrl+i script-message mpv.net show-input-editor #menu: Settings > Show Input Editor
Ctrl+f script-message mpv.net open-conf-folder #menu: Settings > Open Config Folder
Ctrl+P script-message mpv.net show-command-palette #menu: Tools > Command Palette
h script-message mpv.net show-history #menu: Tools > Show History
l ab-loop #menu: Tools > Set/clear A-B loop points
L cycle-values loop-file "inf" "no" #menu: Tools > Toggle infinite file looping
Ctrl+h cycle-values hwdec "auto" "no" #menu: Tools > Cycle Hardware Decoding
_ script-message mpv.net execute-mpv-command #menu: Tools > Execute mpv command...
_ script-message mpv.net manage-file-associations #menu: Tools > Manage File Associations...
_ script-message mpv.net shell-execute https://mpv.io/manual/stable/ #menu: Help > Show mpv manual
_ script-message mpv.net shell-execute https://github.com/mpv-player/mpv/blob/master/etc/input.conf #menu: Help > Show mpv default keys
_ script-message mpv.net shell-execute https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/inputConf.txt #menu: Help > Show mpv.net default keys
_ script-message mpv.net shell-execute https://mpv-net.github.io/mpv.net-web-site/ #menu: Help > Show mpv.net web site
_ ignore #menu: Help > -
_ script-message mpv.net show-about #menu: Help > About mpv.net
_ ignore #menu: -
Esc quit #menu: Exit
Q quit-watch-later #menu: Exit Watch Later
> playlist-next
< playlist-prev
Power quit
Play cycle pause
Pause cycle pause
PlayPause cycle pause
Stop stop
Forward seek 60
Rewind seek -60
Mute cycle mute
Volume_Up add volume 10
Volume_Down add volume -10
Wheel_Up add volume 10
Wheel_Down add volume -10
Prev playlist-prev
Next playlist-next
MBTN_LEFT_DBL cycle fullscreen

View File

@@ -1,25 +0,0 @@
# This file defines the input (keys and mouse) bindings of mpv and mpv.net
# and it also defines the context menu of mpv.net. mpv.net has an input
# editor and an config editor as alternatives to editing conf text files.
# The input and config editor can be found in mpv.net's context menu at:
# Settings > Show Config Editor
# Settings > Show Input Editor
# The defaults of this file can be found at:
# https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/inputConf.txt
# the defaults of mpv can be found at:
# https://github.com/mpv-player/mpv/blob/master/etc/inputConf
# mpv.net's defaults of mpv.conf contain: 'input-default-bindings = no'
# which disables mpv's input defaults. Every line in this file begins with a
# space character to make it easier to do a text search, so if you want to know
# if 'o' has already a binding you can make a text search on ' o '.
# mpv input commands: https://github.com/stax76/mpv.net/wiki/mpv-input-commands
# mpv input keys: https://github.com/stax76/mpv.net/wiki/mpv-input-keys

View File

@@ -1,14 +0,0 @@
# mpv manual: https://mpv.io/manual/master/
# mpv.net mpv.conf defaults: https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/mpvConf.txt
input-ar-delay = 500
input-ar-rate = 20
volume = 50
hwdec = yes
keep-open = yes
keep-open-pause = no
osd-playing-msg = ${filename}
screenshot-directory = ~~desktop/
input-default-bindings = no

View File

@@ -1,282 +0,0 @@
[[settings]]
name = "hwdec"
default = "no"
filter = "Video"
helpurl = "https://mpv.io/manual/master/#options-hwdec"
help = "--hwdec=<mode> Specify the hardware video decoding API that should be used if possible. Whether hardware decoding is actually done depends on the video codec. If hardware decoding is not possible, mpv will fall back on software decoding.\n\nFor more information visit:"
options = [{ name = "no", help = "always use software decoding (Default)" },
{ name = "auto", help = "enable best hw decoder (see below)" },
{ name = "yes", help = "exactly the same as auto" },
{ name = "auto-copy", help = "enable best hw decoder with copy-back (see below)" },
{ name = "dxva2", help = "requires --vo=gpu with --gpu-context=d3d11, --gpu-context=angle or --gpu-context=dxinterop (Windows only)" },
{ name = "dxva2-copy", help = "copies video back to system RAM (Windows only)" },
{ name = "d3d11va", help = "requires --vo=gpu with --gpu-context=d3d11 or --gpu-context=angle (Windows 8+ only)" },
{ name = "d3d11va-copy", help = "copies video back to system RAM (Windows 8+ only)" },
{ name = "cuda", help = "requires --vo=gpu (Any platform CUDA is available)" },
{ name = "cuda-copy", help = "copies video back to system RAM (Any platform CUDA is available)" },
{ name = "nvdec", help = "requires --vo=gpu (Any platform CUDA is available)" },
{ name = "nvdec-copy", help = "copies video back to system RAM (Any platform CUDA is available)" },
{ name = "crystalhd", help = "copies video back to system RAM (Any platform supported by hardware)" },
{ name = "rkmpp", help = "requires --vo=gpu (some RockChip devices only)" }]
[[settings]]
name = "gpu-api"
default = "auto"
filter = "Video"
help = "--gpu-api=<type> Controls which type of graphics APIs will be accepted."
options = [{ name = "auto", help = "Use any available API (Default)" },
{ name = "opengl", help = "Allow only OpenGL (requires OpenGL 2.1+ or GLES 2.0+)" },
{ name = "vulkan", help = "Allow only Vulkan (requires a valid/working --spirv-compiler)" },
{ name = "d3d11", help = "Allow only --gpu-context=d3d11" }]
[[settings]]
name = "gpu-context"
default = "auto"
filter = "Video"
help = "--gpu-context=<sys> The value auto (the default) selects the GPU context. You can also pass help to get a complete list of compiled in backends (sorted by autoprobe order)."
options = [{ name = "auto", help = "auto-select (Default)" },
{ name = "win", help = "Win32/WGL" },
{ name = "winvk", help = "VK_KHR_win32_surface" },
{ name = "angle", help = "Direct3D11 through the OpenGL ES translation layer ANGLE. This supports almost everything the win backend does (if the ANGLE build is new enough)." },
{ name = "dxinterop", help = "(experimental) Win32, using WGL for rendering and Direct3D 9Ex for presentation. Works on Nvidia and AMD. Newer Intel chips with the latest drivers may also work." },
{ name = "d3d11", help = "Win32, with native Direct3D 11 rendering." }]
[[settings]]
name = "vo"
default = "gpu"
filter = "Video"
helpurl = "https://mpv.io/manual/master/#video-output-drivers-vo"
help = "--gpu=<mode> Video output drivers to be used. Default = gpu.\n\nFor more information visit:"
options = [{ name = "gpu", help = "General purpose, customizable, GPU-accelerated video output driver. It supports extended scaling methods, dithering, color management, custom shaders, HDR, and more. (Default)" },
{ name = "direct3d", help = "Video output driver that uses the Direct3D interface" }]
[[settings]]
name = "video-sync"
default = "audio"
filter = "Video"
help = "--video-sync=<audio|...> How the player synchronizes audio and video.\n\nFor more information visit:"
helpurl = "https://mpv.io/manual/master/#options-video-sync"
options = [{ name = "audio" },
{ name = "display-resample" },
{ name = "display-resample-vdrop" },
{ name = "display-resample-desync" },
{ name = "display-vdrop" },
{ name = "display-adrop" },
{ name = "display-desync" },
{ name = "desync" }]
[[settings]]
name = "scale"
default = "bilinear"
filter = "Video"
help = "--scale=<filter> The GPU renderer filter function to use when upscaling video. There are some more filters, but most are not as useful. For a complete list, pass help as value, e.g.: mpv --scale=help"
options = [{ name = "bilinear", help = "Bilinear hardware texture filtering (fastest, very low quality). This is the default for compatibility reasons." },
{ name = "spline36", help = "Mid quality and speed. This is the default when using gpu-hq." },
{ name = "lanczos", help = "Lanczos scaling. Provides mid quality and speed. Generally worse than spline36, but it results in a slightly sharper image which is good for some content types. The number of taps can be controlled with scale-radius, but is best left unchanged. (This filter is an alias for sinc-windowed sinc)" },
{ name = "ewa_lanczos", help = "Elliptic weighted average Lanczos scaling. Also known as Jinc. Relatively slow, but very good quality. The radius can be controlled with scale-radius. Increasing the radius makes the filter sharper but adds more ringing. (This filter is an alias for jinc-windowed jinc)" },
{ name = "ewa_lanczossharp", help = "A slightly sharpened version of ewa_lanczos, preconfigured to use an ideal radius and parameter. If your hardware can run it, this is probably what you should use by default." },
{ name = "mitchell", help = "Mitchell-Netravali. The B and C parameters can be set with --scale-param1 and --scale-param2. This filter is very good at downscaling (see --dscale)." },
{ name = "oversample", help = "A version of nearest neighbour that (naively) oversamples pixels, so that pixels overlapping edges get linearly interpolated instead of rounded. This essentially removes the small imperfections and judder artifacts caused by nearest-neighbour interpolation, in exchange for adding some blur. This filter is good at temporal interpolation, and also known as \"smoothmotion\" (see --tscale)." },
{ name = "linear", help = "A --tscale filter." }]
[[settings]]
name = "cscale"
default = "bilinear"
filter = "Video"
help = "--cscale=<filter> As --scale, but for interpolating chroma information. If the image is not subsampled, this option is ignored entirely."
options = [{ name = "bilinear", help = "Bilinear hardware texture filtering (fastest, very low quality). This is the default for compatibility reasons." },
{ name = "spline36", help = "Mid quality and speed. This is the default when using gpu-hq." },
{ name = "lanczos", help = "Lanczos scaling. Provides mid quality and speed. Generally worse than spline36, but it results in a slightly sharper image which is good for some content types. The number of taps can be controlled with scale-radius, but is best left unchanged. (This filter is an alias for sinc-windowed sinc)" },
{ name = "ewa_lanczos", help = "Elliptic weighted average Lanczos scaling. Also known as Jinc. Relatively slow, but very good quality. The radius can be controlled with scale-radius. Increasing the radius makes the filter sharper but adds more ringing. (This filter is an alias for jinc-windowed jinc)" },
{ name = "ewa_lanczossharp", help = "A slightly sharpened version of ewa_lanczos, preconfigured to use an ideal radius and parameter. If your hardware can run it, this is probably what you should use by default." },
{ name = "mitchell", help = "Mitchell-Netravali. The B and C parameters can be set with --scale-param1 and --scale-param2. This filter is very good at downscaling (see --dscale)." },
{ name = "oversample", help = "A version of nearest neighbour that (naively) oversamples pixels, so that pixels overlapping edges get linearly interpolated instead of rounded. This essentially removes the small imperfections and judder artifacts caused by nearest-neighbour interpolation, in exchange for adding some blur. This filter is good at temporal interpolation, and also known as \"smoothmotion\" (see --tscale)." },
{ name = "linear", help = "A --tscale filter." }]
[[settings]]
name = "dscale"
default = "bilinear"
filter = "Video"
help = "--dscale=<filter> Like --scale, but apply these filters on downscaling instead. If this option is unset, the filter implied by --scale will be applied."
options = [{ name = "bilinear", help = "Bilinear hardware texture filtering (fastest, very low quality). This is the default for compatibility reasons." },
{ name = "spline36", help = "Mid quality and speed. This is the default when using gpu-hq." },
{ name = "lanczos", help = "Lanczos scaling. Provides mid quality and speed. Generally worse than spline36, but it results in a slightly sharper image which is good for some content types. The number of taps can be controlled with scale-radius, but is best left unchanged. (This filter is an alias for sinc-windowed sinc)" },
{ name = "ewa_lanczos", help = "Elliptic weighted average Lanczos scaling. Also known as Jinc. Relatively slow, but very good quality. The radius can be controlled with scale-radius. Increasing the radius makes the filter sharper but adds more ringing. (This filter is an alias for jinc-windowed jinc)" },
{ name = "ewa_lanczossharp", help = "A slightly sharpened version of ewa_lanczos, preconfigured to use an ideal radius and parameter. If your hardware can run it, this is probably what you should use by default." },
{ name = "mitchell", help = "Mitchell-Netravali. The B and C parameters can be set with --scale-param1 and --scale-param2. This filter is very good at downscaling (see --dscale)." },
{ name = "oversample", help = "A version of nearest neighbour that (naively) oversamples pixels, so that pixels overlapping edges get linearly interpolated instead of rounded. This essentially removes the small imperfections and judder artifacts caused by nearest-neighbour interpolation, in exchange for adding some blur. This filter is good at temporal interpolation, and also known as \"smoothmotion\" (see --tscale)." },
{ name = "linear", help = "A --tscale filter." }]
[[settings]]
name = "dither-depth"
default = "no"
filter = "Video"
help = "--dither-depth=<N|no|auto> Set dither target depth to N. Default: no. Note that the depth of the connected video display device cannot be detected. Often, LCD panels will do dithering on their own, which conflicts with this option and leads to ugly output."
options = [{ name = "no", help = "Disable any dithering done by mpv." },
{ name = "auto", help = "Automatic selection. If output bit depth cannot be detected, 8 bits per component are assumed." },
{ name = "8", help = "Dither to 8 bit output." }]
[[settings]]
name = "correct-downscaling"
default = "no"
filter = "Video"
help = "--correct-downscaling When using convolution based filters, extend the filter size when downscaling. Increases quality, but reduces performance while downscaling.\n\nThis will perform slightly sub-optimally for anamorphic video (but still better than without it) since it will extend the size to match only the milder of the scale factors between the axes."
options = [{ name = "yes" },
{ name = "no" }]
[[settings]]
name = "sigmoid-upscaling"
default = "no"
filter = "Video"
help = "--sigmoid-upscaling When upscaling, use a sigmoidal color transform to avoid emphasizing ringing artifacts. This also implies --linear-scaling."
options = [{ name = "yes" },
{ name = "no" }]
[[settings]]
name = "deband"
default = "no"
filter = "Video"
help = "--deband Enable the debanding algorithm. This greatly reduces the amount of visible banding, blocking and other quantization artifacts, at the expense of very slightly blurring some of the finest details. In practice, it's virtually always an improvement - the only reason to disable it would be for performance."
options = [{ name = "yes" },
{ name = "no" }]
[[settings]]
name = "volume"
default = "100"
filter = "Audio"
help = "--volume=<integer> Set the startup volume. 0 means silence, 100 means no volume reduction or amplification. Negative values can be passed for compatibility, but are treated as 0. Since mpv 0.18.1, this always controls the internal mixer (aka \"softvol\"). Default: 100"
[[settings]]
name = "alang"
default = ""
filter = "Audio"
help = "--alang=<languagecode[,languagecode,...]> Specify a priority list of audio languages to use. Different container formats employ different language codes. DVDs use ISO 639-1 two-letter language codes, Matroska, MPEG-TS and NUT use ISO 639-2 three-letter language codes, while OGM uses a free-form identifier. See also --aid.\n\nExamples\n\nmpv dvd://1 --alang=hu,en chooses the Hungarian language track on a DVD and falls back on English if Hungarian is not available.\n\nmpv --alang=jpn example.mkv plays a Matroska file with Japanese audio."
[[settings]]
name = "audio-file-auto"
default = "no"
filter = "Audio"
help = "--audio-file-auto=<no|exact|fuzzy|all>, --no-audio-file-auto Load additional audio files matching the video filename. The parameter specifies how external audio files are matched."
options = [{ name = "no", help = "Don't automatically load external audio files (default)." },
{ name = "exact", help = "Load the media filename with audio file extension." },
{ name = "fuzzy", help = "Load all audio files containing media filename." },
{ name = "all", help = "Load all audio files in the current and --audio-file-paths directories." }]
[[settings]]
name = "slang"
default = ""
filter = "Subtitle"
help = "--slang=<languagecode[,languagecode,...]> Specify a priority list of subtitle languages to use. Different container formats employ different language codes. DVDs use ISO 639-1 two letter language codes, Matroska uses ISO 639-2 three letter language codes while OGM uses a free-form identifier. See also --sid."
[[settings]]
name = "sub-auto"
default = "exact"
filter = "Subtitle"
help = "--sub-auto=<no|exact|fuzzy|all>, --no-sub-auto Load additional subtitle files matching the video filename. The parameter specifies how external subtitle files are matched. exact is enabled by default."
options = [{ name = "no", help = "Don't automatically load external subtitle files." },
{ name = "exact", help = "Load the media filename with subtitle file extension (Default)." },
{ name = "fuzzy", help = "Load all subs containing media filename." },
{ name = "all", help = "Load all subs in the current and --sub-file-paths directories." }]
[[settings]]
name = "screen"
default = ""
filter = "Screen"
help = "--screen=<default|0-32> In multi-monitor configurations (i.e. a single desktop that spans across multiple displays), this option tells mpv which screen to display the video on. Default: default."
[[settings]]
name = "osd-playing-msg"
default = ""
width = 300
filter = "Screen"
help = "--osd-playing-msg=<value> Show a message on OSD when playback starts. The string is expanded for properties, e.g. --osd-playing-msg='file: ${filename}' will show the message file: followed by a space and the currently played filename. For more information visit:"
helpurl = "https://mpv.io/manual/master/#property-expansion"
[[settings]]
name = "fullscreen"
default = "no"
filter = "Screen"
help = "--fullscreen=<yes|no>, fs=<yes|no> Start the player in fullscreen mode. Default: no."
options = [{ name = "yes" },
{ name = "no" }]
[[settings]]
name = "screenshot-directory"
default = ""
width = 500
folder = true
filter = "Screen"
help = "--screenshot-directory=<value> Store screenshots in this directory. This path is joined with the filename generated by --screenshot-template. If the template filename is already absolute, the directory is ignored.\n\nIf the directory does not exist, it is created on the first screenshot. If it is not a directory, an error is generated when trying to write a screenshot.\n\nThis option is not set by default, and thus will write screenshots to the directory from which mpv was started. In pseudo-gui mode (see PSEUDO GUI MODE), this is set to the desktop."
[[settings]]
name = "autofit"
default = "50%"
filter = "Screen"
help = "--autofit=<percent value> Set the initial window size in percent. Please note that this setting is only partly implemented in mpv.net, accepted are only integer values with percent sign added. Default: 50%."
[[settings]]
name = "keep-open-pause"
default = "yes"
filter = "Playback"
help = "--keep-open-pause=<yes|no> If set to no, instead of pausing when --keep-open is active, just stop at end of file and continue playing forward when you seek backwards until end where it stops again. Default: yes."
options = [{ name = "yes" },
{ name = "no" }]
[[settings]]
name = "keep-open"
default = "no"
filter = "Playback"
help = "--keep-open=<yes|no|always> Do not terminate when playing or seeking beyond the end of the file, and there is not next file to be played (and --loop is not used). Instead, pause the player. When trying to seek beyond end of the file, the player will attempt to seek to the last frame.\n\nNormally, this will act like set pause yes on EOF, unless the --keep-open-pause=no option is set."
options = [{ name = "yes", help = "Don't terminate if the current file is the last playlist entry. Equivalent to --keep-open without arguments."},
{ name = "no", help = "If the current file ends, go to the next file or terminate. (Default.)" },
{ name = "always", help = "Like yes, but also applies to files before the last playlist entry. This means playback will never automatically advance to the next file."}]
[[settings]]
name = "loop-file"
default = ""
filter = "Playback"
help = "--loop-file=<N|inf|no>, loop=<N|inf|no> Loop a single file N times. inf means forever, no means normal playback. For compatibility, --loop-file and --loop-file=yes are also accepted, and are the same as --loop-file=inf.\n\nThe difference to --loop-playlist is that this doesn't loop the playlist, just the file itself. If the playlist contains only a single file, the difference between the two option is that this option performs a seek on loop, instead of reloading the file.\n\n--loop is an alias for this option."
[[settings]]
name = "save-position-on-quit"
default = "no"
filter = "Playback"
help = "--save-position-on-quit=<yes|no> Always save the current playback position on quit. When this file is played again later, the player will seek to the old playback position on start. This does not happen if playback of a file is stopped in any other way than quitting. For example, going to the next file in the playlist will not save the position, and start playback at beginning the next time the file is played.\n\nThis behavior is disabled by default, but is always available when quitting the player with Shift+Q."
options = [{ name = "yes" },
{ name = "no" }]
[[settings]]
name = "input-ar-delay"
default = ""
filter = "Input"
help = "--input-ar-delay=<integer> Delay in milliseconds before we start to autorepeat a key (0 to disable)."
[[settings]]
name = "input-ar-rate"
default = ""
filter = "Input"
help = "--input-ar-rate=<integer> Number of key presses to generate per second on autorepeat."
[[settings]]
name = "hr-seek"
default = "absolute"
filter = "Playback"
help = "--hr-seek=<no|absolute|yes> Select when to use precise seeks that are not limited to keyframes. Such seeks require decoding video from the previous keyframe up to the target position and so can take some time depending on decoding performance. For some video formats, precise seeks are disabled. This option selects the default choice to use for seeks; it is possible to explicitly override that default in the definition of key bindings and in input commands."
options = [{ name = "yes", help = "Use precise seeks whenever possible." },
{ name = "no", help = "Never use precise seeks." },
{ name = "absolute", help = "Use precise seeks if the seek is to an absolute position in the file, such as a chapter seek, but not for relative seeks like the default behavior of arrow keys (default)." },
{ name = "always", help = "Same as yes (for compatibility)." }]
[[settings]]
name = "track-auto-selection"
default = "yes"
filter = "Playback"
help = "--track-auto-selection=<yes|no> Enable the default track auto-selection (default: yes). Enabling this will make the player select streams according to --aid, --alang, and others. If it is disabled, no tracks are selected. In addition, the player will not exit if no tracks are selected, and wait instead (this wait mode is similar to pausing, but the pause option is not set).\n\nThis is useful with --lavfi-complex: you can start playback in this mode, and then set select tracks at runtime by setting the filter graph. Note that if --lavfi-complex is set before playback is started, the referenced tracks are always selected."
options = [{ name = "yes" },
{ name = "no" }]
[[settings]]
name = "loop-playlist"
default = ""
filter = "Playback"
help = "--loop-playlist=<N|inf|force|no>, --loop-playlist Loops playback N times. A value of 1 plays it one time (default), 2 two times, etc. inf means forever. no is the same as 1 and disables looping. If several files are specified on command line, the entire playlist is looped. --loop-playlist is the same as --loop-playlist=inf.\n\nThe force mode is like inf, but does not skip playlist entries which have been marked as failing. This means the player might waste CPU time trying to loop a file that doesn't exist. But it might be useful for playing webradios under very bad network conditions."

View File

@@ -1,8 +0,0 @@
[[settings]]
name = "dark-mode"
default = "always"
filter = "mpv.net"
help = "Enables a dark theme."
options = [{ name = "always" },
{ name = "system" , help = "Available on Windows 10 or higher" },
{ name = "never" }]

View File

@@ -1,656 +0,0 @@
using System;
using System.Runtime.InteropServices;
using System.Text;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Text.RegularExpressions;
using System.Threading;
using System.Windows.Forms;
public class Msg
{
private static string ShownMessages;
public static string SupportURL { get; set; }
public static void Show(string mainInstruction, string content = null)
{
Msg.Show(mainInstruction, content, MsgIcon.Info, MsgButtons.Ok, MsgResult.None);
}
public static void ShowError(string mainInstruction, string content = null)
{
try
{
using (TaskDialog<string> td = new TaskDialog<string>())
{
td.AllowCancel = false;
if (string.IsNullOrEmpty(content))
{
if (mainInstruction.Length < 80)
td.MainInstruction = mainInstruction;
else
td.Content = mainInstruction;
}
else
{
td.MainInstruction = mainInstruction;
td.Content = content;
}
td.MainIcon = MsgIcon.Error;
td.Footer = "[Copy Message](copymsg)";
if (!string.IsNullOrEmpty(Msg.SupportURL))
td.Footer += $" [Contact Support]({SupportURL})";
td.Show();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.GetType().Name + "\n\n" + ex.Message + "\n\n" + ex.ToString(),
Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public static void ShowException(Exception e)
{
try
{
using (TaskDialog<string> td = new TaskDialog<string>())
{
td.MainInstruction = e.GetType().Name;
td.Content = e.Message;
td.MainIcon = MsgIcon.Error;
td.ExpandedInformation = e.ToString();
td.Footer = "[Copy Message](copymsg)";
if (!string.IsNullOrEmpty(Msg.SupportURL))
td.Footer += $" [Contact Support]({SupportURL})";
td.Show();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.GetType().Name + "\n\n" + ex.Message + "\n\n" + ex.ToString(),
Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public static void ShowWarning(string mainInstruction,
string content = null,
bool onlyOnce = false)
{
if (onlyOnce && Msg.ShownMessages != null &&
Msg.ShownMessages.Contains(mainInstruction + content))
return;
Msg.Show(mainInstruction, content, MsgIcon.Warning, MsgButtons.Ok, MsgResult.None);
if (!onlyOnce) return;
Msg.ShownMessages += mainInstruction + content;
}
public static MsgResult ShowQuestion(string mainInstruction,
MsgButtons buttons = MsgButtons.OkCancel)
{
return Msg.Show(mainInstruction, null, MsgIcon.None, buttons, MsgResult.None);
}
public static MsgResult ShowQuestion(string mainInstruction,
string content,
MsgButtons buttons = MsgButtons.OkCancel)
{
return Msg.Show(mainInstruction, content, MsgIcon.None, buttons, MsgResult.None);
}
public static MsgResult Show(string mainInstruction,
string content,
MsgIcon icon,
MsgButtons buttons,
MsgResult defaultButton = MsgResult.None)
{
try
{
using (TaskDialog<MsgResult> td = new TaskDialog<MsgResult>())
{
td.AllowCancel = false;
td.DefaultButton = defaultButton;
td.MainIcon = icon;
if (content == null)
{
if (mainInstruction.Length < 80)
td.MainInstruction = mainInstruction;
else
td.Content = mainInstruction;
}
else
{
td.MainInstruction = mainInstruction;
td.Content = content;
}
if (buttons == MsgButtons.OkCancel)
{
td.AddButton("OK", MsgResult.OK);
td.AddButton("Cancel", MsgResult.Cancel);
}
else
td.CommonButtons = buttons;
return td.Show();
}
}
catch (Exception ex)
{
return (MsgResult)MessageBox.Show(ex.GetType().Name + "\n\n" + ex.Message + "\n\n" + ex.ToString(),
Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
public class TaskDialog<T> : TaskDialogNative, IDisposable
{
private Dictionary<int, T> IdValueDic;
private Dictionary<int, string> IdTextDic;
private List<int> CommandLinkShieldList;
private IntPtr ButtonArray;
private IntPtr RadioButtonArray;
private List<TaskDialogNative.TASKDIALOG_BUTTON> Buttons;
private List<TaskDialogNative.TASKDIALOG_BUTTON> RadioButtons;
private TaskDialogNative.TASKDIALOGCONFIG Config;
const int TDE_CONTENT = 0;
const int TDE_EXPANDED_INFORMATION = 1;
const int TDE_FOOTER = 2;
const int TDE_MAIN_INSTRUCTION = 3;
const int TDN_CREATED = 0;
const int TDN_NAVIGATED = 1;
const int TDN_BUTTON_CLICKED = 2;
const int TDN_HYPERLINK_CLICKED = 3;
const int TDN_TIMER = 4;
const int TDN_DESTROYED = 5;
const int TDN_RADIO_BUTTON_CLICKED = 6;
const int TDN_DIALOG_CONSTRUCTED = 7;
const int TDN_VERIFICATION_CLICKED = 8;
const int TDN_HELP = 9;
const int TDN_EXPANDO_BUTTON_CLICKED = 10;
const int TDM_NAVIGATE_PAGE = 1125;
const int TDM_CLICK_BUTTON = 1126;
const int TDM_SET_MARQUEE_PROGRESS_BAR = 1127;
const int TDM_SET_PROGRESS_BAR_STATE = 1128;
const int TDM_SET_PROGRESS_BAR_RANGE = 1129;
const int TDM_SET_PROGRESS_BAR_POS = 1130;
const int TDM_SET_PROGRESS_BAR_MARQUEE = 1131;
const int TDM_SET_ELEMENT_TEXT = 1132;
const int TDM_CLICK_RADIO_BUTTON = 1134;
const int TDM_ENABLE_BUTTON = 1135;
const int TDM_ENABLE_RADIO_BUTTON = 1136;
const int TDM_CLICK_VERIFICATION = 1137;
const int TDM_UPDATE_ELEMENT_TEXT = 1138;
const int TDM_SET_BUTTON_ELEVATION_REQUIRED_STATE = 1139;
const int TDM_UPDATE_ICON = 1140;
private T SelectedValueValue;
private string SelectedTextValue;
private int TimeoutValue;
private int ExitTickCount;
private bool disposed;
public TaskDialog()
{
IdValueDic = new Dictionary<int, T>();
IdTextDic = new Dictionary<int, string>();
CommandLinkShieldList = new List<int>();
Buttons = new List<TaskDialogNative.TASKDIALOG_BUTTON>();
RadioButtons = new List<TaskDialogNative.TASKDIALOG_BUTTON>();
_SelectedID = -1;
Config = new TaskDialogNative.TASKDIALOGCONFIG();
Config.cbSize = (uint)Marshal.SizeOf(Config);
Config.hwndParent = GetHandle();
Config.hInstance = IntPtr.Zero;
Config.dwFlags = TaskDialogNative.TASKDIALOG_FLAGS.TDF_ALLOW_DIALOG_CANCELLATION;
Config.dwCommonButtons = MsgButtons.None;
Config.MainIcon = new TaskDialogNative.TASKDIALOGCONFIG_ICON_UNION(0);
Config.FooterIcon = new TaskDialogNative.TASKDIALOGCONFIG_ICON_UNION(0);
Config.cxWidth = 0U;
Config.cButtons = 0U;
Config.cRadioButtons = 0U;
Config.pButtons = IntPtr.Zero;
Config.pRadioButtons = IntPtr.Zero;
Config.nDefaultButton = 0;
Config.nDefaultRadioButton = 0;
Config.pszWindowTitle = ((AssemblyProductAttribute)Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), true)[0]).Product;
Config.pszMainInstruction = "";
Config.pszContent = "";
Config.pfCallback = new PFTASKDIALOGCALLBACK(this.DialogProc);
}
public IntPtr GetHandle()
{
StringBuilder lpszFileName = new StringBuilder(260);
IntPtr foregroundWindow = TaskDialogNative.GetForegroundWindow();
TaskDialogNative.GetWindowModuleFileName(foregroundWindow, lpszFileName, 260U);
if (Path.GetFileName(lpszFileName.ToString().Replace(".vshost", "")) ==
Path.GetFileName(Assembly.GetEntryAssembly().Location))
return foregroundWindow;
return IntPtr.Zero;
}
public bool AllowCancel {
set {
if (value)
Config.dwFlags |= TaskDialogNative.TASKDIALOG_FLAGS.TDF_ALLOW_DIALOG_CANCELLATION;
else
Config.dwFlags ^= TaskDialogNative.TASKDIALOG_FLAGS.TDF_ALLOW_DIALOG_CANCELLATION;
}
}
public string MainInstruction {
get => Config.pszMainInstruction;
set => Config.pszMainInstruction = value;
}
public string Content {
get => Config.pszContent;
set => Config.pszContent = ExpandMarkdownMarkup(value);
}
public string ExpandedInformation {
get => Config.pszExpandedInformation;
set => Config.pszExpandedInformation = ExpandMarkdownMarkup(value);
}
public string VerificationText {
get => Config.pszVerificationText;
set => Config.pszVerificationText = value;
}
public MsgResult DefaultButton {
get => (MsgResult)Config.nDefaultButton;
set => Config.nDefaultButton = (int)value;
}
public string Footer {
get => Config.pszFooter;
set => Config.pszFooter = ExpandMarkdownMarkup(value);
}
public MsgIcon MainIcon {
set => Config.MainIcon = new TaskDialogNative.TASKDIALOGCONFIG_ICON_UNION((int)value);
}
private int _SelectedID;
public int SelectedID {
get => _SelectedID;
set {
foreach (var i in IdValueDic)
if (i.Key == value) _SelectedID = value;
}
}
public T SelectedValue {
get {
if (IdValueDic.ContainsKey(SelectedID))
return IdValueDic[SelectedID];
return SelectedValueValue;
}
set => SelectedValueValue = value;
}
public string SelectedText {
get {
if (IdTextDic.ContainsKey(SelectedID))
return IdTextDic[SelectedID];
return SelectedTextValue;
}
set => SelectedTextValue = value;
}
public bool CheckBoxChecked {
get => (Config.dwFlags & TaskDialogNative.TASKDIALOG_FLAGS.TDF_VERIFICATION_FLAG_CHECKED) == TaskDialogNative.TASKDIALOG_FLAGS.TDF_VERIFICATION_FLAG_CHECKED;
set {
if (value)
Config.dwFlags |= TaskDialogNative.TASKDIALOG_FLAGS.TDF_VERIFICATION_FLAG_CHECKED;
else
Config.dwFlags ^= TaskDialogNative.TASKDIALOG_FLAGS.TDF_VERIFICATION_FLAG_CHECKED;
}
}
public MsgButtons CommonButtons {
get => Config.dwCommonButtons;
set => Config.dwCommonButtons = value;
}
public int Timeout {
get => Convert.ToInt32(TimeoutValue / 1000.0);
set {
TimeoutValue = value * 1000;
Config.dwFlags |= TaskDialogNative.TASKDIALOG_FLAGS.TDF_CALLBACK_TIMER;
}
}
public void AddButton(string text, T value)
{
int n = 1000 + IdValueDic.Count + 1;
IdValueDic[n] = value;
Buttons.Add(new TaskDialogNative.TASKDIALOG_BUTTON(n, text));
}
public string ExpandMarkdownMarkup(string value)
{
if (value.Contains("["))
{
Regex regex = new Regex(@"\[(.+)\]\((.+)\)");
if (regex.Match(value).Success)
{
Config.dwFlags |= TaskDialogNative.TASKDIALOG_FLAGS.TDF_ENABLE_HYPERLINKS;
value = regex.Replace(value, "<a href=\"$2\">$1</a>");
}
}
return value;
}
public void AddCommandLink(string text, T value)
{
int n = 1000 + IdValueDic.Count + 1;
IdValueDic[n] = value == null ? (T)(object)text : value;
IdTextDic[n] = text;
Buttons.Add(new TaskDialogNative.TASKDIALOG_BUTTON(n, text));
Config.dwFlags |= TaskDialogNative.TASKDIALOG_FLAGS.TDF_USE_COMMAND_LINKS;
}
public void AddCommandLink(string text, string description, T value, bool setShield = false)
{
int n = 1000 + IdValueDic.Count + 1;
IdValueDic[n] = value;
if (setShield) CommandLinkShieldList.Add(n);
if (!string.IsNullOrEmpty(description)) text += "\n" + description;
Buttons.Add(new TaskDialogNative.TASKDIALOG_BUTTON(n, text));
Config.dwFlags |= TaskDialogNative.TASKDIALOG_FLAGS.TDF_USE_COMMAND_LINKS;
}
public void AddRadioButton(string text, T value)
{
int n = 1000 + IdValueDic.Count + 1;
IdValueDic[n] = value;
RadioButtons.Add(new TaskDialogNative.TASKDIALOG_BUTTON(n, text));
}
public T Show()
{
MarshalDialogControlStructs();
TaskDialogNative.TASKDIALOGCONFIG config = Config;
int errorCode = TaskDialogNative.TaskDialogIndirect(config, out int dummy1, out int dummy2, out bool isChecked);
if (errorCode < 0) Marshal.ThrowExceptionForHR(errorCode);
CheckBoxChecked = isChecked;
if (SelectedValue is MsgResult) SelectedValue = (T)(object)SelectedID;
return SelectedValue;
}
public int DialogProc(IntPtr hwnd, uint msg, IntPtr wParam, IntPtr lParam, IntPtr lpRefData)
{
switch (msg)
{
case 0: //TDN_CREATED
foreach (var i in CommandLinkShieldList)
SendMessage(hwnd, TDM_SET_BUTTON_ELEVATION_REQUIRED_STATE, new IntPtr(i), new IntPtr(1));
break;
case 2: //TDN_BUTTON_CLICKED
case 6: //TDN_RADIO_BUTTON_CLICKED
if (SelectedValue is MsgResult)
_SelectedID = wParam.ToInt32();
else
SelectedID = wParam.ToInt32();
break;
case 3: //TDN_HYPERLINK_CLICKED
string stringUni = Marshal.PtrToStringUni(lParam);
if (stringUni.StartsWith("mailto") || stringUni.StartsWith("http"))
Process.Start(stringUni);
if (stringUni == "copymsg")
{
Thread thread = new Thread((ThreadStart)(() => {
Clipboard.SetText(MainInstruction + "\r\n\r\n" + Content + "\r\n\r\n" + ExpandedInformation);
MessageBox.Show("Message was copied to clipboard.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
}));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
break;
case 4: //TDN_TIMER
if (ExitTickCount == 0) ExitTickCount = Environment.TickCount + Timeout * 1000;
if (Environment.TickCount > ExitTickCount)
TaskDialogNative.SendMessage(hwnd, 1126, new IntPtr(1), IntPtr.Zero);
break;
}
return 0;
}
public void MarshalDialogControlStructs()
{
if (Buttons != null && Buttons.Count > 0)
{
ButtonArray = TaskDialog<T>.AllocateAndMarshalButtons(Buttons);
Config.pButtons = ButtonArray;
Config.cButtons = (uint)Buttons.Count;
}
if (RadioButtons == null || RadioButtons.Count <= 0) return;
RadioButtonArray = TaskDialog<T>.AllocateAndMarshalButtons(RadioButtons);
Config.pRadioButtons = RadioButtonArray;
Config.cRadioButtons = (uint)RadioButtons.Count;
}
public static IntPtr AllocateAndMarshalButtons(List<TaskDialogNative.TASKDIALOG_BUTTON> structs)
{
var initialPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(TASKDIALOG_BUTTON)) * structs.Count);
var currentPtr = initialPtr;
foreach (var button in structs)
{
Marshal.StructureToPtr(button, currentPtr, false);
currentPtr = (IntPtr)(currentPtr.ToInt64() + Marshal.SizeOf(button));
}
return initialPtr;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
~TaskDialog()
{
Dispose(false);
}
protected void Dispose(bool disposing)
{
if (disposed) return;
disposed = true;
if (ButtonArray != IntPtr.Zero)
{
Marshal.FreeHGlobal(ButtonArray);
ButtonArray = IntPtr.Zero;
}
if (RadioButtonArray != IntPtr.Zero)
{
Marshal.FreeHGlobal(RadioButtonArray);
RadioButtonArray = IntPtr.Zero;
}
}
}
public delegate int PFTASKDIALOGCALLBACK(
IntPtr hwnd,
uint msg,
IntPtr wParam,
IntPtr lParam,
IntPtr lpRefData);
public class TaskDialogNative
{
[DllImport("comctl32", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern int TaskDialogIndirect(
[In] TaskDialogNative.TASKDIALOGCONFIG pTaskConfig,
out int pnButton,
out int pnRadioButton,
[MarshalAs(UnmanagedType.Bool)] out bool pVerificationFlagChecked);
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern uint GetWindowModuleFileName(
IntPtr hwnd,
StringBuilder lpszFileName,
uint cchFileNameMax);
[DllImport("user32.dll")]
public static extern IntPtr SendMessage(
IntPtr handle,
int message,
IntPtr wParam,
IntPtr lParam);
[StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode)]
public class TASKDIALOGCONFIG
{
public uint cbSize;
public IntPtr hwndParent;
public IntPtr hInstance;
public TaskDialogNative.TASKDIALOG_FLAGS dwFlags;
public MsgButtons dwCommonButtons;
[MarshalAs(UnmanagedType.LPWStr)]
public string pszWindowTitle;
public TaskDialogNative.TASKDIALOGCONFIG_ICON_UNION MainIcon;
[MarshalAs(UnmanagedType.LPWStr)]
public string pszMainInstruction;
[MarshalAs(UnmanagedType.LPWStr)]
public string pszContent;
public uint cButtons;
public IntPtr pButtons;
public int nDefaultButton;
public uint cRadioButtons;
public IntPtr pRadioButtons;
public int nDefaultRadioButton;
[MarshalAs(UnmanagedType.LPWStr)]
public string pszVerificationText;
[MarshalAs(UnmanagedType.LPWStr)]
public string pszExpandedInformation;
[MarshalAs(UnmanagedType.LPWStr)]
public string pszExpandedControlText;
[MarshalAs(UnmanagedType.LPWStr)]
public string pszCollapsedControlText;
public TaskDialogNative.TASKDIALOGCONFIG_ICON_UNION FooterIcon;
[MarshalAs(UnmanagedType.LPWStr)]
public string pszFooter;
public PFTASKDIALOGCALLBACK pfCallback;
public IntPtr lpCallbackData;
public uint cxWidth;
}
public enum TASKDIALOG_FLAGS
{
NONE = 0,
TDF_ENABLE_HYPERLINKS = 1,
TDF_USE_HICON_MAIN = 2,
TDF_USE_HICON_FOOTER = 4,
TDF_ALLOW_DIALOG_CANCELLATION = 8,
TDF_USE_COMMAND_LINKS = 16,
TDF_USE_COMMAND_LINKS_NO_ICON = 32,
TDF_EXPAND_FOOTER_AREA = 64,
TDF_EXPANDED_BY_DEFAULT = 128,
TDF_VERIFICATION_FLAG_CHECKED = 256,
TDF_SHOW_PROGRESS_BAR = 512,
TDF_SHOW_MARQUEE_PROGRESS_BAR = 1024,
TDF_CALLBACK_TIMER = 2048,
TDF_POSITION_RELATIVE_TO_WINDOW = 4096,
TDF_RTL_LAYOUT = 8192,
TDF_NO_DEFAULT_RADIO_BUTTON = 16384,
}
[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Unicode)]
public struct TASKDIALOGCONFIG_ICON_UNION
{
[FieldOffset(0)]
public int hMainIcon;
[FieldOffset(0)]
public int pszIcon;
[FieldOffset(0)]
public IntPtr spacer;
public TASKDIALOGCONFIG_ICON_UNION(int i)
{
this = new TaskDialogNative.TASKDIALOGCONFIG_ICON_UNION();
spacer = IntPtr.Zero;
pszIcon = 0;
hMainIcon = i;
}
}
[StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode)]
public struct TASKDIALOG_BUTTON
{
public int nButtonID;
[MarshalAs(UnmanagedType.LPWStr)]
public string pszButtonText;
public TASKDIALOG_BUTTON(int n, string txt)
{
this = new TaskDialogNative.TASKDIALOG_BUTTON();
nButtonID = n;
pszButtonText = txt;
}
}
}
public enum MsgButtons
{
None = 0,
Ok = 1,
Yes = 2,
No = 4,
YesNo = 6,
Cancel = 8,
OkCancel = 9,
YesNoCancel = 14,
Retry = 16,
RetryCancel = 24,
Close = 32,
}
public enum MsgResult
{
None,
OK,
Cancel,
Abort,
Retry,
Ignore,
Yes,
No,
}
public enum MsgIcon
{
None = 0,
SecurityShieldGray = 65527,
SecuritySuccess = 65528,
SecurityError = 65529,
SecurityWarning = 65530,
SecurityShieldBlue = 65531,
Shield = 65532,
Info = 65533,
Error = 65534,
Warning = 65535,
}

View File

@@ -1,27 +0,0 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:WPF="clr-namespace:WPF">
<Style TargetType="TextBox">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
<ScrollViewer x:Name="PART_ContentHost" Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Opacity" TargetName="border" Value="0.56"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="BorderBrush" TargetName="border" Value="#FF7EB4EA"/>
</Trigger>
<Trigger Property="IsFocused" Value="true">
<Setter Property="BorderBrush" TargetName="border" Value="{x:Static WPF:WPF.ThemeBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>

View File

@@ -1,34 +0,0 @@
using System;
using System.Windows;
using System.Windows.Media;
namespace WPF
{
public class WPF
{
public static void Init()
{
EnsureApplicationResources();
}
public static void EnsureApplicationResources()
{
if (Application.Current == null)
{
new Application();
Application.Current.Resources.MergedDictionaries.Add(
Application.LoadComponent(new Uri("mpvnet;component/WPF/Resources.xaml",
UriKind.Relative)) as ResourceDictionary);
}
}
public static Brush ThemeBrush {
get {
if (Environment.OSVersion.Version.Major < 10)
return new SolidColorBrush(Colors.DarkSlateGray);
else
return SystemParameters.WindowGlassBrush;
}
}
}
}

View File

@@ -1,17 +0,0 @@
<Window x:Class="mpvnet.AboutWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="About mpv.net" Height="230" Width="420" FontSize="16" ShowInTaskbar="False"
WindowStartupLocation="CenterOwner" ResizeMode="NoResize">
<Grid>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock FontSize="48" HorizontalAlignment="Center" Margin="0,0,0,10">mpv.net</TextBlock>
<TextBlock HorizontalAlignment="Center">Copyright (c) 2017-2019 Frank Skare (stax76)</TextBlock>
<TextBlock Name="Version" HorizontalAlignment="Center" />
<TextBlock HorizontalAlignment="Center" Margin="0,0,0,20">MIT License</TextBlock>
</StackPanel>
</Grid>
</Window>

View File

@@ -1,18 +0,0 @@
using System.Windows;
using System.Windows.Input;
namespace mpvnet
{
public partial class AboutWindow : Window
{
public AboutWindow()
{
InitializeComponent();
Version.Text = $"Version {System.Windows.Forms.Application.ProductVersion}";
Foreground = WPF.WPF.ThemeBrush;
}
protected override void OnPreviewKeyDown(KeyEventArgs e) => Close();
protected override void OnMouseDown(MouseButtonEventArgs e) => Close();
}
}

View File

@@ -1,35 +0,0 @@
<Window x:Class="mpvnet.CommandPaletteWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="Command Palette" Height="295" Width="400" ResizeMode="NoResize"
WindowStartupLocation="CenterOwner" Loaded="Window_Loaded" FontSize="13">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBox Name="FilterTextBox" PreviewKeyDown="FilterTextBox_PreviewKeyDown" TextChanged="FilterTextBox_TextChanged"></TextBox>
<ListView Name="ListView" Grid.Row="1" MouseUp="ListView_MouseUp">
<ListView.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Path}"></TextBlock>
<TextBlock Grid.Column="1" Text="{Binding Input}" HorizontalAlignment="Right"></TextBlock>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</Window>

View File

@@ -1,122 +0,0 @@
using Microsoft.Win32;
using System;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows;
using System.Windows.Data;
using System.Windows.Input;
using System.Windows.Interop;
using System.Windows.Media;
namespace mpvnet
{
public partial class CommandPaletteWindow : Window
{
ICollectionView CollectionView;
public CommandPaletteWindow()
{
InitializeComponent();
CollectionViewSource collectionViewSource = new CollectionViewSource() { Source = CommandItem.Items };
CollectionView = collectionViewSource.View;
var yourCostumFilter = new Predicate<object>(item => Filter((CommandItem)item));
CollectionView.Filter = yourCostumFilter;
ListView.ItemsSource = CollectionView;
if (App.IsDarkMode)
{
ListView.Foreground = Brushes.White;
ListView.Background = Brushes.Black;
FilterTextBox.Foreground = Brushes.White;
FilterTextBox.Background = Brushes.Black;
}
}
bool Filter(CommandItem item)
{
if (item.Command == "" || item.Path == "")
return false;
string filter = FilterTextBox.Text.ToLower();
if (filter == "") return true;
if (item.Command.ToLower().Contains(filter) ||
item.Input.ToLower().Contains(filter) ||
item.Path.ToLower().Contains(filter))
return true;
return false;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
HwndSource source = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle);
source.AddHook(new HwndSourceHook(WndProc));
Keyboard.Focus(FilterTextBox);
SelectFirst();
}
void SelectFirst()
{
if (ListView.Items.Count > 0)
ListView.SelectedIndex = 0;
}
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (msg == 0x200 /*WM_MOUSEMOVE*/ && Mouse.LeftButton != MouseButtonState.Pressed)
handled = true;
return IntPtr.Zero;
}
private void FilterTextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
switch (e.Key)
{
case Key.Up:
{
int index = ListView.SelectedIndex;
index -= 1;
if (index < 0) index = 0;
ListView.SelectedIndex = index;
ListView.ScrollIntoView(ListView.SelectedItem);
}
break;
case Key.Down:
{
int index = ListView.SelectedIndex;
index += 1;
if (index > ListView.Items.Count - 1) index = ListView.Items.Count - 1;
ListView.SelectedIndex = index;
ListView.ScrollIntoView(ListView.SelectedItem);
}
break;
case Key.Escape:
Close();
break;
case Key.Enter:
Execute();
break;
}
}
void Execute()
{
if (ListView.SelectedItem != null)
{
CommandItem item = ListView.SelectedItem as CommandItem;
Close();
mp.command_string(item.Command);
}
}
private void ListView_MouseUp(object sender, MouseButtonEventArgs e)
{
Execute();
}
private void FilterTextBox_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e)
{
CollectionView.Refresh();
SelectFirst();
}
}
}

View File

@@ -1,36 +0,0 @@
<Window xmlns:Controls="clr-namespace:Controls" x:Name="ConfWindow1" x:Class="mpvnet.ConfWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:WPF="clr-namespace:WPF"
mc:Ignorable="d"
Height="500" Width="700" Loaded="ConfWindow1_Loaded" ShowInTaskbar="False"
WindowStartupLocation="CenterScreen" Title="Config Editor">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="6*" />
</Grid.ColumnDefinitions>
<Controls:SearchTextBoxUserControl HintText="Find a setting" x:Name="SearchControl" Width="250" Margin="0,20,0,10" Grid.ColumnSpan="2" />
<ScrollViewer x:Name="MainScrollViewer" VerticalScrollBarVisibility="Auto" Grid.Row="1" Grid.Column="1" Margin="0,0,0,10">
<StackPanel x:Name="MainStackPanel"></StackPanel>
</ScrollViewer>
<StackPanel Margin="20,0,0,0" Grid.Row="1">
<ListBox x:Name="FilterListBox" ItemsSource="{Binding FilterStrings}" BorderThickness="0" SelectionChanged="ListBox_SelectionChanged" Foreground="{x:Static WPF:WPF.ThemeBrush}" Background="{Binding Path=Background, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" FontSize="16" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<TextBlock x:Name="OpenSettingsTextBlock" Margin="0,30,0,0" Cursor="Hand" TextWrapping="WrapWithOverflow" Foreground="{x:Static WPF:WPF.ThemeBrush}" MouseUp="OpenSettingsTextBlock_MouseUp">Open config folder</TextBlock>
<TextBlock x:Name="ShowManualTextBlock" Margin="0,15,0,0" Cursor="Hand" TextWrapping="WrapWithOverflow" Foreground="{x:Static WPF:WPF.ThemeBrush}" MouseUp="ShowManualTextBlock_MouseUp">Show mpv manual</TextBlock>
<TextBlock x:Name="SupportTextBlock" Margin="0,15,0,0" Cursor="Hand" TextWrapping="WrapWithOverflow" Foreground="{x:Static WPF:WPF.ThemeBrush}" MouseUp="SupportTextBlock_MouseUp">Show support forum</TextBlock>
</StackPanel>
</Grid>
</Window>

View File

@@ -1,248 +0,0 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using DynamicGUI;
namespace mpvnet
{
public partial class ConfWindow : Window
{
private List<SettingBase> MpvSettingsDefinitions = Settings.LoadSettings(Properties.Resources.mpvConfToml);
private List<SettingBase> MpvNetSettingsDefinitions = Settings.LoadSettings(Properties.Resources.mpvNetConfToml);
private Dictionary<string, Dictionary<string, string>> Comments = new Dictionary<string, Dictionary<string, string>>();
public ObservableCollection<string> FilterStrings { get; } = new ObservableCollection<string>();
public ConfWindow()
{
InitializeComponent();
DataContext = this;
SearchControl.SearchTextBox.TextChanged += SearchTextBox_TextChanged;
LoadSettings(MpvSettingsDefinitions, MpvConf);
LoadSettings(MpvNetSettingsDefinitions, MpvNetConf);
SearchControl.Text = RegistryHelp.GetString(@"HKCU\Software\mpv.net", "config editor search");
if (App.IsDarkMode)
{
Foreground = Brushes.White;
Foreground2 = Brushes.Silver;
Background = Brushes.Black;
}
}
public Brush Foreground2 {
get { return (Brush)GetValue(Foreground2Property); }
set { SetValue(Foreground2Property, value); }
}
public static readonly DependencyProperty Foreground2Property =
DependencyProperty.Register("Foreground2", typeof(Brush), typeof(ConfWindow), new PropertyMetadata(Brushes.DarkSlateGray));
private void LoadSettings(List<SettingBase> settingsDefinitions,
Dictionary<string, string> confSettings)
{
foreach (var setting in settingsDefinitions)
{
if (!FilterStrings.Contains(setting.Filter))
FilterStrings.Add(setting.Filter);
foreach (var pair in confSettings)
{
if (setting.Name == pair.Key)
{
setting.Value = pair.Value;
setting.StartValue = pair.Value;
continue;
}
}
switch (setting)
{
case StringSetting s:
var sc = new StringSettingControl(s);
sc.TitleTextBox.Foreground = WPF.WPF.ThemeBrush;
MainStackPanel.Children.Add(sc);
break;
case OptionSetting s:
var oc = new OptionSettingControl(s);
oc.TitleTextBox.Foreground = WPF.WPF.ThemeBrush;
MainStackPanel.Children.Add(oc);
break;
}
}
}
private Dictionary<string, string> _mpvConf;
public Dictionary<string, string> MpvConf {
get {
if (_mpvConf == null) _mpvConf = LoadConf(mp.MpvConfPath);
return _mpvConf;
}
}
private Dictionary<string, string> _mpvNetConf;
public Dictionary<string, string> MpvNetConf {
get {
if (_mpvNetConf == null) _mpvNetConf = LoadConf(mp.MpvNetConfPath);
return _mpvNetConf;
}
}
private Dictionary<string, string> LoadConf(string filePath)
{
Dictionary<string, string> conf = new Dictionary<string, string>();
Comments[filePath] = new Dictionary<string, string>();
if (File.Exists(filePath))
{
foreach (string i in File.ReadAllLines(filePath))
{
if (i.Contains("="))
{
int pos = i.IndexOf("=");
string left = i.Substring(0, pos).Replace(" ", "").ToLower();
string right = i.Substring(pos + 1).Trim();
if (left.StartsWith("#"))
{
Comments[filePath][left.TrimStart('#')] = right;
continue;
}
if (left == "fs") left = "fullscreen";
if (left == "loop") left = "loop-file";
conf[left] = right;
}
}
}
return conf;
}
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
WriteToDisk();
RegistryHelp.SetObject(@"HKCU\Software\mpv.net", "config editor search", SearchControl.Text);
}
void WriteToDisk()
{
bool isDirty = false;
foreach (SettingBase i in MpvSettingsDefinitions)
if (i.StartValue != i.Value)
isDirty = true;
foreach (SettingBase i in MpvNetSettingsDefinitions)
if (i.StartValue != i.Value)
isDirty = true;
if (!isDirty)
return;
WriteToDisk(mp.MpvConfPath, MpvConf, MpvSettingsDefinitions);
WriteToDisk(mp.MpvNetConfPath, MpvNetConf, MpvNetSettingsDefinitions);
Msg.Show("Changes will be available on next mpv.net startup.");
}
void WriteToDisk(string filePath,
Dictionary<string, string> confSettings,
List<SettingBase> settings)
{
string content = "";
foreach (var i in Comments[filePath])
content += $"#{i.Key} = {i.Value}\r\n";
foreach (var setting in settings)
{
if ((setting.Value ?? "") != setting.Default)
confSettings[setting.Name] = setting.Value;
if (confSettings.ContainsKey(setting.Name) &&
(setting.Value ?? "") == setting.Default ||
(setting.Value ?? "") == "")
{
confSettings.Remove(setting.Name);
}
}
foreach (var i in confSettings)
content = content + $"{i.Key} = {i.Value}\r\n";
File.WriteAllText(filePath, content);
}
private void SearchTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
string activeFilter = "";
foreach (var i in FilterStrings)
if (SearchControl.Text == i + ":")
activeFilter = i;
if (activeFilter == "")
{
foreach (UIElement i in MainStackPanel.Children)
if ((i as ISettingControl).Contains(SearchControl.Text))
i.Visibility = Visibility.Visible;
else
i.Visibility = Visibility.Collapsed;
FilterListBox.SelectedItem = null;
}
else
foreach (UIElement i in MainStackPanel.Children)
if ((i as ISettingControl).SettingBase.Filter == activeFilter)
i.Visibility = Visibility.Visible;
else
i.Visibility = Visibility.Collapsed;
MainScrollViewer.ScrollToTop();
}
private void ConfWindow1_Loaded(object sender, RoutedEventArgs e)
{
SearchControl.SearchTextBox.SelectAll();
Keyboard.Focus(SearchControl.SearchTextBox);
}
private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count > 0)
SearchControl.Text = e.AddedItems[0].ToString() + ":";
}
private void OpenSettingsTextBlock_MouseUp(object sender, MouseButtonEventArgs e)
{
Process.Start(Path.GetDirectoryName(mp.MpvConfPath));
}
private void ShowManualTextBlock_MouseUp(object sender, MouseButtonEventArgs e)
{
Process.Start("https://mpv.io/manual/master/");
}
private void SupportTextBlock_MouseUp(object sender, MouseButtonEventArgs e)
{
Process.Start("https://github.com/stax76/mpv.net#Support");
}
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if (e.Key == Key.Escape)
Close();
}
}
}

View File

@@ -1,23 +0,0 @@
<Window x:Class="mpvnet.EverythingWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="Media File Search" Height="300" Width="600" ResizeMode="NoResize"
WindowStartupLocation="CenterOwner" Loaded="Window_Loaded" FontSize="13">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBox Name="FilterTextBox" PreviewKeyDown="FilterTextBox_PreviewKeyDown" TextChanged="FilterTextBox_TextChanged"></TextBox>
<ListView Name="ListView" Grid.Row="1" MouseUp="ListView_MouseUp" PreviewKeyDown="ListView_PreviewKeyDown">
<ListView.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
</Style>
</ListView.ItemContainerStyle>
</ListView>
</Grid>
</Window>

View File

@@ -1,168 +0,0 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Interop;
using System.Windows.Media;
namespace mpvnet
{
public partial class EverythingWindow : Window
{
public EverythingWindow()
{
InitializeComponent();
if (App.IsDarkMode)
{
ListView.Foreground = Brushes.White;
ListView.Background = Brushes.Black;
FilterTextBox.Foreground = Brushes.White;
FilterTextBox.Background = Brushes.Black;
}
}
const int EVERYTHING_REQUEST_FILE_NAME = 0x00000001;
const int EVERYTHING_REQUEST_PATH = 0x00000002;
const int EVERYTHING_SORT_SIZE_DESCENDING = 6;
[DllImport("Everything.dll", CharSet = CharSet.Unicode)]
public static extern int Everything_SetSearch(string lpSearchString);
[DllImport("Everything.dll")]
public static extern void Everything_SetRequestFlags(UInt32 dwRequestFlags);
[DllImport("Everything.dll")]
public static extern void Everything_SetSort(UInt32 dwSortType);
[DllImport("Everything.dll", CharSet = CharSet.Unicode)]
public static extern bool Everything_Query(bool bWait);
[DllImport("Everything.dll", CharSet = CharSet.Unicode)]
public static extern void Everything_GetResultFullPathName(UInt32 nIndex, StringBuilder lpString, UInt32 nMaxCount);
[DllImport("Everything.dll")]
public static extern bool Everything_GetResultSize(UInt32 nIndex, out long lpFileSize);
[DllImport("Everything.dll")]
public static extern UInt32 Everything_GetNumResults();
private void Window_Loaded(object sender, RoutedEventArgs e)
{
HwndSource source = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle);
source.AddHook(new HwndSourceHook(WndProc));
Keyboard.Focus(FilterTextBox);
}
void SelectFirst()
{
if (ListView.Items.Count > 0)
ListView.SelectedIndex = 0;
}
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (msg == 0x200 /*WM_MOUSEMOVE*/ && Mouse.LeftButton != MouseButtonState.Pressed)
handled = true;
return IntPtr.Zero;
}
private void FilterTextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
switch (e.Key)
{
case Key.Up:
{
int index = ListView.SelectedIndex;
index -= 1;
if (index < 0) index = 0;
ListView.SelectedIndex = index;
ListView.ScrollIntoView(ListView.SelectedItem);
}
break;
case Key.Down:
{
int index = ListView.SelectedIndex;
index += 1;
if (index > ListView.Items.Count - 1) index = ListView.Items.Count - 1;
ListView.SelectedIndex = index;
ListView.ScrollIntoView(ListView.SelectedItem);
}
break;
case Key.Escape:
Close();
break;
case Key.Enter:
Execute();
break;
}
}
private void ListView_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Escape) Close();
if (e.Key == Key.Enter) Execute();
}
void Execute()
{
if (ListView.SelectedItem != null)
mp.LoadFiles(ListView.SelectedItem as string);
Keyboard.Focus(FilterTextBox);
}
private void ListView_MouseUp(object sender, MouseButtonEventArgs e)
{
Execute();
}
private void FilterTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
string searchtext = FilterTextBox.Text;
Task.Run(() => Search(searchtext));
}
object LockObject = new object();
void Search(string searchtext)
{
lock (LockObject)
{
try
{
List<string> items = new List<string>();
UInt32 i;
const int bufsize = 500;
StringBuilder buf = new StringBuilder(bufsize);
Everything_SetSearch(searchtext);
Everything_SetRequestFlags(EVERYTHING_REQUEST_FILE_NAME | EVERYTHING_REQUEST_PATH);
Everything_SetSort(EVERYTHING_SORT_SIZE_DESCENDING);
Everything_Query(true);
for (i = 0; i < Everything_GetNumResults(); i++)
{
Everything_GetResultFullPathName(i, buf, bufsize);
string ext = Path.GetExtension(buf.ToString()).TrimStart('.').ToLower();
if (App.AudioTypes.Contains(ext) || App.VideoTypes.Contains(ext))
items.Add(buf.ToString());
if (items.Count > 100) break;
}
Application.Current.Dispatcher.Invoke(() => {
ListView.ItemsSource = items;
SelectFirst();
});
}
catch (Exception)
{
Msg.ShowError("Search query failed.",
"The search feature depends on [Everything](https://www.voidtools.com) being installed.");
}
}
}
}
}

View File

@@ -1,44 +0,0 @@
<Window xmlns:Controls="clr-namespace:Controls" x:Class="mpvnet.InputWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="Input Editor" Height="500" Width="750" FontSize="13"
Loaded="Window_Loaded" Closed="Window_Closed" ShowInTaskbar="False">
<Window.Resources>
<Style x:Key="DataGrid_Font_Centering" TargetType="{x:Type DataGridCell}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Grid Background="{TemplateBinding Background}">
<ContentPresenter VerticalAlignment="Center" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Controls:SearchTextBoxUserControl HintText="Type ? to get help." x:Name="SearchControl" Width="300" Margin="0,20,0,20" Grid.ColumnSpan="2" />
<DataGrid Grid.Row="1" x:Name="DataGrid" CommandManager.PreviewCanExecute="DataGrid_PreviewCanExecute" AutoGenerateColumns="False" CellStyle="{StaticResource DataGrid_Font_Centering}">
<DataGrid.Columns>
<DataGridTextColumn Header="Menu" Binding="{Binding Path}"/>
<DataGridTemplateColumn Header="Input">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button MinHeight="20" Click="ButtonClick">
<TextBlock Text="{Binding Input}"></TextBlock>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Command" Binding="{Binding Command}" MaxWidth="330" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>

View File

@@ -1,148 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Input;
using System.Windows.Media;
namespace mpvnet
{
public partial class InputWindow : Window
{
ICollectionView CollectionView;
string InitialInputConfContent;
public InputWindow()
{
InitializeComponent();
InitialInputConfContent = GetInputConfContent();
SearchControl.SearchTextBox.TextChanged += SearchTextBox_TextChanged;
DataGrid.SelectionMode = DataGridSelectionMode.Single;
CollectionViewSource collectionViewSource = new CollectionViewSource() { Source = CommandItem.Items };
CollectionView = collectionViewSource.View;
var yourCostumFilter = new Predicate<object>(item => Filter((CommandItem)item));
CollectionView.Filter = yourCostumFilter;
DataGrid.ItemsSource = CollectionView;
if (App.IsDarkMode)
{
Foreground = Brushes.White;
Foreground2 = Brushes.Silver;
Background = Brushes.Black;
}
}
public Brush Foreground2 {
get { return (Brush)GetValue(Foreground2Property); }
set { SetValue(Foreground2Property, value); }
}
public static readonly DependencyProperty Foreground2Property =
DependencyProperty.Register("Foreground2", typeof(Brush), typeof(InputWindow), new PropertyMetadata(Brushes.DarkSlateGray));
private void SearchTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
CollectionView.Refresh();
if (SearchControl.SearchTextBox.Text == "?")
Msg.Show("Filtering works by searching in the Input, Menu and Command but it's possible to reduce the filter scope to either of Input, Menu or Command by prefixing as follows:\n\ni <input search>\ni: <input search>\n\nm <menu search>\nm: <menu search>\n\nc <command search>\nc: <command search>\n\nIf only one character is entered the search will be performed only in the input.", "Filtering");
}
bool Filter(CommandItem item)
{
if (item.Command == "") return false;
string searchText = SearchControl.SearchTextBox.Text.ToLower();
if (searchText == "") return true;
if (searchText.StartsWith("i ") || searchText.StartsWith("i:") || searchText.Length == 1)
{
if (searchText.Length > 1)
searchText = searchText.Substring(2).Trim();
if (searchText.Length < 3)
return item.Input.ToLower().Replace("ctrl+", "").Replace("shift+", "").Replace("alt+", "").Contains(searchText);
else
return item.Input.ToLower().Contains(searchText);
}
else if (searchText.StartsWith("m ") || searchText.StartsWith("m:"))
return item.Path.ToLower().Contains(searchText.Substring(2).Trim());
else if (searchText.StartsWith("c ") || searchText.StartsWith("c:"))
return item.Command.ToLower().Contains(searchText.Substring(2).Trim());
else if (item.Command.ToLower().Contains(searchText) ||
item.Path.ToLower().Contains(searchText) ||
item.Input.ToLower().Contains(searchText))
{
return true;
}
return false;
}
private void ButtonClick(object sender, RoutedEventArgs e)
{
CommandItem item = ((Button)e.Source).DataContext as CommandItem;
if (item is null) return;
LearnWindow w = new LearnWindow();
w.Owner = this;
w.InputItem = item;
w.ShowDialog();
var items = new Dictionary<string, CommandItem>();
foreach (CommandItem i in CommandItem.Items)
if (items.ContainsKey(i.Input) && i.Input != "")
Msg.Show($"Duplicate found:\n\n{i.Input}: {i.Path}\n\n{items[i.Input].Input}: {items[i.Input].Path}\n\nPlease note that you can chain multiple commands in the same line by using a semicolon as separator.", "Duplicate Found");
else
items[i.Input] = i;
}
private void Window_Loaded(object sender, RoutedEventArgs e) => Keyboard.Focus(SearchControl.SearchTextBox);
string GetInputConfContent()
{
string text = Properties.Resources.inputConfHeader + "\r\n";
foreach (CommandItem item in CommandItem.Items)
{
string input = item.Input == "" ? "_" : item.Input;
string line = " " + input.PadRight(10);
if (item.Command.Trim() == "")
line += " ignore";
else
line += " " + item.Command.Trim();
if (item.Path.Trim() != "")
line = line.PadRight(40) + " #menu: " + item.Path;
text += line + "\r\n";
}
return text;
}
private void Window_Closed(object sender, EventArgs e)
{
if (InitialInputConfContent == GetInputConfContent()) return;
File.WriteAllText(mp.InputConfPath, GetInputConfContent());
Msg.Show("Changes will be available on next mpv.net startup.");
}
private void DataGrid_PreviewCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
DataGrid grid = (DataGrid)sender;
if (e.Command == DataGrid.DeleteCommand)
if (Msg.ShowQuestion($"Confirm to delete: {(grid.SelectedItem as CommandItem).Input} ({(grid.SelectedItem as CommandItem).Path})") != MsgResult.OK)
e.Handled = true;
}
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if (e.Key == Key.Escape)
Close();
}
}
}

View File

@@ -1,24 +0,0 @@
<Window x:Class="mpvnet.LearnWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="Learn Input" Height="200" Width="400" WindowStartupLocation="CenterOwner"
ResizeMode="NoResize" Loaded="Window_Loaded" Background="Black" MouseWheel="Window_MouseWheel">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="40" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label x:Name="MenuLabel" Grid.ColumnSpan="2" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="16"></Label>
<Label x:Name="KeyLabel" Grid.Row="1" Grid.ColumnSpan="2" Foreground="White" VerticalAlignment="Top" HorizontalAlignment="Center" FontSize="16"></Label>
<Button x:Name="ConfirmButton" Grid.Row="2" Click="ConfirmButton_Click">Confirm</Button>
<Button x:Name="ClearButton" Grid.Row="2" Click="ClearButton_Click" Grid.Column="1">Clear</Button>
</Grid>
</Window>

View File

@@ -1,299 +0,0 @@
using System;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Input;
using System.Windows.Interop;
using WF = System.Windows.Forms;
namespace mpvnet
{
public partial class LearnWindow : Window
{
public CommandItem InputItem { get; set; }
public string NewKey { get; set; } = "";
public LearnWindow()
{
InitializeComponent();
}
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
WF.Message m = new WF.Message();
m.HWnd = hwnd;
m.Msg = msg;
m.WParam = wParam;
m.LParam = lParam;
ProcessKeyEventArgs(ref m);
return m.Result;
}
void OnKeyUp(WF.KeyEventArgs e)
{
if (e.KeyCode == WF.Keys.ControlKey || e.KeyCode == WF.Keys.ShiftKey ||
e.KeyCode == WF.Keys.Menu || e.KeyCode == WF.Keys.None)
return;
string text = "";
uint charValue = MapVirtualKey((uint)e.KeyCode, 2);
if (charValue == 0 || (charValue & 1 << 31) == 1 << 31)
text = e.KeyCode.ToString().Trim();
else
try {
text = Convert.ToChar(charValue).ToString().ToLower().Trim();
}
catch {}
for (int i = 0; i < 13; i++)
if ("D" + i.ToString() == text)
text = text.Substring(1);
switch (e.KeyCode)
{
case WF.Keys.NumPad0:
case WF.Keys.NumPad1:
case WF.Keys.NumPad2:
case WF.Keys.NumPad3:
case WF.Keys.NumPad4:
case WF.Keys.NumPad5:
case WF.Keys.NumPad6:
case WF.Keys.NumPad7:
case WF.Keys.NumPad8:
case WF.Keys.NumPad9:
text = "KP" + e.KeyCode.ToString()[6].ToString(); break;
case WF.Keys.Space:
text = "Space"; break;
case WF.Keys.Enter:
text = "Enter"; break;
case WF.Keys.Tab:
text = "Tab"; break;
case WF.Keys.Back:
text = "BS"; break;
case WF.Keys.Delete:
text = "Del"; break;
case WF.Keys.Insert:
text = "Ins"; break;
case WF.Keys.Home:
text = "Home"; break;
case WF.Keys.End:
text = "End"; break;
case WF.Keys.PageUp:
text = "PGUP"; break;
case WF.Keys.PageDown:
text = "PGDWN"; break;
case WF.Keys.Escape:
text = "Esc"; break;
case WF.Keys.PrintScreen:
text = "Print"; break;
case WF.Keys.Play:
text = "Play"; break;
case WF.Keys.Pause:
text = "Pause"; break;
case WF.Keys.MediaPlayPause:
text = "PlayPause"; break;
case WF.Keys.MediaStop:
text = "Stop"; break;
case WF.Keys.MediaNextTrack:
text = "Next"; break;
case WF.Keys.MediaPreviousTrack:
text = "Prev"; break;
case WF.Keys.VolumeUp:
text = "Volume_Up"; break;
case WF.Keys.VolumeDown:
text = "Volume_Down"; break;
case WF.Keys.VolumeMute:
text = "Mute"; break;
case WF.Keys.BrowserHome:
text = "Homepage"; break;
case WF.Keys.LaunchMail:
text = "Mail"; break;
case WF.Keys.BrowserFavorites:
text = "Favorites"; break;
case WF.Keys.BrowserSearch:
text = "Search"; break;
case WF.Keys.Sleep:
text = "Sleep"; break;
case WF.Keys.Cancel:
text = "Cancel"; break;
}
bool shiftWasHandled = false;
bool isAlt = GetKeyState(18) < (short)0;
bool isShift = GetKeyState(16) < (short)0;
bool isCtrl = GetKeyState(17) < (short)0;
if (text.Length == 1 && isShift && text[0] != GetModifiedKey(text[0]))
{
text = GetModifiedKey(text[0]).ToString();
shiftWasHandled = true;
}
if (text == "#") text = "Sharp";
if (isAlt) text = "Alt+" + text;
if (isShift && !shiftWasHandled) text = "Shift+" + text;
if (isCtrl) text = "Ctrl+" + text;
if (!string.IsNullOrEmpty(text))
SetKey(text);
}
void SetKey(string key)
{
NewKey = key;
MenuLabel.Content = InputItem.Path;
KeyLabel.Content = key;
}
[DllImport("user32.dll")]
static extern uint MapVirtualKey(uint uCode, uint uMapType);
public static WF.Keys ModifierKeys {
get {
WF.Keys keys = WF.Keys.None;
if (GetKeyState(17) < (short)0)
keys |= WF.Keys.Control;
if (GetKeyState(16) < (short)0)
keys |= WF.Keys.Shift;
if (GetKeyState(18) < (short)0)
keys |= WF.Keys.Alt;
return keys;
}
}
public static char GetModifiedKey(char c)
{
short vkKeyScanResult = VkKeyScan(c);
if (vkKeyScanResult == -1)
return c;
uint code = (uint)vkKeyScanResult & 0xff;
byte[] b = new byte[256];
b[0x10] = 0x80;
uint r;
if (1 != ToAscii(code, code, b, out r, 0))
return c;
return (char)r;
}
void ProcessKeyEventArgs(ref WF.Message m)
{
int WM_KEYUP = 0x0101, WM_SYSKEYUP = 0x0105, WM_APPCOMMAND = 0x0319;
if (m.Msg == WM_KEYUP || m.Msg == WM_SYSKEYUP)
OnKeyUp(new WF.KeyEventArgs((WF.Keys)(unchecked((int)(long)m.WParam)) | ModifierKeys));
else if (m.Msg == WM_APPCOMMAND)
{
switch ((AppCommand)(m.LParam.ToInt32() >> 16))
{
case AppCommand.MEDIA_CHANNEL_DOWN:
SetKey("Channel_Down");
break;
case AppCommand.MEDIA_CHANNEL_UP:
SetKey("Channel_Up");
break;
case AppCommand.MEDIA_FAST_FORWARD:
SetKey("Forward");
break;
case AppCommand.MEDIA_REWIND:
SetKey("Rewind");
break;
case AppCommand.MEDIA_PAUSE:
SetKey("Pause");
break;
case AppCommand.MEDIA_PLAY:
SetKey("Play");
break;
case AppCommand.MEDIA_PLAY_PAUSE:
SetKey("PlayPause");
break;
case AppCommand.MEDIA_NEXTTRACK:
SetKey("Next");
break;
case AppCommand.MEDIA_PREVIOUSTRACK:
SetKey("Prev");
break;
case AppCommand.MEDIA_RECORD:
SetKey("Record");
break;
case AppCommand.MEDIA_STOP:
SetKey("Stop");
break;
case AppCommand.VolumeUp:
SetKey("Volume_Up");
break;
case AppCommand.VolumeDown:
SetKey("Volume_Down");
break;
case AppCommand.VolumeMute:
SetKey("Mute");
break;
}
}
}
internal enum AppCommand
{
MEDIA_CHANNEL_DOWN = 52,
MEDIA_CHANNEL_UP = 51,
MEDIA_FAST_FORWARD = 49,
MEDIA_NEXTTRACK = 11,
MEDIA_PAUSE = 47,
MEDIA_PLAY = 46,
MEDIA_PLAY_PAUSE = 14,
MEDIA_PREVIOUSTRACK = 12,
MEDIA_RECORD = 48,
MEDIA_REWIND = 50,
MEDIA_STOP = 13,
VolumeMute = 8,
VolumeDown = 9,
VolumeUp = 10
}
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern short GetKeyState(int keyCode);
[DllImport("user32.dll")]
static extern short VkKeyScan(char c);
[DllImport("user32.dll", SetLastError = true)]
static extern int ToAscii(uint uVirtKey,
uint uScanCode,
byte[] lpKeyState,
out uint lpChar,
uint flags);
private void Window_Loaded(object sender, RoutedEventArgs e)
{
HwndSource source = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle);
source.AddHook(new HwndSourceHook(WndProc));
SetKey(InputItem.Input);
}
private void ConfirmButton_Click(object sender, RoutedEventArgs e)
{
InputItem.Input = NewKey;
Close();
}
private void ClearButton_Click(object sender, RoutedEventArgs e)
{
InputItem.Input = "_";
Close();
}
private void Window_MouseWheel(object sender, MouseWheelEventArgs e)
{
if (e.Delta > 0)
SetKey("WHEEL_UP");
else
SetKey("WHEEL_DOWN");
}
}
}

View File

@@ -1,187 +0,0 @@
using System;
using System.Runtime.InteropServices;
namespace mpvnet
{
public class libmpv
{
[DllImport("mpv-1.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr mpv_create();
[DllImport("mpv-1.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int mpv_initialize(IntPtr mpvHandle);
[DllImport("mpv-1.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int mpv_command(IntPtr mpvHandle, IntPtr strings);
[DllImport("mpv-1.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int mpv_command_string(IntPtr mpvHandle, [MarshalAs(UnmanagedType.LPUTF8Str)] string command);
[DllImport("mpv-1.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int mpv_terminate_destroy(IntPtr mpvHandle);
[DllImport("mpv-1.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int mpv_set_option(IntPtr mpvHandle, byte[] name, mpv_format format, ref long data);
[DllImport("mpv-1.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int mpv_set_option_string(IntPtr mpvHandle, byte[] name, byte[] value);
[DllImport("mpv-1.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int mpv_get_property(IntPtr mpvHandle, byte[] name, mpv_format format, out IntPtr data);
[DllImport("mpv-1.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int mpv_get_property(IntPtr mpvHandle, byte[] name, mpv_format format, ref double data);
[DllImport("mpv-1.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int mpv_set_property(IntPtr mpvHandle, byte[] name, mpv_format format, ref byte[] data);
[DllImport("mpv-1.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int mpv_set_property(IntPtr mpvHandle, byte[] name, mpv_format format, ref Int64 data);
[DllImport("mpv-1.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int mpv_observe_property(
IntPtr mpvHandle,
UInt64 reply_userdata,
[MarshalAs(UnmanagedType.LPUTF8Str)] string name,
mpv_format format);
[DllImport("mpv-1.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int mpv_unobserve_property(IntPtr mpvHandle, UInt64 registered_reply_userdata);
[DllImport("mpv-1.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void mpv_free(IntPtr data);
[DllImport("mpv-1.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr mpv_wait_event(IntPtr mpvHandle, double timeout);
public enum mpv_error
{
MPV_ERROR_SUCCESS = 0,
MPV_ERROR_EVENT_QUEUE_FULL = -1,
MPV_ERROR_NOMEM = -2,
MPV_ERROR_UNINITIALIZED = -3,
MPV_ERROR_INVALID_PARAMETER = -4,
MPV_ERROR_OPTION_NOT_FOUND = -5,
MPV_ERROR_OPTION_FORMAT = -6,
MPV_ERROR_OPTION_ERROR = -7,
MPV_ERROR_PROPERTY_NOT_FOUND = -8,
MPV_ERROR_PROPERTY_FORMAT = -9,
MPV_ERROR_PROPERTY_UNAVAILABLE = -10,
MPV_ERROR_PROPERTY_ERROR = -11,
MPV_ERROR_COMMAND = -12,
MPV_ERROR_LOADING_FAILED = -13,
MPV_ERROR_AO_INIT_FAILED = -14,
MPV_ERROR_VO_INIT_FAILED = -15,
MPV_ERROR_NOTHING_TO_PLAY = -16,
MPV_ERROR_UNKNOWN_FORMAT = -17,
MPV_ERROR_UNSUPPORTED = -18,
MPV_ERROR_NOT_IMPLEMENTED = -19,
MPV_ERROR_GENERIC = -20
}
public enum mpv_event_id
{
MPV_EVENT_NONE = 0,
MPV_EVENT_SHUTDOWN = 1,
MPV_EVENT_LOG_MESSAGE = 2,
MPV_EVENT_GET_PROPERTY_REPLY = 3,
MPV_EVENT_SET_PROPERTY_REPLY = 4,
MPV_EVENT_COMMAND_REPLY = 5,
MPV_EVENT_START_FILE = 6,
MPV_EVENT_END_FILE = 7,
MPV_EVENT_FILE_LOADED = 8,
MPV_EVENT_TRACKS_CHANGED = 9,
MPV_EVENT_TRACK_SWITCHED = 10,
MPV_EVENT_IDLE = 11,
MPV_EVENT_PAUSE = 12,
MPV_EVENT_UNPAUSE = 13,
MPV_EVENT_TICK = 14,
MPV_EVENT_SCRIPT_INPUT_DISPATCH = 15,
MPV_EVENT_CLIENT_MESSAGE = 16,
MPV_EVENT_VIDEO_RECONFIG = 17,
MPV_EVENT_AUDIO_RECONFIG = 18,
MPV_EVENT_METADATA_UPDATE = 19,
MPV_EVENT_SEEK = 20,
MPV_EVENT_PLAYBACK_RESTART = 21,
MPV_EVENT_PROPERTY_CHANGE = 22,
MPV_EVENT_CHAPTER_CHANGE = 23,
MPV_EVENT_QUEUE_OVERFLOW = 24,
MPV_EVENT_HOOK = 25
}
public enum mpv_format
{
MPV_FORMAT_NONE = 0,
MPV_FORMAT_STRING = 1,
MPV_FORMAT_OSD_STRING = 2,
MPV_FORMAT_FLAG = 3,
MPV_FORMAT_INT64 = 4,
MPV_FORMAT_DOUBLE = 5,
MPV_FORMAT_NODE = 6,
MPV_FORMAT_NODE_ARRAY = 7,
MPV_FORMAT_NODE_MAP = 8,
MPV_FORMAT_BYTE_ARRAY = 9
}
public enum mpv_log_level
{
MPV_LOG_LEVEL_NONE = 0,
MPV_LOG_LEVEL_FATAL = 10,
MPV_LOG_LEVEL_ERROR = 20,
MPV_LOG_LEVEL_WARN = 30,
MPV_LOG_LEVEL_INFO = 40,
MPV_LOG_LEVEL_V = 50,
MPV_LOG_LEVEL_DEBUG = 60,
MPV_LOG_LEVEL_TRACE = 70,
}
public enum mpv_end_file_reason
{
MPV_END_FILE_REASON_EOF = 0,
MPV_END_FILE_REASON_STOP = 2,
MPV_END_FILE_REASON_QUIT = 3,
MPV_END_FILE_REASON_ERROR = 4,
MPV_END_FILE_REASON_REDIRECT = 5
}
[StructLayout(LayoutKind.Sequential)]
public struct mpv_event_log_message
{
public string prefix;
public string level;
public string text;
public mpv_log_level log_level;
}
[StructLayout(LayoutKind.Sequential)]
public struct mpv_event
{
public mpv_event_id event_id;
public int error;
public UInt64 reply_userdata;
public IntPtr data;
}
[StructLayout(LayoutKind.Sequential)]
public struct mpv_event_client_message
{
public int num_args;
public IntPtr args;
}
[StructLayout(LayoutKind.Sequential)]
public struct mpv_event_property
{
public string name;
public mpv_format format;
public IntPtr data;
}
[StructLayout(LayoutKind.Sequential)]
public struct mpv_event_end_file
{
public int reason;
public int error;
}
}
}

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