Added export feature

This commit is contained in:
tom5079
2019-06-06 00:45:33 +09:00
parent bcd515b2db
commit 6f8697791d
12 changed files with 198 additions and 20 deletions

View File

@@ -4,6 +4,7 @@ import android.app.PendingIntent
import android.content.Context
import android.content.ContextWrapper
import android.content.Intent
import android.os.Environment
import android.util.SparseArray
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
@@ -20,9 +21,12 @@ import xyz.quaver.pupil.Pupil
import xyz.quaver.pupil.R
import xyz.quaver.pupil.ReaderActivity
import java.io.File
import java.io.FileInputStream
import java.io.FileOutputStream
import java.net.URL
import java.util.*
import java.util.zip.ZipEntry
import java.util.zip.ZipOutputStream
import javax.net.ssl.HttpsURLConnection
import kotlin.collections.ArrayList
import kotlin.concurrent.schedule
@@ -284,4 +288,69 @@ class GalleryDownloader(
notificationManager = NotificationManagerCompat.from(this)
}
fun export(onSuccess: (() -> Unit)? = null, onError: (() -> Unit)? = null) {
val images = File(ContextCompat.getDataDir(this), "images/${galleryBlock.id}/images").let {
when {
it.exists() -> it
else -> File(cacheDir, "imageCache/${galleryBlock.id}/images")
}
}
if (!images.exists())
return
CoroutineScope(Dispatchers.Default).launch {
val preference = PreferenceManager.getDefaultSharedPreferences(this@GalleryDownloader)
val zip = preference.getBoolean("export_zip", false)
if (zip) {
var target = File(Environment.getExternalStorageDirectory(), "Pupil/${galleryBlock.id} ${galleryBlock.title}.zip")
try {
target.createNewFile()
} catch (e: IOException) {
target = File(Environment.getExternalStorageDirectory(), "Pupil/${galleryBlock.id}.zip")
try {
target.createNewFile()
} catch (e: IOException) {
onError?.invoke()
return@launch
}
}
FileOutputStream(target).use { targetStream ->
ZipOutputStream(targetStream).use { zipStream ->
images.listFiles().forEach {
zipStream.putNextEntry(ZipEntry(it.name))
FileInputStream(it).use { fileStream ->
fileStream.copyTo(zipStream)
}
}
}
}
} else {
var target = File(Environment.getExternalStorageDirectory(), "Pupil/${galleryBlock.id} ${galleryBlock.title}")
try {
target.canonicalPath
} catch (e: IOException) {
target = File(Environment.getExternalStorageDirectory(), "Pupil/${galleryBlock.id}")
try {
target.canonicalPath
} catch (e: IOException) {
onError?.invoke()
return@launch
}
}
images.copyRecursively(target, true)
}
onSuccess?.invoke()
}
}
}