aboutsummaryrefslogtreecommitdiff
path: root/backends/cloud
diff options
context:
space:
mode:
Diffstat (limited to 'backends/cloud')
-rw-r--r--backends/cloud/cloudicon.cpp178
-rw-r--r--backends/cloud/cloudicon.h90
-rw-r--r--backends/cloud/cloudicon_data.h111
-rw-r--r--backends/cloud/cloudicon_disabled_data.h117
-rw-r--r--backends/cloud/cloudmanager.cpp24
-rw-r--r--backends/cloud/cloudmanager.h22
6 files changed, 541 insertions, 1 deletions
diff --git a/backends/cloud/cloudicon.cpp b/backends/cloud/cloudicon.cpp
new file mode 100644
index 0000000000..972efae57b
--- /dev/null
+++ b/backends/cloud/cloudicon.cpp
@@ -0,0 +1,178 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "backends/cloud/cloudicon.h"
+#include "common/memstream.h"
+#include "common/system.h"
+#include "image/png.h"
+
+namespace Cloud {
+
+const float CloudIcon::ALPHA_SPEED = 0.0005;
+const float CloudIcon::ALPHA_MAX = 1;
+const float CloudIcon::ALPHA_MIN = 0.6;
+
+CloudIcon::CloudIcon() {
+ initIcons();
+ hide();
+ _lastUpdateTime = g_system->getMillis();
+}
+
+CloudIcon::~CloudIcon() {
+ _icon.free();
+ _disabledIcon.free();
+ _alphaIcon.free();
+}
+
+void CloudIcon::show(CloudIcon::Type icon, int duration) {
+ if (_type == icon) {
+ return; // Nothing to do
+ }
+
+ if (icon != kNone) {
+ _state = kShown;
+ _type = icon;
+
+ if (duration) {
+ _hideTime = g_system->getMillis() + duration;
+ } else {
+ _hideTime = 0;
+ }
+ } else {
+ _state = kGoingToHide;
+ }
+}
+
+void CloudIcon::hide() {
+ _state = kHidden;
+ _type = kNone;
+ _hideTime = 0;
+ _currentAlpha = 0;
+ _alphaRising = true;
+}
+
+CloudIcon::Type CloudIcon::getShownType() const {
+ return _type;
+}
+
+bool CloudIcon::needsUpdate() const {
+ uint32 delaySinceLastUpdate = g_system->getMillis() - _lastUpdateTime;
+ return delaySinceLastUpdate >= UPDATE_DELAY_MIN_MILLIS;
+}
+
+void CloudIcon::update() {
+ uint32 currentTime = g_system->getMillis();
+ uint32 delaySinceLastUpdate = currentTime - _lastUpdateTime;
+ _lastUpdateTime = currentTime;
+
+ switch (_state) {
+ case kHidden:
+ return; // Nothing to do
+ case kShown:
+ if (_alphaRising) {
+ if (_currentAlpha < ALPHA_MIN)
+ _currentAlpha += 5 * ALPHA_SPEED * delaySinceLastUpdate;
+ else
+ _currentAlpha += ALPHA_SPEED * delaySinceLastUpdate;
+ if (_currentAlpha > ALPHA_MAX) {
+ _currentAlpha = ALPHA_MAX;
+ _alphaRising = false;
+ }
+ } else {
+ _currentAlpha -= ALPHA_SPEED * delaySinceLastUpdate;
+ if (_currentAlpha < ALPHA_MIN) {
+ _currentAlpha = ALPHA_MIN;
+ _alphaRising = true;
+ }
+ }
+
+ if (_hideTime != 0 && _hideTime <= currentTime) {
+ _hideTime = 0;
+ _state = kGoingToHide;
+ }
+ break;
+ case kGoingToHide:
+ _currentAlpha -= 5 * ALPHA_SPEED * delaySinceLastUpdate;
+ if (_currentAlpha <= 0) {
+ hide();
+ }
+ break;
+ }
+
+ if (_state != kHidden) {
+ makeAlphaIcon((_type == kDisabled ? _disabledIcon : _icon), _currentAlpha);
+ g_system->displayActivityIconOnOSD(&_alphaIcon);
+ } else {
+ g_system->displayActivityIconOnOSD(nullptr);
+ }
+}
+
+#include "backends/cloud/cloudicon_data.h"
+#include "backends/cloud/cloudicon_disabled_data.h"
+
+void CloudIcon::initIcons() {
+ loadIcon(_icon, cloudicon_data, ARRAYSIZE(cloudicon_data));
+ loadIcon(_disabledIcon, cloudicon_disabled_data, ARRAYSIZE(cloudicon_disabled_data));
+}
+
+void CloudIcon::loadIcon(Graphics::Surface &icon, byte *data, uint32 size) {
+ Image::PNGDecoder decoder;
+ Common::MemoryReadStream stream(data, size);
+ if (!decoder.loadStream(stream))
+ error("CloudIcon::loadIcon: error decoding PNG");
+
+ const Graphics::Surface *s = decoder.getSurface();
+ return icon.copyFrom(*s);
+}
+
+void CloudIcon::makeAlphaIcon(const Graphics::Surface &icon, float alpha) {
+ _alphaIcon.copyFrom(icon);
+
+ byte *pixels = (byte *)_alphaIcon.getPixels();
+ for (int y = 0; y < _alphaIcon.h; y++) {
+ byte *row = pixels + y * _alphaIcon.pitch;
+ for (int x = 0; x < _alphaIcon.w; x++) {
+ uint32 srcColor;
+ if (_alphaIcon.format.bytesPerPixel == 2)
+ srcColor = READ_UINT16(row);
+ else if (_alphaIcon.format.bytesPerPixel == 3)
+ srcColor = READ_UINT24(row);
+ else
+ srcColor = READ_UINT32(row);
+
+ // Update color's alpha
+ byte r, g, b, a;
+ _alphaIcon.format.colorToARGB(srcColor, a, r, g, b);
+ a = (byte)(a * alpha);
+ uint32 color = _alphaIcon.format.ARGBToColor(a, r, g, b);
+
+ if (_alphaIcon.format.bytesPerPixel == 2)
+ *((uint16 *)row) = color;
+ else
+ *((uint32 *)row) = color;
+
+ row += _alphaIcon.format.bytesPerPixel;
+ }
+ }
+}
+
+} // End of namespace Cloud
diff --git a/backends/cloud/cloudicon.h b/backends/cloud/cloudicon.h
new file mode 100644
index 0000000000..2b2f9cfd57
--- /dev/null
+++ b/backends/cloud/cloudicon.h
@@ -0,0 +1,90 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef BACKENDS_NETWORKING_CURL_CLOUDICON_H
+#define BACKENDS_NETWORKING_CURL_CLOUDICON_H
+
+#include "graphics/surface.h"
+
+namespace Cloud {
+
+class CloudIcon {
+public:
+ CloudIcon();
+ ~CloudIcon();
+
+ /**
+ * The type of cloud icon to show
+ */
+ enum Type {
+ kNone, /** Hide the currently shown icon if any */
+ kSyncing, /** Cloud syncing icon */
+ kDisabled /** Cloud syncing not available icon */
+ };
+
+ /**
+ * Select the icon to show on the OSD
+ *
+ * @param icon Icon type to show. Use kNone to hide the current icon if any.
+ * @param duration Duration in milliseconds the icon stays visible on screen. 0 means the icon stays indefinitely.
+ */
+ void show(Type icon, int duration = 0);
+
+ /** The currently visible icon. kNone means no icon is shown. */
+ Type getShownType() const;
+
+ /** Returns true if the icon state needs to be checked for changes */
+ bool needsUpdate() const;
+
+ /** Update the icon visible on the OSD */
+ void update();
+
+private:
+ static const float ALPHA_SPEED, ALPHA_MAX, ALPHA_MIN;
+ static const int UPDATE_DELAY_MIN_MILLIS = 10;
+
+ enum State {
+ kHidden,
+ kShown,
+ kGoingToHide
+ };
+
+ State _state;
+ Type _type;
+
+ Graphics::Surface _icon, _disabledIcon, _alphaIcon;
+ float _currentAlpha;
+ bool _alphaRising;
+
+ uint32 _hideTime;
+ uint32 _lastUpdateTime;
+
+ void initIcons();
+ void loadIcon(Graphics::Surface &icon, byte *data, uint32 size);
+ void makeAlphaIcon(const Graphics::Surface &icon, float alpha);
+
+ void hide();
+};
+
+} // End of namespace Cloud
+
+#endif
diff --git a/backends/cloud/cloudicon_data.h b/backends/cloud/cloudicon_data.h
new file mode 100644
index 0000000000..21d88182a3
--- /dev/null
+++ b/backends/cloud/cloudicon_data.h
@@ -0,0 +1,111 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+// This is a PNG file dumped into array.
+// $ recode data..d1 <dists/cloudicon.png >cloudicon_data.h
+// The tool is from https://github.com/pinard/Recode
+
+byte cloudicon_data[] = {
+ 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68,
+ 82, 0, 0, 0, 32, 0, 0, 0, 32, 8, 6, 0, 0, 0, 115,
+ 122, 122, 244, 0, 0, 0, 4, 115, 66, 73, 84, 8, 8, 8, 8,
+ 124, 8, 100, 136, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 11,
+ 18, 0, 0, 11, 18, 1, 210, 221, 126, 252, 0, 0, 0, 22, 116,
+ 69, 88, 116, 67, 114, 101, 97, 116, 105, 111, 110, 32, 84, 105, 109,
+ 101, 0, 48, 54, 47, 48, 51, 47, 49, 54, 159, 192, 233, 192, 0,
+ 0, 0, 28, 116, 69, 88, 116, 83, 111, 102, 116, 119, 97, 114, 101,
+ 0, 65, 100, 111, 98, 101, 32, 70, 105, 114, 101, 119, 111, 114, 107,
+ 115, 32, 67, 83, 54, 232, 188, 178, 140, 0, 0, 4, 50, 73, 68,
+ 65, 84, 88, 133, 197, 151, 109, 104, 150, 101, 20, 199, 127, 247, 227,
+ 179, 105, 51, 23, 65, 181, 150, 224, 154, 214, 132, 194, 249, 33, 165,
+ 22, 189, 231, 194, 210, 250, 16, 171, 180, 55, 42, 152, 68, 65, 100,
+ 52, 233, 5, 146, 144, 144, 26, 249, 169, 62, 164, 80, 89, 152, 25,
+ 18, 226, 42, 49, 87, 88, 180, 94, 96, 96, 246, 234, 180, 70, 50,
+ 66, 214, 55, 247, 22, 133, 247, 255, 244, 225, 58, 247, 158, 107, 143,
+ 219, 243, 60, 186, 192, 3, 135, 251, 220, 215, 117, 223, 231, 127, 238,
+ 235, 252, 239, 235, 58, 39, 105, 250, 206, 56, 147, 146, 55, 85, 252,
+ 108, 13, 112, 59, 176, 12, 88, 2, 204, 7, 230, 248, 220, 48, 208,
+ 15, 244, 2, 221, 64, 23, 48, 86, 137, 211, 228, 146, 158, 178, 43,
+ 80, 7, 172, 3, 218, 129, 179, 43, 241, 9, 140, 0, 155, 129, 87,
+ 128, 193, 146, 15, 47, 248, 178, 100, 0, 237, 64, 39, 112, 14, 96,
+ 174, 20, 217, 153, 228, 162, 0, 50, 25, 2, 58, 128, 45, 83, 1,
+ 228, 53, 121, 10, 170, 129, 183, 128, 213, 126, 47, 215, 49, 224, 39,
+ 224, 19, 160, 7, 56, 2, 204, 0, 154, 128, 27, 128, 229, 110, 215,
+ 120, 64, 181, 132, 149, 184, 30, 120, 4, 248, 183, 24, 40, 185, 248,
+ 243, 147, 86, 160, 154, 144, 195, 91, 252, 43, 5, 140, 2, 31, 2,
+ 27, 129, 195, 83, 125, 141, 75, 19, 240, 2, 129, 47, 179, 61, 144,
+ 4, 216, 7, 172, 44, 14, 34, 105, 232, 62, 41, 128, 109, 192, 189,
+ 14, 126, 2, 24, 0, 30, 3, 246, 150, 1, 46, 150, 54, 15, 184,
+ 1, 200, 251, 216, 123, 192, 253, 19, 2, 152, 183, 119, 66, 0, 237,
+ 192, 27, 110, 159, 0, 250, 128, 187, 128, 67, 167, 8, 158, 201, 98,
+ 224, 3, 160, 209, 131, 72, 128, 53, 68, 156, 200, 153, 192, 181, 206,
+ 68, 167, 219, 50, 49, 96, 226, 78, 19, 135, 162, 103, 138, 117, 169,
+ 137, 46, 19, 163, 38, 82, 19, 63, 152, 120, 220, 196, 12, 159, 63,
+ 104, 98, 149, 137, 99, 238, 211, 28, 163, 46, 243, 145, 147, 192, 117,
+ 157, 68, 173, 219, 195, 18, 143, 74, 28, 137, 230, 139, 181, 77, 162,
+ 71, 98, 165, 68, 141, 68, 78, 98, 145, 196, 107, 18, 59, 252, 30,
+ 137, 3, 18, 207, 72, 140, 249, 125, 173, 99, 33, 65, 114, 209, 110,
+ 131, 192, 218, 65, 2, 105, 4, 108, 245, 165, 74, 125, 165, 206, 5,
+ 214, 2, 151, 3, 7, 128, 119, 128, 95, 253, 189, 169, 228, 105, 224,
+ 85, 183, 171, 128, 29, 192, 29, 4, 82, 142, 18, 246, 151, 177, 164,
+ 126, 151, 1, 220, 3, 188, 79, 32, 222, 40, 97, 167, 235, 243, 151,
+ 207, 2, 190, 5, 154, 35, 231, 223, 0, 45, 101, 242, 127, 12, 152,
+ 75, 97, 191, 88, 12, 124, 237, 254, 18, 96, 21, 176, 35, 227, 192,
+ 50, 207, 15, 38, 126, 49, 113, 56, 202, 243, 221, 38, 154, 139, 114,
+ 223, 82, 130, 23, 153, 214, 155, 88, 20, 221, 255, 104, 226, 104, 116,
+ 223, 106, 42, 144, 112, 169, 137, 196, 131, 248, 56, 10, 166, 222, 196,
+ 141, 21, 128, 77, 165, 223, 155, 120, 42, 34, 246, 158, 200, 247, 18,
+ 19, 228, 21, 178, 60, 223, 151, 41, 1, 190, 112, 251, 60, 224, 171,
+ 104, 238, 116, 36, 33, 240, 224, 32, 240, 25, 176, 31, 120, 194, 199,
+ 27, 161, 112, 26, 102, 167, 154, 1, 127, 186, 253, 98, 9, 240, 81,
+ 2, 97, 43, 149, 231, 61, 128, 129, 104, 108, 78, 28, 64, 44, 25,
+ 105, 218, 74, 56, 156, 13, 252, 76, 248, 43, 42, 145, 140, 176, 249,
+ 226, 137, 188, 133, 20, 12, 123, 68, 9, 225, 171, 127, 7, 46, 40,
+ 227, 180, 82, 112, 128, 153, 126, 189, 148, 194, 105, 57, 12, 5, 18,
+ 246, 71, 68, 185, 214, 237, 191, 166, 65, 190, 98, 237, 243, 235, 205,
+ 209, 88, 127, 188, 19, 246, 250, 53, 39, 177, 194, 237, 157, 37, 118,
+ 193, 83, 213, 183, 37, 102, 73, 92, 39, 145, 196, 152, 57, 75, 193,
+ 82, 246, 249, 21, 75, 89, 104, 41, 205, 150, 178, 222, 82, 250, 163,
+ 241, 211, 213, 253, 150, 178, 201, 82, 174, 180, 148, 185, 150, 146, 248,
+ 120, 183, 165, 133, 20, 116, 153, 24, 113, 123, 150, 137, 103, 77, 28,
+ 55, 113, 141, 137, 173, 38, 134, 60, 61, 167, 178, 236, 3, 38, 54,
+ 152, 184, 213, 255, 253, 39, 221, 55, 142, 213, 101, 42, 252, 5, 99,
+ 132, 202, 101, 45, 97, 175, 94, 14, 172, 0, 118, 1, 15, 185, 78,
+ 71, 86, 19, 138, 217, 196, 117, 179, 99, 146, 204, 126, 125, 188, 30,
+ 168, 35, 236, 255, 181, 132, 3, 233, 15, 224, 54, 202, 87, 64, 229,
+ 164, 5, 216, 9, 92, 232, 224, 67, 192, 66, 188, 88, 205, 69, 185,
+ 26, 180, 148, 14, 207, 81, 206, 82, 230, 89, 202, 110, 75, 185, 108,
+ 26, 249, 191, 202, 82, 222, 181, 148, 243, 163, 220, 119, 56, 22, 150,
+ 78, 172, 7, 144, 216, 34, 177, 205, 237, 188, 196, 2, 137, 61, 18,
+ 15, 158, 6, 243, 31, 144, 216, 37, 209, 224, 190, 18, 137, 237, 142,
+ 49, 254, 92, 50, 115, 211, 164, 69, 233, 71, 64, 43, 140, 23, 165,
+ 127, 19, 26, 142, 231, 8, 117, 192, 84, 82, 69, 56, 118, 215, 3,
+ 55, 17, 54, 160, 172, 40, 253, 148, 80, 168, 78, 44, 74, 171, 59,
+ 39, 237, 11, 170, 129, 55, 129, 251, 40, 108, 205, 2, 254, 1, 126,
+ 243, 96, 122, 129, 163, 62, 223, 0, 92, 237, 160, 141, 17, 112, 38,
+ 219, 129, 135, 139, 193, 1, 146, 170, 151, 43, 106, 76, 106, 139, 198,
+ 229, 192, 73, 20, 96, 12, 152, 177, 253, 56, 101, 26, 147, 36, 191,
+ 177, 226, 214, 108, 13, 133, 214, 172, 220, 75, 35, 14, 90, 190, 53,
+ 203, 189, 84, 113, 119, 156, 53, 167, 173, 192, 21, 252, 95, 205, 105,
+ 178, 225, 204, 182, 231, 255, 1, 200, 91, 112, 221, 160, 249, 68, 42,
+ 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130
+};
diff --git a/backends/cloud/cloudicon_disabled_data.h b/backends/cloud/cloudicon_disabled_data.h
new file mode 100644
index 0000000000..4340a8a37c
--- /dev/null
+++ b/backends/cloud/cloudicon_disabled_data.h
@@ -0,0 +1,117 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+// This is a PNG file dumped into array.
+// $ recode data..d1 <dists/cloudicon_disabled.png >cloudicon_disabled_data.h
+// The tool is from https://github.com/pinard/Recode
+
+byte cloudicon_disabled_data[] = {
+ 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68,
+ 82, 0, 0, 0, 32, 0, 0, 0, 32, 8, 6, 0, 0, 0, 115,
+ 122, 122, 244, 0, 0, 0, 4, 115, 66, 73, 84, 8, 8, 8, 8,
+ 124, 8, 100, 136, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 11,
+ 18, 0, 0, 11, 18, 1, 210, 221, 126, 252, 0, 0, 0, 22, 116,
+ 69, 88, 116, 67, 114, 101, 97, 116, 105, 111, 110, 32, 84, 105, 109,
+ 101, 0, 48, 54, 47, 48, 51, 47, 49, 54, 159, 192, 233, 192, 0,
+ 0, 0, 28, 116, 69, 88, 116, 83, 111, 102, 116, 119, 97, 114, 101,
+ 0, 65, 100, 111, 98, 101, 32, 70, 105, 114, 101, 119, 111, 114, 107,
+ 115, 32, 67, 83, 54, 232, 188, 178, 140, 0, 0, 4, 139, 73, 68,
+ 65, 84, 88, 133, 197, 215, 91, 168, 86, 69, 20, 7, 240, 223, 254,
+ 244, 120, 236, 120, 57, 26, 94, 10, 31, 34, 35, 11, 36, 203, 74,
+ 212, 160, 204, 212, 110, 166, 248, 208, 205, 172, 151, 144, 136, 158, 82,
+ 80, 168, 32, 233, 165, 160, 32, 130, 236, 165, 34, 204, 74, 18, 52,
+ 36, 169, 232, 34, 24, 221, 243, 218, 133, 74, 77, 195, 44, 200, 91,
+ 122, 188, 156, 172, 102, 159, 221, 195, 204, 246, 219, 126, 231, 226, 17,
+ 138, 22, 12, 123, 246, 236, 153, 245, 95, 107, 205, 127, 205, 172, 157,
+ 21, 254, 95, 233, 27, 122, 63, 183, 5, 179, 48, 13, 87, 98, 52,
+ 6, 167, 111, 71, 176, 11, 27, 177, 14, 107, 209, 222, 27, 165, 217,
+ 137, 211, 207, 25, 137, 197, 152, 143, 65, 189, 209, 137, 163, 120, 1,
+ 79, 98, 111, 143, 147, 143, 247, 172, 108, 62, 158, 194, 16, 20, 169,
+ 105, 232, 151, 82, 171, 24, 80, 74, 27, 22, 225, 197, 110, 13, 104,
+ 235, 122, 188, 31, 94, 194, 93, 21, 192, 14, 49, 172, 223, 226, 109,
+ 124, 130, 29, 232, 131, 49, 184, 22, 55, 166, 126, 75, 131, 65, 175,
+ 225, 94, 252, 213, 201, 128, 131, 93, 131, 191, 137, 27, 42, 192, 199,
+ 241, 6, 158, 192, 246, 238, 188, 73, 50, 6, 143, 98, 78, 50, 164,
+ 140, 200, 123, 34, 135, 78, 49, 34, 219, 215, 89, 193, 171, 152, 151,
+ 192, 3, 246, 224, 1, 188, 123, 26, 224, 170, 92, 134, 143, 49, 160,
+ 50, 86, 96, 5, 238, 174, 78, 108, 204, 130, 249, 98, 216, 75, 240,
+ 109, 184, 13, 63, 156, 1, 248, 68, 44, 21, 189, 47, 165, 67, 140,
+ 196, 60, 172, 87, 225, 68, 182, 167, 62, 105, 100, 2, 106, 77, 11,
+ 118, 139, 123, 186, 163, 59, 164, 53, 76, 16, 195, 125, 29, 250, 15,
+ 227, 167, 73, 12, 237, 27, 73, 91, 75, 142, 28, 21, 185, 51, 60,
+ 141, 181, 225, 98, 41, 59, 106, 33, 185, 26, 88, 28, 104, 77, 253,
+ 163, 129, 251, 3, 59, 42, 223, 79, 105, 171, 184, 53, 240, 73, 224,
+ 150, 64, 203, 32, 106, 99, 185, 160, 224, 236, 16, 245, 118, 4, 54,
+ 5, 166, 4, 22, 6, 218, 211, 218, 214, 132, 37, 32, 75, 238, 181,
+ 224, 55, 12, 76, 222, 191, 140, 251, 144, 39, 79, 135, 98, 1, 198,
+ 98, 11, 150, 227, 251, 50, 204, 67, 113, 121, 90, 156, 57, 185, 127,
+ 135, 154, 184, 9, 95, 160, 9, 43, 49, 59, 69, 225, 24, 206, 65,
+ 123, 150, 54, 247, 14, 188, 158, 214, 30, 23, 79, 186, 109, 9, 252,
+ 44, 124, 142, 113, 149, 232, 127, 134, 201, 196, 88, 79, 66, 115, 5,
+ 252, 24, 182, 114, 224, 32, 35, 230, 212, 207, 139, 75, 241, 169, 168,
+ 47, 195, 157, 88, 89, 110, 193, 180, 64, 145, 250, 223, 5, 182, 87,
+ 194, 125, 123, 96, 92, 195, 22, 76, 14, 201, 227, 177, 226, 65, 144,
+ 227, 111, 28, 198, 151, 113, 131, 135, 5, 46, 169, 172, 249, 38, 176,
+ 187, 242, 62, 35, 160, 150, 199, 197, 19, 114, 178, 156, 34, 231, 173,
+ 244, 180, 154, 115, 115, 166, 166, 57, 167, 180, 193, 34, 3, 7, 165,
+ 61, 11, 137, 105, 27, 112, 160, 62, 111, 235, 106, 22, 166, 126, 71,
+ 206, 59, 165, 238, 156, 43, 114, 100, 155, 98, 120, 218, 146, 206, 2,
+ 83, 241, 225, 26, 134, 165, 253, 27, 173, 65, 134, 138, 137, 222, 154,
+ 222, 139, 228, 249, 87, 233, 217, 133, 76, 159, 19, 47, 169, 89, 226,
+ 129, 214, 71, 188, 192, 134, 148, 231, 64, 121, 171, 21, 248, 85, 244,
+ 232, 177, 30, 192, 59, 90, 82, 6, 193, 9, 108, 234, 30, 28, 30,
+ 9, 209, 128, 74, 214, 71, 204, 190, 121, 231, 201, 5, 228, 220, 218,
+ 248, 97, 136, 200, 246, 102, 106, 29, 234, 73, 190, 5, 135, 186, 7,
+ 135, 201, 9, 167, 111, 227, 135, 50, 2, 71, 146, 69, 153, 232, 245,
+ 206, 192, 136, 234, 196, 86, 49, 13, 154, 162, 113, 39, 211, 101, 51,
+ 126, 239, 25, 28, 154, 19, 206, 133, 234, 119, 195, 17, 234, 36, 220,
+ 85, 33, 202, 213, 169, 191, 175, 36, 92, 139, 152, 106, 3, 212, 9,
+ 119, 76, 100, 251, 126, 157, 9, 218, 69, 219, 150, 158, 211, 42, 99,
+ 187, 114, 245, 147, 112, 83, 122, 214, 2, 51, 83, 127, 85, 16, 89,
+ 62, 94, 60, 61, 202, 20, 58, 36, 38, 244, 126, 93, 159, 146, 93,
+ 180, 101, 129, 254, 129, 107, 2, 89, 26, 219, 24, 42, 6, 188, 95,
+ 153, 124, 81, 202, 251, 37, 3, 249, 101, 188, 120, 114, 148, 223, 219,
+ 197, 212, 56, 208, 123, 240, 245, 129, 167, 3, 19, 3, 163, 42, 6,
+ 172, 11, 234, 36, 92, 43, 242, 105, 32, 250, 227, 161, 89, 44, 45,
+ 98, 196, 139, 14, 178, 146, 112, 27, 210, 179, 23, 178, 7, 203, 240,
+ 248, 156, 152, 251, 15, 38, 221, 146, 138, 181, 212, 73, 216, 46, 214,
+ 112, 11, 82, 180, 103, 138, 71, 237, 40, 145, 52, 29, 216, 221, 194,
+ 220, 41, 49, 0, 103, 36, 129, 185, 152, 158, 116, 101, 9, 171, 29,
+ 178, 85, 245, 121, 213, 235, 184, 90, 215, 229, 248, 89, 172, 112, 190,
+ 62, 83, 112, 209, 145, 85, 226, 229, 147, 105, 188, 142, 43, 172, 220,
+ 155, 179, 40, 29, 201, 85, 6, 239, 204, 153, 155, 243, 117, 47, 216,
+ 222, 216, 38, 229, 188, 146, 51, 188, 162, 119, 81, 194, 82, 205, 130,
+ 178, 189, 24, 120, 173, 97, 108, 80, 34, 102, 111, 73, 87, 182, 123,
+ 2, 107, 2, 231, 133, 184, 213, 89, 96, 69, 194, 56, 57, 47, 91,
+ 222, 57, 100, 253, 68, 130, 92, 175, 94, 148, 254, 129, 15, 240, 176,
+ 88, 7, 116, 39, 77, 226, 181, 187, 68, 172, 146, 154, 69, 78, 101,
+ 98, 77, 57, 91, 99, 81, 250, 82, 215, 138, 202, 178, 188, 44, 78,
+ 37, 67, 254, 196, 143, 201, 152, 141, 98, 217, 86, 224, 60, 92, 149,
+ 64, 207, 175, 0, 151, 178, 66, 119, 101, 249, 243, 61, 184, 163, 254,
+ 99, 210, 218, 48, 94, 94, 5, 101, 13, 162, 1, 176, 100, 251, 97,
+ 167, 249, 49, 233, 115, 179, 250, 111, 78, 23, 109, 115, 193, 178, 130,
+ 62, 5, 151, 20, 52, 23, 241, 76, 200, 10, 106, 149, 103, 173, 50,
+ 158, 21, 28, 45, 120, 174, 96, 110, 193, 71, 61, 232, 151, 61, 219,
+ 115, 4, 170, 82, 254, 156, 206, 16, 47, 197, 127, 231, 231, 244, 153,
+ 222, 27, 240, 159, 200, 63, 153, 185, 24, 191, 162, 246, 71, 153, 0,
+ 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130
+};
diff --git a/backends/cloud/cloudmanager.cpp b/backends/cloud/cloudmanager.cpp
index 3456b99ab7..5f7d6942ca 100644
--- a/backends/cloud/cloudmanager.cpp
+++ b/backends/cloud/cloudmanager.cpp
@@ -45,6 +45,8 @@ const char *const CloudManager::kStoragePrefix = "storage_";
CloudManager::CloudManager() : _currentStorageIndex(0), _activeStorage(nullptr) {}
CloudManager::~CloudManager() {
+ g_system->getEventManager()->getEventDispatcher()->unregisterSource(this);
+
delete _activeStorage;
freeStorages();
}
@@ -108,6 +110,8 @@ void CloudManager::init() {
_currentStorageIndex = ConfMan.getInt("current_storage", ConfMan.kCloudDomain);
loadStorage();
+
+ g_system->getEventManager()->getEventDispatcher()->registerSource(this, false);
}
void CloudManager::save() {
@@ -383,6 +387,10 @@ void CloudManager::setSyncTarget(GUI::CommandReceiver *target) const {
storage->setSyncTarget(target);
}
+void CloudManager::showCloudDisabledIcon() {
+ _icon.show(CloudIcon::kDisabled, 3000);
+}
+
///// DownloadFolderRequest-related /////
bool CloudManager::startDownload(Common::String remotePath, Common::String localPath) const {
@@ -453,4 +461,20 @@ Common::String CloudManager::getDownloadLocalDirectory() const {
return "";
}
+bool CloudManager::pollEvent(Common::Event &event) {
+ if (_icon.needsUpdate()) {
+ if (_icon.getShownType() != CloudIcon::kDisabled) {
+ if (isWorking()) {
+ _icon.show(CloudIcon::kSyncing);
+ } else {
+ _icon.show(CloudIcon::kNone);
+ }
+ }
+
+ _icon.update();
+ }
+
+ return false;
+}
+
} // End of namespace Cloud
diff --git a/backends/cloud/cloudmanager.h b/backends/cloud/cloudmanager.h
index 8a99d5bebb..f58ea8373a 100644
--- a/backends/cloud/cloudmanager.h
+++ b/backends/cloud/cloudmanager.h
@@ -24,9 +24,12 @@
#define CLOUD_CLOUDMANAGER_H
#include "backends/cloud/storage.h"
+#include "backends/cloud/cloudicon.h"
+
#include "common/array.h"
#include "common/singleton.h"
#include "common/str-array.h"
+#include "common/events.h"
namespace GUI {
@@ -47,7 +50,7 @@ enum StorageID {
kStorageTotal
};
-class CloudManager : public Common::Singleton<CloudManager> {
+class CloudManager : public Common::Singleton<CloudManager>, public Common::EventSource {
static const char *const kStoragePrefix;
struct StorageConfig {
@@ -61,6 +64,8 @@ class CloudManager : public Common::Singleton<CloudManager> {
Storage *_activeStorage;
Common::Array<Storage *> _storagesToRemove;
+ CloudIcon _icon;
+
void loadStorage();
Common::String getStorageConfigName(uint32 index) const;
@@ -71,6 +76,18 @@ class CloudManager : public Common::Singleton<CloudManager> {
/** Calls the error callback with a special "no storage connected" message. */
void passNoStorageConnected(Networking::ErrorCallback errorCallback) const;
+ /**
+ * Common::EventSource interface
+ *
+ * The cloud manager registers itself as an event source even if does not
+ * actually produce events as a mean to be polled periodically by the GUI
+ * or engine code.
+ *
+ * The periodical polling is used to update the OSD icon indicating
+ * background sync activity.
+ */
+ virtual bool pollEvent(Common::Event &event) override;
+
public:
CloudManager();
virtual ~CloudManager();
@@ -233,6 +250,9 @@ public:
/** Sets SavesSyncRequest's target to given CommandReceiver. */
void setSyncTarget(GUI::CommandReceiver *target) const;
+ /** Shows a "cloud disabled" icon for three seconds. */
+ void showCloudDisabledIcon();
+
///// DownloadFolderRequest-related /////
/** Starts a folder download. */