Merged 1.3.x_branch into master

This commit is contained in:
2021-03-10 19:18:10 +00:00
25 changed files with 132 additions and 102 deletions

View File

@@ -1,11 +1,20 @@
# Changelog
## 1.3.3
* \#49: Download progress is not visible if dependencies are missing
* \#51: javascript error
* \#52: Mount location is not set error on new install
* \#53: Busy notification is still visible when 'Install' button is available
* \#54: Unable to download UI update while dependencies are being checked
* Disabled 'Install' button in new release notification
## 1.3.2
* \#48: Support pinning files to cache
* Fixed Skynet export display
* Properly detect existing remote
* Reduced number of Linux binaries to:
* CentOS 7
* Solus
* CentOS 7
* Solus
* S3 mount support [disabled]
## 1.3.1

View File

@@ -12,13 +12,13 @@ Skynet support is considered EXPERIMENTAL. Files added to Skynet should not be c
* ScPrime >=1.4.1.2
## Downloads
* **Repertory UI v1.3.2 Linux
64-bit** [<Download\>](https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.3.2_linux_x86_64.AppImage)
* **Repertory UI v1.3.3 Linux
64-bit** [<Download\>](https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.3.3_linux_x86_64.AppImage)
* NOTE: Linux distributions require `fuse` and `libfuse` to be installed.
* **Repertory UI v1.3.2 OS X
64-bit** [<Download\>](https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.3.2_mac.dmg)
* **Repertory UI v1.3.2 Windows
64-bit** [<Download\>](https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.3.2_win.exe)
* **Repertory UI v1.3.3 OS X
64-bit** [<Download\>](https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.3.3_mac.dmg)
* **Repertory UI v1.3.3 Windows
64-bit** [<Download\>](https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.3.3_win.exe)
## Supported Platforms
* OS X 64-bit

View File

