diff --git a/package-lock.json b/package-lock.json index 698246e2..89c1fa75 100644 --- a/package-lock.json +++ b/package-lock.json @@ -430,36 +430,41 @@ "integrity": "sha512-bA+dyydTNuQtrEDJ0g9eR7XabNhvrM5yZY0hvTbNK3yvoeC73ZqMES6E1cEqH9WPxs4uMtMsOjfwS4FmluhsAA==" }, "airplay-protocol": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/airplay-protocol/-/airplay-protocol-2.0.2.tgz", - "integrity": "sha1-tbKnE3Mx9VRay+GWulaTwTI4/F4=", + "version": "github:webtorrent/airplay-protocol#a715752fc206ebbb8b2047573cdd81dded4970f5", + "from": "github:webtorrent/airplay-protocol#master", "requires": { - "bplist-creator": "^0.0.6", + "bplist-creator": "^0.0.7", "bplist-parser": "^0.1.1", - "concat-stream": "^1.5.1", - "plist": "^1.2.0", + "concat-stream": "^1.5.2", + "plist": "^2.0.1", "reverse-http": "^1.2.0" }, "dependencies": { - "plist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/plist/-/plist-1.2.0.tgz", - "integrity": "sha1-CEtQk93JJQbiWfh0uNmxr7jHlZM=", + "bplist-creator": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz", + "integrity": "sha1-N98VNgkoJLh8QvlXsBNEEXNyrkU=", "requires": { - "base64-js": "0.0.8", - "util-deprecate": "1.0.2", - "xmlbuilder": "4.0.0", + "stream-buffers": "~2.2.0" + } + }, + "plist": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-2.1.0.tgz", + "integrity": "sha1-V8zbeggh3yGDEhejytVOPhRqECU=", + "requires": { + "base64-js": "1.2.0", + "xmlbuilder": "8.2.2", "xmldom": "0.1.x" } } } }, "airplayer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/airplayer/-/airplayer-2.0.0.tgz", - "integrity": "sha1-erYtI7ltRCNBOK7BKB0uZ+8ZAlk=", + "version": "github:webtorrent/airplayer#2c0da53adea3799090e62ffae30fd5825d6ad423", + "from": "github:webtorrent/airplayer#fix-security", "requires": { - "airplay-protocol": "^2.0.2", + "airplay-protocol": "github:webtorrent/airplay-protocol#master", "appendable-cli-menu": "^2.0.0", "bonjour": "^3.3.1", "internal-ip": "^1.2.0", @@ -610,11 +615,6 @@ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, - "ar-async": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/ar-async/-/ar-async-0.1.4.tgz", - "integrity": "sha1-kvdtYlMjrA0qLeuJnCexD8nOoOA=" - }, "arch": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz", @@ -939,9 +939,9 @@ "optional": true }, "base64-js": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", - "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz", + "integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=" }, "bcrypt-pbkdf": { "version": "1.0.2", @@ -1105,6 +1105,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=", + "dev": true, "requires": { "readable-stream": "~2.0.5" }, @@ -1112,12 +1113,14 @@ "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true }, "readable-stream": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -1130,7 +1133,8 @@ "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true } } }, @@ -1284,6 +1288,7 @@ "version": "0.0.6", "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.6.tgz", "integrity": "sha1-/vBpvuhZdbLdzCJkqqfFDcF6PH4=", + "optional": true, "requires": { "stream-buffers": "~2.2.0" } @@ -1630,9 +1635,9 @@ } }, "chrome-dgram": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/chrome-dgram/-/chrome-dgram-3.0.2.tgz", - "integrity": "sha512-Ay741EHF/Ib18un+LUtBNK43NrabD6GOuwVaka7uUbV0gFRLEPULm2Q05YSzRNBtSrbaO4eErmDdniiy/u8Lig==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/chrome-dgram/-/chrome-dgram-3.0.3.tgz", + "integrity": "sha512-rktbTuXuzriInBm9qESjTqRhnscp26gAdsQnUSWIY4a3miF9gnFOBGib+DO0zcJ0ZF2wj6wwQrPgyWfT4+as3g==", "requires": { "inherits": "^2.0.1", "run-series": "^1.1.2" @@ -2040,9 +2045,9 @@ } }, "create-torrent": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/create-torrent/-/create-torrent-4.3.1.tgz", - "integrity": "sha512-DRqdATpNJ9/N3p3wSmv8qDGApat2f615SCho9aH398rjiO0kZbKTVXEqFIvO1idbrjF/MN46dNGFVYr2gHVpsQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/create-torrent/-/create-torrent-4.4.1.tgz", + "integrity": "sha512-LuoXnCRMKEo3KR3jEbCRpP3Nu2TUhLTlb/axP9+rl+ouhBpxTaHaTTN1bdUS2x2VK3wWyCBl1OZHyHhlRBntWg==", "requires": { "bencode": "^2.0.0", "block-stream2": "^2.0.0", @@ -2568,9 +2573,9 @@ "dev": true }, "electron": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/electron/-/electron-6.0.7.tgz", - "integrity": "sha512-W0TFnJrBdYBUhzRnEqZt/CfYFmG9RwSnhhXBbOumn/qLQYr9e7kXb6z4y0XQQLhXKkDhuXp+dNqfzhtId5ZiQw==", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/electron/-/electron-6.0.8.tgz", + "integrity": "sha512-RbGDT0kySEvUFvk1nEw/theCGIVRhUcwZdtShm81r3gz1Z1qQZuL+XxVObygCBtNOQmn0CJZAjRDGOK5XKuIMA==", "dev": true, "requires": { "@types/node": "^10.12.18", @@ -2782,9 +2787,9 @@ } }, "electron-osx-sign": { - "version": "0.4.12", - "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.12.tgz", - "integrity": "sha512-L/+VcwO76EtP+E4Gh/HJH0exaKeYLPZlNNBFdl+Vw3il9jRBRjInpqtegLAu8t/cGGJn+tZ47Uc6mymQYNpJ6g==", + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.13.tgz", + "integrity": "sha512-+44lasF26lSBLh9HDG6TGpPjuqqtWGD9Pcp+YglE8gyf1OGYdbW8UCIshKPh69O/AcdvDB0ohaTYQz3nbGPbtw==", "dev": true, "requires": { "bluebird": "^3.5.0", @@ -2796,9 +2801,9 @@ } }, "electron-packager": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/electron-packager/-/electron-packager-14.0.5.tgz", - "integrity": "sha512-vgCUVGcT5Ig/vartQVSkfs8MbsYxAYgIt2zom4pVNrNBJKSxUSS+OT8Tdq87aJvY3R0SHuLqhfY9lpw3yw/Iug==", + "version": "14.0.6", + "resolved": "https://registry.npmjs.org/electron-packager/-/electron-packager-14.0.6.tgz", + "integrity": "sha512-X+ikV+TnnNkIrK93vOjsjPeykCQBFxBS7LXKMTE1s62rXWirGMdjWL+edVkBOMRkH0ROJyFmWM28Dpj6sfEg+A==", "dev": true, "requires": { "@electron/get": "^1.3.0", @@ -3956,7 +3961,8 @@ "fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true }, "fs-extra": { "version": "4.0.3", @@ -5435,11 +5441,6 @@ "resolved": "https://registry.npmjs.org/location-history/-/location-history-1.1.1.tgz", "integrity": "sha512-RcT2NIWJJOBIsTBqNLXCuFxcgLMAMk7Nijbx/+c00QiwIHXzExBcxiAlN9GI97/ZtDqz7bvO5M4udLWaisdmtQ==" }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" - }, "lodash._reinterpolate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", @@ -5925,16 +5926,16 @@ } }, "music-metadata": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-4.5.0.tgz", - "integrity": "sha512-/Zl6PkgQ4A6CDhDrY9wi5A/VDAAl7rNYCqZegBoOk8+QxQOpS1ebuKZYpJA7L2dJD8L7wgPIlltsCsdu7izKEQ==", + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-4.5.3.tgz", + "integrity": "sha512-VXIr9hGJyxcdyqOlUmn+c4wM8f1FAyLyxV12L1pYC5Zb/MKElrh2JmGTLBSy23DN27uBA4QbqhfOOtkvd9H6Mw==", "requires": { "content-type": "^1.0.4", "debug": "^4.1.0", "file-type": "^12.1.0", "media-typer": "^1.1.0", - "strtok3": "^3.0.0", - "token-types": "^1.0.1" + "strtok3": "^3.0.1", + "token-types": "^1.0.3" }, "dependencies": { "debug": { @@ -6019,33 +6020,6 @@ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, - "nobin-debian-installer": { - "version": "github:webtorrent/nobin-debian-installer#8b3d5e9489bf53dcb590636f8fa0e777b9eae6e6", - "from": "github:webtorrent/nobin-debian-installer", - "requires": { - "ar-async": "^0.1.4", - "async": "^2.0.0-rc.2", - "debug": "^2.2.0", - "glob": "^7.1.4", - "mkdirp": "^0.5.1", - "tar-stream": "^1.3.2" - }, - "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "requires": { - "lodash": "^4.17.14" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" - } - } - }, "node-fetch": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", @@ -7804,6 +7778,11 @@ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", "dev": true }, + "queue-microtask": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.1.2.tgz", + "integrity": "sha512-F9wwNePtXrzZenAB3ax0Y8TSKGvuB7Qw16J30hspEUTbfUM+H827XyN3rlpwhVmtm5wuZtbKIHjOnwDn7MUxWQ==" + }, "random-access-file": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/random-access-file/-/random-access-file-2.1.3.tgz", @@ -9117,12 +9096,12 @@ "dev": true }, "strtok3": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-3.0.0.tgz", - "integrity": "sha512-Sm17gVuapi4jR5cE6UnYhstZ7jGeH9a/eM7Sbg5IDk6bw3Z7FF0UTA1tnZo2Gt7OmY+/O9kVAnAGJ9mglvf36w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-3.0.1.tgz", + "integrity": "sha512-1aRPsZAxNJ8xo0UPpJgI7VRLZsjal0lvjkF4kIvHL6u3RxHM+hbenfJA0hVmwoUcjbvHuo/HqeB+tTUYx2FciA==", "requires": { "debug": "^4.1.1", - "then-read-stream": "^2.0.0", + "then-read-stream": "^2.0.6", "token-types": "^1.0.1" }, "dependencies": { @@ -9254,6 +9233,7 @@ "version": "1.6.2", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, "requires": { "bl": "^1.0.0", "buffer-alloc": "^1.2.0", @@ -9317,9 +9297,9 @@ "dev": true }, "then-read-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/then-read-stream/-/then-read-stream-2.0.0.tgz", - "integrity": "sha512-mdQRdZ+71UVL9H6y2bRt/SlpIgzi223LEx8gxbRCfVURnXrokMYo1w+jNcATTZLR25kVUb+h8X6BlmoW4173fQ==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/then-read-stream/-/then-read-stream-2.0.6.tgz", + "integrity": "sha512-5HA8j7O3NL6P4Pi0IzZx8/t46sK0+h3n+P/P0Yzi11ODwR+ZWjG+KILzLXPvJM7PvYjK7sDKfcN1YVCNGbPNEQ==" }, "thirty-two": { "version": "1.0.2", @@ -9433,7 +9413,8 @@ "to-buffer": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true }, "to-fast-properties": { "version": "2.0.0", @@ -9500,9 +9481,9 @@ } }, "token-types": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-1.0.2.tgz", - "integrity": "sha512-LIPDJaj2AfarYhA08cUguadmGDo3DGeDQmg4w12H76yDntpjJudX4RqTpxRjLhvYCUrzHTcXk1k2/AZqSV8HcA==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-1.0.3.tgz", + "integrity": "sha512-8THi5oekS/TLE01xOMknevTgHwVEcWOsO3zlqxGvzAz+tjZGiACyjcZuH1LTJuHvqmb8SsX/BeqcfQA0JRwqzA==" }, "torrent-discovery": { "version": "9.2.1", @@ -9909,9 +9890,9 @@ "dev": true }, "ut_metadata": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/ut_metadata/-/ut_metadata-3.4.1.tgz", - "integrity": "sha512-se4H/Hg4KYtVxF6qenCKoXGcAGtW7n/lhCWZrYvDMPb2NbHJo6C53CIkK+x12/LAlt6hNhMFVpHGV4CdHwZrEw==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/ut_metadata/-/ut_metadata-3.5.0.tgz", + "integrity": "sha512-eqiRaDYiDl94uVB9oR8Yor+xl0rSKUovsqDxMt+hXzJt1yLYAo0HksVLlSiPPwkXBGFpERQADPanCi0EGhixnw==", "requires": { "bencode": "^2.0.0", "bitfield": "^3.0.0", @@ -10257,9 +10238,9 @@ } }, "webtorrent": { - "version": "0.107.7", - "resolved": "https://registry.npmjs.org/webtorrent/-/webtorrent-0.107.7.tgz", - "integrity": "sha512-DR7eF9h5hKdaoU3t2ACEL03HY+tKr6aECKszL1Xq8c/vrCDpJ6ZqWDVc2KBxvxkoTZcQ6QR1G3iLZesh/uWZjg==", + "version": "0.107.13", + "resolved": "https://registry.npmjs.org/webtorrent/-/webtorrent-0.107.13.tgz", + "integrity": "sha512-iiHOEXIdgo/IykQ+63jtXvKE0akOTO6icG6sHqNglaEwGLI2vMLdM64lMfnYt24Kzd2j0kP8JOz/s6+lj2+HYQ==", "requires": { "addr-to-ip-port": "^1.4.2", "bitfield": "^3.0.0", @@ -10292,7 +10273,7 @@ "simple-concat": "^1.0.0", "simple-get": "^3.0.1", "simple-peer": "^9.0.0", - "simple-sha1": "^3.0.0", + "simple-sha1": "^3.0.1", "speedometer": "^1.0.0", "stream-to-blob": "^2.0.0", "stream-to-blob-url": "^3.0.0", @@ -10341,6 +10322,15 @@ "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } + }, + "simple-sha1": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/simple-sha1/-/simple-sha1-3.0.1.tgz", + "integrity": "sha512-q7ehqWfHc1VhOm7sW099YDZ4I0yYX7rqyhqqhHV1IYeUTjPOhHyD3mXvv8k2P+rO7+7c8R4/D+8ffzC9BE7Cqg==", + "requires": { + "queue-microtask": "^1.1.2", + "rusha": "^0.8.1" + } } } }, @@ -10556,12 +10546,9 @@ } }, "xmlbuilder": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.0.0.tgz", - "integrity": "sha1-mLj2UcowqmJANvEn0RzGbce5B6M=", - "requires": { - "lodash": "^3.5.0" - } + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", + "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=" }, "xmldom": { "version": "0.1.27", diff --git a/package.json b/package.json index 4cb25478..6f9a1237 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "url": "https://github.com/webtorrent/webtorrent-desktop/issues" }, "dependencies": { - "airplayer": "^2.0.0", + "airplayer": "github:webtorrent/airplayer#fix-security", "application-config": "^1.0.1", "arch": "^2.1.1", "auto-launch": "^5.0.5", @@ -20,7 +20,7 @@ "chokidar": "^3.0.2", "chromecasts": "^1.9.1", "cp-file": "^7.0.0", - "create-torrent": "^4.3.1", + "create-torrent": "^4.4.1", "debounce": "^1.2.0", "deep-equal": "^1.1.0", "dlnacasts": "^0.1.0", @@ -32,7 +32,7 @@ "location-history": "^1.1.1", "material-ui": "^0.20.2", "mkdirp": "^0.5.1", - "music-metadata": "^4.5.0", + "music-metadata": "^4.5.3", "network-address": "^1.1.2", "parse-torrent": "^7.0.1", "prettier-bytes": "^1.0.4", @@ -46,7 +46,7 @@ "simple-get": "^3.0.3", "srt-to-vtt": "^1.1.3", "vlc-command": "^1.2.0", - "webtorrent": ">=0.107.7", + "webtorrent": ">=0.107.12", "winreg": "^1.2.4" }, "devDependencies": { @@ -54,10 +54,10 @@ "buble": "^0.19.8", "cross-zip": "^2.1.6", "depcheck": "^0.8.3", - "electron": "~6.0.7", + "electron": "~6.0.8", "electron-installer-debian": "^2.0.0", - "electron-osx-sign": "^0.4.12", - "electron-packager": "^14.0.5", + "electron-osx-sign": "^0.4.13", + "electron-packager": "^14.0.6", "electron-winstaller": "^4.0.0", "gh-release": "^3.5.0", "minimist": "^1.2.0", diff --git a/src/config.js b/src/config.js index 722e3e27..73f1db1b 100644 --- a/src/config.js +++ b/src/config.js @@ -73,8 +73,10 @@ module.exports = { GITHUB_URL: 'https://github.com/webtorrent/webtorrent-desktop', GITHUB_URL_ISSUES: 'https://github.com/webtorrent/webtorrent-desktop/issues', GITHUB_URL_RAW: 'https://raw.githubusercontent.com/webtorrent/webtorrent-desktop/master', + GITHUB_URL_RELEASES: 'https://github.com/webtorrent/webtorrent-desktop/releases', HOME_PAGE_URL: 'https://webtorrent.io', + TWITTER_PAGE_URL: 'https://twitter.com/WebTorrentApp', IS_PORTABLE: IS_PORTABLE, IS_PRODUCTION: IS_PRODUCTION, diff --git a/src/main/menu.js b/src/main/menu.js index b9a6f3b4..c93a234f 100644 --- a/src/main/menu.js +++ b/src/main/menu.js @@ -302,6 +302,13 @@ function getMenuTemplate () { shell.openExternal(config.HOME_PAGE_URL) } }, + { + label: 'Release Notes', + click: () => { + const shell = require('./shell') + shell.openExternal(config.GITHUB_URL_RELEASES) + } + }, { label: 'Contribute on GitHub', click: () => { @@ -318,6 +325,13 @@ function getMenuTemplate () { const shell = require('./shell') shell.openExternal(config.GITHUB_URL_ISSUES) } + }, + { + label: 'Follow us on Twitter', + click: () => { + const shell = require('./shell') + shell.openExternal(config.TWITTER_PAGE_URL) + } } ] } diff --git a/src/renderer/components/open-torrent-address-modal.js b/src/renderer/components/open-torrent-address-modal.js index 01cb5a04..4e478736 100644 --- a/src/renderer/components/open-torrent-address-modal.js +++ b/src/renderer/components/open-torrent-address-modal.js @@ -1,8 +1,10 @@ const React = require('react') const TextField = require('material-ui/TextField').default +const { clipboard } = require('electron') const ModalOKCancel = require('./modal-ok-cancel') const { dispatch, dispatcher } = require('../lib/dispatcher') +const { isMagnetLink } = require('../lib/torrent-player') module.exports = class OpenTorrentAddressModal extends React.Component { render () { @@ -30,6 +32,12 @@ module.exports = class OpenTorrentAddressModal extends React.Component { componentDidMount () { this.torrentURL.input.focus() + const clipboardContent = clipboard.readText() + + if (isMagnetLink(clipboardContent)) { + this.torrentURL.input.value = clipboardContent + this.torrentURL.input.select() + } } } diff --git a/src/renderer/lib/state.js b/src/renderer/lib/state.js index bfbd1f2b..9e2e1a52 100644 --- a/src/renderer/lib/state.js +++ b/src/renderer/lib/state.js @@ -151,8 +151,10 @@ function setupStateSaved (cb) { }) Promise.all(tasks) - .then(() => cb(null, saved)) - .catch(err => cb(err)) + .then( + () => cb(null, saved), + err => cb(err) + ) function createTorrentObject (t) { // TODO: Doing several fs.readFileSync calls during first startup is not ideal diff --git a/src/renderer/lib/torrent-player.js b/src/renderer/lib/torrent-player.js index ab0e9702..3e8d1403 100644 --- a/src/renderer/lib/torrent-player.js +++ b/src/renderer/lib/torrent-player.js @@ -3,6 +3,7 @@ module.exports = { isVideo, isAudio, isTorrent, + isMagnetLink, isPlayableTorrentSummary } @@ -31,9 +32,15 @@ function isAudio (file) { // - a file object where obj.name is ends in .torrent // - a string that's a magnet link (magnet://...) function isTorrent (file) { - const isTorrentFile = getFileExtension(file) === '.torrent' - const isMagnet = typeof file === 'string' && /^(stream-)?magnet:/.test(file) - return isTorrentFile || isMagnet + return isTorrentFile(file) || isMagnetLink(file) +} + +function isTorrentFile (file) { + return getFileExtension(file) === '.torrent' +} + +function isMagnetLink (link) { + return typeof link === 'string' && /^(stream-)?magnet:/.test(link) } function getFileExtension (file) { diff --git a/src/renderer/webtorrent.js b/src/renderer/webtorrent.js index 8493cf8a..3934ce7c 100644 --- a/src/renderer/webtorrent.js +++ b/src/renderer/webtorrent.js @@ -358,11 +358,15 @@ function getAudioMetadata (infoHash, index) { : mm.parseStream(file.createReadStream(), file.name, options) onMetaData - .then(() => { - console.log(`metadata for file='${file.name}' completed.`) - }).catch(function (err) { - return console.log('error getting audio metadata for ' + infoHash + ':' + index, err) - }) + .then( + () => console.log(`metadata for file='${file.name}' completed.`), + err => { + console.log( + `error getting audio metadata for ${infoHash}:${index}`, + err + ) + } + ) } function selectFiles (torrentOrInfoHash, selections) {