/* Minetest Copyright (C) 2014-2020 MoNTE48, Maksim Gamarnik Copyright (C) 2014-2020 ubulem, Bektur Mambetov This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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. */ package net.minetest.minetest; import android.content.Context; import android.content.Intent; import android.os.AsyncTask; import android.util.Log; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.ref.WeakReference; public class CopyZipTask extends AsyncTask { private final WeakReference contextRef; CopyZipTask(Context context) { contextRef = new WeakReference<>(context); } protected String doInBackground(String... params) { copyAssets(params); return params[0]; } @Override protected void onPostExecute(String result) { startUnzipService(result); } private void copyAsset(String zipName) throws IOException { String filename = zipName.substring(zipName.lastIndexOf("/") + 1); try (InputStream in = contextRef.get().getAssets().open(filename); OutputStream out = new FileOutputStream(zipName)) { copyFile(in, out); } } private void copyAssets(String[] zips) { try { for (String zipName : zips) copyAsset(zipName); } catch (IOException e) { Log.e("CopyZipTask", e.getLocalizedMessage()); cancel(true); } } private void copyFile(InputStream in, OutputStream out) throws IOException { byte[] buffer = new byte[1024]; int read; while ((read = in.read(buffer)) != -1) out.write(buffer, 0, read); } private void startUnzipService(String file) { Intent intent = new Intent(contextRef.get(), UnzipService.class); intent.putExtra(UnzipService.EXTRA_KEY_IN_FILE, file); contextRef.get().startService(intent); } }