From 03681babad0237716a5996faf8d47342201506d7 Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Sat, 11 Jan 2020 12:28:10 -0600 Subject: [PATCH 001/131] Goobox support --- package.json | 4 ++-- src/constants.js | 12 +++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 542a303..b80a118 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { "name": "repertory-ui", - "version": "1.1.3", + "version": "1.2.0", "private": true, "author": "scott.e.graves@protonmail.com", - "description": "GUI for Repertory - Repertory allows you to mount Sia and/or ScPrime blockchain storage solutions via FUSE on Linux/OS X or via WinFSP on Windows.", + "description": "GUI for Repertory - Repertory allows you to mount Sia, Goobox S3 and/or ScPrime blockchain storage solutions via FUSE on Linux/OS X or via WinFSP on Windows.", "dependencies": { "@fortawesome/fontawesome-svg-core": "^1.2.25", "@fortawesome/free-solid-svg-icons": "^5.11.2", diff --git a/src/constants.js b/src/constants.js index a2d90ab..656cf87 100644 --- a/src/constants.js +++ b/src/constants.js @@ -27,10 +27,10 @@ exports.DEV_PUBLIC_KEY = '-----BEGIN PUBLIC KEY-----\n' + '9wIDAQAB\n' + '-----END PUBLIC KEY-----'; -const REPERTORY_BRANCH = 'master'; -const REPERTORY_UI_BRANCH = 'master'; +const REPERTORY_BRANCH = '1.3.x_branch'; +const REPERTORY_UI_BRANCH = '1.2.x_branch'; -exports.RELEASES_URL = 'https://bitbucket.org/blockstorage/repertory/raw/' + REPERTORY_BRANCH + '/releases_1.1.json'; +exports.RELEASES_URL = 'https://bitbucket.org/blockstorage/repertory/raw/' + REPERTORY_BRANCH + '/releases_1.2.json'; exports.UI_RELEASES_URL = 'https://bitbucket.org/blockstorage/repertory-ui/raw/' + REPERTORY_UI_BRANCH + '/releases.json'; exports.LINUX_DETECT_SCRIPT_URL = 'https://bitbucket.org/blockstorage/repertory/raw/' + REPERTORY_BRANCH + '/detect_linux.sh'; @@ -50,12 +50,14 @@ exports.DATA_LOCATIONS = { exports.PROVIDER_LIST = [ 'Sia', - 'ScPrime' + 'ScPrime', + 'GooboxS3' ]; exports.PROVIDER_ARG = { sia: '', - scprime: '-sp' + scprime: '-sp', + gooboxs3: '-gb' }; exports.RELEASE_TYPES = [ From 1350ec16cefa096dff6c3b6a8db6e8cb7be916f3 Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Sat, 11 Jan 2020 12:29:01 -0600 Subject: [PATCH 002/131] Goobox support --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a86c37..6b982a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,7 @@ # Changelog +## 1.2.0 +* Goobox S3 support + ## 1.1.3 * CentOS 8 support * Support remote send and receive timeouts From 007bac11e883f1b0f3038a01e3eb38bf8ebfc56c Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Sat, 11 Jan 2020 12:32:03 -0600 Subject: [PATCH 003/131] Changed releases --- releases.json | 236 +++++++++++++++++++------------------------------- 1 file changed, 91 insertions(+), 145 deletions(-) diff --git a/releases.json b/releases.json index be4e6dd..b87fe5a 100644 --- a/releases.json +++ b/releases.json @@ -1,253 +1,199 @@ { "Locations": { "arch": { - "1.1.2": { - "sha256": "e6f8c32f6bc908da8d7a21b13a0d85365b53a24035838b3d40778a39a58395c0", - "sig": "AVtYwTJJ6w/AviQX6z4OGEls0Yv5AS2Q56t5u4TuEwCyIEgQVpy6tFxHRCrmjrrQQ34WlNmDlvrHghajZYAAf28uvIcTy9uKATPO1VgCYJvtTq2SnQF3rjXPcGQ/lCHN8bLh4w3yXVAUw36y/mKZMMV7j0OcHqcrYx1kmPuJDMtqrnHDASYYSaE071LL41dTaDjcizZfAdk8wM070R+Ea43ySR9eOIgnRKMq/mCD66/JinrLK9dWUfMC9ePhOn4u18rMJN0zjcDL6b446bd8Ojv3YdIjqQ38aR/YArOCye6bsv6tB5td+w/4ZXPpj3zcuTpaClkBagR8blfCnpeY9YS4W4BcOHYE3D8oZmQyv6DsSox+V07Jc2gZ253VHUUhcQbH0CQ+i0t3eAiNnJKKtQz5QeyFSgLB1et2dqQ9AMtjGTznYIO43xmsj02rtvEJR1up1OgYsSEpVfdABm6Ohf5nPr7566ECzHMCzfprrQ9YyjodmTD1TBw3dTA8SDWFdSfj2FjfPcpW1ZHumPfb+aVmfv5j3UYvqJFkqYYC+KS0jZjPcLh/UQIswKOEqkLHMnT5bzK8PilqJ+cabJ4lu+NvRra73NKlV/B/e8ItEoZFYJbRbTy0IaToujnaH/1TpOjFgvm+Fye0+pydMj9aPDiXKl/XrXPdTbT2driN7l4chNcUtDLdvn0bs8iTN9oEZtrsGXe5dP6Mtzp0yZCRCGxLPIwRUIaWl39hhzZ1a5pOYvSv32RJmA+GGGAn59kxJh/SU/1lOB6NKZVvKO/k14bjfMvNU6XbaIvYEN55WTtGgENhBAfYB6IyszU4y0sjASf2iifa/dzlUcXczhyhkHqZClGguoSo+H86i6At9i1rRmRfHsMLAZqW482EPbC055qodfK+v0+d4zl9hpVUaonb/9JOpYuDW9suLVhoILe0M4A5lnFNNmFbQPVVpeO7YDX9bkBeiMUyekYbQJYJ/eOxjfKWeK8g7fXJ7wGRyxgKfnXGwoYE1cfRWNoV2nlOUtv4GeoW0jcBAyqq0gM+5h/rn5/rFsNvDVACP0x/3wJoPoeKKtkNHYysgmnNaI0CbnM/KoxcNjd18KjK2Dw6o7YscZ0ZKjDpbNU9ZtI+X08XwLXQMAoLH+ipV4ugTapNXaLszp0ZZg1og0tuAIw5KExmcHMGcF3gARaUpOdTHYdN4q7Iht4j9joF6WmFUvLQal71kv7TGw8n00xpEIpp+sfeQuLUY5d/KyPMpf/D+8+RCOLQt7sc3n+28gO7doVl9VS2CT2Bkw7xXdstWdMSOd2dkXthvsLgK6san2snJYjvoy1T7aArtWqllQ1DMbTxmA/LxNn/HWnWkEi/4uCssUk=", - "urls": [ - "https://pixeldrain.com/api/file/5i1mA1gb", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.2_linux_x86_64.AppImage" - ] + "1.2.0": { + "sha256": "", + "sig": "", + "urls": [] } }, "centos7": { - "1.1.2": { - "sha256": "e6f8c32f6bc908da8d7a21b13a0d85365b53a24035838b3d40778a39a58395c0", - "sig": "AVtYwTJJ6w/AviQX6z4OGEls0Yv5AS2Q56t5u4TuEwCyIEgQVpy6tFxHRCrmjrrQQ34WlNmDlvrHghajZYAAf28uvIcTy9uKATPO1VgCYJvtTq2SnQF3rjXPcGQ/lCHN8bLh4w3yXVAUw36y/mKZMMV7j0OcHqcrYx1kmPuJDMtqrnHDASYYSaE071LL41dTaDjcizZfAdk8wM070R+Ea43ySR9eOIgnRKMq/mCD66/JinrLK9dWUfMC9ePhOn4u18rMJN0zjcDL6b446bd8Ojv3YdIjqQ38aR/YArOCye6bsv6tB5td+w/4ZXPpj3zcuTpaClkBagR8blfCnpeY9YS4W4BcOHYE3D8oZmQyv6DsSox+V07Jc2gZ253VHUUhcQbH0CQ+i0t3eAiNnJKKtQz5QeyFSgLB1et2dqQ9AMtjGTznYIO43xmsj02rtvEJR1up1OgYsSEpVfdABm6Ohf5nPr7566ECzHMCzfprrQ9YyjodmTD1TBw3dTA8SDWFdSfj2FjfPcpW1ZHumPfb+aVmfv5j3UYvqJFkqYYC+KS0jZjPcLh/UQIswKOEqkLHMnT5bzK8PilqJ+cabJ4lu+NvRra73NKlV/B/e8ItEoZFYJbRbTy0IaToujnaH/1TpOjFgvm+Fye0+pydMj9aPDiXKl/XrXPdTbT2driN7l4chNcUtDLdvn0bs8iTN9oEZtrsGXe5dP6Mtzp0yZCRCGxLPIwRUIaWl39hhzZ1a5pOYvSv32RJmA+GGGAn59kxJh/SU/1lOB6NKZVvKO/k14bjfMvNU6XbaIvYEN55WTtGgENhBAfYB6IyszU4y0sjASf2iifa/dzlUcXczhyhkHqZClGguoSo+H86i6At9i1rRmRfHsMLAZqW482EPbC055qodfK+v0+d4zl9hpVUaonb/9JOpYuDW9suLVhoILe0M4A5lnFNNmFbQPVVpeO7YDX9bkBeiMUyekYbQJYJ/eOxjfKWeK8g7fXJ7wGRyxgKfnXGwoYE1cfRWNoV2nlOUtv4GeoW0jcBAyqq0gM+5h/rn5/rFsNvDVACP0x/3wJoPoeKKtkNHYysgmnNaI0CbnM/KoxcNjd18KjK2Dw6o7YscZ0ZKjDpbNU9ZtI+X08XwLXQMAoLH+ipV4ugTapNXaLszp0ZZg1og0tuAIw5KExmcHMGcF3gARaUpOdTHYdN4q7Iht4j9joF6WmFUvLQal71kv7TGw8n00xpEIpp+sfeQuLUY5d/KyPMpf/D+8+RCOLQt7sc3n+28gO7doVl9VS2CT2Bkw7xXdstWdMSOd2dkXthvsLgK6san2snJYjvoy1T7aArtWqllQ1DMbTxmA/LxNn/HWnWkEi/4uCssUk=", - "urls": [ - "https://pixeldrain.com/api/file/5i1mA1gb", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.2_linux_x86_64.AppImage" - ] + "1.2.0": { + "sha256": "", + "sig": "", + "urls": [] } }, "centos8": { - "1.1.3": { + "1.2.0": { "sha256": "", "sig": "", "urls": [] } }, "darwin": { - "1.1.2": { - "sha256": "0c9c4de2006ecc4ecc6166af979cc5e0b66212472d21c542d4198013e354e275", - "sig": "CFzIk/7FJbhem38KzK1N37Z5g55wNeyvWZDC4rYElLxC6VEA2f4ZQym9sy47TDKamli42/IsiBSkm+1rE8Isg9AxdkYxv0TBbpBxm0W+vVaiHSHfrp4qQ3ciaxgPUiph6svAKZSIfw5pGtCshEaUlLBSMGGY4+Hi9aoH6yZojyFfhzKQP1AZbCVE5ZB7EStgg9LxzJ9U3dQZXon5G5LiZTRILPJ6XUiXKNlMzZ/DLCioMOQGnGqeDv2CDxXAaBNPdSzEz4cwti9FBBhIOhl/XIZN4i653f3zIHTn7HjJHWCn4wnhOB3fV18dxYv3I3laDXnlOwW1NCL3EVP+wlZI7fi4z5k5BntVC0+xnvPEKWWPnoDUDah1mjDQoIvX8espi0FoglOLW6qiToq5smYu9Hptkrw6ExAyvTRBZ92ythSFgzgZ/LtmQqN7aoutDA1CDp2JFkBBLu03vch22x5JUI47v6EZKHTfLe667UXBctF+xLVw0AXQdpQIVqAV4mHKx4zwlgZhk/iflGRy5OWDwIQ7Nc+CzY+u6UOI5gqEuHa2h23BickstbLHl+Qd5vK4BZf70Z+mt5M8IRQ3EXztEVhmapRQSmOlEkvEjPaHMzly95k/LpsQxrA7mxwQd5kQSptERzFQ1dKuolUwwMTjcUZPZn5ATv1bVIMtCBmXlrRd6S2liFgatnP+HCu3LnHOlkfuXWjOqL0EuFzWlTC6646SDDMqrju+z95HYpXiGDu4EI3XhXd/67AiTQdj828MNo417FlkuuVTqsLOiKY18KMx9zYyDgWzyQZ9vXUbMwrLpYB6FWLfKxwKjyA/c+tLO52D/WzUkeX+XmJPlRSi2xsjvH/5e/z6uEvqafLPwH3BnaQEsWsrRd7hludfWej4EelxW2ec+4whMkJtIXpFrX+hnxHhs7U15QjDVbq2CARjuto+4EWo5iAO+BkK+OgxyfCEBAM9yrpqyjiQXwXi6imVj6CuOu8z+LgPBrC8bdl9pfURrmnxubZKYH2NQ06YcJs1ezeipRVMJgq4VyuMcs+0zg/wMYYdAuPVbLiVzRj9IjlMgaRoZqt5goPtjg2M7OkLemy3dcmusWakQ4ylw8Jsng00K4VlBKGTNr/HbThIZpBkCVUmVpUEKlrxGUsYaNz/TzrVTYQF3jBuk7wPXiD4pFXn49LuOpI9p+LsFCZnjxHJMBg+WSkcFpoJ0NMU2tC64ksEYrvY3BO+L2/dAUQ/2yQ0HLnnIXHSQhIieTR02l4ERFUl07fgMYtqLgqDZZ0w7jW4MZBW7Nuy78tgQ11Jfgswn/slyZei09vcrqYKjBt7Np6lqAAihOzXzE2/zK874hrcKEKatayfBsbAuJg=", - "urls": [ - "https://pixeldrain.com/api/file/jEWmNDRX", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.2_mac.dmg" - ] + "1.2.0": { + "sha256": "", + "sig": "", + "urls": [] } }, "debian9": { - "1.1.2": { - "sha256": "e6f8c32f6bc908da8d7a21b13a0d85365b53a24035838b3d40778a39a58395c0", - "sig": "AVtYwTJJ6w/AviQX6z4OGEls0Yv5AS2Q56t5u4TuEwCyIEgQVpy6tFxHRCrmjrrQQ34WlNmDlvrHghajZYAAf28uvIcTy9uKATPO1VgCYJvtTq2SnQF3rjXPcGQ/lCHN8bLh4w3yXVAUw36y/mKZMMV7j0OcHqcrYx1kmPuJDMtqrnHDASYYSaE071LL41dTaDjcizZfAdk8wM070R+Ea43ySR9eOIgnRKMq/mCD66/JinrLK9dWUfMC9ePhOn4u18rMJN0zjcDL6b446bd8Ojv3YdIjqQ38aR/YArOCye6bsv6tB5td+w/4ZXPpj3zcuTpaClkBagR8blfCnpeY9YS4W4BcOHYE3D8oZmQyv6DsSox+V07Jc2gZ253VHUUhcQbH0CQ+i0t3eAiNnJKKtQz5QeyFSgLB1et2dqQ9AMtjGTznYIO43xmsj02rtvEJR1up1OgYsSEpVfdABm6Ohf5nPr7566ECzHMCzfprrQ9YyjodmTD1TBw3dTA8SDWFdSfj2FjfPcpW1ZHumPfb+aVmfv5j3UYvqJFkqYYC+KS0jZjPcLh/UQIswKOEqkLHMnT5bzK8PilqJ+cabJ4lu+NvRra73NKlV/B/e8ItEoZFYJbRbTy0IaToujnaH/1TpOjFgvm+Fye0+pydMj9aPDiXKl/XrXPdTbT2driN7l4chNcUtDLdvn0bs8iTN9oEZtrsGXe5dP6Mtzp0yZCRCGxLPIwRUIaWl39hhzZ1a5pOYvSv32RJmA+GGGAn59kxJh/SU/1lOB6NKZVvKO/k14bjfMvNU6XbaIvYEN55WTtGgENhBAfYB6IyszU4y0sjASf2iifa/dzlUcXczhyhkHqZClGguoSo+H86i6At9i1rRmRfHsMLAZqW482EPbC055qodfK+v0+d4zl9hpVUaonb/9JOpYuDW9suLVhoILe0M4A5lnFNNmFbQPVVpeO7YDX9bkBeiMUyekYbQJYJ/eOxjfKWeK8g7fXJ7wGRyxgKfnXGwoYE1cfRWNoV2nlOUtv4GeoW0jcBAyqq0gM+5h/rn5/rFsNvDVACP0x/3wJoPoeKKtkNHYysgmnNaI0CbnM/KoxcNjd18KjK2Dw6o7YscZ0ZKjDpbNU9ZtI+X08XwLXQMAoLH+ipV4ugTapNXaLszp0ZZg1og0tuAIw5KExmcHMGcF3gARaUpOdTHYdN4q7Iht4j9joF6WmFUvLQal71kv7TGw8n00xpEIpp+sfeQuLUY5d/KyPMpf/D+8+RCOLQt7sc3n+28gO7doVl9VS2CT2Bkw7xXdstWdMSOd2dkXthvsLgK6san2snJYjvoy1T7aArtWqllQ1DMbTxmA/LxNn/HWnWkEi/4uCssUk=", - "urls": [ - "https://pixeldrain.com/api/file/5i1mA1gb", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.2_linux_x86_64.AppImage" - ] + "1.2.0": { + "sha256": "", + "sig": "", + "urls": [] } }, "debian10": { - "1.1.2": { - "sha256": "e6f8c32f6bc908da8d7a21b13a0d85365b53a24035838b3d40778a39a58395c0", - "sig": "AVtYwTJJ6w/AviQX6z4OGEls0Yv5AS2Q56t5u4TuEwCyIEgQVpy6tFxHRCrmjrrQQ34WlNmDlvrHghajZYAAf28uvIcTy9uKATPO1VgCYJvtTq2SnQF3rjXPcGQ/lCHN8bLh4w3yXVAUw36y/mKZMMV7j0OcHqcrYx1kmPuJDMtqrnHDASYYSaE071LL41dTaDjcizZfAdk8wM070R+Ea43ySR9eOIgnRKMq/mCD66/JinrLK9dWUfMC9ePhOn4u18rMJN0zjcDL6b446bd8Ojv3YdIjqQ38aR/YArOCye6bsv6tB5td+w/4ZXPpj3zcuTpaClkBagR8blfCnpeY9YS4W4BcOHYE3D8oZmQyv6DsSox+V07Jc2gZ253VHUUhcQbH0CQ+i0t3eAiNnJKKtQz5QeyFSgLB1et2dqQ9AMtjGTznYIO43xmsj02rtvEJR1up1OgYsSEpVfdABm6Ohf5nPr7566ECzHMCzfprrQ9YyjodmTD1TBw3dTA8SDWFdSfj2FjfPcpW1ZHumPfb+aVmfv5j3UYvqJFkqYYC+KS0jZjPcLh/UQIswKOEqkLHMnT5bzK8PilqJ+cabJ4lu+NvRra73NKlV/B/e8ItEoZFYJbRbTy0IaToujnaH/1TpOjFgvm+Fye0+pydMj9aPDiXKl/XrXPdTbT2driN7l4chNcUtDLdvn0bs8iTN9oEZtrsGXe5dP6Mtzp0yZCRCGxLPIwRUIaWl39hhzZ1a5pOYvSv32RJmA+GGGAn59kxJh/SU/1lOB6NKZVvKO/k14bjfMvNU6XbaIvYEN55WTtGgENhBAfYB6IyszU4y0sjASf2iifa/dzlUcXczhyhkHqZClGguoSo+H86i6At9i1rRmRfHsMLAZqW482EPbC055qodfK+v0+d4zl9hpVUaonb/9JOpYuDW9suLVhoILe0M4A5lnFNNmFbQPVVpeO7YDX9bkBeiMUyekYbQJYJ/eOxjfKWeK8g7fXJ7wGRyxgKfnXGwoYE1cfRWNoV2nlOUtv4GeoW0jcBAyqq0gM+5h/rn5/rFsNvDVACP0x/3wJoPoeKKtkNHYysgmnNaI0CbnM/KoxcNjd18KjK2Dw6o7YscZ0ZKjDpbNU9ZtI+X08XwLXQMAoLH+ipV4ugTapNXaLszp0ZZg1og0tuAIw5KExmcHMGcF3gARaUpOdTHYdN4q7Iht4j9joF6WmFUvLQal71kv7TGw8n00xpEIpp+sfeQuLUY5d/KyPMpf/D+8+RCOLQt7sc3n+28gO7doVl9VS2CT2Bkw7xXdstWdMSOd2dkXthvsLgK6san2snJYjvoy1T7aArtWqllQ1DMbTxmA/LxNn/HWnWkEi/4uCssUk=", - "urls": [ - "https://pixeldrain.com/api/file/5i1mA1gb", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.2_linux_x86_64.AppImage" - ] + "1.2.0": { + "sha256": "", + "sig": "", + "urls": [] } }, "fedora28": { - "1.1.2": { - "sha256": "e6f8c32f6bc908da8d7a21b13a0d85365b53a24035838b3d40778a39a58395c0", - "sig": "AVtYwTJJ6w/AviQX6z4OGEls0Yv5AS2Q56t5u4TuEwCyIEgQVpy6tFxHRCrmjrrQQ34WlNmDlvrHghajZYAAf28uvIcTy9uKATPO1VgCYJvtTq2SnQF3rjXPcGQ/lCHN8bLh4w3yXVAUw36y/mKZMMV7j0OcHqcrYx1kmPuJDMtqrnHDASYYSaE071LL41dTaDjcizZfAdk8wM070R+Ea43ySR9eOIgnRKMq/mCD66/JinrLK9dWUfMC9ePhOn4u18rMJN0zjcDL6b446bd8Ojv3YdIjqQ38aR/YArOCye6bsv6tB5td+w/4ZXPpj3zcuTpaClkBagR8blfCnpeY9YS4W4BcOHYE3D8oZmQyv6DsSox+V07Jc2gZ253VHUUhcQbH0CQ+i0t3eAiNnJKKtQz5QeyFSgLB1et2dqQ9AMtjGTznYIO43xmsj02rtvEJR1up1OgYsSEpVfdABm6Ohf5nPr7566ECzHMCzfprrQ9YyjodmTD1TBw3dTA8SDWFdSfj2FjfPcpW1ZHumPfb+aVmfv5j3UYvqJFkqYYC+KS0jZjPcLh/UQIswKOEqkLHMnT5bzK8PilqJ+cabJ4lu+NvRra73NKlV/B/e8ItEoZFYJbRbTy0IaToujnaH/1TpOjFgvm+Fye0+pydMj9aPDiXKl/XrXPdTbT2driN7l4chNcUtDLdvn0bs8iTN9oEZtrsGXe5dP6Mtzp0yZCRCGxLPIwRUIaWl39hhzZ1a5pOYvSv32RJmA+GGGAn59kxJh/SU/1lOB6NKZVvKO/k14bjfMvNU6XbaIvYEN55WTtGgENhBAfYB6IyszU4y0sjASf2iifa/dzlUcXczhyhkHqZClGguoSo+H86i6At9i1rRmRfHsMLAZqW482EPbC055qodfK+v0+d4zl9hpVUaonb/9JOpYuDW9suLVhoILe0M4A5lnFNNmFbQPVVpeO7YDX9bkBeiMUyekYbQJYJ/eOxjfKWeK8g7fXJ7wGRyxgKfnXGwoYE1cfRWNoV2nlOUtv4GeoW0jcBAyqq0gM+5h/rn5/rFsNvDVACP0x/3wJoPoeKKtkNHYysgmnNaI0CbnM/KoxcNjd18KjK2Dw6o7YscZ0ZKjDpbNU9ZtI+X08XwLXQMAoLH+ipV4ugTapNXaLszp0ZZg1og0tuAIw5KExmcHMGcF3gARaUpOdTHYdN4q7Iht4j9joF6WmFUvLQal71kv7TGw8n00xpEIpp+sfeQuLUY5d/KyPMpf/D+8+RCOLQt7sc3n+28gO7doVl9VS2CT2Bkw7xXdstWdMSOd2dkXthvsLgK6san2snJYjvoy1T7aArtWqllQ1DMbTxmA/LxNn/HWnWkEi/4uCssUk=", - "urls": [ - "https://pixeldrain.com/api/file/5i1mA1gb", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.2_linux_x86_64.AppImage" - ] + "1.2.0": { + "sha256": "", + "sig": "", + "urls": [] } }, "fedora29": { - "1.1.2": { - "sha256": "e6f8c32f6bc908da8d7a21b13a0d85365b53a24035838b3d40778a39a58395c0", - "sig": "AVtYwTJJ6w/AviQX6z4OGEls0Yv5AS2Q56t5u4TuEwCyIEgQVpy6tFxHRCrmjrrQQ34WlNmDlvrHghajZYAAf28uvIcTy9uKATPO1VgCYJvtTq2SnQF3rjXPcGQ/lCHN8bLh4w3yXVAUw36y/mKZMMV7j0OcHqcrYx1kmPuJDMtqrnHDASYYSaE071LL41dTaDjcizZfAdk8wM070R+Ea43ySR9eOIgnRKMq/mCD66/JinrLK9dWUfMC9ePhOn4u18rMJN0zjcDL6b446bd8Ojv3YdIjqQ38aR/YArOCye6bsv6tB5td+w/4ZXPpj3zcuTpaClkBagR8blfCnpeY9YS4W4BcOHYE3D8oZmQyv6DsSox+V07Jc2gZ253VHUUhcQbH0CQ+i0t3eAiNnJKKtQz5QeyFSgLB1et2dqQ9AMtjGTznYIO43xmsj02rtvEJR1up1OgYsSEpVfdABm6Ohf5nPr7566ECzHMCzfprrQ9YyjodmTD1TBw3dTA8SDWFdSfj2FjfPcpW1ZHumPfb+aVmfv5j3UYvqJFkqYYC+KS0jZjPcLh/UQIswKOEqkLHMnT5bzK8PilqJ+cabJ4lu+NvRra73NKlV/B/e8ItEoZFYJbRbTy0IaToujnaH/1TpOjFgvm+Fye0+pydMj9aPDiXKl/XrXPdTbT2driN7l4chNcUtDLdvn0bs8iTN9oEZtrsGXe5dP6Mtzp0yZCRCGxLPIwRUIaWl39hhzZ1a5pOYvSv32RJmA+GGGAn59kxJh/SU/1lOB6NKZVvKO/k14bjfMvNU6XbaIvYEN55WTtGgENhBAfYB6IyszU4y0sjASf2iifa/dzlUcXczhyhkHqZClGguoSo+H86i6At9i1rRmRfHsMLAZqW482EPbC055qodfK+v0+d4zl9hpVUaonb/9JOpYuDW9suLVhoILe0M4A5lnFNNmFbQPVVpeO7YDX9bkBeiMUyekYbQJYJ/eOxjfKWeK8g7fXJ7wGRyxgKfnXGwoYE1cfRWNoV2nlOUtv4GeoW0jcBAyqq0gM+5h/rn5/rFsNvDVACP0x/3wJoPoeKKtkNHYysgmnNaI0CbnM/KoxcNjd18KjK2Dw6o7YscZ0ZKjDpbNU9ZtI+X08XwLXQMAoLH+ipV4ugTapNXaLszp0ZZg1og0tuAIw5KExmcHMGcF3gARaUpOdTHYdN4q7Iht4j9joF6WmFUvLQal71kv7TGw8n00xpEIpp+sfeQuLUY5d/KyPMpf/D+8+RCOLQt7sc3n+28gO7doVl9VS2CT2Bkw7xXdstWdMSOd2dkXthvsLgK6san2snJYjvoy1T7aArtWqllQ1DMbTxmA/LxNn/HWnWkEi/4uCssUk=", - "urls": [ - "https://pixeldrain.com/api/file/5i1mA1gb", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.2_linux_x86_64.AppImage" - ] + "1.2.0": { + "sha256": "", + "sig": "", + "urls": [] } }, "fedora30": { - "1.1.2": { - "sha256": "e6f8c32f6bc908da8d7a21b13a0d85365b53a24035838b3d40778a39a58395c0", - "sig": "AVtYwTJJ6w/AviQX6z4OGEls0Yv5AS2Q56t5u4TuEwCyIEgQVpy6tFxHRCrmjrrQQ34WlNmDlvrHghajZYAAf28uvIcTy9uKATPO1VgCYJvtTq2SnQF3rjXPcGQ/lCHN8bLh4w3yXVAUw36y/mKZMMV7j0OcHqcrYx1kmPuJDMtqrnHDASYYSaE071LL41dTaDjcizZfAdk8wM070R+Ea43ySR9eOIgnRKMq/mCD66/JinrLK9dWUfMC9ePhOn4u18rMJN0zjcDL6b446bd8Ojv3YdIjqQ38aR/YArOCye6bsv6tB5td+w/4ZXPpj3zcuTpaClkBagR8blfCnpeY9YS4W4BcOHYE3D8oZmQyv6DsSox+V07Jc2gZ253VHUUhcQbH0CQ+i0t3eAiNnJKKtQz5QeyFSgLB1et2dqQ9AMtjGTznYIO43xmsj02rtvEJR1up1OgYsSEpVfdABm6Ohf5nPr7566ECzHMCzfprrQ9YyjodmTD1TBw3dTA8SDWFdSfj2FjfPcpW1ZHumPfb+aVmfv5j3UYvqJFkqYYC+KS0jZjPcLh/UQIswKOEqkLHMnT5bzK8PilqJ+cabJ4lu+NvRra73NKlV/B/e8ItEoZFYJbRbTy0IaToujnaH/1TpOjFgvm+Fye0+pydMj9aPDiXKl/XrXPdTbT2driN7l4chNcUtDLdvn0bs8iTN9oEZtrsGXe5dP6Mtzp0yZCRCGxLPIwRUIaWl39hhzZ1a5pOYvSv32RJmA+GGGAn59kxJh/SU/1lOB6NKZVvKO/k14bjfMvNU6XbaIvYEN55WTtGgENhBAfYB6IyszU4y0sjASf2iifa/dzlUcXczhyhkHqZClGguoSo+H86i6At9i1rRmRfHsMLAZqW482EPbC055qodfK+v0+d4zl9hpVUaonb/9JOpYuDW9suLVhoILe0M4A5lnFNNmFbQPVVpeO7YDX9bkBeiMUyekYbQJYJ/eOxjfKWeK8g7fXJ7wGRyxgKfnXGwoYE1cfRWNoV2nlOUtv4GeoW0jcBAyqq0gM+5h/rn5/rFsNvDVACP0x/3wJoPoeKKtkNHYysgmnNaI0CbnM/KoxcNjd18KjK2Dw6o7YscZ0ZKjDpbNU9ZtI+X08XwLXQMAoLH+ipV4ugTapNXaLszp0ZZg1og0tuAIw5KExmcHMGcF3gARaUpOdTHYdN4q7Iht4j9joF6WmFUvLQal71kv7TGw8n00xpEIpp+sfeQuLUY5d/KyPMpf/D+8+RCOLQt7sc3n+28gO7doVl9VS2CT2Bkw7xXdstWdMSOd2dkXthvsLgK6san2snJYjvoy1T7aArtWqllQ1DMbTxmA/LxNn/HWnWkEi/4uCssUk=", - "urls": [ - "https://pixeldrain.com/api/file/5i1mA1gb", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.2_linux_x86_64.AppImage" - ] + "1.2.0": { + "sha256": "", + "sig": "", + "urls": [] } }, "fedora31": { - "1.1.2": { - "sha256": "e6f8c32f6bc908da8d7a21b13a0d85365b53a24035838b3d40778a39a58395c0", - "sig": "AVtYwTJJ6w/AviQX6z4OGEls0Yv5AS2Q56t5u4TuEwCyIEgQVpy6tFxHRCrmjrrQQ34WlNmDlvrHghajZYAAf28uvIcTy9uKATPO1VgCYJvtTq2SnQF3rjXPcGQ/lCHN8bLh4w3yXVAUw36y/mKZMMV7j0OcHqcrYx1kmPuJDMtqrnHDASYYSaE071LL41dTaDjcizZfAdk8wM070R+Ea43ySR9eOIgnRKMq/mCD66/JinrLK9dWUfMC9ePhOn4u18rMJN0zjcDL6b446bd8Ojv3YdIjqQ38aR/YArOCye6bsv6tB5td+w/4ZXPpj3zcuTpaClkBagR8blfCnpeY9YS4W4BcOHYE3D8oZmQyv6DsSox+V07Jc2gZ253VHUUhcQbH0CQ+i0t3eAiNnJKKtQz5QeyFSgLB1et2dqQ9AMtjGTznYIO43xmsj02rtvEJR1up1OgYsSEpVfdABm6Ohf5nPr7566ECzHMCzfprrQ9YyjodmTD1TBw3dTA8SDWFdSfj2FjfPcpW1ZHumPfb+aVmfv5j3UYvqJFkqYYC+KS0jZjPcLh/UQIswKOEqkLHMnT5bzK8PilqJ+cabJ4lu+NvRra73NKlV/B/e8ItEoZFYJbRbTy0IaToujnaH/1TpOjFgvm+Fye0+pydMj9aPDiXKl/XrXPdTbT2driN7l4chNcUtDLdvn0bs8iTN9oEZtrsGXe5dP6Mtzp0yZCRCGxLPIwRUIaWl39hhzZ1a5pOYvSv32RJmA+GGGAn59kxJh/SU/1lOB6NKZVvKO/k14bjfMvNU6XbaIvYEN55WTtGgENhBAfYB6IyszU4y0sjASf2iifa/dzlUcXczhyhkHqZClGguoSo+H86i6At9i1rRmRfHsMLAZqW482EPbC055qodfK+v0+d4zl9hpVUaonb/9JOpYuDW9suLVhoILe0M4A5lnFNNmFbQPVVpeO7YDX9bkBeiMUyekYbQJYJ/eOxjfKWeK8g7fXJ7wGRyxgKfnXGwoYE1cfRWNoV2nlOUtv4GeoW0jcBAyqq0gM+5h/rn5/rFsNvDVACP0x/3wJoPoeKKtkNHYysgmnNaI0CbnM/KoxcNjd18KjK2Dw6o7YscZ0ZKjDpbNU9ZtI+X08XwLXQMAoLH+ipV4ugTapNXaLszp0ZZg1og0tuAIw5KExmcHMGcF3gARaUpOdTHYdN4q7Iht4j9joF6WmFUvLQal71kv7TGw8n00xpEIpp+sfeQuLUY5d/KyPMpf/D+8+RCOLQt7sc3n+28gO7doVl9VS2CT2Bkw7xXdstWdMSOd2dkXthvsLgK6san2snJYjvoy1T7aArtWqllQ1DMbTxmA/LxNn/HWnWkEi/4uCssUk=", - "urls": [ - "https://pixeldrain.com/api/file/5i1mA1gb", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.2_linux_x86_64.AppImage" - ] + "1.2.0": { + "sha256": "", + "sig": "", + "urls": [] } }, "opensuse15": { - "1.1.2": { - "sha256": "e6f8c32f6bc908da8d7a21b13a0d85365b53a24035838b3d40778a39a58395c0", - "sig": "AVtYwTJJ6w/AviQX6z4OGEls0Yv5AS2Q56t5u4TuEwCyIEgQVpy6tFxHRCrmjrrQQ34WlNmDlvrHghajZYAAf28uvIcTy9uKATPO1VgCYJvtTq2SnQF3rjXPcGQ/lCHN8bLh4w3yXVAUw36y/mKZMMV7j0OcHqcrYx1kmPuJDMtqrnHDASYYSaE071LL41dTaDjcizZfAdk8wM070R+Ea43ySR9eOIgnRKMq/mCD66/JinrLK9dWUfMC9ePhOn4u18rMJN0zjcDL6b446bd8Ojv3YdIjqQ38aR/YArOCye6bsv6tB5td+w/4ZXPpj3zcuTpaClkBagR8blfCnpeY9YS4W4BcOHYE3D8oZmQyv6DsSox+V07Jc2gZ253VHUUhcQbH0CQ+i0t3eAiNnJKKtQz5QeyFSgLB1et2dqQ9AMtjGTznYIO43xmsj02rtvEJR1up1OgYsSEpVfdABm6Ohf5nPr7566ECzHMCzfprrQ9YyjodmTD1TBw3dTA8SDWFdSfj2FjfPcpW1ZHumPfb+aVmfv5j3UYvqJFkqYYC+KS0jZjPcLh/UQIswKOEqkLHMnT5bzK8PilqJ+cabJ4lu+NvRra73NKlV/B/e8ItEoZFYJbRbTy0IaToujnaH/1TpOjFgvm+Fye0+pydMj9aPDiXKl/XrXPdTbT2driN7l4chNcUtDLdvn0bs8iTN9oEZtrsGXe5dP6Mtzp0yZCRCGxLPIwRUIaWl39hhzZ1a5pOYvSv32RJmA+GGGAn59kxJh/SU/1lOB6NKZVvKO/k14bjfMvNU6XbaIvYEN55WTtGgENhBAfYB6IyszU4y0sjASf2iifa/dzlUcXczhyhkHqZClGguoSo+H86i6At9i1rRmRfHsMLAZqW482EPbC055qodfK+v0+d4zl9hpVUaonb/9JOpYuDW9suLVhoILe0M4A5lnFNNmFbQPVVpeO7YDX9bkBeiMUyekYbQJYJ/eOxjfKWeK8g7fXJ7wGRyxgKfnXGwoYE1cfRWNoV2nlOUtv4GeoW0jcBAyqq0gM+5h/rn5/rFsNvDVACP0x/3wJoPoeKKtkNHYysgmnNaI0CbnM/KoxcNjd18KjK2Dw6o7YscZ0ZKjDpbNU9ZtI+X08XwLXQMAoLH+ipV4ugTapNXaLszp0ZZg1og0tuAIw5KExmcHMGcF3gARaUpOdTHYdN4q7Iht4j9joF6WmFUvLQal71kv7TGw8n00xpEIpp+sfeQuLUY5d/KyPMpf/D+8+RCOLQt7sc3n+28gO7doVl9VS2CT2Bkw7xXdstWdMSOd2dkXthvsLgK6san2snJYjvoy1T7aArtWqllQ1DMbTxmA/LxNn/HWnWkEi/4uCssUk=", - "urls": [ - "https://pixeldrain.com/api/file/5i1mA1gb", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.2_linux_x86_64.AppImage" - ] + "1.2.0": { + "sha256": "", + "sig": "", + "urls": [] } }, "opensuse15.1": { - "1.1.2": { - "sha256": "e6f8c32f6bc908da8d7a21b13a0d85365b53a24035838b3d40778a39a58395c0", - "sig": "AVtYwTJJ6w/AviQX6z4OGEls0Yv5AS2Q56t5u4TuEwCyIEgQVpy6tFxHRCrmjrrQQ34WlNmDlvrHghajZYAAf28uvIcTy9uKATPO1VgCYJvtTq2SnQF3rjXPcGQ/lCHN8bLh4w3yXVAUw36y/mKZMMV7j0OcHqcrYx1kmPuJDMtqrnHDASYYSaE071LL41dTaDjcizZfAdk8wM070R+Ea43ySR9eOIgnRKMq/mCD66/JinrLK9dWUfMC9ePhOn4u18rMJN0zjcDL6b446bd8Ojv3YdIjqQ38aR/YArOCye6bsv6tB5td+w/4ZXPpj3zcuTpaClkBagR8blfCnpeY9YS4W4BcOHYE3D8oZmQyv6DsSox+V07Jc2gZ253VHUUhcQbH0CQ+i0t3eAiNnJKKtQz5QeyFSgLB1et2dqQ9AMtjGTznYIO43xmsj02rtvEJR1up1OgYsSEpVfdABm6Ohf5nPr7566ECzHMCzfprrQ9YyjodmTD1TBw3dTA8SDWFdSfj2FjfPcpW1ZHumPfb+aVmfv5j3UYvqJFkqYYC+KS0jZjPcLh/UQIswKOEqkLHMnT5bzK8PilqJ+cabJ4lu+NvRra73NKlV/B/e8ItEoZFYJbRbTy0IaToujnaH/1TpOjFgvm+Fye0+pydMj9aPDiXKl/XrXPdTbT2driN7l4chNcUtDLdvn0bs8iTN9oEZtrsGXe5dP6Mtzp0yZCRCGxLPIwRUIaWl39hhzZ1a5pOYvSv32RJmA+GGGAn59kxJh/SU/1lOB6NKZVvKO/k14bjfMvNU6XbaIvYEN55WTtGgENhBAfYB6IyszU4y0sjASf2iifa/dzlUcXczhyhkHqZClGguoSo+H86i6At9i1rRmRfHsMLAZqW482EPbC055qodfK+v0+d4zl9hpVUaonb/9JOpYuDW9suLVhoILe0M4A5lnFNNmFbQPVVpeO7YDX9bkBeiMUyekYbQJYJ/eOxjfKWeK8g7fXJ7wGRyxgKfnXGwoYE1cfRWNoV2nlOUtv4GeoW0jcBAyqq0gM+5h/rn5/rFsNvDVACP0x/3wJoPoeKKtkNHYysgmnNaI0CbnM/KoxcNjd18KjK2Dw6o7YscZ0ZKjDpbNU9ZtI+X08XwLXQMAoLH+ipV4ugTapNXaLszp0ZZg1og0tuAIw5KExmcHMGcF3gARaUpOdTHYdN4q7Iht4j9joF6WmFUvLQal71kv7TGw8n00xpEIpp+sfeQuLUY5d/KyPMpf/D+8+RCOLQt7sc3n+28gO7doVl9VS2CT2Bkw7xXdstWdMSOd2dkXthvsLgK6san2snJYjvoy1T7aArtWqllQ1DMbTxmA/LxNn/HWnWkEi/4uCssUk=", - "urls": [ - "https://pixeldrain.com/api/file/5i1mA1gb", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.2_linux_x86_64.AppImage" - ] + "1.2.0": { + "sha256": "", + "sig": "", + "urls": [] } }, "solus": { - "1.1.2": { - "sha256": "e6f8c32f6bc908da8d7a21b13a0d85365b53a24035838b3d40778a39a58395c0", - "sig": "AVtYwTJJ6w/AviQX6z4OGEls0Yv5AS2Q56t5u4TuEwCyIEgQVpy6tFxHRCrmjrrQQ34WlNmDlvrHghajZYAAf28uvIcTy9uKATPO1VgCYJvtTq2SnQF3rjXPcGQ/lCHN8bLh4w3yXVAUw36y/mKZMMV7j0OcHqcrYx1kmPuJDMtqrnHDASYYSaE071LL41dTaDjcizZfAdk8wM070R+Ea43ySR9eOIgnRKMq/mCD66/JinrLK9dWUfMC9ePhOn4u18rMJN0zjcDL6b446bd8Ojv3YdIjqQ38aR/YArOCye6bsv6tB5td+w/4ZXPpj3zcuTpaClkBagR8blfCnpeY9YS4W4BcOHYE3D8oZmQyv6DsSox+V07Jc2gZ253VHUUhcQbH0CQ+i0t3eAiNnJKKtQz5QeyFSgLB1et2dqQ9AMtjGTznYIO43xmsj02rtvEJR1up1OgYsSEpVfdABm6Ohf5nPr7566ECzHMCzfprrQ9YyjodmTD1TBw3dTA8SDWFdSfj2FjfPcpW1ZHumPfb+aVmfv5j3UYvqJFkqYYC+KS0jZjPcLh/UQIswKOEqkLHMnT5bzK8PilqJ+cabJ4lu+NvRra73NKlV/B/e8ItEoZFYJbRbTy0IaToujnaH/1TpOjFgvm+Fye0+pydMj9aPDiXKl/XrXPdTbT2driN7l4chNcUtDLdvn0bs8iTN9oEZtrsGXe5dP6Mtzp0yZCRCGxLPIwRUIaWl39hhzZ1a5pOYvSv32RJmA+GGGAn59kxJh/SU/1lOB6NKZVvKO/k14bjfMvNU6XbaIvYEN55WTtGgENhBAfYB6IyszU4y0sjASf2iifa/dzlUcXczhyhkHqZClGguoSo+H86i6At9i1rRmRfHsMLAZqW482EPbC055qodfK+v0+d4zl9hpVUaonb/9JOpYuDW9suLVhoILe0M4A5lnFNNmFbQPVVpeO7YDX9bkBeiMUyekYbQJYJ/eOxjfKWeK8g7fXJ7wGRyxgKfnXGwoYE1cfRWNoV2nlOUtv4GeoW0jcBAyqq0gM+5h/rn5/rFsNvDVACP0x/3wJoPoeKKtkNHYysgmnNaI0CbnM/KoxcNjd18KjK2Dw6o7YscZ0ZKjDpbNU9ZtI+X08XwLXQMAoLH+ipV4ugTapNXaLszp0ZZg1og0tuAIw5KExmcHMGcF3gARaUpOdTHYdN4q7Iht4j9joF6WmFUvLQal71kv7TGw8n00xpEIpp+sfeQuLUY5d/KyPMpf/D+8+RCOLQt7sc3n+28gO7doVl9VS2CT2Bkw7xXdstWdMSOd2dkXthvsLgK6san2snJYjvoy1T7aArtWqllQ1DMbTxmA/LxNn/HWnWkEi/4uCssUk=", - "urls": [ - "https://pixeldrain.com/api/file/5i1mA1gb", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.2_linux_x86_64.AppImage" - ] + "1.2.0": { + "sha256": "", + "sig": "", + "urls": [] } }, "tumbleweed": { - "1.1.2": { - "sha256": "e6f8c32f6bc908da8d7a21b13a0d85365b53a24035838b3d40778a39a58395c0", - "sig": "AVtYwTJJ6w/AviQX6z4OGEls0Yv5AS2Q56t5u4TuEwCyIEgQVpy6tFxHRCrmjrrQQ34WlNmDlvrHghajZYAAf28uvIcTy9uKATPO1VgCYJvtTq2SnQF3rjXPcGQ/lCHN8bLh4w3yXVAUw36y/mKZMMV7j0OcHqcrYx1kmPuJDMtqrnHDASYYSaE071LL41dTaDjcizZfAdk8wM070R+Ea43ySR9eOIgnRKMq/mCD66/JinrLK9dWUfMC9ePhOn4u18rMJN0zjcDL6b446bd8Ojv3YdIjqQ38aR/YArOCye6bsv6tB5td+w/4ZXPpj3zcuTpaClkBagR8blfCnpeY9YS4W4BcOHYE3D8oZmQyv6DsSox+V07Jc2gZ253VHUUhcQbH0CQ+i0t3eAiNnJKKtQz5QeyFSgLB1et2dqQ9AMtjGTznYIO43xmsj02rtvEJR1up1OgYsSEpVfdABm6Ohf5nPr7566ECzHMCzfprrQ9YyjodmTD1TBw3dTA8SDWFdSfj2FjfPcpW1ZHumPfb+aVmfv5j3UYvqJFkqYYC+KS0jZjPcLh/UQIswKOEqkLHMnT5bzK8PilqJ+cabJ4lu+NvRra73NKlV/B/e8ItEoZFYJbRbTy0IaToujnaH/1TpOjFgvm+Fye0+pydMj9aPDiXKl/XrXPdTbT2driN7l4chNcUtDLdvn0bs8iTN9oEZtrsGXe5dP6Mtzp0yZCRCGxLPIwRUIaWl39hhzZ1a5pOYvSv32RJmA+GGGAn59kxJh/SU/1lOB6NKZVvKO/k14bjfMvNU6XbaIvYEN55WTtGgENhBAfYB6IyszU4y0sjASf2iifa/dzlUcXczhyhkHqZClGguoSo+H86i6At9i1rRmRfHsMLAZqW482EPbC055qodfK+v0+d4zl9hpVUaonb/9JOpYuDW9suLVhoILe0M4A5lnFNNmFbQPVVpeO7YDX9bkBeiMUyekYbQJYJ/eOxjfKWeK8g7fXJ7wGRyxgKfnXGwoYE1cfRWNoV2nlOUtv4GeoW0jcBAyqq0gM+5h/rn5/rFsNvDVACP0x/3wJoPoeKKtkNHYysgmnNaI0CbnM/KoxcNjd18KjK2Dw6o7YscZ0ZKjDpbNU9ZtI+X08XwLXQMAoLH+ipV4ugTapNXaLszp0ZZg1og0tuAIw5KExmcHMGcF3gARaUpOdTHYdN4q7Iht4j9joF6WmFUvLQal71kv7TGw8n00xpEIpp+sfeQuLUY5d/KyPMpf/D+8+RCOLQt7sc3n+28gO7doVl9VS2CT2Bkw7xXdstWdMSOd2dkXthvsLgK6san2snJYjvoy1T7aArtWqllQ1DMbTxmA/LxNn/HWnWkEi/4uCssUk=", - "urls": [ - "https://pixeldrain.com/api/file/5i1mA1gb", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.2_linux_x86_64.AppImage" - ] + "1.2.0": { + "sha256": "", + "sig": "", + "urls": [] } }, "ubuntu18.04": { - "1.1.2": { - "sha256": "e6f8c32f6bc908da8d7a21b13a0d85365b53a24035838b3d40778a39a58395c0", - "sig": "AVtYwTJJ6w/AviQX6z4OGEls0Yv5AS2Q56t5u4TuEwCyIEgQVpy6tFxHRCrmjrrQQ34WlNmDlvrHghajZYAAf28uvIcTy9uKATPO1VgCYJvtTq2SnQF3rjXPcGQ/lCHN8bLh4w3yXVAUw36y/mKZMMV7j0OcHqcrYx1kmPuJDMtqrnHDASYYSaE071LL41dTaDjcizZfAdk8wM070R+Ea43ySR9eOIgnRKMq/mCD66/JinrLK9dWUfMC9ePhOn4u18rMJN0zjcDL6b446bd8Ojv3YdIjqQ38aR/YArOCye6bsv6tB5td+w/4ZXPpj3zcuTpaClkBagR8blfCnpeY9YS4W4BcOHYE3D8oZmQyv6DsSox+V07Jc2gZ253VHUUhcQbH0CQ+i0t3eAiNnJKKtQz5QeyFSgLB1et2dqQ9AMtjGTznYIO43xmsj02rtvEJR1up1OgYsSEpVfdABm6Ohf5nPr7566ECzHMCzfprrQ9YyjodmTD1TBw3dTA8SDWFdSfj2FjfPcpW1ZHumPfb+aVmfv5j3UYvqJFkqYYC+KS0jZjPcLh/UQIswKOEqkLHMnT5bzK8PilqJ+cabJ4lu+NvRra73NKlV/B/e8ItEoZFYJbRbTy0IaToujnaH/1TpOjFgvm+Fye0+pydMj9aPDiXKl/XrXPdTbT2driN7l4chNcUtDLdvn0bs8iTN9oEZtrsGXe5dP6Mtzp0yZCRCGxLPIwRUIaWl39hhzZ1a5pOYvSv32RJmA+GGGAn59kxJh/SU/1lOB6NKZVvKO/k14bjfMvNU6XbaIvYEN55WTtGgENhBAfYB6IyszU4y0sjASf2iifa/dzlUcXczhyhkHqZClGguoSo+H86i6At9i1rRmRfHsMLAZqW482EPbC055qodfK+v0+d4zl9hpVUaonb/9JOpYuDW9suLVhoILe0M4A5lnFNNmFbQPVVpeO7YDX9bkBeiMUyekYbQJYJ/eOxjfKWeK8g7fXJ7wGRyxgKfnXGwoYE1cfRWNoV2nlOUtv4GeoW0jcBAyqq0gM+5h/rn5/rFsNvDVACP0x/3wJoPoeKKtkNHYysgmnNaI0CbnM/KoxcNjd18KjK2Dw6o7YscZ0ZKjDpbNU9ZtI+X08XwLXQMAoLH+ipV4ugTapNXaLszp0ZZg1og0tuAIw5KExmcHMGcF3gARaUpOdTHYdN4q7Iht4j9joF6WmFUvLQal71kv7TGw8n00xpEIpp+sfeQuLUY5d/KyPMpf/D+8+RCOLQt7sc3n+28gO7doVl9VS2CT2Bkw7xXdstWdMSOd2dkXthvsLgK6san2snJYjvoy1T7aArtWqllQ1DMbTxmA/LxNn/HWnWkEi/4uCssUk=", - "urls": [ - "https://pixeldrain.com/api/file/5i1mA1gb", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.2_linux_x86_64.AppImage" - ] + "1.2.0": { + "sha256": "", + "sig": "", + "urls": [] } }, "ubuntu18.10": { - "1.1.2": { - "sha256": "e6f8c32f6bc908da8d7a21b13a0d85365b53a24035838b3d40778a39a58395c0", - "sig": "AVtYwTJJ6w/AviQX6z4OGEls0Yv5AS2Q56t5u4TuEwCyIEgQVpy6tFxHRCrmjrrQQ34WlNmDlvrHghajZYAAf28uvIcTy9uKATPO1VgCYJvtTq2SnQF3rjXPcGQ/lCHN8bLh4w3yXVAUw36y/mKZMMV7j0OcHqcrYx1kmPuJDMtqrnHDASYYSaE071LL41dTaDjcizZfAdk8wM070R+Ea43ySR9eOIgnRKMq/mCD66/JinrLK9dWUfMC9ePhOn4u18rMJN0zjcDL6b446bd8Ojv3YdIjqQ38aR/YArOCye6bsv6tB5td+w/4ZXPpj3zcuTpaClkBagR8blfCnpeY9YS4W4BcOHYE3D8oZmQyv6DsSox+V07Jc2gZ253VHUUhcQbH0CQ+i0t3eAiNnJKKtQz5QeyFSgLB1et2dqQ9AMtjGTznYIO43xmsj02rtvEJR1up1OgYsSEpVfdABm6Ohf5nPr7566ECzHMCzfprrQ9YyjodmTD1TBw3dTA8SDWFdSfj2FjfPcpW1ZHumPfb+aVmfv5j3UYvqJFkqYYC+KS0jZjPcLh/UQIswKOEqkLHMnT5bzK8PilqJ+cabJ4lu+NvRra73NKlV/B/e8ItEoZFYJbRbTy0IaToujnaH/1TpOjFgvm+Fye0+pydMj9aPDiXKl/XrXPdTbT2driN7l4chNcUtDLdvn0bs8iTN9oEZtrsGXe5dP6Mtzp0yZCRCGxLPIwRUIaWl39hhzZ1a5pOYvSv32RJmA+GGGAn59kxJh/SU/1lOB6NKZVvKO/k14bjfMvNU6XbaIvYEN55WTtGgENhBAfYB6IyszU4y0sjASf2iifa/dzlUcXczhyhkHqZClGguoSo+H86i6At9i1rRmRfHsMLAZqW482EPbC055qodfK+v0+d4zl9hpVUaonb/9JOpYuDW9suLVhoILe0M4A5lnFNNmFbQPVVpeO7YDX9bkBeiMUyekYbQJYJ/eOxjfKWeK8g7fXJ7wGRyxgKfnXGwoYE1cfRWNoV2nlOUtv4GeoW0jcBAyqq0gM+5h/rn5/rFsNvDVACP0x/3wJoPoeKKtkNHYysgmnNaI0CbnM/KoxcNjd18KjK2Dw6o7YscZ0ZKjDpbNU9ZtI+X08XwLXQMAoLH+ipV4ugTapNXaLszp0ZZg1og0tuAIw5KExmcHMGcF3gARaUpOdTHYdN4q7Iht4j9joF6WmFUvLQal71kv7TGw8n00xpEIpp+sfeQuLUY5d/KyPMpf/D+8+RCOLQt7sc3n+28gO7doVl9VS2CT2Bkw7xXdstWdMSOd2dkXthvsLgK6san2snJYjvoy1T7aArtWqllQ1DMbTxmA/LxNn/HWnWkEi/4uCssUk=", - "urls": [ - "https://pixeldrain.com/api/file/5i1mA1gb", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.2_linux_x86_64.AppImage" - ] + "1.2.0": { + "sha256": "", + "sig": "", + "urls": [] } }, "ubuntu19.04": { - "1.1.2": { - "sha256": "e6f8c32f6bc908da8d7a21b13a0d85365b53a24035838b3d40778a39a58395c0", - "sig": "AVtYwTJJ6w/AviQX6z4OGEls0Yv5AS2Q56t5u4TuEwCyIEgQVpy6tFxHRCrmjrrQQ34WlNmDlvrHghajZYAAf28uvIcTy9uKATPO1VgCYJvtTq2SnQF3rjXPcGQ/lCHN8bLh4w3yXVAUw36y/mKZMMV7j0OcHqcrYx1kmPuJDMtqrnHDASYYSaE071LL41dTaDjcizZfAdk8wM070R+Ea43ySR9eOIgnRKMq/mCD66/JinrLK9dWUfMC9ePhOn4u18rMJN0zjcDL6b446bd8Ojv3YdIjqQ38aR/YArOCye6bsv6tB5td+w/4ZXPpj3zcuTpaClkBagR8blfCnpeY9YS4W4BcOHYE3D8oZmQyv6DsSox+V07Jc2gZ253VHUUhcQbH0CQ+i0t3eAiNnJKKtQz5QeyFSgLB1et2dqQ9AMtjGTznYIO43xmsj02rtvEJR1up1OgYsSEpVfdABm6Ohf5nPr7566ECzHMCzfprrQ9YyjodmTD1TBw3dTA8SDWFdSfj2FjfPcpW1ZHumPfb+aVmfv5j3UYvqJFkqYYC+KS0jZjPcLh/UQIswKOEqkLHMnT5bzK8PilqJ+cabJ4lu+NvRra73NKlV/B/e8ItEoZFYJbRbTy0IaToujnaH/1TpOjFgvm+Fye0+pydMj9aPDiXKl/XrXPdTbT2driN7l4chNcUtDLdvn0bs8iTN9oEZtrsGXe5dP6Mtzp0yZCRCGxLPIwRUIaWl39hhzZ1a5pOYvSv32RJmA+GGGAn59kxJh/SU/1lOB6NKZVvKO/k14bjfMvNU6XbaIvYEN55WTtGgENhBAfYB6IyszU4y0sjASf2iifa/dzlUcXczhyhkHqZClGguoSo+H86i6At9i1rRmRfHsMLAZqW482EPbC055qodfK+v0+d4zl9hpVUaonb/9JOpYuDW9suLVhoILe0M4A5lnFNNmFbQPVVpeO7YDX9bkBeiMUyekYbQJYJ/eOxjfKWeK8g7fXJ7wGRyxgKfnXGwoYE1cfRWNoV2nlOUtv4GeoW0jcBAyqq0gM+5h/rn5/rFsNvDVACP0x/3wJoPoeKKtkNHYysgmnNaI0CbnM/KoxcNjd18KjK2Dw6o7YscZ0ZKjDpbNU9ZtI+X08XwLXQMAoLH+ipV4ugTapNXaLszp0ZZg1og0tuAIw5KExmcHMGcF3gARaUpOdTHYdN4q7Iht4j9joF6WmFUvLQal71kv7TGw8n00xpEIpp+sfeQuLUY5d/KyPMpf/D+8+RCOLQt7sc3n+28gO7doVl9VS2CT2Bkw7xXdstWdMSOd2dkXthvsLgK6san2snJYjvoy1T7aArtWqllQ1DMbTxmA/LxNn/HWnWkEi/4uCssUk=", - "urls": [ - "https://pixeldrain.com/api/file/5i1mA1gb", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.2_linux_x86_64.AppImage" - ] + "1.2.0": { + "sha256": "", + "sig": "", + "urls": [] } }, "ubuntu19.10": { - "1.1.2": { - "sha256": "e6f8c32f6bc908da8d7a21b13a0d85365b53a24035838b3d40778a39a58395c0", - "sig": "AVtYwTJJ6w/AviQX6z4OGEls0Yv5AS2Q56t5u4TuEwCyIEgQVpy6tFxHRCrmjrrQQ34WlNmDlvrHghajZYAAf28uvIcTy9uKATPO1VgCYJvtTq2SnQF3rjXPcGQ/lCHN8bLh4w3yXVAUw36y/mKZMMV7j0OcHqcrYx1kmPuJDMtqrnHDASYYSaE071LL41dTaDjcizZfAdk8wM070R+Ea43ySR9eOIgnRKMq/mCD66/JinrLK9dWUfMC9ePhOn4u18rMJN0zjcDL6b446bd8Ojv3YdIjqQ38aR/YArOCye6bsv6tB5td+w/4ZXPpj3zcuTpaClkBagR8blfCnpeY9YS4W4BcOHYE3D8oZmQyv6DsSox+V07Jc2gZ253VHUUhcQbH0CQ+i0t3eAiNnJKKtQz5QeyFSgLB1et2dqQ9AMtjGTznYIO43xmsj02rtvEJR1up1OgYsSEpVfdABm6Ohf5nPr7566ECzHMCzfprrQ9YyjodmTD1TBw3dTA8SDWFdSfj2FjfPcpW1ZHumPfb+aVmfv5j3UYvqJFkqYYC+KS0jZjPcLh/UQIswKOEqkLHMnT5bzK8PilqJ+cabJ4lu+NvRra73NKlV/B/e8ItEoZFYJbRbTy0IaToujnaH/1TpOjFgvm+Fye0+pydMj9aPDiXKl/XrXPdTbT2driN7l4chNcUtDLdvn0bs8iTN9oEZtrsGXe5dP6Mtzp0yZCRCGxLPIwRUIaWl39hhzZ1a5pOYvSv32RJmA+GGGAn59kxJh/SU/1lOB6NKZVvKO/k14bjfMvNU6XbaIvYEN55WTtGgENhBAfYB6IyszU4y0sjASf2iifa/dzlUcXczhyhkHqZClGguoSo+H86i6At9i1rRmRfHsMLAZqW482EPbC055qodfK+v0+d4zl9hpVUaonb/9JOpYuDW9suLVhoILe0M4A5lnFNNmFbQPVVpeO7YDX9bkBeiMUyekYbQJYJ/eOxjfKWeK8g7fXJ7wGRyxgKfnXGwoYE1cfRWNoV2nlOUtv4GeoW0jcBAyqq0gM+5h/rn5/rFsNvDVACP0x/3wJoPoeKKtkNHYysgmnNaI0CbnM/KoxcNjd18KjK2Dw6o7YscZ0ZKjDpbNU9ZtI+X08XwLXQMAoLH+ipV4ugTapNXaLszp0ZZg1og0tuAIw5KExmcHMGcF3gARaUpOdTHYdN4q7Iht4j9joF6WmFUvLQal71kv7TGw8n00xpEIpp+sfeQuLUY5d/KyPMpf/D+8+RCOLQt7sc3n+28gO7doVl9VS2CT2Bkw7xXdstWdMSOd2dkXthvsLgK6san2snJYjvoy1T7aArtWqllQ1DMbTxmA/LxNn/HWnWkEi/4uCssUk=", - "urls": [ - "https://pixeldrain.com/api/file/5i1mA1gb", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.2_linux_x86_64.AppImage" - ] + "1.2.0": { + "sha256": "", + "sig": "", + "urls": [] } }, "win32": { - "1.1.2": { - "sha256": "2534a2aa350d4ed1786c4b1cd298ccc987fae226850a1a8bd6d54a8fac39295c", - "sig": "Azsov3SYmN/+I3ojIAtYubfEctxD+0QgtgmeubXnjMacb1us8Lu9hFb2wVVd7RGWtsHRmxkpWAi+hUd+gSjM9ahPbm164uq2licspNWeaGJFsQ6LDT6htKz0mQAyfZB9UrKCZrfFKDMXji85GqyUlGu92NlcnXK2tVxMFuB8DHKO+uG97+YisrwvoxLgVSM/9XrjfVEJMcik4URFF1tL5IRksnqA7ccuo++BmoDOcTFvRSky5tNl/KKabEJQLS72FIJI42djBKEn/tE9wxPhBUAa/ya5crOlkD+FgAywoUScbhwcGzg1EMjtDCIDEZrsmfW91jlZmJKDxTv8DaV2MFn97NZVWGWEjU9iOYzd0j4GbNtG58M6YM6ViCJ9fCjSCGrxLS76B9Ra2YShSaJJ6RbD7JiZI86btohiQBbguhvPq16BgRUi35SQCIerASYJTjCys958fSYGd66yfyQNOcFLaTzuvG5nSpbdsakLxAqRzYx+ATYY1lETWk5OMst0pkjIxFid+xw8+/btwlfrtrGx7R7WKAfQJAL/OxvXkhiOZ3aylcdnf8tspOsjUKDGHuznt6HQvdTreUDAVZL6iVL9h+QNEeTw1AISaVqy4+dtGwFGdIxacyt5az9rpnoI9w52cARQiiUyk3I5IGyBF20ia75QXoAOZcaPiBM4yF9gicG8VKW+XFO5FBQCZiktcrNZ0lB8USILjHfRSnITqEZCOKiMRBLQVdJuwa/QxkH3tQfmVFr1FN18ZiImnLITTr2ffiFhXoQTF9NQNGtLHKLe6xvPjPjQm0ZdBKKHw7y5jkkA2mQysvD10ebackP+SLPR7hq3uBhhQsBic4pVDV1GS3UsP/etExzWCwos11MpChRSG5fAmROMiLR1DkvPUJslM4A7Rm+weo91F8+48krxNYRKeJszCWBcRUJnEd5sYI83bJ0RM6+ftl+29YW8QJpVf1tJ0D22yaTI/XgGHusdQircD4vLRKPfkXn8XEApFnLV9knujzXs5vrlQNTFFarXG+f+7E6IeXE+jneaSBXru0XgYyFCy8HRqq5rgMu1SHU5UjdWQyBM1bNGXp8WOOwuDpVbTUHg16TJ99GMbvYNjL9sJNjFcsNcId7b2gNWxo60w9O8C4+GUJrexisjQCZFzL7d/PbKCvHZp1MpliNEEIV43rniY7KUcXUmvLnMrKywj1aYVTRpLDJrtjGEGZ7OeVrxKPR/wPIpV9DD05xyOpYNyamIs5uJyBoBESXUGM+6kWhc5ZO+EJvueVU7OvuqQG8l5YQAbZvLI03jgJLTCyWxvu0zdpsSUtH560zXumuVlbCqJj2XWizP+aCQbqSnvtv1hFxJYv7a9yIgvLc=", - "urls": [ - "https://pixeldrain.com/api/file/TkQn25Bm", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.2_win.exe" - ] + "1.2.0": { + "sha256": "", + "sig": "", + "urls": [] } } }, "Versions": { "arch": [ - "1.1.2" + "1.2.0" ], "centos7": [ - "1.1.2" + "1.2.0" ], "darwin": [ - "1.1.2" + "1.2.0" ], "debian9": [ - "1.1.2" + "1.2.0" ], "debian10": [ - "1.1.2" + "1.2.0" ], "fedora28": [ - "1.1.2" + "1.2.0" ], "fedora29": [ - "1.1.2" + "1.2.0" ], "fedora30": [ - "1.1.2" + "1.2.0" ], "fedora31": [ - "1.1.2" + "1.2.0" ], "linux": [ "unavailable" ], "opensuse15": [ - "1.1.2" + "1.2.0" ], "opensuse15.1": [ - "1.1.2" + "1.2.0" ], "solus": [ - "1.1.2" + "1.2.0" ], "tumbleweed": [ - "1.1.2" + "1.2.0" ], "ubuntu18.04": [ - "1.1.2" + "1.2.0" ], "ubuntu18.10": [ - "1.1.2" + "1.2.0" ], "ubuntu19.04": [ - "1.1.2" + "1.2.0" ], "ubuntu19.10": [ - "1.1.2" + "1.2.0" ], "unknown": [ "unavailable" ], "win32": [ - "1.1.2" + "1.2.0" ] } } From 2cfec5f68850f8de5a52fd11e82e1f36b22eaa48 Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Wed, 19 Feb 2020 15:04:43 -0600 Subject: [PATCH 004/131] Update version --- package.json | 2 +- releases.json | 247 ++++++++++++++++++----------------------------- src/constants.js | 2 +- 3 files changed, 97 insertions(+), 154 deletions(-) diff --git a/package.json b/package.json index 482d5bf..7bc616c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "repertory-ui", - "version": "1.1.4", + "version": "1.1.5", "private": true, "author": "scott.e.graves@protonmail.com", "description": "GUI for Repertory - Repertory allows you to mount Sia and/or ScPrime blockchain storage solutions via FUSE on Linux/OS X or via WinFSP on Windows.", diff --git a/releases.json b/releases.json index 7e58eca..5bebda0 100644 --- a/releases.json +++ b/releases.json @@ -1,259 +1,202 @@ { "Locations": { "arch": { - "1.1.4": { - "sha256": "85347471f33dd41a35eb296cda03590d451322cd54a077cef470ccbfe52a141b", - "sig": "CGialiJMT6nETdGgP3vQvsXSWQYUEX7j7Cck0NSiW0cE4A1kW3mabM2I/5Yt4NwkDqBIAXofPyUd1JQ4UrF8cijfLNv3ECSaDJs7bWrISDr3Z8ti0uZnN3RUdJDCYDvAWBVqGC82Q1fmLkYJhd33o2B9DzjmvO+i7+buNyDB3dBIY5Fa3rnLKsIY7WB5EASBG3TzDlsZOtLvNgKo/3fLJP2RFyczSVCFZeHlppJbyXCakj50eCNbxjP6SLaD3oE+M0xGvyPyKTk0OGoJTGKM13q30WKbM6cMfL87BbUueGkBFDZeNMWU8Mz/fdGG21WqNN1p7k3CilJJQz7ZEE9bBhlsIX5j5rvL2qNYJoQbJQbxVjyoWHOOlqA62WUTOZhyiHD3OWQ58Fd9JqGDiIhg+ChIBWzyEXNdE6GQr7/qEiAQDbEsU06WOzfj3uxAV//iy/noalpyhlnr0TUu5xKSnoR7jQhCtvOdlrmgs8y+mTEpwDjXCR0S7jDxp+cEbVHb57Rl8N5thVrOs5RQfshhcqwBR/scCM9iCr0v3D7uyGMinTBT3A8lwerN8iO17FhtEerovn4Zhg2p7quZRiUcYLdx4EOlIMWuORyDk3s0S4VZ27t92NYwMlwMA1TbUQ/XuN1oZaQQ9ipSDjNDDVZto3Q4vwlqL3g1TIs1JyxfHkwUTpuFjg3ZqY+uRNxeJTDlj9JHXiAIZ+VeBggB7EixKE+wMi1A6a+Si/ZpBbroK5gP1gODShXYUN4eGmodxqF2/gVrJcimEeHkyBZ74dZIa9gTSIOxeo1OS70fFU+hQy9/V0/q4PElPZn+EzLTGknWh1EDmqReZ1svv0tYf0Ve/l5szhdNGsb2LUEZ7G/r0Bs7fyQjA5YZI+byOPTSA1Q9vlT63sodpBRDURWkqTRFRPWlaEY2kMZu/vJ422PSjK51X4EPHWmpOkDkxFzx2WAs2rKZ9QXCkU0RGu0Ctial/zNVhm20eVklcuIirEnmUK9Kod0KBmjl+U6U6jHvlhOEC4zp2QcDsrLSQu7gDHvJWbYmaKBTiXrEvk52G/EN9aD86Am5k0bwPU5ktj8z38+5sxVns1R4e9J1WaZgD2dtFvpSxJbjVf09AZHIeyNw/BRu3GfJU6dX6KJVMCMtN+R5xv/ZckylI355R4nrf+7PLNsGg2tqlemvHiwdQkOb3/TOLrJpO94JRjm9k16huysztkpgJIGyKvHXT6z1A3cwCoJzrK7sQ1awedPvO+N8UGJ7kXHRgLLhQ2yWfZfIsD/s0Ji5GFrItm1nlqHAd/ZFh82jNKmvh6+n42l5TimH9Q0Cf+7bK5Y7SVYzhSAW2B8ivHsPMpAkLJ6d17ZMxtrr4/Q=", - "urls": [ - "https://pixeldrain.com/api/file/KfWzWfxp", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.4_linux_x86_64.AppImage" - ] + "1.1.5": { + "sha256": "", + "sig": "", + "urls": [] } }, "centos7": { - "1.1.4": { - "sha256": "85347471f33dd41a35eb296cda03590d451322cd54a077cef470ccbfe52a141b", - "sig": "CGialiJMT6nETdGgP3vQvsXSWQYUEX7j7Cck0NSiW0cE4A1kW3mabM2I/5Yt4NwkDqBIAXofPyUd1JQ4UrF8cijfLNv3ECSaDJs7bWrISDr3Z8ti0uZnN3RUdJDCYDvAWBVqGC82Q1fmLkYJhd33o2B9DzjmvO+i7+buNyDB3dBIY5Fa3rnLKsIY7WB5EASBG3TzDlsZOtLvNgKo/3fLJP2RFyczSVCFZeHlppJbyXCakj50eCNbxjP6SLaD3oE+M0xGvyPyKTk0OGoJTGKM13q30WKbM6cMfL87BbUueGkBFDZeNMWU8Mz/fdGG21WqNN1p7k3CilJJQz7ZEE9bBhlsIX5j5rvL2qNYJoQbJQbxVjyoWHOOlqA62WUTOZhyiHD3OWQ58Fd9JqGDiIhg+ChIBWzyEXNdE6GQr7/qEiAQDbEsU06WOzfj3uxAV//iy/noalpyhlnr0TUu5xKSnoR7jQhCtvOdlrmgs8y+mTEpwDjXCR0S7jDxp+cEbVHb57Rl8N5thVrOs5RQfshhcqwBR/scCM9iCr0v3D7uyGMinTBT3A8lwerN8iO17FhtEerovn4Zhg2p7quZRiUcYLdx4EOlIMWuORyDk3s0S4VZ27t92NYwMlwMA1TbUQ/XuN1oZaQQ9ipSDjNDDVZto3Q4vwlqL3g1TIs1JyxfHkwUTpuFjg3ZqY+uRNxeJTDlj9JHXiAIZ+VeBggB7EixKE+wMi1A6a+Si/ZpBbroK5gP1gODShXYUN4eGmodxqF2/gVrJcimEeHkyBZ74dZIa9gTSIOxeo1OS70fFU+hQy9/V0/q4PElPZn+EzLTGknWh1EDmqReZ1svv0tYf0Ve/l5szhdNGsb2LUEZ7G/r0Bs7fyQjA5YZI+byOPTSA1Q9vlT63sodpBRDURWkqTRFRPWlaEY2kMZu/vJ422PSjK51X4EPHWmpOkDkxFzx2WAs2rKZ9QXCkU0RGu0Ctial/zNVhm20eVklcuIirEnmUK9Kod0KBmjl+U6U6jHvlhOEC4zp2QcDsrLSQu7gDHvJWbYmaKBTiXrEvk52G/EN9aD86Am5k0bwPU5ktj8z38+5sxVns1R4e9J1WaZgD2dtFvpSxJbjVf09AZHIeyNw/BRu3GfJU6dX6KJVMCMtN+R5xv/ZckylI355R4nrf+7PLNsGg2tqlemvHiwdQkOb3/TOLrJpO94JRjm9k16huysztkpgJIGyKvHXT6z1A3cwCoJzrK7sQ1awedPvO+N8UGJ7kXHRgLLhQ2yWfZfIsD/s0Ji5GFrItm1nlqHAd/ZFh82jNKmvh6+n42l5TimH9Q0Cf+7bK5Y7SVYzhSAW2B8ivHsPMpAkLJ6d17ZMxtrr4/Q=", - "urls": [ - "https://pixeldrain.com/api/file/KfWzWfxp", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.4_linux_x86_64.AppImage" - ] + "1.1.5": { + "sha256": "", + "sig": "", + "urls": [] } }, "centos8": { - "1.1.4": { - "sha256": "85347471f33dd41a35eb296cda03590d451322cd54a077cef470ccbfe52a141b", - "sig": "CGialiJMT6nETdGgP3vQvsXSWQYUEX7j7Cck0NSiW0cE4A1kW3mabM2I/5Yt4NwkDqBIAXofPyUd1JQ4UrF8cijfLNv3ECSaDJs7bWrISDr3Z8ti0uZnN3RUdJDCYDvAWBVqGC82Q1fmLkYJhd33o2B9DzjmvO+i7+buNyDB3dBIY5Fa3rnLKsIY7WB5EASBG3TzDlsZOtLvNgKo/3fLJP2RFyczSVCFZeHlppJbyXCakj50eCNbxjP6SLaD3oE+M0xGvyPyKTk0OGoJTGKM13q30WKbM6cMfL87BbUueGkBFDZeNMWU8Mz/fdGG21WqNN1p7k3CilJJQz7ZEE9bBhlsIX5j5rvL2qNYJoQbJQbxVjyoWHOOlqA62WUTOZhyiHD3OWQ58Fd9JqGDiIhg+ChIBWzyEXNdE6GQr7/qEiAQDbEsU06WOzfj3uxAV//iy/noalpyhlnr0TUu5xKSnoR7jQhCtvOdlrmgs8y+mTEpwDjXCR0S7jDxp+cEbVHb57Rl8N5thVrOs5RQfshhcqwBR/scCM9iCr0v3D7uyGMinTBT3A8lwerN8iO17FhtEerovn4Zhg2p7quZRiUcYLdx4EOlIMWuORyDk3s0S4VZ27t92NYwMlwMA1TbUQ/XuN1oZaQQ9ipSDjNDDVZto3Q4vwlqL3g1TIs1JyxfHkwUTpuFjg3ZqY+uRNxeJTDlj9JHXiAIZ+VeBggB7EixKE+wMi1A6a+Si/ZpBbroK5gP1gODShXYUN4eGmodxqF2/gVrJcimEeHkyBZ74dZIa9gTSIOxeo1OS70fFU+hQy9/V0/q4PElPZn+EzLTGknWh1EDmqReZ1svv0tYf0Ve/l5szhdNGsb2LUEZ7G/r0Bs7fyQjA5YZI+byOPTSA1Q9vlT63sodpBRDURWkqTRFRPWlaEY2kMZu/vJ422PSjK51X4EPHWmpOkDkxFzx2WAs2rKZ9QXCkU0RGu0Ctial/zNVhm20eVklcuIirEnmUK9Kod0KBmjl+U6U6jHvlhOEC4zp2QcDsrLSQu7gDHvJWbYmaKBTiXrEvk52G/EN9aD86Am5k0bwPU5ktj8z38+5sxVns1R4e9J1WaZgD2dtFvpSxJbjVf09AZHIeyNw/BRu3GfJU6dX6KJVMCMtN+R5xv/ZckylI355R4nrf+7PLNsGg2tqlemvHiwdQkOb3/TOLrJpO94JRjm9k16huysztkpgJIGyKvHXT6z1A3cwCoJzrK7sQ1awedPvO+N8UGJ7kXHRgLLhQ2yWfZfIsD/s0Ji5GFrItm1nlqHAd/ZFh82jNKmvh6+n42l5TimH9Q0Cf+7bK5Y7SVYzhSAW2B8ivHsPMpAkLJ6d17ZMxtrr4/Q=", - "urls": [ - "https://pixeldrain.com/api/file/KfWzWfxp", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.4_linux_x86_64.AppImage" - ] + "1.1.5": { + "sha256": "", + "sig": "", + "urls": [] } }, "darwin": { - "1.1.4": { - "sha256": "8c91046a83b689564355be3e0a3e194ab986c4633f112696e33e4bb7ebd7e46e", - "sig": "BBds0xSaIqr2rns+cSr90bmxtfy2aIGNVcKgRfMYYqDntV5SkWxD8ivqPglFiLQA/jfgd5A8DjMJs4FA6FDvF1ZFcfgZLFw94OT1M3jPJ7cf5Izv1EQb+5AV7SK8H7DACDixcgKDDXO0WARmeqNXJZzyxkny8XKIiGDwLbmrXfFVuKPSLucbf6eaTem+xJHjQPzP9FH4Lwf9kbQxis2/PIT63yflQdM9CAAvfZUB4YUCOF5T8I43uNV2YDR0Z+k5FLTBexJDORDRixbrldWqNo7NQlNMR+26LY2IBppQqOMtDw9cpcfPj8bNgkWsZkFk/eOcrcpc8ENQodGxb01JahKJ20g9soJEAOhiFW3TOxzOLNq8cQFdKYgJv2K68lav/QzVPD6n14Bsr3+5mkX4fE1GmmN1HLgFO+JbD25qDrS4ExKR5TJ2Zdu136n/Mxbj2apYDhWtU8X6OD86F29m348XDonC9Fn+vzoE2M4xNKptMhukem7NFG7Z03v6+J73PaVM1NldARMGgVUYFA6QTn6Ns55YEXnsHoSoreHmgl5y3s8eRo0/oehv0cpPG6shCz71+YlVG/IgbKWIgYZ0jj03Cdsgv/XyadiwfCI9Q7uvl368Vlbuad4mqttMTZwHeZlKikTYb74QDyXqVoz0Q2ij7WET7MkXpA3++hDrPIN5Cb8qi/YuMp63w6TLfz4c/ZCQeje+0d7x6p63Z7TObEXDyBgdUAphX3T/u4pkEjXQKsfNRh8jaFOXU3z+hG8+IXjrZtLcDEzqICZ8JJCrkklgliTM1ECiekvJ9jwXTN2ClrzLQ3qhX8N+8jkvQ+yZxGxH+3rOX55RyW4OcMYUYvDpTtNHncVvABBlRvPGEGxtA7RMDTzOGe0lk70y07al6iFKDktaoYSFlcH+pUw7ifDZamefxlKDmtrMOMNmnrm+v8WH0g0MG8qy/nGPxv5dFIl9gAC/rvRElxX8FpA7y18i7fQ0IfhpaC58gZZADkF0nFOW15N7zwjS3qnhAGCBCBEDwlFG9brD71qjShtodgnz+GvrDvtqGTwNRllnZXSHPCWe33BOHy2c30LwE8vJq+ChVaJobCA9P8ipgZv/gAuZz7LNFc/Uong5TyKZk2uXun3XF1Qkw+ogBpl9aqMWIySZhkDnBcZjjE9pL/FQAkO1H90+zNnSdSAKZQaPckxLSyqHXxb4P7Da4nj3tad609NcxEzsz3dpEJTuYlqLqmO5kJmy29jNUHhQQdPCuKJtdm/coz3kWtC+uR6/SMnhviGnc7tQUqyb6HfGywKbmoAM93NHSGxNGyNMU+VJ20/YK1lmVFo3Pg/wq+aX35utcjQafpATqHeOeDw26fnZxBs=", - "urls": [ - "https://pixeldrain.com/api/file/68WJfKsz", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.4_mac.dmg" - ] + "1.1.5": { + "sha256": "", + "sig": "", + "urls": [] } }, "debian9": { - "1.1.4": { - "sha256": "85347471f33dd41a35eb296cda03590d451322cd54a077cef470ccbfe52a141b", - "sig": "CGialiJMT6nETdGgP3vQvsXSWQYUEX7j7Cck0NSiW0cE4A1kW3mabM2I/5Yt4NwkDqBIAXofPyUd1JQ4UrF8cijfLNv3ECSaDJs7bWrISDr3Z8ti0uZnN3RUdJDCYDvAWBVqGC82Q1fmLkYJhd33o2B9DzjmvO+i7+buNyDB3dBIY5Fa3rnLKsIY7WB5EASBG3TzDlsZOtLvNgKo/3fLJP2RFyczSVCFZeHlppJbyXCakj50eCNbxjP6SLaD3oE+M0xGvyPyKTk0OGoJTGKM13q30WKbM6cMfL87BbUueGkBFDZeNMWU8Mz/fdGG21WqNN1p7k3CilJJQz7ZEE9bBhlsIX5j5rvL2qNYJoQbJQbxVjyoWHOOlqA62WUTOZhyiHD3OWQ58Fd9JqGDiIhg+ChIBWzyEXNdE6GQr7/qEiAQDbEsU06WOzfj3uxAV//iy/noalpyhlnr0TUu5xKSnoR7jQhCtvOdlrmgs8y+mTEpwDjXCR0S7jDxp+cEbVHb57Rl8N5thVrOs5RQfshhcqwBR/scCM9iCr0v3D7uyGMinTBT3A8lwerN8iO17FhtEerovn4Zhg2p7quZRiUcYLdx4EOlIMWuORyDk3s0S4VZ27t92NYwMlwMA1TbUQ/XuN1oZaQQ9ipSDjNDDVZto3Q4vwlqL3g1TIs1JyxfHkwUTpuFjg3ZqY+uRNxeJTDlj9JHXiAIZ+VeBggB7EixKE+wMi1A6a+Si/ZpBbroK5gP1gODShXYUN4eGmodxqF2/gVrJcimEeHkyBZ74dZIa9gTSIOxeo1OS70fFU+hQy9/V0/q4PElPZn+EzLTGknWh1EDmqReZ1svv0tYf0Ve/l5szhdNGsb2LUEZ7G/r0Bs7fyQjA5YZI+byOPTSA1Q9vlT63sodpBRDURWkqTRFRPWlaEY2kMZu/vJ422PSjK51X4EPHWmpOkDkxFzx2WAs2rKZ9QXCkU0RGu0Ctial/zNVhm20eVklcuIirEnmUK9Kod0KBmjl+U6U6jHvlhOEC4zp2QcDsrLSQu7gDHvJWbYmaKBTiXrEvk52G/EN9aD86Am5k0bwPU5ktj8z38+5sxVns1R4e9J1WaZgD2dtFvpSxJbjVf09AZHIeyNw/BRu3GfJU6dX6KJVMCMtN+R5xv/ZckylI355R4nrf+7PLNsGg2tqlemvHiwdQkOb3/TOLrJpO94JRjm9k16huysztkpgJIGyKvHXT6z1A3cwCoJzrK7sQ1awedPvO+N8UGJ7kXHRgLLhQ2yWfZfIsD/s0Ji5GFrItm1nlqHAd/ZFh82jNKmvh6+n42l5TimH9Q0Cf+7bK5Y7SVYzhSAW2B8ivHsPMpAkLJ6d17ZMxtrr4/Q=", - "urls": [ - "https://pixeldrain.com/api/file/KfWzWfxp", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.4_linux_x86_64.AppImage" - ] + "1.1.5": { + "sha256": "", + "sig": "", + "urls": [] } }, "debian10": { - "1.1.4": { - "sha256": "85347471f33dd41a35eb296cda03590d451322cd54a077cef470ccbfe52a141b", - "sig": "CGialiJMT6nETdGgP3vQvsXSWQYUEX7j7Cck0NSiW0cE4A1kW3mabM2I/5Yt4NwkDqBIAXofPyUd1JQ4UrF8cijfLNv3ECSaDJs7bWrISDr3Z8ti0uZnN3RUdJDCYDvAWBVqGC82Q1fmLkYJhd33o2B9DzjmvO+i7+buNyDB3dBIY5Fa3rnLKsIY7WB5EASBG3TzDlsZOtLvNgKo/3fLJP2RFyczSVCFZeHlppJbyXCakj50eCNbxjP6SLaD3oE+M0xGvyPyKTk0OGoJTGKM13q30WKbM6cMfL87BbUueGkBFDZeNMWU8Mz/fdGG21WqNN1p7k3CilJJQz7ZEE9bBhlsIX5j5rvL2qNYJoQbJQbxVjyoWHOOlqA62WUTOZhyiHD3OWQ58Fd9JqGDiIhg+ChIBWzyEXNdE6GQr7/qEiAQDbEsU06WOzfj3uxAV//iy/noalpyhlnr0TUu5xKSnoR7jQhCtvOdlrmgs8y+mTEpwDjXCR0S7jDxp+cEbVHb57Rl8N5thVrOs5RQfshhcqwBR/scCM9iCr0v3D7uyGMinTBT3A8lwerN8iO17FhtEerovn4Zhg2p7quZRiUcYLdx4EOlIMWuORyDk3s0S4VZ27t92NYwMlwMA1TbUQ/XuN1oZaQQ9ipSDjNDDVZto3Q4vwlqL3g1TIs1JyxfHkwUTpuFjg3ZqY+uRNxeJTDlj9JHXiAIZ+VeBggB7EixKE+wMi1A6a+Si/ZpBbroK5gP1gODShXYUN4eGmodxqF2/gVrJcimEeHkyBZ74dZIa9gTSIOxeo1OS70fFU+hQy9/V0/q4PElPZn+EzLTGknWh1EDmqReZ1svv0tYf0Ve/l5szhdNGsb2LUEZ7G/r0Bs7fyQjA5YZI+byOPTSA1Q9vlT63sodpBRDURWkqTRFRPWlaEY2kMZu/vJ422PSjK51X4EPHWmpOkDkxFzx2WAs2rKZ9QXCkU0RGu0Ctial/zNVhm20eVklcuIirEnmUK9Kod0KBmjl+U6U6jHvlhOEC4zp2QcDsrLSQu7gDHvJWbYmaKBTiXrEvk52G/EN9aD86Am5k0bwPU5ktj8z38+5sxVns1R4e9J1WaZgD2dtFvpSxJbjVf09AZHIeyNw/BRu3GfJU6dX6KJVMCMtN+R5xv/ZckylI355R4nrf+7PLNsGg2tqlemvHiwdQkOb3/TOLrJpO94JRjm9k16huysztkpgJIGyKvHXT6z1A3cwCoJzrK7sQ1awedPvO+N8UGJ7kXHRgLLhQ2yWfZfIsD/s0Ji5GFrItm1nlqHAd/ZFh82jNKmvh6+n42l5TimH9Q0Cf+7bK5Y7SVYzhSAW2B8ivHsPMpAkLJ6d17ZMxtrr4/Q=", - "urls": [ - "https://pixeldrain.com/api/file/KfWzWfxp", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.4_linux_x86_64.AppImage" - ] + "1.1.5": { + "sha256": "", + "sig": "", + "urls": [] } }, "fedora28": { - "1.1.4": { - "sha256": "85347471f33dd41a35eb296cda03590d451322cd54a077cef470ccbfe52a141b", - "sig": "CGialiJMT6nETdGgP3vQvsXSWQYUEX7j7Cck0NSiW0cE4A1kW3mabM2I/5Yt4NwkDqBIAXofPyUd1JQ4UrF8cijfLNv3ECSaDJs7bWrISDr3Z8ti0uZnN3RUdJDCYDvAWBVqGC82Q1fmLkYJhd33o2B9DzjmvO+i7+buNyDB3dBIY5Fa3rnLKsIY7WB5EASBG3TzDlsZOtLvNgKo/3fLJP2RFyczSVCFZeHlppJbyXCakj50eCNbxjP6SLaD3oE+M0xGvyPyKTk0OGoJTGKM13q30WKbM6cMfL87BbUueGkBFDZeNMWU8Mz/fdGG21WqNN1p7k3CilJJQz7ZEE9bBhlsIX5j5rvL2qNYJoQbJQbxVjyoWHOOlqA62WUTOZhyiHD3OWQ58Fd9JqGDiIhg+ChIBWzyEXNdE6GQr7/qEiAQDbEsU06WOzfj3uxAV//iy/noalpyhlnr0TUu5xKSnoR7jQhCtvOdlrmgs8y+mTEpwDjXCR0S7jDxp+cEbVHb57Rl8N5thVrOs5RQfshhcqwBR/scCM9iCr0v3D7uyGMinTBT3A8lwerN8iO17FhtEerovn4Zhg2p7quZRiUcYLdx4EOlIMWuORyDk3s0S4VZ27t92NYwMlwMA1TbUQ/XuN1oZaQQ9ipSDjNDDVZto3Q4vwlqL3g1TIs1JyxfHkwUTpuFjg3ZqY+uRNxeJTDlj9JHXiAIZ+VeBggB7EixKE+wMi1A6a+Si/ZpBbroK5gP1gODShXYUN4eGmodxqF2/gVrJcimEeHkyBZ74dZIa9gTSIOxeo1OS70fFU+hQy9/V0/q4PElPZn+EzLTGknWh1EDmqReZ1svv0tYf0Ve/l5szhdNGsb2LUEZ7G/r0Bs7fyQjA5YZI+byOPTSA1Q9vlT63sodpBRDURWkqTRFRPWlaEY2kMZu/vJ422PSjK51X4EPHWmpOkDkxFzx2WAs2rKZ9QXCkU0RGu0Ctial/zNVhm20eVklcuIirEnmUK9Kod0KBmjl+U6U6jHvlhOEC4zp2QcDsrLSQu7gDHvJWbYmaKBTiXrEvk52G/EN9aD86Am5k0bwPU5ktj8z38+5sxVns1R4e9J1WaZgD2dtFvpSxJbjVf09AZHIeyNw/BRu3GfJU6dX6KJVMCMtN+R5xv/ZckylI355R4nrf+7PLNsGg2tqlemvHiwdQkOb3/TOLrJpO94JRjm9k16huysztkpgJIGyKvHXT6z1A3cwCoJzrK7sQ1awedPvO+N8UGJ7kXHRgLLhQ2yWfZfIsD/s0Ji5GFrItm1nlqHAd/ZFh82jNKmvh6+n42l5TimH9Q0Cf+7bK5Y7SVYzhSAW2B8ivHsPMpAkLJ6d17ZMxtrr4/Q=", - "urls": [ - "https://pixeldrain.com/api/file/KfWzWfxp", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.4_linux_x86_64.AppImage" - ] + "1.1.5": { + "sha256": "", + "sig": "", + "urls": [] } }, "fedora29": { - "1.1.4": { - "sha256": "85347471f33dd41a35eb296cda03590d451322cd54a077cef470ccbfe52a141b", - "sig": "CGialiJMT6nETdGgP3vQvsXSWQYUEX7j7Cck0NSiW0cE4A1kW3mabM2I/5Yt4NwkDqBIAXofPyUd1JQ4UrF8cijfLNv3ECSaDJs7bWrISDr3Z8ti0uZnN3RUdJDCYDvAWBVqGC82Q1fmLkYJhd33o2B9DzjmvO+i7+buNyDB3dBIY5Fa3rnLKsIY7WB5EASBG3TzDlsZOtLvNgKo/3fLJP2RFyczSVCFZeHlppJbyXCakj50eCNbxjP6SLaD3oE+M0xGvyPyKTk0OGoJTGKM13q30WKbM6cMfL87BbUueGkBFDZeNMWU8Mz/fdGG21WqNN1p7k3CilJJQz7ZEE9bBhlsIX5j5rvL2qNYJoQbJQbxVjyoWHOOlqA62WUTOZhyiHD3OWQ58Fd9JqGDiIhg+ChIBWzyEXNdE6GQr7/qEiAQDbEsU06WOzfj3uxAV//iy/noalpyhlnr0TUu5xKSnoR7jQhCtvOdlrmgs8y+mTEpwDjXCR0S7jDxp+cEbVHb57Rl8N5thVrOs5RQfshhcqwBR/scCM9iCr0v3D7uyGMinTBT3A8lwerN8iO17FhtEerovn4Zhg2p7quZRiUcYLdx4EOlIMWuORyDk3s0S4VZ27t92NYwMlwMA1TbUQ/XuN1oZaQQ9ipSDjNDDVZto3Q4vwlqL3g1TIs1JyxfHkwUTpuFjg3ZqY+uRNxeJTDlj9JHXiAIZ+VeBggB7EixKE+wMi1A6a+Si/ZpBbroK5gP1gODShXYUN4eGmodxqF2/gVrJcimEeHkyBZ74dZIa9gTSIOxeo1OS70fFU+hQy9/V0/q4PElPZn+EzLTGknWh1EDmqReZ1svv0tYf0Ve/l5szhdNGsb2LUEZ7G/r0Bs7fyQjA5YZI+byOPTSA1Q9vlT63sodpBRDURWkqTRFRPWlaEY2kMZu/vJ422PSjK51X4EPHWmpOkDkxFzx2WAs2rKZ9QXCkU0RGu0Ctial/zNVhm20eVklcuIirEnmUK9Kod0KBmjl+U6U6jHvlhOEC4zp2QcDsrLSQu7gDHvJWbYmaKBTiXrEvk52G/EN9aD86Am5k0bwPU5ktj8z38+5sxVns1R4e9J1WaZgD2dtFvpSxJbjVf09AZHIeyNw/BRu3GfJU6dX6KJVMCMtN+R5xv/ZckylI355R4nrf+7PLNsGg2tqlemvHiwdQkOb3/TOLrJpO94JRjm9k16huysztkpgJIGyKvHXT6z1A3cwCoJzrK7sQ1awedPvO+N8UGJ7kXHRgLLhQ2yWfZfIsD/s0Ji5GFrItm1nlqHAd/ZFh82jNKmvh6+n42l5TimH9Q0Cf+7bK5Y7SVYzhSAW2B8ivHsPMpAkLJ6d17ZMxtrr4/Q=", - "urls": [ - "https://pixeldrain.com/api/file/KfWzWfxp", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.4_linux_x86_64.AppImage" - ] + "1.1.5": { + "sha256": "", + "sig": "", + "urls": [] } }, "fedora30": { - "1.1.4": { - "sha256": "85347471f33dd41a35eb296cda03590d451322cd54a077cef470ccbfe52a141b", - "sig": "CGialiJMT6nETdGgP3vQvsXSWQYUEX7j7Cck0NSiW0cE4A1kW3mabM2I/5Yt4NwkDqBIAXofPyUd1JQ4UrF8cijfLNv3ECSaDJs7bWrISDr3Z8ti0uZnN3RUdJDCYDvAWBVqGC82Q1fmLkYJhd33o2B9DzjmvO+i7+buNyDB3dBIY5Fa3rnLKsIY7WB5EASBG3TzDlsZOtLvNgKo/3fLJP2RFyczSVCFZeHlppJbyXCakj50eCNbxjP6SLaD3oE+M0xGvyPyKTk0OGoJTGKM13q30WKbM6cMfL87BbUueGkBFDZeNMWU8Mz/fdGG21WqNN1p7k3CilJJQz7ZEE9bBhlsIX5j5rvL2qNYJoQbJQbxVjyoWHOOlqA62WUTOZhyiHD3OWQ58Fd9JqGDiIhg+ChIBWzyEXNdE6GQr7/qEiAQDbEsU06WOzfj3uxAV//iy/noalpyhlnr0TUu5xKSnoR7jQhCtvOdlrmgs8y+mTEpwDjXCR0S7jDxp+cEbVHb57Rl8N5thVrOs5RQfshhcqwBR/scCM9iCr0v3D7uyGMinTBT3A8lwerN8iO17FhtEerovn4Zhg2p7quZRiUcYLdx4EOlIMWuORyDk3s0S4VZ27t92NYwMlwMA1TbUQ/XuN1oZaQQ9ipSDjNDDVZto3Q4vwlqL3g1TIs1JyxfHkwUTpuFjg3ZqY+uRNxeJTDlj9JHXiAIZ+VeBggB7EixKE+wMi1A6a+Si/ZpBbroK5gP1gODShXYUN4eGmodxqF2/gVrJcimEeHkyBZ74dZIa9gTSIOxeo1OS70fFU+hQy9/V0/q4PElPZn+EzLTGknWh1EDmqReZ1svv0tYf0Ve/l5szhdNGsb2LUEZ7G/r0Bs7fyQjA5YZI+byOPTSA1Q9vlT63sodpBRDURWkqTRFRPWlaEY2kMZu/vJ422PSjK51X4EPHWmpOkDkxFzx2WAs2rKZ9QXCkU0RGu0Ctial/zNVhm20eVklcuIirEnmUK9Kod0KBmjl+U6U6jHvlhOEC4zp2QcDsrLSQu7gDHvJWbYmaKBTiXrEvk52G/EN9aD86Am5k0bwPU5ktj8z38+5sxVns1R4e9J1WaZgD2dtFvpSxJbjVf09AZHIeyNw/BRu3GfJU6dX6KJVMCMtN+R5xv/ZckylI355R4nrf+7PLNsGg2tqlemvHiwdQkOb3/TOLrJpO94JRjm9k16huysztkpgJIGyKvHXT6z1A3cwCoJzrK7sQ1awedPvO+N8UGJ7kXHRgLLhQ2yWfZfIsD/s0Ji5GFrItm1nlqHAd/ZFh82jNKmvh6+n42l5TimH9Q0Cf+7bK5Y7SVYzhSAW2B8ivHsPMpAkLJ6d17ZMxtrr4/Q=", - "urls": [ - "https://pixeldrain.com/api/file/KfWzWfxp", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.4_linux_x86_64.AppImage" - ] + "1.1.5": { + "sha256": "", + "sig": "", + "urls": [] } }, "fedora31": { - "1.1.4": { - "sha256": "85347471f33dd41a35eb296cda03590d451322cd54a077cef470ccbfe52a141b", - "sig": "CGialiJMT6nETdGgP3vQvsXSWQYUEX7j7Cck0NSiW0cE4A1kW3mabM2I/5Yt4NwkDqBIAXofPyUd1JQ4UrF8cijfLNv3ECSaDJs7bWrISDr3Z8ti0uZnN3RUdJDCYDvAWBVqGC82Q1fmLkYJhd33o2B9DzjmvO+i7+buNyDB3dBIY5Fa3rnLKsIY7WB5EASBG3TzDlsZOtLvNgKo/3fLJP2RFyczSVCFZeHlppJbyXCakj50eCNbxjP6SLaD3oE+M0xGvyPyKTk0OGoJTGKM13q30WKbM6cMfL87BbUueGkBFDZeNMWU8Mz/fdGG21WqNN1p7k3CilJJQz7ZEE9bBhlsIX5j5rvL2qNYJoQbJQbxVjyoWHOOlqA62WUTOZhyiHD3OWQ58Fd9JqGDiIhg+ChIBWzyEXNdE6GQr7/qEiAQDbEsU06WOzfj3uxAV//iy/noalpyhlnr0TUu5xKSnoR7jQhCtvOdlrmgs8y+mTEpwDjXCR0S7jDxp+cEbVHb57Rl8N5thVrOs5RQfshhcqwBR/scCM9iCr0v3D7uyGMinTBT3A8lwerN8iO17FhtEerovn4Zhg2p7quZRiUcYLdx4EOlIMWuORyDk3s0S4VZ27t92NYwMlwMA1TbUQ/XuN1oZaQQ9ipSDjNDDVZto3Q4vwlqL3g1TIs1JyxfHkwUTpuFjg3ZqY+uRNxeJTDlj9JHXiAIZ+VeBggB7EixKE+wMi1A6a+Si/ZpBbroK5gP1gODShXYUN4eGmodxqF2/gVrJcimEeHkyBZ74dZIa9gTSIOxeo1OS70fFU+hQy9/V0/q4PElPZn+EzLTGknWh1EDmqReZ1svv0tYf0Ve/l5szhdNGsb2LUEZ7G/r0Bs7fyQjA5YZI+byOPTSA1Q9vlT63sodpBRDURWkqTRFRPWlaEY2kMZu/vJ422PSjK51X4EPHWmpOkDkxFzx2WAs2rKZ9QXCkU0RGu0Ctial/zNVhm20eVklcuIirEnmUK9Kod0KBmjl+U6U6jHvlhOEC4zp2QcDsrLSQu7gDHvJWbYmaKBTiXrEvk52G/EN9aD86Am5k0bwPU5ktj8z38+5sxVns1R4e9J1WaZgD2dtFvpSxJbjVf09AZHIeyNw/BRu3GfJU6dX6KJVMCMtN+R5xv/ZckylI355R4nrf+7PLNsGg2tqlemvHiwdQkOb3/TOLrJpO94JRjm9k16huysztkpgJIGyKvHXT6z1A3cwCoJzrK7sQ1awedPvO+N8UGJ7kXHRgLLhQ2yWfZfIsD/s0Ji5GFrItm1nlqHAd/ZFh82jNKmvh6+n42l5TimH9Q0Cf+7bK5Y7SVYzhSAW2B8ivHsPMpAkLJ6d17ZMxtrr4/Q=", - "urls": [ - "https://pixeldrain.com/api/file/KfWzWfxp", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.4_linux_x86_64.AppImage" - ] + "1.1.5": { + "sha256": "", + "sig": "", + "urls": [] } }, "opensuse15": { - "1.1.4": { - "sha256": "85347471f33dd41a35eb296cda03590d451322cd54a077cef470ccbfe52a141b", - "sig": "CGialiJMT6nETdGgP3vQvsXSWQYUEX7j7Cck0NSiW0cE4A1kW3mabM2I/5Yt4NwkDqBIAXofPyUd1JQ4UrF8cijfLNv3ECSaDJs7bWrISDr3Z8ti0uZnN3RUdJDCYDvAWBVqGC82Q1fmLkYJhd33o2B9DzjmvO+i7+buNyDB3dBIY5Fa3rnLKsIY7WB5EASBG3TzDlsZOtLvNgKo/3fLJP2RFyczSVCFZeHlppJbyXCakj50eCNbxjP6SLaD3oE+M0xGvyPyKTk0OGoJTGKM13q30WKbM6cMfL87BbUueGkBFDZeNMWU8Mz/fdGG21WqNN1p7k3CilJJQz7ZEE9bBhlsIX5j5rvL2qNYJoQbJQbxVjyoWHOOlqA62WUTOZhyiHD3OWQ58Fd9JqGDiIhg+ChIBWzyEXNdE6GQr7/qEiAQDbEsU06WOzfj3uxAV//iy/noalpyhlnr0TUu5xKSnoR7jQhCtvOdlrmgs8y+mTEpwDjXCR0S7jDxp+cEbVHb57Rl8N5thVrOs5RQfshhcqwBR/scCM9iCr0v3D7uyGMinTBT3A8lwerN8iO17FhtEerovn4Zhg2p7quZRiUcYLdx4EOlIMWuORyDk3s0S4VZ27t92NYwMlwMA1TbUQ/XuN1oZaQQ9ipSDjNDDVZto3Q4vwlqL3g1TIs1JyxfHkwUTpuFjg3ZqY+uRNxeJTDlj9JHXiAIZ+VeBggB7EixKE+wMi1A6a+Si/ZpBbroK5gP1gODShXYUN4eGmodxqF2/gVrJcimEeHkyBZ74dZIa9gTSIOxeo1OS70fFU+hQy9/V0/q4PElPZn+EzLTGknWh1EDmqReZ1svv0tYf0Ve/l5szhdNGsb2LUEZ7G/r0Bs7fyQjA5YZI+byOPTSA1Q9vlT63sodpBRDURWkqTRFRPWlaEY2kMZu/vJ422PSjK51X4EPHWmpOkDkxFzx2WAs2rKZ9QXCkU0RGu0Ctial/zNVhm20eVklcuIirEnmUK9Kod0KBmjl+U6U6jHvlhOEC4zp2QcDsrLSQu7gDHvJWbYmaKBTiXrEvk52G/EN9aD86Am5k0bwPU5ktj8z38+5sxVns1R4e9J1WaZgD2dtFvpSxJbjVf09AZHIeyNw/BRu3GfJU6dX6KJVMCMtN+R5xv/ZckylI355R4nrf+7PLNsGg2tqlemvHiwdQkOb3/TOLrJpO94JRjm9k16huysztkpgJIGyKvHXT6z1A3cwCoJzrK7sQ1awedPvO+N8UGJ7kXHRgLLhQ2yWfZfIsD/s0Ji5GFrItm1nlqHAd/ZFh82jNKmvh6+n42l5TimH9Q0Cf+7bK5Y7SVYzhSAW2B8ivHsPMpAkLJ6d17ZMxtrr4/Q=", - "urls": [ - "https://pixeldrain.com/api/file/KfWzWfxp", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.4_linux_x86_64.AppImage" - ] + "1.1.5": { + "sha256": "", + "sig": "", + "urls": [] } }, "opensuse15.1": { - "1.1.4": { - "sha256": "85347471f33dd41a35eb296cda03590d451322cd54a077cef470ccbfe52a141b", - "sig": "CGialiJMT6nETdGgP3vQvsXSWQYUEX7j7Cck0NSiW0cE4A1kW3mabM2I/5Yt4NwkDqBIAXofPyUd1JQ4UrF8cijfLNv3ECSaDJs7bWrISDr3Z8ti0uZnN3RUdJDCYDvAWBVqGC82Q1fmLkYJhd33o2B9DzjmvO+i7+buNyDB3dBIY5Fa3rnLKsIY7WB5EASBG3TzDlsZOtLvNgKo/3fLJP2RFyczSVCFZeHlppJbyXCakj50eCNbxjP6SLaD3oE+M0xGvyPyKTk0OGoJTGKM13q30WKbM6cMfL87BbUueGkBFDZeNMWU8Mz/fdGG21WqNN1p7k3CilJJQz7ZEE9bBhlsIX5j5rvL2qNYJoQbJQbxVjyoWHOOlqA62WUTOZhyiHD3OWQ58Fd9JqGDiIhg+ChIBWzyEXNdE6GQr7/qEiAQDbEsU06WOzfj3uxAV//iy/noalpyhlnr0TUu5xKSnoR7jQhCtvOdlrmgs8y+mTEpwDjXCR0S7jDxp+cEbVHb57Rl8N5thVrOs5RQfshhcqwBR/scCM9iCr0v3D7uyGMinTBT3A8lwerN8iO17FhtEerovn4Zhg2p7quZRiUcYLdx4EOlIMWuORyDk3s0S4VZ27t92NYwMlwMA1TbUQ/XuN1oZaQQ9ipSDjNDDVZto3Q4vwlqL3g1TIs1JyxfHkwUTpuFjg3ZqY+uRNxeJTDlj9JHXiAIZ+VeBggB7EixKE+wMi1A6a+Si/ZpBbroK5gP1gODShXYUN4eGmodxqF2/gVrJcimEeHkyBZ74dZIa9gTSIOxeo1OS70fFU+hQy9/V0/q4PElPZn+EzLTGknWh1EDmqReZ1svv0tYf0Ve/l5szhdNGsb2LUEZ7G/r0Bs7fyQjA5YZI+byOPTSA1Q9vlT63sodpBRDURWkqTRFRPWlaEY2kMZu/vJ422PSjK51X4EPHWmpOkDkxFzx2WAs2rKZ9QXCkU0RGu0Ctial/zNVhm20eVklcuIirEnmUK9Kod0KBmjl+U6U6jHvlhOEC4zp2QcDsrLSQu7gDHvJWbYmaKBTiXrEvk52G/EN9aD86Am5k0bwPU5ktj8z38+5sxVns1R4e9J1WaZgD2dtFvpSxJbjVf09AZHIeyNw/BRu3GfJU6dX6KJVMCMtN+R5xv/ZckylI355R4nrf+7PLNsGg2tqlemvHiwdQkOb3/TOLrJpO94JRjm9k16huysztkpgJIGyKvHXT6z1A3cwCoJzrK7sQ1awedPvO+N8UGJ7kXHRgLLhQ2yWfZfIsD/s0Ji5GFrItm1nlqHAd/ZFh82jNKmvh6+n42l5TimH9Q0Cf+7bK5Y7SVYzhSAW2B8ivHsPMpAkLJ6d17ZMxtrr4/Q=", - "urls": [ - "https://pixeldrain.com/api/file/KfWzWfxp", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.4_linux_x86_64.AppImage" - ] + "1.1.5": { + "sha256": "", + "sig": "", + "urls": [] } }, "solus": { - "1.1.4": { - "sha256": "85347471f33dd41a35eb296cda03590d451322cd54a077cef470ccbfe52a141b", - "sig": "CGialiJMT6nETdGgP3vQvsXSWQYUEX7j7Cck0NSiW0cE4A1kW3mabM2I/5Yt4NwkDqBIAXofPyUd1JQ4UrF8cijfLNv3ECSaDJs7bWrISDr3Z8ti0uZnN3RUdJDCYDvAWBVqGC82Q1fmLkYJhd33o2B9DzjmvO+i7+buNyDB3dBIY5Fa3rnLKsIY7WB5EASBG3TzDlsZOtLvNgKo/3fLJP2RFyczSVCFZeHlppJbyXCakj50eCNbxjP6SLaD3oE+M0xGvyPyKTk0OGoJTGKM13q30WKbM6cMfL87BbUueGkBFDZeNMWU8Mz/fdGG21WqNN1p7k3CilJJQz7ZEE9bBhlsIX5j5rvL2qNYJoQbJQbxVjyoWHOOlqA62WUTOZhyiHD3OWQ58Fd9JqGDiIhg+ChIBWzyEXNdE6GQr7/qEiAQDbEsU06WOzfj3uxAV//iy/noalpyhlnr0TUu5xKSnoR7jQhCtvOdlrmgs8y+mTEpwDjXCR0S7jDxp+cEbVHb57Rl8N5thVrOs5RQfshhcqwBR/scCM9iCr0v3D7uyGMinTBT3A8lwerN8iO17FhtEerovn4Zhg2p7quZRiUcYLdx4EOlIMWuORyDk3s0S4VZ27t92NYwMlwMA1TbUQ/XuN1oZaQQ9ipSDjNDDVZto3Q4vwlqL3g1TIs1JyxfHkwUTpuFjg3ZqY+uRNxeJTDlj9JHXiAIZ+VeBggB7EixKE+wMi1A6a+Si/ZpBbroK5gP1gODShXYUN4eGmodxqF2/gVrJcimEeHkyBZ74dZIa9gTSIOxeo1OS70fFU+hQy9/V0/q4PElPZn+EzLTGknWh1EDmqReZ1svv0tYf0Ve/l5szhdNGsb2LUEZ7G/r0Bs7fyQjA5YZI+byOPTSA1Q9vlT63sodpBRDURWkqTRFRPWlaEY2kMZu/vJ422PSjK51X4EPHWmpOkDkxFzx2WAs2rKZ9QXCkU0RGu0Ctial/zNVhm20eVklcuIirEnmUK9Kod0KBmjl+U6U6jHvlhOEC4zp2QcDsrLSQu7gDHvJWbYmaKBTiXrEvk52G/EN9aD86Am5k0bwPU5ktj8z38+5sxVns1R4e9J1WaZgD2dtFvpSxJbjVf09AZHIeyNw/BRu3GfJU6dX6KJVMCMtN+R5xv/ZckylI355R4nrf+7PLNsGg2tqlemvHiwdQkOb3/TOLrJpO94JRjm9k16huysztkpgJIGyKvHXT6z1A3cwCoJzrK7sQ1awedPvO+N8UGJ7kXHRgLLhQ2yWfZfIsD/s0Ji5GFrItm1nlqHAd/ZFh82jNKmvh6+n42l5TimH9Q0Cf+7bK5Y7SVYzhSAW2B8ivHsPMpAkLJ6d17ZMxtrr4/Q=", - "urls": [ - "https://pixeldrain.com/api/file/KfWzWfxp", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.4_linux_x86_64.AppImage" - ] + "1.1.5": { + "sha256": "", + "sig": "", + "urls": [] } }, "tumbleweed": { - "1.1.4": { - "sha256": "85347471f33dd41a35eb296cda03590d451322cd54a077cef470ccbfe52a141b", - "sig": "CGialiJMT6nETdGgP3vQvsXSWQYUEX7j7Cck0NSiW0cE4A1kW3mabM2I/5Yt4NwkDqBIAXofPyUd1JQ4UrF8cijfLNv3ECSaDJs7bWrISDr3Z8ti0uZnN3RUdJDCYDvAWBVqGC82Q1fmLkYJhd33o2B9DzjmvO+i7+buNyDB3dBIY5Fa3rnLKsIY7WB5EASBG3TzDlsZOtLvNgKo/3fLJP2RFyczSVCFZeHlppJbyXCakj50eCNbxjP6SLaD3oE+M0xGvyPyKTk0OGoJTGKM13q30WKbM6cMfL87BbUueGkBFDZeNMWU8Mz/fdGG21WqNN1p7k3CilJJQz7ZEE9bBhlsIX5j5rvL2qNYJoQbJQbxVjyoWHOOlqA62WUTOZhyiHD3OWQ58Fd9JqGDiIhg+ChIBWzyEXNdE6GQr7/qEiAQDbEsU06WOzfj3uxAV//iy/noalpyhlnr0TUu5xKSnoR7jQhCtvOdlrmgs8y+mTEpwDjXCR0S7jDxp+cEbVHb57Rl8N5thVrOs5RQfshhcqwBR/scCM9iCr0v3D7uyGMinTBT3A8lwerN8iO17FhtEerovn4Zhg2p7quZRiUcYLdx4EOlIMWuORyDk3s0S4VZ27t92NYwMlwMA1TbUQ/XuN1oZaQQ9ipSDjNDDVZto3Q4vwlqL3g1TIs1JyxfHkwUTpuFjg3ZqY+uRNxeJTDlj9JHXiAIZ+VeBggB7EixKE+wMi1A6a+Si/ZpBbroK5gP1gODShXYUN4eGmodxqF2/gVrJcimEeHkyBZ74dZIa9gTSIOxeo1OS70fFU+hQy9/V0/q4PElPZn+EzLTGknWh1EDmqReZ1svv0tYf0Ve/l5szhdNGsb2LUEZ7G/r0Bs7fyQjA5YZI+byOPTSA1Q9vlT63sodpBRDURWkqTRFRPWlaEY2kMZu/vJ422PSjK51X4EPHWmpOkDkxFzx2WAs2rKZ9QXCkU0RGu0Ctial/zNVhm20eVklcuIirEnmUK9Kod0KBmjl+U6U6jHvlhOEC4zp2QcDsrLSQu7gDHvJWbYmaKBTiXrEvk52G/EN9aD86Am5k0bwPU5ktj8z38+5sxVns1R4e9J1WaZgD2dtFvpSxJbjVf09AZHIeyNw/BRu3GfJU6dX6KJVMCMtN+R5xv/ZckylI355R4nrf+7PLNsGg2tqlemvHiwdQkOb3/TOLrJpO94JRjm9k16huysztkpgJIGyKvHXT6z1A3cwCoJzrK7sQ1awedPvO+N8UGJ7kXHRgLLhQ2yWfZfIsD/s0Ji5GFrItm1nlqHAd/ZFh82jNKmvh6+n42l5TimH9Q0Cf+7bK5Y7SVYzhSAW2B8ivHsPMpAkLJ6d17ZMxtrr4/Q=", - "urls": [ - "https://pixeldrain.com/api/file/KfWzWfxp", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.4_linux_x86_64.AppImage" - ] + "1.1.5": { + "sha256": "", + "sig": "", + "urls": [] } }, "ubuntu18.04": { - "1.1.4": { - "sha256": "85347471f33dd41a35eb296cda03590d451322cd54a077cef470ccbfe52a141b", - "sig": "CGialiJMT6nETdGgP3vQvsXSWQYUEX7j7Cck0NSiW0cE4A1kW3mabM2I/5Yt4NwkDqBIAXofPyUd1JQ4UrF8cijfLNv3ECSaDJs7bWrISDr3Z8ti0uZnN3RUdJDCYDvAWBVqGC82Q1fmLkYJhd33o2B9DzjmvO+i7+buNyDB3dBIY5Fa3rnLKsIY7WB5EASBG3TzDlsZOtLvNgKo/3fLJP2RFyczSVCFZeHlppJbyXCakj50eCNbxjP6SLaD3oE+M0xGvyPyKTk0OGoJTGKM13q30WKbM6cMfL87BbUueGkBFDZeNMWU8Mz/fdGG21WqNN1p7k3CilJJQz7ZEE9bBhlsIX5j5rvL2qNYJoQbJQbxVjyoWHOOlqA62WUTOZhyiHD3OWQ58Fd9JqGDiIhg+ChIBWzyEXNdE6GQr7/qEiAQDbEsU06WOzfj3uxAV//iy/noalpyhlnr0TUu5xKSnoR7jQhCtvOdlrmgs8y+mTEpwDjXCR0S7jDxp+cEbVHb57Rl8N5thVrOs5RQfshhcqwBR/scCM9iCr0v3D7uyGMinTBT3A8lwerN8iO17FhtEerovn4Zhg2p7quZRiUcYLdx4EOlIMWuORyDk3s0S4VZ27t92NYwMlwMA1TbUQ/XuN1oZaQQ9ipSDjNDDVZto3Q4vwlqL3g1TIs1JyxfHkwUTpuFjg3ZqY+uRNxeJTDlj9JHXiAIZ+VeBggB7EixKE+wMi1A6a+Si/ZpBbroK5gP1gODShXYUN4eGmodxqF2/gVrJcimEeHkyBZ74dZIa9gTSIOxeo1OS70fFU+hQy9/V0/q4PElPZn+EzLTGknWh1EDmqReZ1svv0tYf0Ve/l5szhdNGsb2LUEZ7G/r0Bs7fyQjA5YZI+byOPTSA1Q9vlT63sodpBRDURWkqTRFRPWlaEY2kMZu/vJ422PSjK51X4EPHWmpOkDkxFzx2WAs2rKZ9QXCkU0RGu0Ctial/zNVhm20eVklcuIirEnmUK9Kod0KBmjl+U6U6jHvlhOEC4zp2QcDsrLSQu7gDHvJWbYmaKBTiXrEvk52G/EN9aD86Am5k0bwPU5ktj8z38+5sxVns1R4e9J1WaZgD2dtFvpSxJbjVf09AZHIeyNw/BRu3GfJU6dX6KJVMCMtN+R5xv/ZckylI355R4nrf+7PLNsGg2tqlemvHiwdQkOb3/TOLrJpO94JRjm9k16huysztkpgJIGyKvHXT6z1A3cwCoJzrK7sQ1awedPvO+N8UGJ7kXHRgLLhQ2yWfZfIsD/s0Ji5GFrItm1nlqHAd/ZFh82jNKmvh6+n42l5TimH9Q0Cf+7bK5Y7SVYzhSAW2B8ivHsPMpAkLJ6d17ZMxtrr4/Q=", - "urls": [ - "https://pixeldrain.com/api/file/KfWzWfxp", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.4_linux_x86_64.AppImage" - ] + "1.1.5": { + "sha256": "", + "sig": "", + "urls": [] } }, "ubuntu18.10": { - "1.1.4": { - "sha256": "85347471f33dd41a35eb296cda03590d451322cd54a077cef470ccbfe52a141b", - "sig": "CGialiJMT6nETdGgP3vQvsXSWQYUEX7j7Cck0NSiW0cE4A1kW3mabM2I/5Yt4NwkDqBIAXofPyUd1JQ4UrF8cijfLNv3ECSaDJs7bWrISDr3Z8ti0uZnN3RUdJDCYDvAWBVqGC82Q1fmLkYJhd33o2B9DzjmvO+i7+buNyDB3dBIY5Fa3rnLKsIY7WB5EASBG3TzDlsZOtLvNgKo/3fLJP2RFyczSVCFZeHlppJbyXCakj50eCNbxjP6SLaD3oE+M0xGvyPyKTk0OGoJTGKM13q30WKbM6cMfL87BbUueGkBFDZeNMWU8Mz/fdGG21WqNN1p7k3CilJJQz7ZEE9bBhlsIX5j5rvL2qNYJoQbJQbxVjyoWHOOlqA62WUTOZhyiHD3OWQ58Fd9JqGDiIhg+ChIBWzyEXNdE6GQr7/qEiAQDbEsU06WOzfj3uxAV//iy/noalpyhlnr0TUu5xKSnoR7jQhCtvOdlrmgs8y+mTEpwDjXCR0S7jDxp+cEbVHb57Rl8N5thVrOs5RQfshhcqwBR/scCM9iCr0v3D7uyGMinTBT3A8lwerN8iO17FhtEerovn4Zhg2p7quZRiUcYLdx4EOlIMWuORyDk3s0S4VZ27t92NYwMlwMA1TbUQ/XuN1oZaQQ9ipSDjNDDVZto3Q4vwlqL3g1TIs1JyxfHkwUTpuFjg3ZqY+uRNxeJTDlj9JHXiAIZ+VeBggB7EixKE+wMi1A6a+Si/ZpBbroK5gP1gODShXYUN4eGmodxqF2/gVrJcimEeHkyBZ74dZIa9gTSIOxeo1OS70fFU+hQy9/V0/q4PElPZn+EzLTGknWh1EDmqReZ1svv0tYf0Ve/l5szhdNGsb2LUEZ7G/r0Bs7fyQjA5YZI+byOPTSA1Q9vlT63sodpBRDURWkqTRFRPWlaEY2kMZu/vJ422PSjK51X4EPHWmpOkDkxFzx2WAs2rKZ9QXCkU0RGu0Ctial/zNVhm20eVklcuIirEnmUK9Kod0KBmjl+U6U6jHvlhOEC4zp2QcDsrLSQu7gDHvJWbYmaKBTiXrEvk52G/EN9aD86Am5k0bwPU5ktj8z38+5sxVns1R4e9J1WaZgD2dtFvpSxJbjVf09AZHIeyNw/BRu3GfJU6dX6KJVMCMtN+R5xv/ZckylI355R4nrf+7PLNsGg2tqlemvHiwdQkOb3/TOLrJpO94JRjm9k16huysztkpgJIGyKvHXT6z1A3cwCoJzrK7sQ1awedPvO+N8UGJ7kXHRgLLhQ2yWfZfIsD/s0Ji5GFrItm1nlqHAd/ZFh82jNKmvh6+n42l5TimH9Q0Cf+7bK5Y7SVYzhSAW2B8ivHsPMpAkLJ6d17ZMxtrr4/Q=", - "urls": [ - "https://pixeldrain.com/api/file/KfWzWfxp", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.4_linux_x86_64.AppImage" - ] + "1.1.5": { + "sha256": "", + "sig": "", + "urls": [] } }, "ubuntu19.04": { - "1.1.4": { - "sha256": "85347471f33dd41a35eb296cda03590d451322cd54a077cef470ccbfe52a141b", - "sig": "CGialiJMT6nETdGgP3vQvsXSWQYUEX7j7Cck0NSiW0cE4A1kW3mabM2I/5Yt4NwkDqBIAXofPyUd1JQ4UrF8cijfLNv3ECSaDJs7bWrISDr3Z8ti0uZnN3RUdJDCYDvAWBVqGC82Q1fmLkYJhd33o2B9DzjmvO+i7+buNyDB3dBIY5Fa3rnLKsIY7WB5EASBG3TzDlsZOtLvNgKo/3fLJP2RFyczSVCFZeHlppJbyXCakj50eCNbxjP6SLaD3oE+M0xGvyPyKTk0OGoJTGKM13q30WKbM6cMfL87BbUueGkBFDZeNMWU8Mz/fdGG21WqNN1p7k3CilJJQz7ZEE9bBhlsIX5j5rvL2qNYJoQbJQbxVjyoWHOOlqA62WUTOZhyiHD3OWQ58Fd9JqGDiIhg+ChIBWzyEXNdE6GQr7/qEiAQDbEsU06WOzfj3uxAV//iy/noalpyhlnr0TUu5xKSnoR7jQhCtvOdlrmgs8y+mTEpwDjXCR0S7jDxp+cEbVHb57Rl8N5thVrOs5RQfshhcqwBR/scCM9iCr0v3D7uyGMinTBT3A8lwerN8iO17FhtEerovn4Zhg2p7quZRiUcYLdx4EOlIMWuORyDk3s0S4VZ27t92NYwMlwMA1TbUQ/XuN1oZaQQ9ipSDjNDDVZto3Q4vwlqL3g1TIs1JyxfHkwUTpuFjg3ZqY+uRNxeJTDlj9JHXiAIZ+VeBggB7EixKE+wMi1A6a+Si/ZpBbroK5gP1gODShXYUN4eGmodxqF2/gVrJcimEeHkyBZ74dZIa9gTSIOxeo1OS70fFU+hQy9/V0/q4PElPZn+EzLTGknWh1EDmqReZ1svv0tYf0Ve/l5szhdNGsb2LUEZ7G/r0Bs7fyQjA5YZI+byOPTSA1Q9vlT63sodpBRDURWkqTRFRPWlaEY2kMZu/vJ422PSjK51X4EPHWmpOkDkxFzx2WAs2rKZ9QXCkU0RGu0Ctial/zNVhm20eVklcuIirEnmUK9Kod0KBmjl+U6U6jHvlhOEC4zp2QcDsrLSQu7gDHvJWbYmaKBTiXrEvk52G/EN9aD86Am5k0bwPU5ktj8z38+5sxVns1R4e9J1WaZgD2dtFvpSxJbjVf09AZHIeyNw/BRu3GfJU6dX6KJVMCMtN+R5xv/ZckylI355R4nrf+7PLNsGg2tqlemvHiwdQkOb3/TOLrJpO94JRjm9k16huysztkpgJIGyKvHXT6z1A3cwCoJzrK7sQ1awedPvO+N8UGJ7kXHRgLLhQ2yWfZfIsD/s0Ji5GFrItm1nlqHAd/ZFh82jNKmvh6+n42l5TimH9Q0Cf+7bK5Y7SVYzhSAW2B8ivHsPMpAkLJ6d17ZMxtrr4/Q=", - "urls": [ - "https://pixeldrain.com/api/file/KfWzWfxp", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.4_linux_x86_64.AppImage" - ] + "1.1.5": { + "sha256": "", + "sig": "", + "urls": [] } }, "ubuntu19.10": { - "1.1.4": { - "sha256": "85347471f33dd41a35eb296cda03590d451322cd54a077cef470ccbfe52a141b", - "sig": "CGialiJMT6nETdGgP3vQvsXSWQYUEX7j7Cck0NSiW0cE4A1kW3mabM2I/5Yt4NwkDqBIAXofPyUd1JQ4UrF8cijfLNv3ECSaDJs7bWrISDr3Z8ti0uZnN3RUdJDCYDvAWBVqGC82Q1fmLkYJhd33o2B9DzjmvO+i7+buNyDB3dBIY5Fa3rnLKsIY7WB5EASBG3TzDlsZOtLvNgKo/3fLJP2RFyczSVCFZeHlppJbyXCakj50eCNbxjP6SLaD3oE+M0xGvyPyKTk0OGoJTGKM13q30WKbM6cMfL87BbUueGkBFDZeNMWU8Mz/fdGG21WqNN1p7k3CilJJQz7ZEE9bBhlsIX5j5rvL2qNYJoQbJQbxVjyoWHOOlqA62WUTOZhyiHD3OWQ58Fd9JqGDiIhg+ChIBWzyEXNdE6GQr7/qEiAQDbEsU06WOzfj3uxAV//iy/noalpyhlnr0TUu5xKSnoR7jQhCtvOdlrmgs8y+mTEpwDjXCR0S7jDxp+cEbVHb57Rl8N5thVrOs5RQfshhcqwBR/scCM9iCr0v3D7uyGMinTBT3A8lwerN8iO17FhtEerovn4Zhg2p7quZRiUcYLdx4EOlIMWuORyDk3s0S4VZ27t92NYwMlwMA1TbUQ/XuN1oZaQQ9ipSDjNDDVZto3Q4vwlqL3g1TIs1JyxfHkwUTpuFjg3ZqY+uRNxeJTDlj9JHXiAIZ+VeBggB7EixKE+wMi1A6a+Si/ZpBbroK5gP1gODShXYUN4eGmodxqF2/gVrJcimEeHkyBZ74dZIa9gTSIOxeo1OS70fFU+hQy9/V0/q4PElPZn+EzLTGknWh1EDmqReZ1svv0tYf0Ve/l5szhdNGsb2LUEZ7G/r0Bs7fyQjA5YZI+byOPTSA1Q9vlT63sodpBRDURWkqTRFRPWlaEY2kMZu/vJ422PSjK51X4EPHWmpOkDkxFzx2WAs2rKZ9QXCkU0RGu0Ctial/zNVhm20eVklcuIirEnmUK9Kod0KBmjl+U6U6jHvlhOEC4zp2QcDsrLSQu7gDHvJWbYmaKBTiXrEvk52G/EN9aD86Am5k0bwPU5ktj8z38+5sxVns1R4e9J1WaZgD2dtFvpSxJbjVf09AZHIeyNw/BRu3GfJU6dX6KJVMCMtN+R5xv/ZckylI355R4nrf+7PLNsGg2tqlemvHiwdQkOb3/TOLrJpO94JRjm9k16huysztkpgJIGyKvHXT6z1A3cwCoJzrK7sQ1awedPvO+N8UGJ7kXHRgLLhQ2yWfZfIsD/s0Ji5GFrItm1nlqHAd/ZFh82jNKmvh6+n42l5TimH9Q0Cf+7bK5Y7SVYzhSAW2B8ivHsPMpAkLJ6d17ZMxtrr4/Q=", - "urls": [ - "https://pixeldrain.com/api/file/KfWzWfxp", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.4_linux_x86_64.AppImage" - ] + "1.1.5": { + "sha256": "", + "sig": "", + "urls": [] } }, "win32": { - "1.1.4": { - "sha256": "5242b65b18bc6a5d7098e3cb0fbe7ff41685c412edc085f269e99ee511078b1f", - "sig": "AFx+jkqmRxuzu5OyNVdGAdTo2RTBOrQd5jKbKX/474rrmlSb+BHPNFrWCkfEyls5Fc8XSOO9x0RJi7RsiNbppHoosbtDjN8DdG1FApGgMHKg7T4aLMqh91rFhlL/unSPQifSXpNTNRTCVazfeoE/Jl6FV+UMtpzGUywOfJyLcQfQAdsa1oIZrEKJvZUxWyUZwFzTPDtIROLecf82mGbsVOSAGsmIdjNJXeD59I/Mbw8W9Ekjlh5YfveCY19RhAxBIfsXz0OKBw3wdTdI+L6WhXN7csOEKUXQWMDxlToclX/c0DwNyCic9Txsdi1gWbVGVtPEBP2vxVDeMD42xw0Twp1ZWYHWRmnChGZYaqfEER0LVNbXEdrsk0ARPCT+9H1U6h5odACQP6/MT3ioCOyxKHSG3/ogtM8QJQaP2PhpBuNKT4j1Meb+SZVkjTXiI+SJaoqYNABYOdDB8rvR5H6c8W9v5Usii6GbcXfY9C15oNjh6ryxX7e775pTP6JyGBxTjDrupsIGCf22+IbbSdkejLbsavf4IunAYjroy+mU6ONFmgF1smn9J6P06tslDPkgQpqSdgtnqNCcUvNd1WplzN7FjernoqZce4tge9RpvDU2Na+ByvFrLckPB/oLef/yBmQQkwiDhp7qwQxbhXdDWw8OmPp0XaBBY/+TPazObwqZ3c49T0apMvQBFp1nlftE6sYRYn5xpEpUk0FEYHYs0i8ftbbHY2ZFmk5Wb3qYw9IQopaCb+69q/l4SVKiDci+uffInHvQEtXd7OIG/xYSPIWieR8KX36/aSe27FRLWwmpvKyt/b3JhueAYrSQeWZuISwdgDZ5PtNB9cyRyxWgYwyhHCzed+nUD0FHm1Cfr2JyVnnz2zF5p3q1llO4heJEmm3vDu7s9r0CwiqvFjodOgJKeDh0NgEpTzl7g6Mf1JyuVkZy4pgG3H1/CoItnjmRvN5BMamFRCykM013D01mQJVlfZJjMFfFMse4S4YmnJUMbNvP9C+6OH+Hizy5z+akjj7R3dOErUpgQoetodE9eUfsFS0hkeabRlPi21XMFeqgOl9YGPuGatBKb0Ts1OyxIka3Cu6utrAPWBf8UytZNUq06dIYKqZIMfg9ON8IzfZO02ZzQQ4cqydhnFpmaqvyyqJ6viveDb188Yk+UuJwdYc9CnAIdPXJ25UlKOB06oFo1EqT7gXg0Mza2jruu4r0QvlIcVdBaSvNgN4IMCUu1gQvHWNMxFOd8qYruP61Qapox+c+WPJxs6fryLgjk7xUF92RnYeIEYmzXvgTlPUgft7isYmy3wOhw0N4qPFPn/iEIZUh0RAeZR7PfFewZEwhmYZzy65rgs9Xh13gR0R9SOs=", - "urls": [ - "https://pixeldrain.com/api/file/RrXR8XWD", - "https://bitbucket.org/blockstorage/repertory-ui/downloads/repertory-ui_1.1.4_win.exe" - ] + "1.1.5": { + "sha256": "", + "sig": "", + "urls": [] } } }, "Versions": { "arch": [ - "1.1.4" + "1.1.5" ], "centos7": [ - "1.1.4" + "1.1.5" ], "darwin": [ - "1.1.4" + "1.1.5" ], "debian9": [ - "1.1.4" + "1.1.5" ], "debian10": [ - "1.1.4" + "1.1.5" ], "fedora28": [ - "1.1.4" + "1.1.5" ], "fedora29": [ - "1.1.4" + "1.1.5" ], "fedora30": [ - "1.1.4" + "1.1.5" ], "fedora31": [ - "1.1.4" + "1.1.5" ], "linux": [ "unavailable" ], "opensuse15": [ - "1.1.4" + "1.1.5" ], "opensuse15.1": [ - "1.1.4" + "1.1.5" ], "solus": [ - "1.1.4" + "1.1.5" ], "tumbleweed": [ - "1.1.4" + "1.1.5" ], "ubuntu18.04": [ - "1.1.4" + "1.1.5" ], "ubuntu18.10": [ - "1.1.4" + "1.1.5" ], "ubuntu19.04": [ - "1.1.4" + "1.1.5" ], "ubuntu19.10": [ - "1.1.4" + "1.1.5" ], "unknown": [ "unavailable" ], "win32": [ - "1.1.4" + "1.1.5" ], "centos8": [ - "1.1.4" + "1.1.5" ] } } diff --git a/src/constants.js b/src/constants.js index 34f4f1b..ba73675 100644 --- a/src/constants.js +++ b/src/constants.js @@ -28,7 +28,7 @@ exports.DEV_PUBLIC_KEY = '-----BEGIN PUBLIC KEY-----\n' + '-----END PUBLIC KEY-----'; const REPERTORY_BRANCH = 'master'; -const REPERTORY_UI_BRANCH = 'master'; +const REPERTORY_UI_BRANCH = '1.2.x_branch'; exports.RELEASES_URL = 'https://bitbucket.org/blockstorage/repertory/raw/' + REPERTORY_BRANCH + '/releases_1.1.json'; exports.UI_RELEASES_URL = 'https://bitbucket.org/blockstorage/repertory-ui/raw/' + REPERTORY_UI_BRANCH + '/releases.json'; From e647c2c8a621710b1cbd1ed9f50c0956436b7c0e Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Wed, 19 Feb 2020 15:13:57 -0600 Subject: [PATCH 005/131] Switch to testing branch --- src/constants.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/constants.js b/src/constants.js index ba73675..320c0da 100644 --- a/src/constants.js +++ b/src/constants.js @@ -28,7 +28,7 @@ exports.DEV_PUBLIC_KEY = '-----BEGIN PUBLIC KEY-----\n' + '-----END PUBLIC KEY-----'; const REPERTORY_BRANCH = 'master'; -const REPERTORY_UI_BRANCH = '1.2.x_branch'; +const REPERTORY_UI_BRANCH = '1.1.x_branch'; exports.RELEASES_URL = 'https://bitbucket.org/blockstorage/repertory/raw/' + REPERTORY_BRANCH + '/releases_1.1.json'; exports.UI_RELEASES_URL = 'https://bitbucket.org/blockstorage/repertory-ui/raw/' + REPERTORY_UI_BRANCH + '/releases.json'; From a8c0a272e5b0da1fec0f01bc50d9c76587338005 Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Thu, 20 Feb 2020 13:20:17 -0600 Subject: [PATCH 006/131] [#38: Enhance new repertory release available notification - partial] [Added `FocusTrap` to modals] --- CHANGELOG.md | 4 ++ package.json | 1 + src/App.js | 20 ++++++++- .../DependencyList/Dependency/Dependency.js | 8 ++-- .../NewReleases/NewRelease/NewRelease.css | 0 .../NewReleases/NewRelease/NewRelease.js | 28 ++++++++++++ src/components/NewReleases/NewReleases.css | 11 +++++ src/components/NewReleases/NewReleases.js | 35 +++++++++++++++ src/components/UI/Button/Button.js | 1 + src/components/UI/CheckBox/CheckBox.js | 3 +- src/components/UI/DropDown/DropDown.js | 3 +- src/components/UI/Modal/Modal.js | 19 +++++--- src/containers/Configuration/Configuration.js | 44 ++++++++++++------- .../ConfigurationItem/ConfigurationItem.js | 40 ++++++++++------- .../MountItems/MountItem/MountItem.js | 4 +- src/index.css | 3 ++ src/redux/actions/release_version_actions.js | 18 +++++++- src/redux/reducers/release_version_reducer.js | 15 +++++++ src/utils.js | 35 ++++++++++++++- 19 files changed, 241 insertions(+), 51 deletions(-) create mode 100644 src/components/NewReleases/NewRelease/NewRelease.css create mode 100644 src/components/NewReleases/NewRelease/NewRelease.js create mode 100644 src/components/NewReleases/NewReleases.css create mode 100644 src/components/NewReleases/NewReleases.js diff --git a/CHANGELOG.md b/CHANGELOG.md index b9baac7..737e80f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,8 @@ # Changelog +## 1.1.5 +* \#38: Enhance new repertory release available notification +* Added `FocusTrap` to modals + ## 1.1.4 * \#39: Cleanup old releases and UI upgrades diff --git a/package.json b/package.json index 7bc616c..ce081f2 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "devtron": "^1.4.0", "electron-debug": "^3.0.1", "electron-log": "^4.0.6", + "focus-trap-react": "^6.0.0", "font-awesome": "^4.7.0", "node-schedule": "^1.3.2", "randomstring": "^1.1.5", diff --git a/src/App.js b/src/App.js index e2cdd81..c34ca6e 100644 --- a/src/App.js +++ b/src/App.js @@ -11,6 +11,7 @@ import InfoDetails from './components/InfoDetails/InfoDetails'; import IPCContainer from './containers/IPCContainer/IPCContainer'; import Loading from './components/UI/Loading/Loading'; import MountItems from './containers/MountItems/MountItems'; +import NewReleases from './components/NewReleases/NewReleases'; import {notifyError} from './redux/actions/error_actions'; import Reboot from './components/Reboot/Reboot'; import ReleaseVersionDisplay from './components/ReleaseVersionDisplay/ReleaseVersionDisplay'; @@ -111,12 +112,26 @@ class App extends IPCContainer { !this.props.DismissDependencies && this.props.AllowMount; + const showNewReleases = !showConfig && + !this.props.DisplayConfirmYesNo && + !showDependencies && + !this.props.DownloadActive && + !this.props.DisplayError && + !this.props.DisplayInfo && + !this.props.InstallActive && + !this.props.RebootRequired && + !this.props.DisplaySelectAppPlatform && + !showUpgrade && + !this.props.DismissNewReleasesAvailable && + (this.props.NewReleasesAvailable.length > 0); + const configDisplay = createModalConditionally(showConfig, ); const confirmDisplay = createModalConditionally(this.props.DisplayConfirmYesNo, ); const dependencyDisplay = createModalConditionally(showDependencies, ); - const downloadDisplay = createModalConditionally(this.props.DownloadActive, ); + const downloadDisplay = createModalConditionally(this.props.DownloadActive, , false, true); const errorDisplay = createModalConditionally(this.props.DisplayError, , true); const infoDisplay = createModalConditionally(this.props.DisplayInfo, , true); + const newReleasesDisplay = createModalConditionally(showNewReleases, ); const rebootDisplay = createModalConditionally(this.props.RebootRequired, ); const selectAppPlatformDisplay = createModalConditionally(this.props.DisplaySelectAppPlatform, ); const upgradeDisplay = createModalConditionally(showUpgrade, ); @@ -175,6 +190,7 @@ class App extends IPCContainer { {mainContent} + {newReleasesDisplay} {selectAppPlatformDisplay} {dependencyDisplay} {upgradeDisplay} @@ -201,12 +217,14 @@ const mapStateToProps = state => { DisplayError: state.error.DisplayError, DisplayInfo: state.error.DisplayInfo, DisplaySelectAppPlatform: state.common.DisplaySelectAppPlatform, + DismissNewReleasesAvailable: state.relver.DismissNewReleasesAvailable, DownloadActive: state.download.DownloadActive, InstallActive: state.install.InstallActive, InstalledVersion: state.relver.InstalledVersion, LocationsLookup: state.relver.LocationsLookup, MissingDependencies: state.install.MissingDependencies, MountsBusy: state.mounts.MountsBusy, + NewReleasesAvailable: state.relver.NewReleasesAvailable, Platform: state.common.Platform, ProviderState: state.mounts.ProviderState, RebootRequired: state.common.RebootRequired, diff --git a/src/components/DependencyList/Dependency/Dependency.js b/src/components/DependencyList/Dependency/Dependency.js index f869874..71bc437 100644 --- a/src/components/DependencyList/Dependency/Dependency.js +++ b/src/components/DependencyList/Dependency/Dependency.js @@ -22,9 +22,9 @@ export default connect(mapStateToProps)(props => { {props.AllowDownload ? - {props.onDownload(); return false;}}>Install : + {props.onDownload(); return false;}}>Install : 'Installing...'} @@ -32,4 +32,4 @@ export default connect(mapStateToProps)(props => { ); -}); \ No newline at end of file +}); diff --git a/src/components/NewReleases/NewRelease/NewRelease.css b/src/components/NewReleases/NewRelease/NewRelease.css new file mode 100644 index 0000000..e69de29 diff --git a/src/components/NewReleases/NewRelease/NewRelease.js b/src/components/NewReleases/NewRelease/NewRelease.js new file mode 100644 index 0000000..f7765b0 --- /dev/null +++ b/src/components/NewReleases/NewRelease/NewRelease.js @@ -0,0 +1,28 @@ +import React from 'react'; +import * as Constants from '../../../constants'; +import Button from '../../UI/Button/Button'; + +export default ({release}) => { + return ( +
+

{'[' + Constants.RELEASE_TYPES[release.Release].toUpperCase() + '] ' + release.Display }

+ + + + + + + + + + +
+ + +
+
+ +
+
+ ); +}; diff --git a/src/components/NewReleases/NewReleases.css b/src/components/NewReleases/NewReleases.css new file mode 100644 index 0000000..71777c2 --- /dev/null +++ b/src/components/NewReleases/NewReleases.css @@ -0,0 +1,11 @@ +.NewReleasesHeading { + text-align: center; + margin-bottom: 4px; +} + +.NewReleasesContent { + max-height: 60vh; + min-width: 50vw; + overflow-y: auto; + margin-bottom: var(--default_spacing); +} diff --git a/src/components/NewReleases/NewReleases.js b/src/components/NewReleases/NewReleases.js new file mode 100644 index 0000000..74a2343 --- /dev/null +++ b/src/components/NewReleases/NewReleases.js @@ -0,0 +1,35 @@ +import React from 'react'; +import {connect} from 'react-redux'; +import Box from '../UI/Box/Box'; +import Button from '../UI/Button/Button'; +import NewRelease from './NewRelease/NewRelease'; +import './NewReleases.css'; +import {setDismissNewReleasesAvailable} from '../../redux/actions/release_version_actions'; + +const mapStateToProps = state => { + return { + NewReleasesAvailable: state.relver.NewReleasesAvailable, + }; +}; + +const mapDispatchToProps = dispatch => { + return { + dismissNewReleasesAvailable: () => dispatch(setDismissNewReleasesAvailable(true)), + }; +}; + +export default connect(mapStateToProps, mapDispatchToProps)(props => { + const newReleases = props.NewReleasesAvailable.map(i => { + return ; + }); + + return ( + +

New Repertory Versions Available

+
+ {newReleases} +
+ +
+ ); +}); diff --git a/src/components/UI/Button/Button.js b/src/components/UI/Button/Button.js index 5435032..ae1b462 100644 --- a/src/components/UI/Button/Button.js +++ b/src/components/UI/Button/Button.js @@ -4,6 +4,7 @@ import './Button.css'; export default props => { return ( diff --git a/src/components/UI/CheckBox/CheckBox.js b/src/components/UI/CheckBox/CheckBox.js index adc0e04..b195cf3 100644 --- a/src/components/UI/CheckBox/CheckBox.js +++ b/src/components/UI/CheckBox/CheckBox.js @@ -6,6 +6,7 @@ export default props => {
); -}; \ No newline at end of file +}; diff --git a/src/components/UI/DropDown/DropDown.js b/src/components/UI/DropDown/DropDown.js index f19cc1d..485465c 100644 --- a/src/components/UI/DropDown/DropDown.js +++ b/src/components/UI/DropDown/DropDown.js @@ -11,6 +11,7 @@ export default props => { return (
handleChanged(e)} - step={"0.01"} + step={'0.01'} className={'ConfigurationItemInput'} type={'number'} value={parseFloat(props.value).toFixed(2)}/>; break; - case "list": + case 'list': data = ; break; - case "string": + case 'string': data = handleChanged(e)} + autoFocus={props.autoFocus} className={'ConfigurationItemInput'} disabled={props.readOnly} type={'text'} value={props.value}/>; break; - case "uint8": + case 'uint8': data = handleChanged(e)} className={'ConfigurationItemInput'} @@ -80,9 +85,10 @@ export default connect(null, mapDispatchToProps)(props => { value={props.value}/>; break; - case "uint16": + case 'uint16': data = handleChanged(e)} className={'ConfigurationItemInput'} @@ -90,9 +96,10 @@ export default connect(null, mapDispatchToProps)(props => { value={props.value}/>; break; - case "uint32": + case 'uint32': data = handleChanged(e)} className={'ConfigurationItemInput'} @@ -100,9 +107,10 @@ export default connect(null, mapDispatchToProps)(props => { value={props.value}/>; break; - case "uint64": + case 'uint64': data = handleChanged(e)} className={'ConfigurationItemInput'} @@ -129,4 +137,4 @@ export default connect(null, mapDispatchToProps)(props => {
); -}); \ No newline at end of file +}); diff --git a/src/containers/MountItems/MountItem/MountItem.js b/src/containers/MountItems/MountItem/MountItem.js index 3572b47..267c221 100644 --- a/src/containers/MountItems/MountItem/MountItem.js +++ b/src/containers/MountItems/MountItem/MountItem.js @@ -152,8 +152,8 @@ export default connect(mapStateToProps, mapDispatchToProps)(props => { } }; removeControl = ( - dimensions.columns - 6} - href={void(0)} + dimensions.columns - 6} onClick={handleRemoveMount} row={secondRow + 3} style={removeStyle}> diff --git a/src/index.css b/src/index.css index ce1f473..18e202b 100644 --- a/src/index.css +++ b/src/index.css @@ -30,6 +30,9 @@ a { outline: 0; + color: var(--text_color); + text-decoration: none; + font-weight: bold; } html, body { diff --git a/src/redux/actions/release_version_actions.js b/src/redux/actions/release_version_actions.js index 7ce8b5c..aaf47f1 100644 --- a/src/redux/actions/release_version_actions.js +++ b/src/redux/actions/release_version_actions.js @@ -13,7 +13,10 @@ import { setDismissDependencies } from './install_actions'; import {unmountAll} from './mount_actions'; -import {getIPCRenderer} from '../../utils'; +import { + getIPCRenderer, + getNewReleases +} from '../../utils'; export const CLEAR_UI_UPGRADE = 'relver/clearUIUpgrade'; export const clearUIUpgrade = () => { @@ -123,11 +126,22 @@ export const loadReleases = () => { ...response.data.Locations[appPlatform], }; + const storedReleases = localStorage.getItem('releases'); + let newReleases = []; + if (storedReleases && (storedReleases.length > 0)) { + newReleases = getNewReleases(JSON.parse(storedReleases).VersionLookup, versionLookup); + } + localStorage.setItem('releases', JSON.stringify({ LocationsLookup: locationsLookup, VersionLookup: versionLookup })); dispatchActions(locationsLookup, versionLookup); + + dispatch(setNewReleasesAvailable(newReleases)); + if (getState().relver.NewReleasesAvailable.length > 0) { + dispatch(showWindow()); + } }).catch(error => { const releases = localStorage.getItem('releases'); if (releases && (releases.length > 0)) { @@ -174,8 +188,10 @@ export const setActiveRelease = (release, version) => { }; export const setAllowDismissDependencies = createAction('relver/setAllowDismissDependencies'); +export const setDismissNewReleasesAvailable = createAction('relver/setDismissNewReleasesAvailable'); export const setDismissUIUpgrade = createAction('relver/setDismissUIUpgrade'); export const setInstalledVersion = createAction('relver/setInstalledVersion'); +export const setNewReleasesAvailable = createAction('relver/setNewReleasesAvailable'); export const SET_RELEASE_DATA = 'relver/setReleaseData'; export const setReleaseData = (locationsLookup, versionLookup)=> { diff --git a/src/redux/reducers/release_version_reducer.js b/src/redux/reducers/release_version_reducer.js index 56278ac..52066ec 100644 --- a/src/redux/reducers/release_version_reducer.js +++ b/src/redux/reducers/release_version_reducer.js @@ -15,8 +15,10 @@ const versionLookup = Constants.RELEASE_TYPES.map(k=> { export const releaseVersionReducer = createReducer({ AllowDismissDependencies: false, + DismissNewReleasesAvailable: true, InstalledVersion: 'none', LocationsLookup: {}, + NewReleasesAvailable: [], Release: 0, ReleaseDefault: 0, ReleaseUpgradeAvailable: false, @@ -49,6 +51,12 @@ export const releaseVersionReducer = createReducer({ AllowDismissDependencies: action.payload, }; }, + [Actions.setDismissNewReleasesAvailable]: (state, action) => { + return { + ...state, + DismissNewReleasesAvailable: action.payload, + }; + }, [Actions.setDismissUIUpgrade]: (state, action) => { return { ...state, @@ -61,6 +69,13 @@ export const releaseVersionReducer = createReducer({ InstalledVersion: action.payload, } }, + [Actions.setNewReleasesAvailable]: (state, action) => { + return { + ...state, + DismissNewReleasesAvailable: false, + NewReleasesAvailable: action.payload, + }; + }, [Actions.SET_RELEASE_DATA]: (state, action) => { return { ...state, diff --git a/src/utils.js b/src/utils.js index b263338..b821063 100644 --- a/src/utils.js +++ b/src/utils.js @@ -6,8 +6,8 @@ const ipcRenderer = (!process.versions.hasOwnProperty('electron') && window && w window.require('electron').ipcRenderer : null; -export const createModalConditionally = (condition, jsx, critical) => { - const modalProps = {critical: critical}; +export const createModalConditionally = (condition, jsx, critical, disableFocusTrap) => { + const modalProps = {critical: critical, disableFocusTrap: disableFocusTrap}; return condition ? ({jsx}) : null; }; @@ -20,6 +20,37 @@ export const getIPCRenderer = () => { return ipcRenderer; }; +export const getNewReleases = (existingReleases, newReleases) => { + const ret = []; + + existingReleases = Constants.RELEASE_TYPES.reduce((map, release) => { + map[release] = []; + return map; + }, {}); + + if (existingReleases && newReleases) { + Constants.RELEASE_TYPES.forEach(release => { + newReleases[release] + .filter(version => !existingReleases[release].includes(version) && (version !== 'unavailable')) + .forEach(version => { + ret.splice(0, 0, { + Display: version, + Release: Constants.RELEASE_TYPES.indexOf(release), + Version: newReleases[release].indexOf(version), + }); + }); + }); + } + + ret.splice(0, 0, { + Display: '1.1.1', + Release: 0, + Version: 2, + }); + + return ret; +}; + export const getSelectedVersionFromState = state => { return (state.relver.Version === -1) ? 'unavailable' : From 9bdfcb9eb38f7b265146b5933eea12f7170362f0 Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Thu, 20 Feb 2020 16:22:44 -0600 Subject: [PATCH 007/131] #38: Enhance new repertory release available notification - partial --- src/components/NewReleases/NewRelease/NewRelease.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/NewReleases/NewRelease/NewRelease.js b/src/components/NewReleases/NewRelease/NewRelease.js index f7765b0..bf73809 100644 --- a/src/components/NewReleases/NewRelease/NewRelease.js +++ b/src/components/NewReleases/NewRelease/NewRelease.js @@ -5,7 +5,7 @@ import Button from '../../UI/Button/Button'; export default ({release}) => { return (
-

{'[' + Constants.RELEASE_TYPES[release.Release].toUpperCase() + '] ' + release.Display }

+

{'[' + Constants.RELEASE_TYPES[release.Release] + '] ' + release.Display }

From 0eb40e5a65e7a3f7c7a0332e9d7291cb10faef24 Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Thu, 20 Feb 2020 18:17:03 -0600 Subject: [PATCH 008/131] Layout changes --- src/components/NewReleases/NewRelease/NewRelease.js | 6 +++--- src/components/NewReleases/NewReleases.js | 6 ++++-- src/containers/AddRemoteMount/AddRemoteMount.js | 8 ++++---- src/containers/Configuration/Configuration.js | 4 ++-- src/containers/MountItems/MountItem/MountItem.js | 2 +- src/index.css | 10 +++++----- src/redux/actions/release_version_actions.js | 1 + src/utils.js | 8 ++++---- 8 files changed, 24 insertions(+), 21 deletions(-) diff --git a/src/components/NewReleases/NewRelease/NewRelease.js b/src/components/NewReleases/NewRelease/NewRelease.js index bf73809..a8b5de3 100644 --- a/src/components/NewReleases/NewRelease/NewRelease.js +++ b/src/components/NewReleases/NewRelease/NewRelease.js @@ -2,10 +2,10 @@ import React from 'react'; import * as Constants from '../../../constants'; import Button from '../../UI/Button/Button'; -export default ({release}) => { +export default ({release, lastItem}) => { return (
-

{'[' + Constants.RELEASE_TYPES[release.Release] + '] ' + release.Display }

+

{'[' + Constants.RELEASE_TYPES[release.Release] + '] ' + release.Display }

@@ -20,7 +20,7 @@ export default ({release}) => { - + {lastItem ? null : }
diff --git a/src/components/NewReleases/NewReleases.js b/src/components/NewReleases/NewReleases.js index 74a2343..5c4638c 100644 --- a/src/components/NewReleases/NewReleases.js +++ b/src/components/NewReleases/NewReleases.js @@ -19,8 +19,10 @@ const mapDispatchToProps = dispatch => { }; export default connect(mapStateToProps, mapDispatchToProps)(props => { - const newReleases = props.NewReleasesAvailable.map(i => { - return ; + const newReleases = props.NewReleasesAvailable.map((i, idx) => { + return ; }); return ( diff --git a/src/containers/AddRemoteMount/AddRemoteMount.js b/src/containers/AddRemoteMount/AddRemoteMount.js index 52a8a00..34b8a1a 100644 --- a/src/containers/AddRemoteMount/AddRemoteMount.js +++ b/src/containers/AddRemoteMount/AddRemoteMount.js @@ -65,7 +65,7 @@ export default connect(mapStateToProps, mapDispatchToProps)(class extends Compon

Add Remote Mount

+ type={'Heading2'}/> this.setState({HostNameOrIp: e.target.value.trim()})} className={'ConfigurationItemInput'} type={'text'} @@ -73,7 +73,7 @@ export default connect(mapStateToProps, mapDispatchToProps)(class extends Compon
+ type={'Heading2'}/> this.setState({Port: e.target.value})} @@ -83,7 +83,7 @@ export default connect(mapStateToProps, mapDispatchToProps)(class extends Compon
+ type={'Heading2'}/> this.setState({Token: e.target.value})} className={'ConfigurationItemInput'} type={'text'} @@ -114,4 +114,4 @@ export default connect(mapStateToProps, mapDispatchToProps)(class extends Compon
); } -}); \ No newline at end of file +}); diff --git a/src/containers/Configuration/Configuration.js b/src/containers/Configuration/Configuration.js index 66799a0..f8c30e9 100644 --- a/src/containers/Configuration/Configuration.js +++ b/src/containers/Configuration/Configuration.js @@ -270,7 +270,7 @@ class Configuration extends IPCContainer { for (const key of Object.keys(this.state.ObjectLookup)) { objectItems.push((
-

{key}

+

{key}

{ this.state.ObjectLookup[key].map((k, i) => { @@ -330,7 +330,7 @@ class Configuration extends IPCContainer { this.props.DisplayConfiguration) + ' Configuration'}
{objectItems} - {(configurationItems.length > 0) ?

Settings

: null} + {(configurationItems.length > 0) ?

Settings

: null} {configurationItems}
diff --git a/src/containers/MountItems/MountItem/MountItem.js b/src/containers/MountItems/MountItem/MountItem.js index 267c221..21af275 100644 --- a/src/containers/MountItems/MountItem/MountItem.js +++ b/src/containers/MountItems/MountItem/MountItem.js @@ -169,7 +169,7 @@ export default connect(mapStateToProps, mapDispatchToProps)(props => { col={configButton ? 6 : 0} rowSpan={5} text={props.remote ? props.provider.substr(6) : props.provider} - type={'Heading1'}/> + type={'Heading2'}/> {inputControls} {actionsDisplay} {autoMountControl} diff --git a/src/index.css b/src/index.css index 18e202b..42eae46 100644 --- a/src/index.css +++ b/src/index.css @@ -8,11 +8,11 @@ --control_transparent_background: rgba(10, 10, 16, 0.5); --control_dark_transparent_background: rgba(10, 10, 16, 0.7); - --text_color: rgba(200, 200, 240, 0.7); - --text_color_hover: rgba(200, 200, 225, 0.7); - --text_color_error: rgba(203, 120, 120, 0.7); - --heading_text_color: rgba(132, 160, 230, 0.7); - --heading_other_text_color: var(--heading_text_color); + --text_color: rgba(200, 200, 240, 0.65); + --text_color_hover: rgba(200, 200, 225, 0.65); + --text_color_error: rgba(203, 120, 120, 0.8); + --heading_text_color: rgba(132, 160, 230, 0.8); + --heading_other_text_color: rgba(132, 160, 230, 0.65); --text_color_transition: color 0.3s; --default_font_size: 14px; diff --git a/src/redux/actions/release_version_actions.js b/src/redux/actions/release_version_actions.js index aaf47f1..e570313 100644 --- a/src/redux/actions/release_version_actions.js +++ b/src/redux/actions/release_version_actions.js @@ -140,6 +140,7 @@ export const loadReleases = () => { dispatch(setNewReleasesAvailable(newReleases)); if (getState().relver.NewReleasesAvailable.length > 0) { + localStorage.setItem('previous_releases', storedReleases); dispatch(showWindow()); } }).catch(error => { diff --git a/src/utils.js b/src/utils.js index b821063..47d29de 100644 --- a/src/utils.js +++ b/src/utils.js @@ -23,10 +23,10 @@ export const getIPCRenderer = () => { export const getNewReleases = (existingReleases, newReleases) => { const ret = []; - existingReleases = Constants.RELEASE_TYPES.reduce((map, release) => { + /*existingReleases = Constants.RELEASE_TYPES.reduce((map, release) => { map[release] = []; return map; - }, {}); + }, {});*/ if (existingReleases && newReleases) { Constants.RELEASE_TYPES.forEach(release => { @@ -42,9 +42,9 @@ export const getNewReleases = (existingReleases, newReleases) => { }); } - ret.splice(0, 0, { + ret.push({ Display: '1.1.1', - Release: 0, + Release: 1, Version: 2, }); From a70359d36b926f497148abd065d1cc49efb94a0c Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Fri, 21 Feb 2020 12:33:01 -0600 Subject: [PATCH 009/131] #38: Enhance new repertory release available notification - partial --- .../NewReleases/NewRelease/NewRelease.js | 31 +++++++++++-- src/utils.js | 46 ++++++++++++++++++- 2 files changed, 72 insertions(+), 5 deletions(-) diff --git a/src/components/NewReleases/NewRelease/NewRelease.js b/src/components/NewReleases/NewRelease/NewRelease.js index a8b5de3..4aafd30 100644 --- a/src/components/NewReleases/NewRelease/NewRelease.js +++ b/src/components/NewReleases/NewRelease/NewRelease.js @@ -1,17 +1,40 @@ import React from 'react'; +import {connect} from 'react-redux'; import * as Constants from '../../../constants'; import Button from '../../UI/Button/Button'; +import {formatLinesForDisplay, getChangesForRepertoryVersion} from '../../../utils'; +import { + notifyError, + notifyInfo +} from '../../../redux/actions/error_actions'; + +const mapDispatchToProps = dispatch => { + return { + notifyError: msg => dispatch(notifyError(msg)), + notifyInfo: (title, msg) => dispatch(notifyInfo(title, msg)), + }; +}; + +export default connect(null, mapDispatchToProps)(({release, lastItem, notifyError, notifyInfo}) => { + const title = '[' + Constants.RELEASE_TYPES[release.Release] + '] ' + release.Display; + const displayChanges = async () => { + try { + const lines = await getChangesForRepertoryVersion(release.VersionString); + notifyInfo(title, formatLinesForDisplay(lines)); + } catch (e) { + notifyError(e); + } + }; -export default ({release, lastItem}) => { return (
-

{'[' + Constants.RELEASE_TYPES[release.Release] + '] ' + release.Display }

+

{title}

- +
@@ -25,4 +48,4 @@ export default ({release, lastItem}) => {
); -}; +}); diff --git a/src/utils.js b/src/utils.js index 47d29de..0c33989 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,6 +1,7 @@ import React from 'react'; import * as Constants from './constants'; import Modal from './components/UI/Modal/Modal'; +import axios from 'axios'; const ipcRenderer = (!process.versions.hasOwnProperty('electron') && window && window.require) ? window.require('electron').ipcRenderer : @@ -16,6 +17,47 @@ export const extractFileNameFromURL = url => { return parts[parts.length - 1]; }; +export const formatLinesForDisplay = lines => { + let msg = ''; + for (let i = 1; i < lines.length; i++) { + if (i > 1) { + msg += '\n'; + } + msg += (lines[i].replace(/(\\#)/gm, '#') + '\n'); + } + return msg; +}; + +export const getChangesForRepertoryVersion = version => { + return new Promise((resolve, reject) => { + const url = `https://bitbucket.org/blockstorage/repertory/raw/${version}/CHANGELOG.md`; + axios + .get(url, { + responseType: 'text', + }) + .then(response => { + try { + let found = false; + let ended = false; + let lines = response.data + .replace(/(\r\n)/gm, '\n') + .split('\n') + .filter(l => { + return !ended && (l.length > 0) && (found + ? !(ended = l.startsWith('## ')) + : (found = l.startsWith(`## ${version}`))); + }); + resolve(lines); + } catch (e) { + reject(e); + } + }) + .catch(error => { + reject(error); + }); + }); +}; + export const getIPCRenderer = () => { return ipcRenderer; }; @@ -37,15 +79,17 @@ export const getNewReleases = (existingReleases, newReleases) => { Display: version, Release: Constants.RELEASE_TYPES.indexOf(release), Version: newReleases[release].indexOf(version), + VersionString: version, }); }); }); } ret.push({ - Display: '1.1.1', + Display: '1.2.2-release', Release: 1, Version: 2, + VersionString: '1.2.2-release', }); return ret; From 39409495c4604d1ff07b46220a726796b72fd99e Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Fri, 21 Feb 2020 15:35:16 -0600 Subject: [PATCH 010/131] #38: Enhance new repertory release available notification --- .../NewReleases/NewRelease/NewRelease.js | 10 ++++- src/components/NewReleases/NewReleases.js | 3 +- src/redux/actions/install_actions.js | 39 +++++++++++++++++-- src/redux/reducers/install_reducer.js | 8 ++++ src/utils.js | 8 ++-- 5 files changed, 57 insertions(+), 11 deletions(-) diff --git a/src/components/NewReleases/NewRelease/NewRelease.js b/src/components/NewReleases/NewRelease/NewRelease.js index 4aafd30..0ad4fec 100644 --- a/src/components/NewReleases/NewRelease/NewRelease.js +++ b/src/components/NewReleases/NewRelease/NewRelease.js @@ -7,16 +7,22 @@ import { notifyError, notifyInfo } from '../../../redux/actions/error_actions'; +import {installReleaseByVersion} from '../../../redux/actions/install_actions'; const mapDispatchToProps = dispatch => { return { + installReleaseByVersion: (release, version) => dispatch(installReleaseByVersion(release, version)), notifyError: msg => dispatch(notifyError(msg)), notifyInfo: (title, msg) => dispatch(notifyInfo(title, msg)), }; }; -export default connect(null, mapDispatchToProps)(({release, lastItem, notifyError, notifyInfo}) => { +export default connect(null, mapDispatchToProps)(({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); @@ -40,7 +46,7 @@ export default connect(null, mapDispatchToProps)(({release, lastItem, notifyErro
- + {lastItem ? null : } diff --git a/src/components/NewReleases/NewReleases.js b/src/components/NewReleases/NewReleases.js index 5c4638c..4c4656e 100644 --- a/src/components/NewReleases/NewReleases.js +++ b/src/components/NewReleases/NewReleases.js @@ -20,7 +20,8 @@ const mapDispatchToProps = dispatch => { export default connect(mapStateToProps, mapDispatchToProps)(props => { const newReleases = props.NewReleasesAvailable.map((i, idx) => { - return ; }); diff --git a/src/redux/actions/install_actions.js b/src/redux/actions/install_actions.js index b8eaf77..5b28fff 100644 --- a/src/redux/actions/install_actions.js +++ b/src/redux/actions/install_actions.js @@ -5,7 +5,7 @@ import { getSelectedVersionFromState } from '../../utils'; import {notifyError} from './error_actions'; -import {setAllowDownload} from './download_actions'; +import {downloadItem, setAllowDownload} from './download_actions'; import { loadReleases, setActiveRelease, @@ -32,13 +32,15 @@ export const checkInstalled = (dependencies, version) => { const installedVersion = result.Success && result.Exists ? result.Version : 'none'; const state = getState(); + const release = state.relver.Release; + let version = state.relver.Version; + let upgradeAvailable = false; if (installedVersion !== 'none') { - const latestVersion = state.relver.VersionLookup[Constants.RELEASE_TYPES[state.relver.Release]].length - 1; - let version = state.relver.Version; + const latestVersion = state.relver.VersionLookup[Constants.RELEASE_TYPES[release]].length - 1; if (version === -1) { version = latestVersion; - dispatch(setActiveRelease(state.relver.Release, version)); + dispatch(setActiveRelease(release, version)); } else { upgradeAvailable = version !== latestVersion; } @@ -48,8 +50,18 @@ export const checkInstalled = (dependencies, version) => { dispatch(setMissingDependencies(result.Dependencies)); dispatch(setAllowDownload(true)); dispatch(setAllowMount(true)); + + const autoInstallRelease = getState().install.AutoInstallRelease; + dispatch(setAutoInstallRelease(false)); + if (result.Dependencies && (result.Dependencies.length > 0)) { dispatch(showWindow()); + } else if ((installedVersion === 'none') && autoInstallRelease) { + dispatch(setAllowMount(false)); + const versionString = getState().relver.VersionLookup[Constants.RELEASE_TYPES[release]][version]; + const urls = getState().relver.LocationsLookup[versionString].urls; + const fileName = versionString + '.zip'; + dispatch(downloadItem(fileName, Constants.INSTALL_TYPES.Release, urls)); } }; @@ -174,6 +186,24 @@ export const installAndTestRelease = (source, version, appPlatform) => { }; }; +export const installReleaseByVersion = (release, version) => { + return (dispatch, getState) => { + let allowInstall = !getState().mounts.MountsBusy; + if (!allowInstall) { + // TODO: prompt to unmount + } + + if (allowInstall) { + if (getState().download.AllowDownload && !getState().download.DownloadActive) { + dispatch(setAutoInstallRelease(true)); + dispatch(setActiveRelease(release, version)); + } else { + notifyError('Download is active. Unable to install release.'); + } + } + }; +}; + export const installRelease = source => { return (dispatch, getState) => { if (ipcRenderer && !getState().install.InstallActive) { @@ -231,6 +261,7 @@ export const installUpgrade = (source, sha256, signature, skipVerification) => { }; }; +export const setAutoInstallRelease = createAction('install/setAutoInstallRelease'); export const setDismissDependencies = createAction('install/setDismissDependencies'); export const setInstallActive = createAction('install/setInstallActive'); export const setInstallTestActive = createAction('install/setInstallTestActive'); diff --git a/src/redux/reducers/install_reducer.js b/src/redux/reducers/install_reducer.js index cdcca1a..8ec65f7 100644 --- a/src/redux/reducers/install_reducer.js +++ b/src/redux/reducers/install_reducer.js @@ -1,5 +1,6 @@ import {createReducer} from '@reduxjs/toolkit'; import { + setAutoInstallRelease, setDismissDependencies, setInstallActive, setInstallComplete, @@ -8,6 +9,7 @@ import { } from '../actions/install_actions'; export const installReducer = createReducer({ + AutoInstallRelease: false, DismissDependencies: false, InstallActive: false, InstallResult: null, @@ -15,6 +17,12 @@ export const installReducer = createReducer({ InstallType: null, MissingDependencies: [], }, { + [setAutoInstallRelease]: (state, action) => { + return { + ...state, + AutoInstallRelease: action.payload, + } + }, [setDismissDependencies]: (state, action) => { return { ...state, diff --git a/src/utils.js b/src/utils.js index 0c33989..2448039 100644 --- a/src/utils.js +++ b/src/utils.js @@ -85,12 +85,12 @@ export const getNewReleases = (existingReleases, newReleases) => { }); } - ret.push({ + /*ret.push({ Display: '1.2.2-release', - Release: 1, - Version: 2, + Release: 0, + Version: 3, VersionString: '1.2.2-release', - }); + });*/ return ret; }; From 12ad8786188b4288f516a3c12a5608af76e3426a Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Fri, 21 Feb 2020 16:38:52 -0600 Subject: [PATCH 011/131] Unmount before install --- src/redux/actions/install_actions.js | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/redux/actions/install_actions.js b/src/redux/actions/install_actions.js index 5b28fff..48700c9 100644 --- a/src/redux/actions/install_actions.js +++ b/src/redux/actions/install_actions.js @@ -13,6 +13,7 @@ import { setReleaseUpgradeAvailable } from './release_version_actions'; import { + confirmYesNo, displaySelectAppPlatform, setAllowMount, setApplicationReady, @@ -21,6 +22,7 @@ import { showWindow, shutdownApplication } from './common_actions'; +import {unmountAll} from './mount_actions'; const ipcRenderer = getIPCRenderer(); @@ -188,18 +190,25 @@ export const installAndTestRelease = (source, version, appPlatform) => { export const installReleaseByVersion = (release, version) => { return (dispatch, getState) => { - let allowInstall = !getState().mounts.MountsBusy; - if (!allowInstall) { - // TODO: prompt to unmount - } - - if (allowInstall) { + const install = () => { if (getState().download.AllowDownload && !getState().download.DownloadActive) { dispatch(setAutoInstallRelease(true)); dispatch(setActiveRelease(release, version)); } else { notifyError('Download is active. Unable to install release.'); } + }; + + if (getState().mounts.MountsBusy) { + dispatch(confirmYesNo('Unmount all drives?')) + .then(confirmed => { + if (confirmed) { + dispatch(unmountAll(install)); + } + }) + .catch(error => notifyError(error)); + } else { + install(); } }; }; From acb8e5966004d81cc15445308de6481782c8d44a Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Sat, 22 Feb 2020 19:17:11 -0600 Subject: [PATCH 012/131] Refactoring --- public/electron.js | 37 +++++++++++++++++++++---------- src/renderer/ipc/AppIPC.js | 4 ++-- src/renderer/ipc/ConfigIPC.js | 4 ++-- src/renderer/ipc/DaemonIPC.js | 4 ++-- src/renderer/ipc/DependencyIPC.js | 2 +- src/renderer/ipc/DownloadIPC.js | 4 ++-- src/renderer/ipc/FilesystemIPC.js | 4 ++-- src/renderer/ipc/MountsIPC.js | 2 +- src/renderer/ipc/PlatformIPC.js | 4 ++-- src/renderer/ipc/ReleaseIPC.js | 2 +- src/renderer/ipc/SystemIPC.js | 4 ++-- src/renderer/ipc/UpgradeIPC.js | 4 ++-- src/utils.js | 25 ++++++++++++++++----- 13 files changed, 64 insertions(+), 36 deletions(-) diff --git a/public/electron.js b/public/electron.js index c65de22..e01a3cb 100644 --- a/public/electron.js +++ b/public/electron.js @@ -308,16 +308,29 @@ if (!instanceLock) { configurePrimaryApp(); } +const AppFunctions = { + closeApplication, + detectScript, + dialog, + getCleanupReleases: () => cleanupReleases, + getMainWindow, + saveUiSettings, + setIsInstalling, + setTrayImage, + setWindowVisibility, + standardIPCReply, + unmountAllDrives: MountsIPC.unmountAllDrives, +}; -AppIPC.addListeners(ipcMain, closeApplication, setWindowVisibility); -ConfigIPC.addListeners(ipcMain, standardIPCReply); -DaemonIPC.addListeners(ipcMain, standardIPCReply); -DependencyIPC.addListeners(ipcMain, standardIPCReply); -DownloadIPC.addListeners(ipcMain, standardIPCReply); -FilesystemIPC.addListeners(ipcMain, getMainWindow, dialog); -MountsIPC.addListeners(ipcMain, setTrayImage, standardIPCReply); -PlatformIPC.addListeners(ipcMain, detectScript, saveUiSettings); -ReleaseIPC.addListeners(ipcMain, () => cleanupReleases, standardIPCReply); -StateIPC.addListeners(ipcMain); -SystemIPC.addListeners(ipcMain, closeApplication); -UpgradeIPC.addListeners(ipcMain, setIsInstalling, MountsIPC.unmountAllDrives, standardIPCReply); +AppIPC.addListeners(ipcMain, AppFunctions); +ConfigIPC.addListeners(ipcMain, AppFunctions); +DaemonIPC.addListeners(ipcMain, AppFunctions); +DependencyIPC.addListeners(ipcMain, AppFunctions); +DownloadIPC.addListeners(ipcMain, AppFunctions); +FilesystemIPC.addListeners(ipcMain, AppFunctions); +MountsIPC.addListeners(ipcMain, AppFunctions); +PlatformIPC.addListeners(ipcMain, AppFunctions); +ReleaseIPC.addListeners(ipcMain, AppFunctions); +StateIPC.addListeners(ipcMain, AppFunctions); +SystemIPC.addListeners(ipcMain, AppFunctions); +UpgradeIPC.addListeners(ipcMain, AppFunctions); diff --git a/src/renderer/ipc/AppIPC.js b/src/renderer/ipc/AppIPC.js index 4fdd3da..9473440 100644 --- a/src/renderer/ipc/AppIPC.js +++ b/src/renderer/ipc/AppIPC.js @@ -1,6 +1,6 @@ const Constants = require('../../constants'); -const addListeners = (ipcMain, closeApplication, setWindowVisibility) => { +const addListeners = (ipcMain, {closeApplication, setWindowVisibility}) => { ipcMain.on(Constants.IPC_Shutdown, () => { closeApplication(); }); @@ -17,4 +17,4 @@ const addListeners = (ipcMain, closeApplication, setWindowVisibility) => { module.exports = { addListeners -}; \ No newline at end of file +}; diff --git a/src/renderer/ipc/ConfigIPC.js b/src/renderer/ipc/ConfigIPC.js index 76bba25..a609eda 100644 --- a/src/renderer/ipc/ConfigIPC.js +++ b/src/renderer/ipc/ConfigIPC.js @@ -1,7 +1,7 @@ const Constants = require('../../constants'); const helpers = require('../../helpers'); -const addListeners = (ipcMain, standardIPCReply) => { +const addListeners = (ipcMain, {standardIPCReply}) => { ipcMain.on(Constants.IPC_Get_Config, (event, data) => { helpers .getConfig(data.Version, data.Provider, data.Remote) @@ -53,4 +53,4 @@ const addListeners = (ipcMain, standardIPCReply) => { module.exports = { addListeners -}; \ No newline at end of file +}; diff --git a/src/renderer/ipc/DaemonIPC.js b/src/renderer/ipc/DaemonIPC.js index c563c1c..6e4ec62 100644 --- a/src/renderer/ipc/DaemonIPC.js +++ b/src/renderer/ipc/DaemonIPC.js @@ -1,7 +1,7 @@ const Constants = require('../../constants'); const helpers = require('../../helpers'); -const addListeners = (ipcMain, standardIPCReply) => { +const addListeners = (ipcMain, {standardIPCReply}) => { ipcMain.on(Constants.IPC_Check_Daemon_Version, (event, data) => { helpers .checkDaemonVersion(data.Version, data.Provider) @@ -44,4 +44,4 @@ const addListeners = (ipcMain, standardIPCReply) => { module.exports = { addListeners -}; \ No newline at end of file +}; diff --git a/src/renderer/ipc/DependencyIPC.js b/src/renderer/ipc/DependencyIPC.js index ffb9907..f6945e0 100644 --- a/src/renderer/ipc/DependencyIPC.js +++ b/src/renderer/ipc/DependencyIPC.js @@ -2,7 +2,7 @@ const Constants = require('../../constants'); const fs = require('fs'); const helpers = require('../../helpers'); -const addListeners = (ipcMain, standardIPCReply) => { +const addListeners = (ipcMain, {standardIPCReply}) => { ipcMain.on(Constants.IPC_Check_Dependency_Installed, (event, data) => { try { const exists = fs.lstatSync(data.File).isFile(); diff --git a/src/renderer/ipc/DownloadIPC.js b/src/renderer/ipc/DownloadIPC.js index 1492ea9..366d72e 100644 --- a/src/renderer/ipc/DownloadIPC.js +++ b/src/renderer/ipc/DownloadIPC.js @@ -2,7 +2,7 @@ const Constants = require('../../constants'); const helpers = require('../../helpers'); const path = require('path'); -const addListeners = (ipcMain, standardIPCReply) => { +const addListeners = (ipcMain, {standardIPCReply}) => { ipcMain.on(Constants.IPC_Download_File, (event, data) => { const destination = path.join(helpers.getDataDirectory(), data.Filename); helpers.downloadFile(data.URL, destination, (progress) => { @@ -22,4 +22,4 @@ const addListeners = (ipcMain, standardIPCReply) => { module.exports = { addListeners -}; \ No newline at end of file +}; diff --git a/src/renderer/ipc/FilesystemIPC.js b/src/renderer/ipc/FilesystemIPC.js index 1294e76..cb71d62 100644 --- a/src/renderer/ipc/FilesystemIPC.js +++ b/src/renderer/ipc/FilesystemIPC.js @@ -1,7 +1,7 @@ const Constants = require('../../constants'); const fs = require('fs'); -const addListeners = (ipcMain, getMainWindow, dialog) => { +const addListeners = (ipcMain, {getMainWindow, dialog}) => { ipcMain.on(Constants.IPC_Browse_Directory + '_sync', (event, data) => { dialog.showOpenDialog(getMainWindow(), { defaultPath: data.Location, @@ -28,4 +28,4 @@ const addListeners = (ipcMain, getMainWindow, dialog) => { module.exports = { addListeners -}; \ No newline at end of file +}; diff --git a/src/renderer/ipc/MountsIPC.js b/src/renderer/ipc/MountsIPC.js index 4b6cfe8..8cd5b37 100644 --- a/src/renderer/ipc/MountsIPC.js +++ b/src/renderer/ipc/MountsIPC.js @@ -62,7 +62,7 @@ const unmountAllDrives = () => { mountedData = {}; }; -const addListeners = (ipcMain, setTrayImage, standardIPCReply) => { +const addListeners = (ipcMain, {setTrayImage, standardIPCReply}) => { ipcMain.on(Constants.IPC_Check_Mount_Location + '_sync', (event, data) => { let response = { Success: true, diff --git a/src/renderer/ipc/PlatformIPC.js b/src/renderer/ipc/PlatformIPC.js index f55a35c..16ec438 100644 --- a/src/renderer/ipc/PlatformIPC.js +++ b/src/renderer/ipc/PlatformIPC.js @@ -14,7 +14,7 @@ const setPlatformOverride = platformOverride => { _platformOverride = platformOverride; }; -const addListeners = (ipcMain, detectScript, saveUiSettings) => { +const addListeners = (ipcMain, {detectScript, saveUiSettings}) => { ipcMain.on(Constants.IPC_Get_Platform, (event) => { const sendResponse = (appPlatform, platform) => { event.sender.send(Constants.IPC_Get_Platform_Reply, { @@ -76,4 +76,4 @@ module.exports = { getPlatformOverride, setPlatformOverride, addListeners -}; \ No newline at end of file +}; diff --git a/src/renderer/ipc/ReleaseIPC.js b/src/renderer/ipc/ReleaseIPC.js index f76fcf8..f2d7a77 100644 --- a/src/renderer/ipc/ReleaseIPC.js +++ b/src/renderer/ipc/ReleaseIPC.js @@ -5,7 +5,7 @@ const os = require('os'); const path = require('path'); const unzip = require('unzipper'); -const addListeners = (ipcMain, getCleanupReleases, standardIPCReply) => { +const addListeners = (ipcMain, {getCleanupReleases, standardIPCReply}) => { ipcMain.on(Constants.IPC_Check_Installed, (event, data) => { const destination = path.join(helpers.getDataDirectory(), data.Version); helpers diff --git a/src/renderer/ipc/SystemIPC.js b/src/renderer/ipc/SystemIPC.js index 52ebb2f..a6298c5 100644 --- a/src/renderer/ipc/SystemIPC.js +++ b/src/renderer/ipc/SystemIPC.js @@ -2,7 +2,7 @@ const Constants = require('../../constants'); const os = require('os'); const helpers = require('../../helpers'); -const addListeners = (ipcMain, closeApplication) => { +const addListeners = (ipcMain, {closeApplication}) => { ipcMain.on(Constants.IPC_Reboot_System, () => { if (os.platform() === 'win32') { helpers.executeAsync('shutdown.exe', ['/r', '/t', '30']); @@ -13,4 +13,4 @@ const addListeners = (ipcMain, closeApplication) => { module.exports = { addListeners -}; \ No newline at end of file +}; diff --git a/src/renderer/ipc/UpgradeIPC.js b/src/renderer/ipc/UpgradeIPC.js index 7bdc24c..b717ab8 100644 --- a/src/renderer/ipc/UpgradeIPC.js +++ b/src/renderer/ipc/UpgradeIPC.js @@ -3,7 +3,7 @@ const fs = require('fs'); const helpers = require('../../helpers'); const os = require('os'); -const addListeners = (ipcMain, setIsInstalling, unmountAllDrives, standardIPCReply) => { +const addListeners = (ipcMain, {setIsInstalling, unmountAllDrives, standardIPCReply}) => { ipcMain.on(Constants.IPC_Install_Upgrade, (event, data) => { let allowSkipVerification = true; @@ -113,4 +113,4 @@ const addListeners = (ipcMain, setIsInstalling, unmountAllDrives, standardIPCRep module.exports = { addListeners -}; \ No newline at end of file +}; diff --git a/src/utils.js b/src/utils.js index 2448039..ab8f565 100644 --- a/src/utils.js +++ b/src/utils.js @@ -7,6 +7,21 @@ const ipcRenderer = (!process.versions.hasOwnProperty('electron') && window && w window.require('electron').ipcRenderer : null; +export const checkNewReleases = () => { + let previousReleases = localStorage.getItem('previous_releases'); + if (previousReleases) { + previousReleases = JSON.parse(previousReleases).VersionLookup; + + let currentReleases = localStorage.getItem('releases'); + if (currentReleases) { + currentReleases = JSON.parse(currentReleases).VersionLookup; + return getNewReleases(previousReleases, currentReleases); + } + } + + return []; +}; + export const createModalConditionally = (condition, jsx, critical, disableFocusTrap) => { const modalProps = {critical: critical, disableFocusTrap: disableFocusTrap}; return condition ? ({jsx}) : null; @@ -62,7 +77,7 @@ export const getIPCRenderer = () => { return ipcRenderer; }; -export const getNewReleases = (existingReleases, newReleases) => { +export const getNewReleases = (existingLocations, newLocations) => { const ret = []; /*existingReleases = Constants.RELEASE_TYPES.reduce((map, release) => { @@ -70,15 +85,15 @@ export const getNewReleases = (existingReleases, newReleases) => { return map; }, {});*/ - if (existingReleases && newReleases) { + if (existingLocations && newLocations) { Constants.RELEASE_TYPES.forEach(release => { - newReleases[release] - .filter(version => !existingReleases[release].includes(version) && (version !== 'unavailable')) + newLocations[release] + .filter(version => !existingLocations[release].includes(version) && (version !== 'unavailable')) .forEach(version => { ret.splice(0, 0, { Display: version, Release: Constants.RELEASE_TYPES.indexOf(release), - Version: newReleases[release].indexOf(version), + Version: newLocations[release].indexOf(version), VersionString: version, }); }); From 8e4ed173fdb9456570ab887aa09f0d9a3c314519 Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Sat, 22 Feb 2020 19:26:53 -0600 Subject: [PATCH 013/131] Refactoring --- src/containers/MountItems/MountItem/MountItem.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/containers/MountItems/MountItem/MountItem.js b/src/containers/MountItems/MountItem/MountItem.js index 21af275..0d86886 100644 --- a/src/containers/MountItems/MountItem/MountItem.js +++ b/src/containers/MountItems/MountItem/MountItem.js @@ -152,13 +152,14 @@ export default connect(mapStateToProps, mapDispatchToProps)(props => { } }; removeControl = ( - dimensions.columns - 6} - onClick={handleRemoveMount} - row={secondRow + 3} - style={removeStyle}> - - ); + dimensions.columns - 6} + row={secondRow + 3}> + + + + ); } return ( From 5aa47c33c9c86c390fb7384436525c27a0001920 Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Sat, 22 Feb 2020 21:32:41 -0600 Subject: [PATCH 014/131] Release notification changes --- src/App.js | 21 ++++++++++++++++-- src/assets/images/release_available.png | Bin 71729 -> 0 bytes .../ReleaseVersionDisplay.js | 2 +- src/components/UpgradeIcon/UpgradeIcon.css | 8 +++++-- src/components/UpgradeIcon/UpgradeIcon.js | 19 +++++++++++----- src/redux/actions/install_actions.js | 8 ++++++- src/redux/actions/release_version_actions.js | 5 +++++ src/redux/reducers/release_version_reducer.js | 7 ++++++ 8 files changed, 58 insertions(+), 12 deletions(-) delete mode 100644 src/assets/images/release_available.png diff --git a/src/App.js b/src/App.js index c34ca6e..5f570a8 100644 --- a/src/App.js +++ b/src/App.js @@ -14,6 +14,10 @@ import MountItems from './containers/MountItems/MountItems'; import NewReleases from './components/NewReleases/NewReleases'; import {notifyError} from './redux/actions/error_actions'; import Reboot from './components/Reboot/Reboot'; +import { + setDismissNewReleasesAvailable, + setNewReleasesAvailable +} from './redux/actions/release_version_actions'; import ReleaseVersionDisplay from './components/ReleaseVersionDisplay/ReleaseVersionDisplay'; import { displaySelectAppPlatform, @@ -73,6 +77,15 @@ class App extends IPCContainer { this.props.VersionLookup[Constants.RELEASE_TYPES[this.props.Release]][this.props.ReleaseVersion]; }; + handleUpgradeIconClicked = () => { + if (this.props.UpgradeAvailable) { + this.props.setDismissUIUpgrade(false) + } else if (this.props.NewReleasesAvailable2.length > 0) { + this.props.setNewReleasesAvailable(this.props.NewReleasesAvailable2); + this.props.setDismissNewReleasesAvailable(false); + } + }; + render() { const selectedVersion = this.getSelectedVersion(); @@ -177,8 +190,9 @@ class App extends IPCContainer { textAlign={'center'} type={'Heading1'}/> this.props.setDismissUIUpgrade(false)} + available={this.props.UpgradeAvailable || (this.props.NewReleasesAvailable2.length > 0)} + newReleases={!this.props.UpgradeAvailable && (this.props.NewReleasesAvailable2.length > 0)} + clicked={this.handleUpgradeIconClicked} col={dimensions => dimensions.columns - 6} colSpan={5} row={1} @@ -225,6 +239,7 @@ const mapStateToProps = state => { MissingDependencies: state.install.MissingDependencies, MountsBusy: state.mounts.MountsBusy, NewReleasesAvailable: state.relver.NewReleasesAvailable, + NewReleasesAvailable2: state.relver.NewReleasesAvailable2, Platform: state.common.Platform, ProviderState: state.mounts.ProviderState, RebootRequired: state.common.RebootRequired, @@ -243,6 +258,8 @@ const mapDispatchToProps = dispatch => { loadReleases: ()=> dispatch(loadReleases()), notifyError: (msg, critical, callback) => dispatch(notifyError(msg, critical, callback)), saveState: () => dispatch(saveState()), + setDismissNewReleasesAvailable: dismiss => dispatch(setDismissNewReleasesAvailable), + setNewReleasesAvailable: items => dispatch(setNewReleasesAvailable(items)), setDismissUIUpgrade: dismiss => dispatch(setDismissUIUpgrade(dismiss)), }; }; diff --git a/src/assets/images/release_available.png b/src/assets/images/release_available.png deleted file mode 100644 index 4dbba4cd0921295d2af0638f862dcd3dad97cc7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71729 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 S7&Su^OSLrgP=$ZqdicK_9Lv4{ diff --git a/src/components/ReleaseVersionDisplay/ReleaseVersionDisplay.js b/src/components/ReleaseVersionDisplay/ReleaseVersionDisplay.js index 71dadfe..d9e8149 100644 --- a/src/components/ReleaseVersionDisplay/ReleaseVersionDisplay.js +++ b/src/components/ReleaseVersionDisplay/ReleaseVersionDisplay.js @@ -143,4 +143,4 @@ export default connect(mapStateToProps, mapDispatchToProps)(props => { {optionsDisplay} ); -}); \ No newline at end of file +}); diff --git a/src/components/UpgradeIcon/UpgradeIcon.css b/src/components/UpgradeIcon/UpgradeIcon.css index fcc9e3c..0dce756 100644 --- a/src/components/UpgradeIcon/UpgradeIcon.css +++ b/src/components/UpgradeIcon/UpgradeIcon.css @@ -17,5 +17,9 @@ max-width: 100%; max-height: 100%; box-sizing: border-box; - opacity: 0.65; - } \ No newline at end of file + color: var(--heading_text_color); +} + +.UpgradeIcon.Release { + color: var(--heading_other_text_color); +} diff --git a/src/components/UpgradeIcon/UpgradeIcon.js b/src/components/UpgradeIcon/UpgradeIcon.js index 5b3af36..3828eef 100644 --- a/src/components/UpgradeIcon/UpgradeIcon.js +++ b/src/components/UpgradeIcon/UpgradeIcon.js @@ -1,13 +1,19 @@ import React from 'react'; import './UpgradeIcon.css'; -import availableImage from '../../assets/images/release_available.png'; import ReactTooltip from 'react-tooltip'; +import {faExclamationTriangle} from '@fortawesome/free-solid-svg-icons'; +import {FontAwesomeIcon} from '@fortawesome/react-fontawesome'; export default props => { + const styles = ['UpgradeIcon']; let placement = 'left'; let toolTipText = 'UI Upgrade Available'; if (props.release) { placement='bottom'; + styles.push('Release'); + } + + if (props.release || props.newReleases) { toolTipText = 'New Release Available'; } @@ -16,13 +22,14 @@ export default props => { (

- + + +

{toolTipText}
) : null; -}; \ No newline at end of file +}; diff --git a/src/redux/actions/install_actions.js b/src/redux/actions/install_actions.js index 48700c9..68fb3df 100644 --- a/src/redux/actions/install_actions.js +++ b/src/redux/actions/install_actions.js @@ -10,7 +10,8 @@ import { loadReleases, setActiveRelease, setInstalledVersion, - setReleaseUpgradeAvailable + setReleaseUpgradeAvailable, + setNewReleasesAvailable2, } from './release_version_actions'; import { confirmYesNo, @@ -224,6 +225,11 @@ export const installRelease = source => { FilePath: source, }); + if (arg.data.Success) { + localStorage.setItem('previous_releases', localStorage.getItem('releases')); + dispatch(setNewReleasesAvailable2([])); + } + dispatch(setInstallComplete(arg.data)); dispatch(checkVersionInstalled()); }; diff --git a/src/redux/actions/release_version_actions.js b/src/redux/actions/release_version_actions.js index e570313..595826a 100644 --- a/src/redux/actions/release_version_actions.js +++ b/src/redux/actions/release_version_actions.js @@ -14,6 +14,7 @@ import { } from './install_actions'; import {unmountAll} from './mount_actions'; import { + checkNewReleases, getIPCRenderer, getNewReleases } from '../../utils'; @@ -140,8 +141,11 @@ export const loadReleases = () => { dispatch(setNewReleasesAvailable(newReleases)); if (getState().relver.NewReleasesAvailable.length > 0) { + dispatch(setNewReleasesAvailable2(newReleases)); localStorage.setItem('previous_releases', storedReleases); dispatch(showWindow()); + } else if ((newReleases = checkNewReleases()).length > 0) { + dispatch(setNewReleasesAvailable2(newReleases)); } }).catch(error => { const releases = localStorage.getItem('releases'); @@ -193,6 +197,7 @@ export const setDismissNewReleasesAvailable = createAction('relver/setDismissNew export const setDismissUIUpgrade = createAction('relver/setDismissUIUpgrade'); export const setInstalledVersion = createAction('relver/setInstalledVersion'); export const setNewReleasesAvailable = createAction('relver/setNewReleasesAvailable'); +export const setNewReleasesAvailable2 = createAction('relver/setNewReleasesAvailable2'); export const SET_RELEASE_DATA = 'relver/setReleaseData'; export const setReleaseData = (locationsLookup, versionLookup)=> { diff --git a/src/redux/reducers/release_version_reducer.js b/src/redux/reducers/release_version_reducer.js index 52066ec..5946b7e 100644 --- a/src/redux/reducers/release_version_reducer.js +++ b/src/redux/reducers/release_version_reducer.js @@ -19,6 +19,7 @@ export const releaseVersionReducer = createReducer({ InstalledVersion: 'none', LocationsLookup: {}, NewReleasesAvailable: [], + NewReleasesAvailable2: [], Release: 0, ReleaseDefault: 0, ReleaseUpgradeAvailable: false, @@ -76,6 +77,12 @@ export const releaseVersionReducer = createReducer({ NewReleasesAvailable: action.payload, }; }, + [Actions.setNewReleasesAvailable2]: (state, action) => { + return { + ...state, + NewReleasesAvailable2: action.payload, + }; + }, [Actions.SET_RELEASE_DATA]: (state, action) => { return { ...state, From 365c116925b1f2321c1932530fb6609c69f2228e Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Sat, 22 Feb 2020 21:34:11 -0600 Subject: [PATCH 015/131] Updated ignore list --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index f2b4e6d..749a40d 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ build/ chrome_data/ dist/ /.cache +/temp.json From cc295376a28b44934a448d7a0479ee007f7e2833 Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Wed, 26 Feb 2020 14:27:40 -0600 Subject: [PATCH 016/131] Fix focus-trap --- src/App.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/App.js b/src/App.js index 5f570a8..abca3ba 100644 --- a/src/App.js +++ b/src/App.js @@ -140,7 +140,7 @@ class App extends IPCContainer { const configDisplay = createModalConditionally(showConfig, ); const confirmDisplay = createModalConditionally(this.props.DisplayConfirmYesNo, ); - const dependencyDisplay = createModalConditionally(showDependencies, ); + const dependencyDisplay = createModalConditionally(showDependencies, , false, this.props.InstallActive); const downloadDisplay = createModalConditionally(this.props.DownloadActive, , false, true); const errorDisplay = createModalConditionally(this.props.DisplayError, , true); const infoDisplay = createModalConditionally(this.props.DisplayInfo, , true); From 8e756620340d523ffaa1b2ffd2d9b32d3d0858ec Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Tue, 3 Mar 2020 12:15:11 -0600 Subject: [PATCH 017/131] Skynet changes --- CHANGELOG.md | 2 +- src/constants.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9f3bd4..4c773a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog ## 1.2.0 -* Goobox S3 support +* Skynet support ## 1.1.5 * \#38: Enhance new repertory release available notification diff --git a/src/constants.js b/src/constants.js index c08ab72..3ed4fbf 100644 --- a/src/constants.js +++ b/src/constants.js @@ -50,14 +50,14 @@ exports.DATA_LOCATIONS = { exports.PROVIDER_LIST = [ 'Sia', + 'Skynet', 'ScPrime', - 'GooboxS3' ]; exports.PROVIDER_ARG = { sia: '', + skynet: '-sk', scprime: '-sp', - gooboxs3: '-gb' }; exports.RELEASE_TYPES = [ From 8ab376a581a19f7b15817bb37aa604f01014a16d Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Tue, 3 Mar 2020 14:41:57 -0600 Subject: [PATCH 018/131] Don't check daemon version for Skynet and GooboxS3 --- src/containers/MountItems/MountItems.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/containers/MountItems/MountItems.js b/src/containers/MountItems/MountItems.js index c1d0757..bdd86b2 100644 --- a/src/containers/MountItems/MountItems.js +++ b/src/containers/MountItems/MountItems.js @@ -158,7 +158,7 @@ class MountItems extends IPCContainer { } else { let allowAction = true; if (mount) { - let result = remote ? + let result = remote || provider === "GooboxS3" || provider === "Skynet" ? {Valid: true, Success: true} : this.sendSyncRequest(Constants.IPC_Check_Daemon_Version, { Provider: provider, From 21176595107422ee731f906881030e088544735d Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Tue, 3 Mar 2020 16:05:27 -0600 Subject: [PATCH 019/131] Portal list configuration --- src/containers/Configuration/Configuration.js | 20 +++++++++++++------ .../ConfigurationItem/ConfigurationItem.css | 19 +++++++++++++++++- .../ConfigurationItem/ConfigurationItem.js | 16 ++++++++++++++- 3 files changed, 47 insertions(+), 8 deletions(-) diff --git a/src/containers/Configuration/Configuration.js b/src/containers/Configuration/Configuration.js index f8c30e9..8dbe35d 100644 --- a/src/containers/Configuration/Configuration.js +++ b/src/containers/Configuration/Configuration.js @@ -86,15 +86,19 @@ class Configuration extends IPCContainer { const itemList = Object .keys(config) .map(key => { - return { + const ret = { advanced: template[key] ? template[key].advanced : false, hide_remote: template[key] ? template[key].hide_remote : false, label: key, remote: template[key] ? template[key].remote : false, + type: template[key] ? template[key].type : null, value: (template[key] && (template[key].type === 'object')) ? config[key] : - config[key].toString(), + (template[key] && (template[key].type === 'string_array')) ? + config[key] : + config[key].toString(), }; + return ret; }) .filter(i=> { let ret = template[i.label]; @@ -114,7 +118,7 @@ class Configuration extends IPCContainer { const itemList = [ ...this.state.ItemList ]; - itemList[idx].value = target.value.toString(); + itemList[idx].value = target.type === 'textarea' ? target.string_array : target.value.toString(); this.setState({ ItemList: itemList }); @@ -128,7 +132,7 @@ class Configuration extends IPCContainer { ...this.state.ObjectLookup, }; - itemList[idx].value = target.value.toString(); + itemList[idx].value = target.type === 'textarea' ? target.string_array : target.value.toString(); objectLookup[name] = itemList; this.setState({ ObjectLookup: objectLookup, @@ -203,7 +207,9 @@ class Configuration extends IPCContainer { for (const item of this.state.ChangedItems) { changedItems.push({ Name: item.label, - Value: item.value, + Value: item.type === 'string_array' ? + item.value.join(';') : + item.value, }); } @@ -212,7 +218,9 @@ class Configuration extends IPCContainer { for (const item of this.state.ChangedObjectLookup[key]) { changedItems.push({ Name: key + '.' + item.label, - Value: item.value, + Value: item.type === 'string_array' ? + item.value.join(';') : + item.value, }); } } diff --git a/src/containers/Configuration/ConfigurationItem/ConfigurationItem.css b/src/containers/Configuration/ConfigurationItem/ConfigurationItem.css index d170a37..f0e7396 100644 --- a/src/containers/Configuration/ConfigurationItem/ConfigurationItem.css +++ b/src/containers/Configuration/ConfigurationItem/ConfigurationItem.css @@ -16,6 +16,23 @@ input.ConfigurationItemInput { box-sizing: border-box; } +textarea.ConfigurationItemInput { + display: block; + margin: 0; + padding: 2px; + border-radius: var(--border_radius); + background: rgba(160, 160, 160, 0.1); + border: none; + box-shadow: none; + outline: none; + color: var(--text_color); + box-sizing: border-box; + resize: none; + overflow-y: scroll; + overflow:-moz-scrollbars-horizontal; + white-space: nowrap; +} + .ConfigurationInfo { cursor: pointer; -} \ No newline at end of file +} diff --git a/src/containers/Configuration/ConfigurationItem/ConfigurationItem.js b/src/containers/Configuration/ConfigurationItem/ConfigurationItem.js index d46e9e5..ed0e1d8 100644 --- a/src/containers/Configuration/ConfigurationItem/ConfigurationItem.js +++ b/src/containers/Configuration/ConfigurationItem/ConfigurationItem.js @@ -19,6 +19,8 @@ export default connect(null, mapDispatchToProps)(props => { const target = e.target; if (target.type === 'checkbox') { target.value = e.target.checked ? 'true' : 'false'; + } else if (target.type === 'textarea') { + e.target.string_array = String(e.target.value).replace(/\r\n/g,'\n').split('\n'); } props.changed(target); }; @@ -118,6 +120,18 @@ export default connect(null, mapDispatchToProps)(props => { value={props.value}/>; break; + case 'string_array': + data = ( +