@@ -1,6 +1,6 @@
{
"name": "repertory-ui",
"version": "1.3.2",
"version": "1.3.3",
"private": true,
"author": "scott.e.graves@protonmail.com",
"description": "GUI for Repertory - Repertory allows you to mount Sia, Skynet, and/or ScPrime storage solutions via FUSE on Linux/OS X or via WinFSP on Windows.",

View File

@@ -1,84 +1,60 @@
{
"Locations": {
"centos7": {
"1.3.2": {
"sha256": "a8b9bff91d0f0685041737cfa40b4bc8ef765d24419104f3dd90f977023e7858",
"sig": "CBEtKUDJwjPrchhNXvzulpfaBWFElDD+Kn9b14oF426IuKncsmqTWUesG3cT/beDk1onaDOhDIchyan6iW/BCdB+sVAuGAoRpm2lJ4lWba7ZPnXP7H10uIjVf1xASwIciP4jpAUPo0bO8hi9kqu1zkF9GeVHHb+SXlLhDP31wN7kHwgb/MeZ95/NqfucumYcwfFOZOnofSKaGQwHpbypy57YzyVCf/NzQDnYC46lcH9xVMmbgodT+y5MIIF0kkSJn0DbSfxLVMWTx1pnZUzJ7J827EKUgAS4d4uLI7ShskS+d84i8rNV9gXgqwYkqDvYbdFi7ArJZB7GJtyZ4VPTqRqGfxwF8rL3K0ml+635DfEXiHN8MbTuqwLHD2giChOfsdAAV4ngJ8xg7+Th8dqpgC92GXoOjNK7GSAyrOFsQ7xeqdVOBZMNk/dHVAb9eCTbPIsOjGFTAzOk8n3roM8naDUOq7PefUj1Jb2EGVhWnwS2ngvhNfRggZmmr3l9IElddaHro0JpnubsFmiAa+akV0P8VLb1jjpIJRfr2CIEnPTQbT4UQ1DdBitgkWiPbagTp8BQF1YGcVZ8jc9mbOxmF46z0MyuMQZjDHw2Vai0uPsoLIJHhy3I7nJqsnEw6gQX/l1VGj9wPHeaqMgGYGFykFfvVssh0CH45tUCdWL6Q9Hgx8+yLw0Lky/HIGMQc0qZUM9ute/9Buifd9cOK8+S5PaA0Zg0G/pIY6fThtO86wKJQnoPeiuBkJ9yXc20ZGrfb39Qnf2nZxrPyVl2iQJlven6CDBxc88henxzvxK61bXUynK8zHVuoIAC7ejWZEbPOqDV3DOOSVDz1+eq1MU2KZ4JmaLipzbdy/y+ph1TnCGwdL9R3s+xLYSaxA+ybhQVNXHhQ7+eZD6CWXytaIVYe8giL1ki8oN/18Bm1B2dVxCZ4KKbAToFpBOGvW+w8JFAC5nBK5aj2BGWEocyWQ1XIJmqVBd8RSOMYVYjQOhVnIvyJxOqvnrLUoRzJruj8R/riuCSMnfq17ykpjCzoNzIjvimCPyAib9kdWx7M8dyOS9Sls2sMLwJvDcsGi/FfuGqBmV2v28XagRZz70iypqNaIUrj4CShfz8e110su3BtLQHr1O6yffxy+whbB7w+ogZ6gz86AZ/63Zz6xbLIk4wuNx1UL/ZuRMGq4xOW/7zRpOYYSe/h98YFd9/UTcoi8Osjl+o1eVup6YWVeDvOG69uqwfID8XHivJnEV2NVFx8fbb6fHSrMg/QbjSngdyQ3b+5rWiZG01DGCDB5RFOvEKY24qrXXWQGAx+JXbj+/7xYWts+/Fv7hSqvpvf7H8aVCoOKXGtjJiy+K/9tAJJLQDAzo=",
"1.3.3": {
"sig": "BL1hmylvFtrY5GAJaZD4m2YAgOgf21N7aCRmQmVQqDpA5tLrLhaCxJaRwQaNTXrNFnwL3YHBXJQf5cJi43dVXI7o+rcltU5QDA2Q7DvzdlaMfL9saBzxLT0D94l017XvczaxhOlypEQIUzFVQYxGzdw3Kx6fKWFySeKgS4l+SB1FTXfeYhfp2ZApOdRB1Y9BzAIN0hATm/UBcBL12FlwCl4+YV6BEIz/07I8VypwxLx68dqGCE/ucTVCf/4D00oGcWEFfrIxBnGzSLFWSyvhvyJwJWvH4VIDIP2KwlhdEs/3p0ETzSl1YbV+bOeUbUGR6Nv2ljF62Y918WOXspiC6N2bDzvpBZkkpKs0xRih4AJQDHR6gs3/43XIqrnTrKMZbZVy2JnEkl3KNGmscLjzS8lus7Wmkn8l0qyOuGY30ef4q60q55VVUw4y+Ox66WbnMYpLpSCY56iNOjw0Kp+rpV7UreLFt5UffQuWWlOttrXs1XJKO9GYv8kbognKAf8gRr7iJWMbZWe8o4++P9ziwt4nd7JlcGzxKinntB4Jn/BHYJnJKGqHhA5j8EJ1QZlu3txruKdcOPV7RpXoFEvOJZ8rji7mUUrlPGM/UJ8JhLcr8P+goKza9dFcX3pFqVHOll4pNOmpPOE+ui+UPSk0I9oCBlEvHSMijywVnwjMh2Yb+VBbuC9Hw5qK2kMZgGXpysa40WrEO5dznJclRSDChIKWVJzdvqnQ2mkR7va+4YAi7Pi/7JnJkO1gcM7O0hGz2bHeG3j7xdUvf0pS8YCcEYojJ97xnBH5UWDYXPBnMsrBMy7mwu/TH8MEGtLiC+9k6THV4Xf9ooS2roHhVskkK5u3xhNFNLxeBVBnQvk7lHynjFbjVNa3URMsD5J5SzQ8O10UhAV8vnpTD70GO25htI1MZuMgV8KPZZ5pOlUMrxqgS14obph8TxMUrD3Wy6SZrwYj/0JTY0lkfhxaXuaecoKDVtCVmiTCcioFryvMymCuz0/0FV8ctlau5Ko3W2W0wmWCVmlDSU5xEybVDegSSnI6bWPQn1SgHUC6DpaWa5LOtCMBgA84AAEMRCMDIcc1EY/VAHz/NeU9UJFESdv/uniL2wcWRq72xPYVwD5fB5YEyFgHx3UXNxhtwMWeThEaOvmHp2snOksM6RSjXVcBLkzK7JQxb25AKEo0rpgHqcVZo+pRpl/6RyXmJWQb1Fl0N6/0fDzJUS3Ji1fAw4O9T2ftrrk1WUD/PsjdaXKRJfWDNl9iWN4gbv+KZAwx+BgF+oMD4b7bOU+cQnkISzT2WD8k/S7wKhrbyMGOWwPYHnebIj0TK0QR0+RWpcP5BggGe7/YpjizvVPGBySjYTcWcig=",
"sha256": "03c29d95cb5406f90b076d633fd6a3e2f4a42a5bcf75433099453c0767acc761",
"urls": [
"https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.3.2_linux_x86_64.AppImage"
"https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.3.3_linux_x86_64.AppImage"
]
}
},
"darwin": {
"1.3.2": {
"sha256": "d8e5749a43541edaeaa91cbc81c42fb21c8e4c8446c9c1dff0a8e3a0efc23270",
"sig": "AKXLbLDnkBlB2b8dKLPZ5Vr9bcbv1dCvYGJTCltxYRJkOBzmQMTJ+ADKAtQQCfZKtNji+Dez28A401BMUY7xBd3Sh4FDnmNv64Q2zfqxQpOkhdrK8KcwK2aFCFbWn3vTnU3GBk2IXqGY8qIeR4d/v2UaBnnpK0EulztxPXojLz0pA6DVndJOodItoE6OUNohPd5MTWh5ewpjXJN+VKeao3ABkXgCzYLH/SSYCyi8ZFH8Ija20HJk8ST2QIokmRQGk5MDcyxylyWkusGOf7yn9M6vdtHNfrHfWXGxnMTuaw9+YNTuxZNDgIFpmoVx4t7HSoNti+ZZwyo+1jtDeh0xPmdEGpnZOY7zp94zlh4zP9Cx5cYg6W5/NQKQzDtlUZlELqR8Kwoa/bDCwWeSkifGqEJT2Yezs9r5llSoIh8PrxLkmdaX2vkOvaRYYE0kvdO2MllT8SSyYkum/9eD8uA52IYbUliJqfAf43gOj9n0ooRcCo45lBY5PIUB44XBLEGK15OuarybSyaBDMFbc3HWh1A9jB9kSPctnMMJMNMsocTI5AEN8eRbLyF7z01WE+nB7JDS8NW3+QRFyQInxdXpcGeKO6riuSO7aXHLWAZvUVSxThSuV7JtsugtUnIsP9ah7njtcVHOSEcUG3U2WxZRbe6PG5pdjS4Px+E9Yx35zLSwo39TcwLb2fM7mQKREsH0fUrRd4WN1T0pWOuzDlWSq4pfDXWdO8y828l8XVJzw5LUH9U0F7qAiuzEVQIYJ+xjjAp4JVJXBof4iWeW4N+7PYgntEgr94Ti6rjb6BrKWdl4B+9j79EkC2yLWafcGnryUaSfOFDFiB8Upf6NQ+a1TxY5ufFe1JfuI58rchUZi4SjNdyFMat4GSdTI6I513ZVcohBb1KVIxEM0u38hJqKIFx3stWMZrLvyFH9ceqzXzVQCIDE31usUKFsXallWMQyB2kIy7qoif7zmDhdJQZboD7ZHsTrcSK1u9D+h3oG1poN+AULmhgYZNT11ktRiVUbmzDS0qA7lnF8dcsuthj0vHP0/BFN6a7ljQuwDVY1xoeCf+RobfNWucK2MLxmqV1z9nO4jpdy/GfC/5ln4Tev+5luo5ux0BXXXAWuzGyQ0QK+13k3lIUwxsDNou0dMDHJPaMavBjmlm0Uf5esZdSIU9U2sdfuO+j/6enwGvESlrKmBCsdPatHREP931dGPZCsF1m30OylV+m7WhBh9w6AbklmjHNCZu3C2Ln23gOKGX8HpQ9nnaPCicmlfSyBjPoKVtDCACVbjwRfTJ+UXCocrCVSbAhskOSvlq050QFQcZO5DzFWdeTfG6x6MrqdSelYThjy5xn8AXuqsFSLIdYpCAQ=",
"1.3.3": {
"sha256": "7fbcca92d5d3c728e3663a4cf4035c5d1c45f4cd3a43b5dab605969aa9f95d29",
"sig": "BPM/WKDq+vueZ7YcSI3S+GbisBPsv/OjZPnyxAfHvDQst+Fjrx/9jmTJTTFMtP0xZ1RtrnmSkAwjnyTJRgEPCfe4yWsV52augPp9tvEBVKJgb5KM10h1yN0+DlNB4PMPdE6Ix520mIbQXY72BedPt3qhkom5RN/rQ/ZTHO9qmKwHpvaukh4tUsfsMlGEzjm/Bzch2qdj1pi4CGuug0KxIp23NSgk2ic4EcnVR+aa1lhEpjgE6pGg5ikQ07GR/mFkvr6xAlrEQVXuJ7qGStkXjNuNywSAhT+kUwRr1Wd43s7FEikInLLbewhXStZLG/Q9fVYFxXBoPhk6g5deshGabmNCWt/4JcYYFEq5HWCoaT/86DKQJnLZ3ZMnO/cqlj/7jbi29TmTxvoqdDADp7yRMAcM89LsjDMiFnADlnlsBhUYrM8kjJsd4VGZESviMWmls3kPr3oaZ+OjBQdcYX/bpvrFULFtRxOHYPJHJ9W1IkOd2EGYf/BcxyjRxGqI18oj3a9VaVzyM3IWm3i2Bw0ijj2GQ+p/qeyy3lzTNM25LuUe/PJF9d0wuLisTpvFyW52tNOBLqhrT2wQK8oCo95MqSNKd22vfxJzTcD8PlZSG9ZXNTrmKFbYqJmi6JptUNLVlyn1L8uyJf4S+vL8HAJ1hSqr4iJ/AIF5nMBONzE/4PCP3tathkJ67Yfw0eQbOwl7d+fXSJjZtggFUADLGcwrCLHRclSiW7/9LpL6YJD+h0Ud9ZgLNjYjU/bHL6TCqeAtbSBYG6VNFWN+s73NaBkzC2kx6HnWaa2q4AHAxoix7/LUWhdWh85XGa1UUFWtyxy+hIM3cpacKrSd3u9VdKLHL3GtdfvQjvEE/5UyjH2VzedRVZntjVlBTnVDHq/J4prBAZyA/PSOGtK1x0LmlH2UdT3QEU1WNZaag7vLKWxfPPVvO8zoJG21l8xFWfoAZ/90HA5WRxEsSavSUXzvffmv9O5C/WnWj0tNRsWYqwOYS9l7IcrUDB68V2Rws/sDG56xfgqzdZM4CjM3BBQyarVWr9wyzxAfR0VFOf7GsjF7A1OpQXPiY8pVHg7QPTUSG0Ssse1/leZnU11CEpr/v8JwmHi7LRZ0KSbUowRwPjkzVdDrRjnIQh+2ssphL5mJHNfoxNUFAbvQidN5OjzdUoqEK7H6/OjjHek9mgvJuDDYSHV5cUwgmgPFTwONarrepFThj5YwKGQhYYsCqJLZ+ZunzsjXTJ3VlIF+B0qir370oEWq9dWvaLUYkC6QCHifJ+ZVaPp/pNln7S0zh/dTGO84aKwS0hF7S0uvTTiKRXHTBDmHnmSQuoG8Fku1iqbE9fkScIYPF2wO5N7UPgU86te8/to=",
"urls": [
"https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.3.2_mac.dmg"
"https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.3.3_mac.dmg"
]
}
},
"solus": {
"1.3.2": {
"sha256": "a8b9bff91d0f0685041737cfa40b4bc8ef765d24419104f3dd90f977023e7858",
"sig": "CBEtKUDJwjPrchhNXvzulpfaBWFElDD+Kn9b14oF426IuKncsmqTWUesG3cT/beDk1onaDOhDIchyan6iW/BCdB+sVAuGAoRpm2lJ4lWba7ZPnXP7H10uIjVf1xASwIciP4jpAUPo0bO8hi9kqu1zkF9GeVHHb+SXlLhDP31wN7kHwgb/MeZ95/NqfucumYcwfFOZOnofSKaGQwHpbypy57YzyVCf/NzQDnYC46lcH9xVMmbgodT+y5MIIF0kkSJn0DbSfxLVMWTx1pnZUzJ7J827EKUgAS4d4uLI7ShskS+d84i8rNV9gXgqwYkqDvYbdFi7ArJZB7GJtyZ4VPTqRqGfxwF8rL3K0ml+635DfEXiHN8MbTuqwLHD2giChOfsdAAV4ngJ8xg7+Th8dqpgC92GXoOjNK7GSAyrOFsQ7xeqdVOBZMNk/dHVAb9eCTbPIsOjGFTAzOk8n3roM8naDUOq7PefUj1Jb2EGVhWnwS2ngvhNfRggZmmr3l9IElddaHro0JpnubsFmiAa+akV0P8VLb1jjpIJRfr2CIEnPTQbT4UQ1DdBitgkWiPbagTp8BQF1YGcVZ8jc9mbOxmF46z0MyuMQZjDHw2Vai0uPsoLIJHhy3I7nJqsnEw6gQX/l1VGj9wPHeaqMgGYGFykFfvVssh0CH45tUCdWL6Q9Hgx8+yLw0Lky/HIGMQc0qZUM9ute/9Buifd9cOK8+S5PaA0Zg0G/pIY6fThtO86wKJQnoPeiuBkJ9yXc20ZGrfb39Qnf2nZxrPyVl2iQJlven6CDBxc88henxzvxK61bXUynK8zHVuoIAC7ejWZEbPOqDV3DOOSVDz1+eq1MU2KZ4JmaLipzbdy/y+ph1TnCGwdL9R3s+xLYSaxA+ybhQVNXHhQ7+eZD6CWXytaIVYe8giL1ki8oN/18Bm1B2dVxCZ4KKbAToFpBOGvW+w8JFAC5nBK5aj2BGWEocyWQ1XIJmqVBd8RSOMYVYjQOhVnIvyJxOqvnrLUoRzJruj8R/riuCSMnfq17ykpjCzoNzIjvimCPyAib9kdWx7M8dyOS9Sls2sMLwJvDcsGi/FfuGqBmV2v28XagRZz70iypqNaIUrj4CShfz8e110su3BtLQHr1O6yffxy+whbB7w+ogZ6gz86AZ/63Zz6xbLIk4wuNx1UL/ZuRMGq4xOW/7zRpOYYSe/h98YFd9/UTcoi8Osjl+o1eVup6YWVeDvOG69uqwfID8XHivJnEV2NVFx8fbb6fHSrMg/QbjSngdyQ3b+5rWiZG01DGCDB5RFOvEKY24qrXXWQGAx+JXbj+/7xYWts+/Fv7hSqvpvf7H8aVCoOKXGtjJiy+K/9tAJJLQDAzo=",
"1.3.3": {
"sig": "BL1hmylvFtrY5GAJaZD4m2YAgOgf21N7aCRmQmVQqDpA5tLrLhaCxJaRwQaNTXrNFnwL3YHBXJQf5cJi43dVXI7o+rcltU5QDA2Q7DvzdlaMfL9saBzxLT0D94l017XvczaxhOlypEQIUzFVQYxGzdw3Kx6fKWFySeKgS4l+SB1FTXfeYhfp2ZApOdRB1Y9BzAIN0hATm/UBcBL12FlwCl4+YV6BEIz/07I8VypwxLx68dqGCE/ucTVCf/4D00oGcWEFfrIxBnGzSLFWSyvhvyJwJWvH4VIDIP2KwlhdEs/3p0ETzSl1YbV+bOeUbUGR6Nv2ljF62Y918WOXspiC6N2bDzvpBZkkpKs0xRih4AJQDHR6gs3/43XIqrnTrKMZbZVy2JnEkl3KNGmscLjzS8lus7Wmkn8l0qyOuGY30ef4q60q55VVUw4y+Ox66WbnMYpLpSCY56iNOjw0Kp+rpV7UreLFt5UffQuWWlOttrXs1XJKO9GYv8kbognKAf8gRr7iJWMbZWe8o4++P9ziwt4nd7JlcGzxKinntB4Jn/BHYJnJKGqHhA5j8EJ1QZlu3txruKdcOPV7RpXoFEvOJZ8rji7mUUrlPGM/UJ8JhLcr8P+goKza9dFcX3pFqVHOll4pNOmpPOE+ui+UPSk0I9oCBlEvHSMijywVnwjMh2Yb+VBbuC9Hw5qK2kMZgGXpysa40WrEO5dznJclRSDChIKWVJzdvqnQ2mkR7va+4YAi7Pi/7JnJkO1gcM7O0hGz2bHeG3j7xdUvf0pS8YCcEYojJ97xnBH5UWDYXPBnMsrBMy7mwu/TH8MEGtLiC+9k6THV4Xf9ooS2roHhVskkK5u3xhNFNLxeBVBnQvk7lHynjFbjVNa3URMsD5J5SzQ8O10UhAV8vnpTD70GO25htI1MZuMgV8KPZZ5pOlUMrxqgS14obph8TxMUrD3Wy6SZrwYj/0JTY0lkfhxaXuaecoKDVtCVmiTCcioFryvMymCuz0/0FV8ctlau5Ko3W2W0wmWCVmlDSU5xEybVDegSSnI6bWPQn1SgHUC6DpaWa5LOtCMBgA84AAEMRCMDIcc1EY/VAHz/NeU9UJFESdv/uniL2wcWRq72xPYVwD5fB5YEyFgHx3UXNxhtwMWeThEaOvmHp2snOksM6RSjXVcBLkzK7JQxb25AKEo0rpgHqcVZo+pRpl/6RyXmJWQb1Fl0N6/0fDzJUS3Ji1fAw4O9T2ftrrk1WUD/PsjdaXKRJfWDNl9iWN4gbv+KZAwx+BgF+oMD4b7bOU+cQnkISzT2WD8k/S7wKhrbyMGOWwPYHnebIj0TK0QR0+RWpcP5BggGe7/YpjizvVPGBySjYTcWcig=",
"sha256": "03c29d95cb5406f90b076d633fd6a3e2f4a42a5bcf75433099453c0767acc761",
"urls": [
"https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.3.2_linux_x86_64.AppImage"
"https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.3.3_linux_x86_64.AppImage"
]
}
},
"win32": {
"1.3.2": {
"sha256": "29b91fcba36fc7cac38837674559c6af1169b3dc54bd57284c3ecf44a1af869d",
"sig":"BLy7sutkbfkK39sOPPlDdn8DVoorVC7NiEl7LvCqp9Dcnt+6afmszRLFYNu0ipu2krN8HdA2uCqCS2lAlNwOzGzkCGN6RHfobHRqj/HObNrWsvGKSp+Vdt96J76TmrV/gjPGLJOBq5dobBGmN1KJSrkLpWj6IOoEuR4/7WkSJah4XWMIfVlPAZKwP6yNv6OaYqjIy74geKkoCI5/mmwDzUX/T8M3DsdSbm3kuYJ0S3E3mEO2lGH++nxDDPMdA2yjFbBwHU2RFQShbL7jB/AqodSrIU4wOstbRWiF34KUZ/KYG+ZFvwEBshbgDoZQyNbVmFDD86g/sEatnQRpN7juGBWwScgPfoTbdl9y0lf5U85dicOe7+iholAUVprLuPk9Y3NVXoBFM9g9mkqgMVoYoSUgh/BJBnomDgvt1pd4Id/CO26buhSU28fRbQ/c8i+x5zdsfqN7p/64sj/2Xp0HQMwFmc3IotjDEtUTcfI+VGP62pJLMao5vheZ8JU05GXn7ZA7Sojfov9luuoajguukXHEclaxgWKyo0u/ZcowExrKpkegxui6v/3+W/pTv/cSg01CFyJTMTvT9cT7O0bWSdUcxOgpYptV5wVOdglUm/aQscqtDVaVv90ZMNldQ2YVI6wuFTIcUpWNCa/r5oIcGVWWrxBu9uq0jLF3AoTNpLeLJuJL37KacJwNqNDUolG6bwdjvAI1cpcy7fGrzbGE95pPmHpruVfKpLpSQ7tKnT5dV9H2gQz63gl/QzvVGnov0pLUNuJwQQhdvcGZXnVcB96u0i8GBacr4WZVhhJWGWk/u5zx5ganXcXYkodDLN4zpI/aV/TdW2QH2xN8OOmQOZ8yZS9toS0vcIUeoT6eQUg5clJniKtivUv2GSldGzKG9xk3s/2IQlivOX2BxnTSYaP1AkWTUSyJeXcEYbYytLiFrMj875NxeYfKD74SGfxWh//NWyzL7GG/q8G77xw/1s4LorzhSN5jifyPgtSWI4h3WaSu6nfLJHioujAEMDwhkwP9mPmPmBUbTveKWdTZy7YQGGN+4DMJLoGQnx0qBbsIOWfmt+/cjQ72Sx8V7oRzElSohxg9q/oCKkMo4f1JuS1kOGasbPnXjjjuWTX1bOeQ86TjBi+wSt1Y5VgifvyfEdEeDvvwrcm2Cp3NnWYAXhqE5tgVUIYLEtsbHaAtWOv4XSlp8EISd1XIDeTADHNonEEWUWGjNJvylQ05iGUjQny6CObSN3gNbwL0xO/gI1o1+SR4HsM5u2leIKaD5hU/6OdsorVX53b1xPNLyLrDr1uMgfM6lGgCyrs8DY5hVIujIycTSEbaAGpMA2+ovzpa9jO/cZ0/slMMf55Roic2yCQ=",
"1.3.3": {
"sha256": "a86091d453600506cccb25759b62a638c482ce8983d24a5b3ec1def9545ae1c3",
"sig": "AeaJxYZ8LpeCAKJEeS0QmfwL894tHmJ2tHi4JRQPoPOzU2fxMSthgOIOLgeTIDuagVk4hbUeZ02Q/t53AQCcrgmyT9xxJy1/2gdkgBN4yLcD76dg9QsSIAT/D3W3oOwzvRu2GRHzKKjD+dzR2HDSbMz6YHsIJDBGqWEcd3PTJ0jREWpQm8slbNflnmMIgumRKzwws93fus4rxXqTTgl/wn01wgSbgrSjncuTRXQUtk63LofkH87g3ivLd3iHVUnCHYQlpKKUuyK1t5Prr7akcFno588k5VGmRYrXljcakobZVeG5ikCFl3+463Eq4Bf1AzMHS6jlSAyEigF10Ys0iD59DnoE2/q2GJekbW0Zjs7qWTQldJyvwa5lhsU5gOxgJYcydhmAu1jEw74jHu/XDFxIpsrfAZfowHTuItsv5kSjJAQleMtDmMnOPs+S+PDhgOTQjtksplnu3aSHdKKE88nkUdWhcddxTFqD1R6IKSBvPZGcRX17n64MnzWqq3yuSV0qAe0CgRWF7Cy48YMeaPk1V+yCkUSh2nvIkjfRc5rRv14Jh2sq03beMxnEC2n+PSV5WA85gWcmkl53iDJSfWATCq6M1rj+PzTwmnjagjnhgDDLolH/g/RWabUEA9ywG9xtJb2M0aCAY7sqeX8I5WEODkfmHTGvYi6E9L7xvpHwmYPxVr2Frs+PbKa8h5C4RLJZGQlia5Rw7i3g0byd9shpbRcrzoGEJmBbkzdMWgSwIVXPD+EqqfiTOdcmQy1JwsTF9zUx7auxXviAddr6HlXXFLt661b47WElRJGXgl1m9qi8eSYRIH0a5wF5XRU+LyCDllUTZhMNNGGP1U3azu3iYsOaYphobn/IVlZBJ4phoafr4D69PbOG+k9B4pTxwHeY7jmszUpiJMgonoftp9TLsLIzDcXBp0vEVoPE0fr1ljOAaQgdtsi0wr0Z2Nxtp5d04d/cYfvfOKx2M/uupdpmU/aBCnv79r9etnnEHhcQtpfCNAZ4567pYAiLiJ4zVEct715hZ6LN57Wx5YWfNT6aCUogWaLx0K5CaL9kv0HyllIoM5z1+7unKwmq4nSO5A1QAh67yCfPTISL2m1SIODmnYUqgBk95oX/AAEk+gaCil0b2A6JGxbI3OcUEyN4BZcWyJRL2QToEmUMNkUuK+aaQl5OTp2wNLFXO1wpqXQAVppDeY2nHqjUY9B2Wku2wFV61T1VZ9sYlGoFYjK7G6PQUsBCTmXAlpzLUjWadgWvKPyRehy4Bzdqwy+BuZ8BEC+txUDnh90jUqd9YCXGsMLEGa6EXijjCBRhqdfQTLZpd3n62YpMvXkfQ6lNnaI4ybqqXwuDpvB5Cvx3tk2VOwc=",
"urls": [
"https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.3.2_win.exe"
]
}
},
"debian9": {
"1.3.2": {
"sig": "CBEtKUDJwjPrchhNXvzulpfaBWFElDD+Kn9b14oF426IuKncsmqTWUesG3cT/beDk1onaDOhDIchyan6iW/BCdB+sVAuGAoRpm2lJ4lWba7ZPnXP7H10uIjVf1xASwIciP4jpAUPo0bO8hi9kqu1zkF9GeVHHb+SXlLhDP31wN7kHwgb/MeZ95/NqfucumYcwfFOZOnofSKaGQwHpbypy57YzyVCf/NzQDnYC46lcH9xVMmbgodT+y5MIIF0kkSJn0DbSfxLVMWTx1pnZUzJ7J827EKUgAS4d4uLI7ShskS+d84i8rNV9gXgqwYkqDvYbdFi7ArJZB7GJtyZ4VPTqRqGfxwF8rL3K0ml+635DfEXiHN8MbTuqwLHD2giChOfsdAAV4ngJ8xg7+Th8dqpgC92GXoOjNK7GSAyrOFsQ7xeqdVOBZMNk/dHVAb9eCTbPIsOjGFTAzOk8n3roM8naDUOq7PefUj1Jb2EGVhWnwS2ngvhNfRggZmmr3l9IElddaHro0JpnubsFmiAa+akV0P8VLb1jjpIJRfr2CIEnPTQbT4UQ1DdBitgkWiPbagTp8BQF1YGcVZ8jc9mbOxmF46z0MyuMQZjDHw2Vai0uPsoLIJHhy3I7nJqsnEw6gQX/l1VGj9wPHeaqMgGYGFykFfvVssh0CH45tUCdWL6Q9Hgx8+yLw0Lky/HIGMQc0qZUM9ute/9Buifd9cOK8+S5PaA0Zg0G/pIY6fThtO86wKJQnoPeiuBkJ9yXc20ZGrfb39Qnf2nZxrPyVl2iQJlven6CDBxc88henxzvxK61bXUynK8zHVuoIAC7ejWZEbPOqDV3DOOSVDz1+eq1MU2KZ4JmaLipzbdy/y+ph1TnCGwdL9R3s+xLYSaxA+ybhQVNXHhQ7+eZD6CWXytaIVYe8giL1ki8oN/18Bm1B2dVxCZ4KKbAToFpBOGvW+w8JFAC5nBK5aj2BGWEocyWQ1XIJmqVBd8RSOMYVYjQOhVnIvyJxOqvnrLUoRzJruj8R/riuCSMnfq17ykpjCzoNzIjvimCPyAib9kdWx7M8dyOS9Sls2sMLwJvDcsGi/FfuGqBmV2v28XagRZz70iypqNaIUrj4CShfz8e110su3BtLQHr1O6yffxy+whbB7w+ogZ6gz86AZ/63Zz6xbLIk4wuNx1UL/ZuRMGq4xOW/7zRpOYYSe/h98YFd9/UTcoi8Osjl+o1eVup6YWVeDvOG69uqwfID8XHivJnEV2NVFx8fbb6fHSrMg/QbjSngdyQ3b+5rWiZG01DGCDB5RFOvEKY24qrXXWQGAx+JXbj+/7xYWts+/Fv7hSqvpvf7H8aVCoOKXGtjJiy+K/9tAJJLQDAzo=",
"sha256": "a8b9bff91d0f0685041737cfa40b4bc8ef765d24419104f3dd90f977023e7858",
"urls": [
"https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.3.2_linux_x86_64.AppImage"
]
}
},
"debian10": {
"1.3.2": {
"sig": "CBEtKUDJwjPrchhNXvzulpfaBWFElDD+Kn9b14oF426IuKncsmqTWUesG3cT/beDk1onaDOhDIchyan6iW/BCdB+sVAuGAoRpm2lJ4lWba7ZPnXP7H10uIjVf1xASwIciP4jpAUPo0bO8hi9kqu1zkF9GeVHHb+SXlLhDP31wN7kHwgb/MeZ95/NqfucumYcwfFOZOnofSKaGQwHpbypy57YzyVCf/NzQDnYC46lcH9xVMmbgodT+y5MIIF0kkSJn0DbSfxLVMWTx1pnZUzJ7J827EKUgAS4d4uLI7ShskS+d84i8rNV9gXgqwYkqDvYbdFi7ArJZB7GJtyZ4VPTqRqGfxwF8rL3K0ml+635DfEXiHN8MbTuqwLHD2giChOfsdAAV4ngJ8xg7+Th8dqpgC92GXoOjNK7GSAyrOFsQ7xeqdVOBZMNk/dHVAb9eCTbPIsOjGFTAzOk8n3roM8naDUOq7PefUj1Jb2EGVhWnwS2ngvhNfRggZmmr3l9IElddaHro0JpnubsFmiAa+akV0P8VLb1jjpIJRfr2CIEnPTQbT4UQ1DdBitgkWiPbagTp8BQF1YGcVZ8jc9mbOxmF46z0MyuMQZjDHw2Vai0uPsoLIJHhy3I7nJqsnEw6gQX/l1VGj9wPHeaqMgGYGFykFfvVssh0CH45tUCdWL6Q9Hgx8+yLw0Lky/HIGMQc0qZUM9ute/9Buifd9cOK8+S5PaA0Zg0G/pIY6fThtO86wKJQnoPeiuBkJ9yXc20ZGrfb39Qnf2nZxrPyVl2iQJlven6CDBxc88henxzvxK61bXUynK8zHVuoIAC7ejWZEbPOqDV3DOOSVDz1+eq1MU2KZ4JmaLipzbdy/y+ph1TnCGwdL9R3s+xLYSaxA+ybhQVNXHhQ7+eZD6CWXytaIVYe8giL1ki8oN/18Bm1B2dVxCZ4KKbAToFpBOGvW+w8JFAC5nBK5aj2BGWEocyWQ1XIJmqVBd8RSOMYVYjQOhVnIvyJxOqvnrLUoRzJruj8R/riuCSMnfq17ykpjCzoNzIjvimCPyAib9kdWx7M8dyOS9Sls2sMLwJvDcsGi/FfuGqBmV2v28XagRZz70iypqNaIUrj4CShfz8e110su3BtLQHr1O6yffxy+whbB7w+ogZ6gz86AZ/63Zz6xbLIk4wuNx1UL/ZuRMGq4xOW/7zRpOYYSe/h98YFd9/UTcoi8Osjl+o1eVup6YWVeDvOG69uqwfID8XHivJnEV2NVFx8fbb6fHSrMg/QbjSngdyQ3b+5rWiZG01DGCDB5RFOvEKY24qrXXWQGAx+JXbj+/7xYWts+/Fv7hSqvpvf7H8aVCoOKXGtjJiy+K/9tAJJLQDAzo=",
"sha256": "a8b9bff91d0f0685041737cfa40b4bc8ef765d24419104f3dd90f977023e7858",
"urls": [
"https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.3.2_linux_x86_64.AppImage"
"https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.3.3_win.exe"
]
}
}
},
"Versions": {
"centos7": [
"1.3.2"
"1.3.3"
],
"darwin": [
"1.3.2"
"1.3.3"
],
"linux": [
"unavailable"
],
"solus": [
"1.3.2"
"1.3.3"
],
"unknown": [
"unavailable"
],
"win32": [
"1.3.2"
],
"debian9": [
"1.3.2"
],
"debian10": [
"1.3.2"
"1.3.3"
]
}
}

View File

@@ -98,7 +98,6 @@ class App extends IPCContainer {
!this.props.DownloadActive &&
(selectedVersion !== 'unavailable') &&
(selectedVersion !== this.props.InstalledVersion);
const missingDependencies = (this.props.MissingDependencies.length > 0) &&
this.props.AllowMount;
@@ -230,7 +229,7 @@ class App extends IPCContainer {
skynetSupported={skynetSupported}/>
</Box>
));
} else if (selectedVersion !== 'unavailable') {
} else if (!downloadEnabled && (selectedVersion !== 'unavailable')) {
mainContent.push((
<Box dxStyle={{padding: 'var(--default_spacing)', height: '170px'}}
key={'md_' + key++}>
@@ -254,8 +253,8 @@ class App extends IPCContainer {
textAlign={'center'}
type={'Heading1'}/>
<UpgradeIcon
available={this.props.UpgradeAvailable || (this.props.NewReleasesAvailable2.length > 0)}
newReleases={!this.props.UpgradeAvailable && (this.props.NewReleasesAvailable2.length > 0)}
available={!missingDependencies && (this.props.UpgradeAvailable || (this.props.NewReleasesAvailable2.length > 0))}
newReleases={!missingDependencies && (!this.props.UpgradeAvailable && (this.props.NewReleasesAvailable2.length > 0))}
clicked={this.handleUpgradeIconClicked}
col={dimensions => dimensions.columns - 6}
colSpan={5}

View File

@@ -3,7 +3,7 @@ import Box from '../UI/Box/Box';
import Loader from 'react-loader-spinner';
import Text from '../UI/Text/Text';
export default ({title}) => {
const ApplicationBusy = ({title}) => {
return (
<Box dxStyle={{padding: 'var(--default_spacing)'}}>
<Text
@@ -18,4 +18,6 @@ export default ({title}) => {
</div>
</Box>
);
}
};
export default ApplicationBusy;

View File

@@ -9,6 +9,12 @@ import {
} from '../../../redux/actions/error_actions';
import {installReleaseByVersion} from '../../../redux/actions/install_actions';
const mapStateToProps = state => {
return {
AllowInstall: state.install.MissingDependencies.length === 0,
};
};
const mapDispatchToProps = dispatch => {
return {
installReleaseByVersion: (release, version) => dispatch(installReleaseByVersion(release, version)),
@@ -17,12 +23,16 @@ const mapDispatchToProps = dispatch => {
};
};
export default connect(null, mapDispatchToProps)(({dismiss, release, lastItem, notifyError, notifyInfo, installReleaseByVersion}) => {
export default connect(mapStateToProps, mapDispatchToProps)(({
AllowInstall,
dismiss,
release,
lastItem,
notifyError,
notifyInfo,
installReleaseByVersion
}) => {
const title = '[' + Constants.RELEASE_TYPES[release.Release] + '] ' + release.Display;
const installReleaseVersion = () => {
dismiss();
installReleaseByVersion(release.Release, release.Version);
};
const displayChanges = async () => {
try {
const lines = await getChangesForRepertoryVersion(release.VersionString);
@@ -32,6 +42,14 @@ export default connect(null, mapDispatchToProps)(({dismiss, release, lastItem, n
}
};
// TODO Switch to activate
/*const installReleaseVersion = () => {
dismiss();
installReleaseByVersion(release.Release, release.Version);
};
{AllowInstall ?
<Button buttonStyles={{width: '100%'}}
clicked={installReleaseVersion}>Install</Button> : null}*/
return (
<div>
<h2>{title}</h2>
@@ -46,7 +64,6 @@ export default connect(null, mapDispatchToProps)(({dismiss, release, lastItem, n
<div style={{width: 'var(--default_spacing)'}}/>
</td>
<td width="50%">
<Button buttonStyles={{width: '100%'}} clicked={installReleaseVersion}>Install</Button>
</td>
</tr>
{lastItem ? null : <tr style={{height: 'var(--default_spacing)'}}/>}

View File

@@ -1,7 +1,7 @@
import React from 'react';
import './Box.css';
export default props => {
const Box = props => {
const styleList = [];
styleList.push('Box');
if (props.dxDark) {
@@ -24,5 +24,6 @@ export default props => {
{props.children}
</div>
);
};
};
export default Box;

View File

@@ -1,7 +1,7 @@
import React from 'react';
import './Button.css';
export default props => {
const Button = props => {
return (
<button disabled={props.disabled}
autoFocus={props.autoFocus}
@@ -11,3 +11,4 @@ export default props => {
);
};
export default Button;

View File

@@ -1,7 +1,7 @@
import React from 'react';
import './CheckBox.css';
export default props => {
const CheckBox = props => {
return (
<div className={'CheckBoxOwner'}>
<label className='CheckBoxLabel'>{props.label}
@@ -15,3 +15,5 @@ export default props => {
</div>
);
};
export default CheckBox;

View File

@@ -1,7 +1,7 @@
import React from 'react';
import './DropDown.css';
export default props => {
const DropDown = props => {
const options = props.items.map((s, i) => {
return (
<option className={'DropDownOption'} key={i} value={s}>{s}</option>
@@ -10,14 +10,17 @@ export default props => {
return (
<div className={'DropDown'}>
<select className={'DropDownSelect' + (props.auto ? ' Auto ' : '') + (props.alt ? ' Alt ' : '') }
autoFocus={props.autoFocus}
disabled={props.disabled}
onChange={props.changed}
value={props.selected}>
<select
className={'DropDownSelect' + (props.auto ? ' Auto ' : '') + (props.alt ? ' Alt ' : '')}
autoFocus={props.autoFocus}
disabled={props.disabled}
onChange={props.changed}
value={props.selected}>
{options}
</select>
</div>
);
};
export default DropDown;

View File

@@ -4,7 +4,7 @@ import GridComponent from './GridComponent/GridComponent';
const DEFAULT_GRID_SIZE = 4;
export default class extends Component {
export default class Grid extends Component {
resizeTimeout;
state = {
calculated: false,
@@ -141,4 +141,4 @@ export default class extends Component {
</div>
)
}
};
};

View File

@@ -1,7 +1,7 @@
import React from 'react';
import './GridComponent.css';
export default props => {
const GridComponent = props => {
const style = {
style: {
gridRowStart: Math.floor(props.row + 1),
@@ -17,4 +17,6 @@ export default props => {
</div>
);
};
};
export default GridComponent;

View File

@@ -2,7 +2,7 @@ import React from 'react';
import './Loading.css'
import Loader from 'react-loader-spinner';
export default () => {
const Loading = () => {
return (
<div
className={'Loading'}>
@@ -14,3 +14,5 @@ export default () => {
</div>
</div>);
};
export default Loading;

View File

@@ -3,7 +3,7 @@ import React from 'react';
import './Modal.css'
import FocusTrap from 'focus-trap-react';
export default props => {
const Modal = props => {
let modalStyles = [];
let contentStyles = [];
modalStyles.push('Modal');
@@ -29,3 +29,5 @@ export default props => {
</FocusTrap>
);
};
export default Modal;

View File

@@ -1,9 +1,11 @@
import React from 'react';
export default (props) => {
const RootElem = props => {
return (
<div style={{margin: 0, padding: 0}} {...props}>
{props.children}
</div>
)
};
};
export default RootElem;

View File

@@ -1,7 +1,7 @@
import React from 'react';
import './Text.css';
export default props => {
const Text = props => {
const styleList = [];
styleList.push('Text');
if (props.type) {
@@ -23,4 +23,6 @@ export default props => {
<div className={'TextOwner'}>
{text}
</div>);
};
};
export default Text;

View File

@@ -4,12 +4,12 @@ import ReactTooltip from 'react-tooltip';
import {faExclamationTriangle} from '@fortawesome/free-solid-svg-icons';
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
export default props => {
const UpgradeIcon = props => {
const styles = ['UpgradeIcon'];
let placement = 'left';
let toolTipText = 'UI Upgrade Available';
if (props.release) {
placement='bottom';
placement = 'bottom';
styles.push('Release');
}
@@ -33,3 +33,5 @@ export default props => {
)
: null;
};
export default UpgradeIcon;

View File

@@ -3,7 +3,7 @@ import {getIPCRenderer} from '../../utils';
const ipcRenderer = getIPCRenderer();
export default class extends Component {
export default class IPCContainer extends Component {
handlerList = {};
componentWillUnmount() {
@@ -42,4 +42,4 @@ export default class extends Component {
}
};
};
};

View File

@@ -304,15 +304,12 @@ class MountItems extends IPCContainer {
const providerState = this.props.ProviderState[provider];
if (location.length === 0) {
location = (this.props.Platform === 'win32') ?
providerState.MountLocation || driveLetters[0] :
!providerState.MountLocation || providerState.MountLocation.trim().length === 0 ? driveLetters[0] : providerState.MountLocation :
providerState.MountLocation;
}
if (location !== providerState.MountLocation) {
const value = (this.props.Platform === 'win32') ?
driveLetters.indexOf(location) :
location;
this.handleMountLocationChanged(provider, value);
this.handleMountLocationChanged(provider, location);
}
if (!this.props.AutoMountProcessed[provider] &&

View File

@@ -1,12 +1,15 @@
import React from 'react'
import './Import.css'
export default ({data}) => {
const Import = ({data}) => {
return (
<div className={'ImportOwner'}>
<input readOnly
className={'ConfigurationItemInput'}
style={{maxWidth: 'calc(33.33% - var(--default_spacing)', marginRight: 'var(--default_spacing)'}}
style={{
maxWidth: 'calc(33.33% - var(--default_spacing)',
marginRight: 'var(--default_spacing)'
}}
type={'text'}
value={data.directory}/>
<input readOnly
@@ -16,9 +19,14 @@ export default ({data}) => {
value={data.skylink}/>
<input readOnly
className={'ConfigurationItemInput'}
style={{maxWidth: 'calc(33.33% - calc(var(--default_spacing) / 2))', marginLeft: 'var(--default_spacing)'}}
style={{
maxWidth: 'calc(33.33% - calc(var(--default_spacing) / 2))',
marginLeft: 'var(--default_spacing)'
}}
type={'text'}
value={data.token}/>
</div>
);
};
export default Import;

View File

@@ -3,12 +3,13 @@ import './ImportList.css'
import Import from './Import/Import'
import Text from '../../../components/UI/Text/Text';
export default ({imports_array}) => {
const ImportList = ({imports_array}) => {
let key = 0;
return (
<div>
<div className={'ImportListHeader'}>
<Text type={'Heading1'} text={'Directory'} style={{minWidth: '33.33%', maxWidth: '33.33%'}}/>
<Text type={'Heading1'} text={'Directory'}
style={{minWidth: '33.33%', maxWidth: '33.33%'}}/>
<Text type={'Heading1'} text={'Skylink'} style={{minWidth: '33.33%', maxWidth: '33.33%'}}/>
<Text type={'Heading1'} text={'Token'} style={{minWidth: '33.33%', maxWidth: '33.33%'}}/>
</div>
@@ -27,3 +28,5 @@ export default ({imports_array}) => {
</div>
);
};
export default ImportList;

View File

@@ -29,7 +29,7 @@ const mapDispatchToProps = dispatch => {
}
};
export default connect(mapStateToProps, mapDispatchToProps)(class extends IPCContainer {
export default connect(mapStateToProps, mapDispatchToProps)(class SkynetImport extends IPCContainer {
state = {
import_text: '',

View File

@@ -3,7 +3,7 @@ import './Password.css';
import {faEye, faEyeSlash} from '@fortawesome/free-solid-svg-icons';
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
export default class extends Component {
export default class Password extends Component {
state = {
button_text: 'clear',
password: '',

View File

@@ -188,7 +188,7 @@ const _execProcessGetOutput = (cmd, working, args) => {
}
const proc = spawn(cmd, args, processOptions);
let output;
let output = '';
proc.stdout.on('data', data => { output += data.toString(); });
proc.on('error', (err) => { reject(err); });