ReaderScreen saveToImage
This commit is contained in:
1 parent
28160608ec
commit
ae25018574
2 files changed
+22
-1
No files matched your search
@@ -9,6 +9,7 @@ import android.net.Uri
|
||||
import android.os.Environment
|
||||
import android.provider.MediaStore
|
||||
import android.webkit.MimeTypeMap
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.compose.material3.SnackbarHostState
|
||||
import androidx.core.content.FileProvider
|
||||
import com.hippo.ehviewer.BuildConfig.APPLICATION_ID
|
||||
@@ -18,14 +19,17 @@ import com.hippo.ehviewer.client.data.GalleryInfo
|
||||
import com.hippo.ehviewer.gallery.PageLoader2
|
||||
import com.hippo.ehviewer.util.AppConfig
|
||||
import com.hippo.ehviewer.util.FileUtils
|
||||
import com.hippo.ehviewer.util.awaitActivityResult
|
||||
import com.hippo.ehviewer.util.isAtLeastQ
|
||||
import com.hippo.ehviewer.util.isAtLeastT
|
||||
import com.hippo.ehviewer.util.requestPermission
|
||||
import com.hippo.unifile.asUniFile
|
||||
import com.hippo.unifile.displayPath
|
||||
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
|
||||
import eu.kanade.tachiyomi.util.system.logcat
|
||||
import java.io.File
|
||||
import kotlinx.datetime.Clock
|
||||
import moe.tarsin.coroutines.runSuspendCatching
|
||||
import splitties.systemservices.clipboardManager
|
||||
|
||||
context(PageLoader2)
|
||||
@@ -125,3 +129,20 @@ suspend fun save(page: ReaderPage) {
|
||||
showSnackbar(getString(R.string.permission_denied))
|
||||
}
|
||||
}
|
||||
|
||||
context(SnackbarHostState, Context, PageLoader2)
|
||||
suspend fun saveTo(page: ReaderPage) {
|
||||
val filename = getImageFilename(page.index)
|
||||
val extension = FileUtils.getExtensionFromFilename(filename)
|
||||
val mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension) ?: "image/jpeg"
|
||||
page.runSuspendCatching {
|
||||
val uri = awaitActivityResult(ActivityResultContracts.CreateDocument(mimeType), filename)
|
||||
if (uri != null) {
|
||||
save(index, uri.asUniFile())
|
||||
showSnackbar(getString(R.string.image_saved, uri.displayPath))
|
||||
}
|
||||
}.onFailure {
|
||||
it.logcat(it)
|
||||
showSnackbar(getString(R.string.error_cant_find_activity))
|
||||
}
|
||||
}
|
||||
@@ -117,7 +117,7 @@ fun ReaderScreen(info: BaseGalleryInfo, page: Int = -1, navigator: DestinationsN
|
||||
share = { launchIO { with(pageLoader) { shareImage(page, info) } } },
|
||||
copy = { launchIO { with(pageLoader) { copy(page) } } },
|
||||
save = { launchIO { with(pageLoader) { save(page) } } },
|
||||
saveTo = {},
|
||||
saveTo = { launchIO { with(pageLoader) { saveTo(page) } } },
|
||||
dismiss = { launch { state.hide().also { dispose() } } },
|
||||
)
|
||||
Spacer(modifier = Modifier.navigationBarsPadding())
|
||||
|
||||
Reference in new issue
Block a user