summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-02-03 22:13:28 +0300
committerAndrei Karas <akaras@inbox.ru>2015-02-03 22:13:28 +0300
commit527d9d1aea2b840e98dd0976f7bd3426703a886a (patch)
treeb08af3a0162083b5208ada49e98b2d4a81e93230
parent8f7f5129c39107aca1e5166be91940cdc073bb8e (diff)
downloadplus-527d9d1aea2b840e98dd0976f7bd3426703a886a.tar.gz
plus-527d9d1aea2b840e98dd0976f7bd3426703a886a.tar.bz2
plus-527d9d1aea2b840e98dd0976f7bd3426703a886a.tar.xz
plus-527d9d1aea2b840e98dd0976f7bd3426703a886a.zip
Fix compilation for Android with SDL2.
-rw-r--r--src/client.cpp33
-rw-r--r--src/client.h6
-rw-r--r--src/dirs.cpp87
-rw-r--r--src/dirs.h6
4 files changed, 96 insertions, 36 deletions
diff --git a/src/client.cpp b/src/client.cpp
index f433746e0..198fadc1d 100644
--- a/src/client.cpp
+++ b/src/client.cpp
@@ -161,12 +161,6 @@
#include "debug.h"
-#ifdef ANDROID
-#ifdef USE_SDL2
-int loadingProgressCounter = 1;
-#endif
-#endif
-
std::string errorMessage;
LoginData loginData;
@@ -556,27 +550,6 @@ void Client::initGraphics()
mainGraphics->beginDraw();
}
-#ifdef ANDROID
-#ifdef USE_SDL2
-static void updateProgress(int cnt)
-{
- const int progress = cnt + loadingProgressCounter;
- const int h = mainGraphics->mHeight;
- mainGraphics->setColor(Color(255, 255, 255));
- const int maxSize = mainGraphics->mWidth - 100;
- const int width = maxSize * progress / 450;
- mainGraphics->fillRectangle(Rect(50, h - 100, width, 50));
- mainGraphics->updateScreen();
-}
-
-static void setProgress(const int val)
-{
- loadingProgressCounter = val;
- updateProgress(loadingProgressCounter);
-}
-#endif
-#endif
-
void Client::setEnv(const char *const name, const char *const value)
{
if (!name || !value)
@@ -1813,6 +1786,7 @@ void Client::logVars()
#ifdef ANDROID
#ifdef USE_SDL2
+/*
void Client::extractAssets()
{
if (!getenv("APPDIR"))
@@ -1840,7 +1814,7 @@ void Client::extractAssets()
logger->log("asset size: %d", size2);
fwrite(buf, 1, size2, file);
SDL_RWclose(rw);
- setProgress(loadingProgressCounter + 1);
+ Dirs::setProgress();
}
else
{
@@ -1859,11 +1833,12 @@ void Client::extractAssets()
int size2 = SDL_RWread(rw, buf, 1, size);
fwrite(buf, 1, size2, file2);
SDL_RWclose(rw);
- setProgress(loadingProgressCounter + 1);
+ setProgress();
}
fclose(file2);
delete [] buf;
}
+*/
#endif
#endif
diff --git a/src/client.h b/src/client.h
index 29dca9ad7..06c261eb2 100644
--- a/src/client.h
+++ b/src/client.h
@@ -120,12 +120,6 @@ class Client final : public ConfigListener,
static void logVars();
-#ifdef ANDROID
-#ifdef USE_SDL2
- static void extractAssets();
-#endif
-#endif
-
ServerInfo mCurrentServer;
Game *mGame;
diff --git a/src/dirs.cpp b/src/dirs.cpp
index 5f68bb449..94067420b 100644
--- a/src/dirs.cpp
+++ b/src/dirs.cpp
@@ -55,6 +55,91 @@
#define _nacl_dir std::string("/persistent/manaplus")
#endif
+#ifdef ANDROID
+#ifdef USE_SDL2
+#include "render/graphics.h"
+
+int loadingProgressCounter = 1;
+
+static void updateProgress(int cnt)
+{
+ const int progress = cnt + loadingProgressCounter;
+ const int h = mainGraphics->mHeight;
+ mainGraphics->setColor(Color(255, 255, 255));
+ const int maxSize = mainGraphics->mWidth - 100;
+ const int width = maxSize * progress / 450;
+ mainGraphics->fillRectangle(Rect(50, h - 100, width, 50));
+ mainGraphics->updateScreen();
+}
+
+void Dirs::setProgress()
+{
+ loadingProgressCounter++;
+ updateProgress(loadingProgressCounter);
+}
+
+static void resetProgress()
+{
+ loadingProgressCounter = 0;
+ updateProgress(loadingProgressCounter);
+}
+
+void extractAssets()
+{
+ if (!getenv("APPDIR"))
+ {
+ logger->log("error: APPDIR is not set!");
+ return;
+ }
+ const std::string fileName = std::string(getenv(
+ "APPDIR")).append("/data.zip");
+ logger->log("Extracting asset into: " + fileName);
+ uint8_t *buf = new uint8_t[1000000];
+
+ FILE *const file = fopen(fileName.c_str(), "w");
+ for (int f = 0; f < 100; f ++)
+ {
+ std::string part = strprintf("manaplus-data.zip%u%u",
+ static_cast<unsigned int>(f / 10),
+ static_cast<unsigned int>(f % 10));
+ logger->log("testing asset: " + part);
+ SDL_RWops *const rw = SDL_RWFromFile(part.c_str(), "r");
+ if (rw)
+ {
+ const int size = SDL_RWsize(rw);
+ int size2 = SDL_RWread(rw, buf, 1, size);
+ logger->log("asset size: %d", size2);
+ fwrite(buf, 1, size2, file);
+ SDL_RWclose(rw);
+ Dirs::setProgress();
+ }
+ else
+ {
+ break;
+ }
+ }
+ fclose(file);
+
+ const std::string fileName2 = std::string(getenv(
+ "APPDIR")).append("/locale.zip");
+ FILE *const file2 = fopen(fileName2.c_str(), "w");
+ SDL_RWops *const rw = SDL_RWFromFile("manaplus-locale.zip", "r");
+ if (rw)
+ {
+ const int size = SDL_RWsize(rw);
+ int size2 = SDL_RWread(rw, buf, 1, size);
+ fwrite(buf, 1, size2, file2);
+ SDL_RWclose(rw);
+ Dirs::setProgress();
+ }
+ fclose(file2);
+
+ delete [] buf;
+}
+
+#endif
+#endif
+
void Dirs::updateDataPath()
{
if (settings.options.dataPath.empty()
@@ -78,7 +163,7 @@ void Dirs::extractDataDir()
#ifdef ANDROID
#ifdef USE_SDL2
Files::setCopyCallBack(&updateProgress);
- setProgress(0);
+ resetProgress();
extractAssets();
const std::string zipName = std::string(getenv(
diff --git a/src/dirs.h b/src/dirs.h
index 25c1beb89..95a5fd9e7 100644
--- a/src/dirs.h
+++ b/src/dirs.h
@@ -49,6 +49,12 @@ class Dirs final
static void initUpdatesDir();
static void initScreenshotDir();
+
+#ifdef ANDROID
+#ifdef USE_SDL2
+ static void setProgress();
+#endif
+#endif
};
#endif // DIRS_H