Skip to content
Snippets Groups Projects
Commit daf12104 authored by Matyáš Latner's avatar Matyáš Latner
Browse files

#17 Downloading assets package for selected language

parent 493534ef
Branches
Tags
No related merge requests found
......@@ -163,13 +163,13 @@ task zipAssets(dependsOn: [prepareSoundAssets, prepareGraphicAssets]) {
}
}
task uploadAssets(dependsOn: ':util:checksum:runAssetsArchivesChecksum') {
task uploadAssets(dependsOn: [':util:checksum:runChecksum', 'zipAssets']) {
doLast {
def data = new URL(ASSETS_DOWNLOAD_URL).getText()
rootProject.ext.assetsPackDir.eachFile() { file ->
String fileName = file.getName()
String[] fileNameParts = fileName.split("\\.");
String packageName = "${fileNameParts[0]}_${assetsPackageChecksum[fileName]}.${fileNameParts[1]}";
String packageName = "${fileNameParts[0]}_${assetsChecksum[fileNameParts[0]]}.${fileNameParts[1]}";
if (!data.contains(packageName)) {
println "AssetsUploader: FILE: ${packageName} DO NOT EXISTS ON SERVER -> UPLOADING FILE"
......@@ -297,6 +297,7 @@ project(":core") {
apply plugin: "java"
sourceSets.test.java.srcDirs = ["test/"]
tasks.processResources.dependsOn ':util:checksum:runChecksum'
dependencies {
compile project(":util:checksum")
......
......@@ -44,6 +44,14 @@ public class ZipAssetLoader extends TablexiaDataManager<Void> implements IApplic
private static final Object LOCK = new Object();
private static boolean downloadResult = false;
private static Long startTime = null;
public void load(Locale locale, Map<String, String> buildChecksum) {
setAsyncTask(new ZipAssetLoaderTask(locale, buildChecksum));
}
private static class ZipAssetLoaderTask implements AsyncTask<Void> {
private Locale locale;
......@@ -54,48 +62,59 @@ public class ZipAssetLoader extends TablexiaDataManager<Void> implements IApplic
this.buildChecksums = buildChecksums;
}
private boolean checkAssets(String buildChecksum, String extractDestinationDirectory) {
File file = new File(extractDestinationDirectory);
if (file.exists() && file.isDirectory()) {
try {
String runtimeChecksum = Checksum.getMd5OfDir(file);
Log.debug(getClass(), "Comparing assets checksums: [BUILD: " + buildChecksum + "] - [RUNTIME: " + runtimeChecksum + "]");
return runtimeChecksum.equals(buildChecksum);
} catch (NoSuchAlgorithmException e) {
Log.err(getClass(), "Cannot get checksum for assets!", e);
} catch (IOException e) {
Log.err(getClass(), "Cannot get checksum for assets!", e);
}
}
return false;
}
@Override
public Void call() throws Exception {
String language = locale.getLanguage();
String extractDestinationDirectory = TablexiaAbstractFileManager.getFileStoragePath(TablexiaAbstractFileManager.AssetsStorageType.EXTERNAL);
Long startTime = null;
if (TablexiaSettings.getInstance().isDebug()) {
startTime = System.nanoTime();
}
prepareKeyStore();
download("cs.zip");
download("sk.zip");
// check current content
if (buildChecksums != null) {
String buildChecksum = buildChecksums.get(language);
if (buildChecksum != null) {
// check current content
Log.info(ZipAssetLoader.class, "Assets check started...");
startTimer();
boolean checksumResult = checkAssets((buildChecksum), extractDestinationDirectory);
if (startTime != null) {
Log.debug(getClass(), String.format("Checksum delay: %05f s", (System.nanoTime() - startTime) / 1000000000.0));
}
resultTimer("Assets check delay");
if (checksumResult) {
Log.info(getClass(), "Assets check OK! --> Continue to loading");
Log.info(ZipAssetLoader.class, "Assets check OK!");
Log.info(ZipAssetLoader.class, "Continue to loading");
return null;
}
Log.info(ZipAssetLoader.class, "Assets check FAILED!");
String assetsPackageName = language + "_" + buildChecksum + ZIP_FILE_EXTENSION;
FileHandle assetsPackageFileHandle = TablexiaAbstractFileManager.getFileStoragePathFileHandle(ZIP_FILES_STORAGE_TYPE, assetsPackageName);
// download assets package
if (!assetsPackageFileHandle.exists()) {
Log.info(ZipAssetLoader.class, String.format("Assets package with name %s not found!", assetsPackageName));
Log.info(ZipAssetLoader.class, String.format("Downloading assets package: %s", assetsPackageName));
prepareKeyStore();
startTimer();
download(assetsPackageName);
resultTimer("Download delay");
}
// delete modified or old content
File eddFile = new File(extractDestinationDirectory);
if (eddFile.exists()) {
Log.info(ZipAssetLoader.class, "Found invalid assets content!");
Log.info(ZipAssetLoader.class, String.format("Deleting content under: %s", extractDestinationDirectory));
startTimer();
deleteDirectory(eddFile);
resultTimer("Delete delay");
}
// extract new content
Log.info(ZipAssetLoader.class, String.format("Extracting new content to: %s", extractDestinationDirectory));
startTimer();
unzip(assetsPackageFileHandle, extractDestinationDirectory);
resultTimer("Extract delay");
} else {
Log.err(getClass(), "BUILD CHECKSUM: no build checksum specified for language " + language);
}
......@@ -103,28 +122,30 @@ public class ZipAssetLoader extends TablexiaDataManager<Void> implements IApplic
Log.err(getClass(), "BUILD CHECKSUM: no build checksum specified");
}
if (TablexiaSettings.getInstance().isDebug()) {
startTime = System.nanoTime();
}
return null;
}
// delete modified or old content
File eddFile = new File(extractDestinationDirectory);
if (eddFile.exists()) {
Log.info(getClass(), "Assets check FAILED! --> Deleting content under: " + extractDestinationDirectory);
deleteDirectory(eddFile);
}
// extract new content
Log.info(getClass(), "Assets check FAILED! --> Extracting new assets to: " + extractDestinationDirectory);
String localisedZipFile = language + ZIP_FILE_EXTENSION;
unzip(ZIP_FILES_STORAGE_TYPE.getResolver().resolve(ZIP_FILES_STORAGE_TYPE.getStoragePath() + localisedZipFile), extractDestinationDirectory);
//////////////////////////// CHECK
if (startTime != null) {
Log.debug(getClass(), String.format("Unzip delay: %05f s", (System.nanoTime() - startTime) / 1000000000.0));
private boolean checkAssets(String buildChecksum, String extractDestinationDirectory) {
File file = new File(extractDestinationDirectory);
if (file.exists() && file.isDirectory()) {
try {
String runtimeChecksum = Checksum.getMd5OfDir(file);
Log.debug(ZipAssetLoader.class, "Comparing assets checksums: [BUILD: " + buildChecksum + "] - [RUNTIME: " + runtimeChecksum + "]");
return runtimeChecksum.equals(buildChecksum);
} catch (NoSuchAlgorithmException e) {
Log.err(getClass(), "Cannot get checksum for assets!", e);
} catch (IOException e) {
Log.err(getClass(), "Cannot get checksum for assets!", e);
}
}
return false;
}
return null;
}
//////////////////////////// DOWNLOAD
private void prepareKeyStore() {
FileHandle keystoreExternal = TablexiaAbstractFileManager.getFileStoragePathFileHandle(TablexiaAbstractFileManager.KeystoreStorageType.EXTERNAL, TABLEXIA_TRUST_KEYSTORE_NAME);
......@@ -135,7 +156,7 @@ public class ZipAssetLoader extends TablexiaDataManager<Void> implements IApplic
System.setProperty("javax.net.ssl.trustStorePassword", TABLEXIA_TRUST_KEYSTORE_PASSWORD);
}
public void download(final String fileName) {
public boolean download(final String fileName) {
Net.HttpRequest request = new Net.HttpRequest(Net.HttpMethods.GET);
request.setTimeOut(TABLEXIA_ASSETS_DOWNLOAD_TIMEOUT);
......@@ -162,11 +183,12 @@ public class ZipAssetLoader extends TablexiaDataManager<Void> implements IApplic
ApplicationBus.getInstance().post(new AbstractTablexiaScreen.ScreenInfoEvent("Downloading: ", fileName + " [ " + progress + "% ]")).asynchronously();
}
downloadResult = true;
// download complete
synchronized (LOCK) {
LOCK.notify();
}
} catch (IOException e) {
Log.err(ZipAssetLoader.class, "Cannot download file: " + fileName + " !", e);
}
......@@ -175,11 +197,19 @@ public class ZipAssetLoader extends TablexiaDataManager<Void> implements IApplic
@Override
public void failed(Throwable t) {
Log.err(ZipAssetLoader.class, "Downloading of file: " + fileName + " Failed!", t);
downloadResult = false;
synchronized (LOCK) {
LOCK.notify();
}
}
@Override
public void cancelled() {
Log.info(ZipAssetLoader.class, "Downloading of file: " + fileName + " Canceled!");
downloadResult = false;
synchronized (LOCK) {
LOCK.notify();
}
}
});
......@@ -191,8 +221,13 @@ public class ZipAssetLoader extends TablexiaDataManager<Void> implements IApplic
Log.err(ZipAssetLoader.class, "Cannot wait to download end!", e);
}
}
return downloadResult;
}
//////////////////////////// EXTRACT
public static void unzip(FileHandle zipFile, String extractDestinationDirectory) throws IOException {
ZipInputStream zipInputStream = new ZipInputStream(new BufferedInputStream(zipFile.read()));
try {
......@@ -245,9 +280,20 @@ public class ZipAssetLoader extends TablexiaDataManager<Void> implements IApplic
return(directory.delete());
}
}
public void load(Locale locale, Map<String, String> buildChecksum) {
setAsyncTask(new ZipAssetLoaderTask(locale, buildChecksum));
}
//////////////////////////// TIMER
public static void startTimer() {
if (TablexiaSettings.getInstance().isDebug()) {
startTime = System.nanoTime();
}
}
public static void resultTimer(String message) {
if (startTime != null) {
Log.debug(ZipAssetLoader.class, String.format("%s: %05f s", message, (System.nanoTime() - startTime) / 1000000000.0));
}
}
}
\ No newline at end of file
......@@ -24,23 +24,3 @@ task runChecksum(dependsOn: [classes, rootProject.tasks.prepareSoundAssets, root
}
}
}
task runAssetsArchivesChecksum(dependsOn: [classes, rootProject.tasks.zipAssets]) {
doLast {
rootProject.ext.assetsPackDir.eachFile() { file ->
String fileName = file.getName()
task ("${name}_${fileName}", type: JavaExec) {
main = MAIN_CLASS
args = [file]
classpath sourceSets.main.output.classesDir
classpath += sourceSets.main.runtimeClasspath
def stdout = new ByteArrayOutputStream()
standardOutput = stdout
doLast {
rootProject.ext.assetsPackageChecksum[fileName] = stdout.toString().trim()
}
}.execute()
}
}
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment