mirror of
https://github.com/rhunk/SnapEnhance.git
synced 2025-05-19 23:57:09 +02:00
refactor: common submodule
- organize import - remove unused xml
This commit is contained in:
parent
00a33b9ce6
commit
13d6ae7554
@ -127,6 +127,7 @@ dependencies {
|
|||||||
}
|
}
|
||||||
|
|
||||||
implementation(project(":core"))
|
implementation(project(":core"))
|
||||||
|
implementation(project(":common"))
|
||||||
implementation(libs.androidx.documentfile)
|
implementation(libs.androidx.documentfile)
|
||||||
implementation(libs.gson)
|
implementation(libs.gson)
|
||||||
implementation(libs.ffmpeg.kit)
|
implementation(libs.ffmpeg.kit)
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
android:value="93" />
|
android:value="93" />
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="xposedscope"
|
android:name="xposedscope"
|
||||||
android:resource="@array/xposed_scope" />
|
android:value="com.snapchat.android" />
|
||||||
|
|
||||||
<service
|
<service
|
||||||
android:name=".bridge.BridgeService"
|
android:name=".bridge.BridgeService"
|
||||||
|
@ -3,9 +3,9 @@ package me.rhunk.snapenhance
|
|||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import com.google.gson.GsonBuilder
|
import com.google.gson.GsonBuilder
|
||||||
import me.rhunk.snapenhance.core.logger.AbstractLogger
|
import me.rhunk.snapenhance.common.logger.AbstractLogger
|
||||||
import me.rhunk.snapenhance.core.logger.LogChannel
|
import me.rhunk.snapenhance.common.logger.LogChannel
|
||||||
import me.rhunk.snapenhance.core.logger.LogLevel
|
import me.rhunk.snapenhance.common.logger.LogLevel
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.OutputStream
|
import java.io.OutputStream
|
||||||
import java.io.RandomAccessFile
|
import java.io.RandomAccessFile
|
||||||
|
@ -17,10 +17,10 @@ import coil.memory.MemoryCache
|
|||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import me.rhunk.snapenhance.bridge.BridgeService
|
import me.rhunk.snapenhance.bridge.BridgeService
|
||||||
import me.rhunk.snapenhance.core.BuildConfig
|
import me.rhunk.snapenhance.common.BuildConfig
|
||||||
import me.rhunk.snapenhance.core.bridge.wrapper.LocaleWrapper
|
import me.rhunk.snapenhance.common.bridge.wrapper.LocaleWrapper
|
||||||
import me.rhunk.snapenhance.core.bridge.wrapper.MappingsWrapper
|
import me.rhunk.snapenhance.common.bridge.wrapper.MappingsWrapper
|
||||||
import me.rhunk.snapenhance.core.config.ModConfig
|
import me.rhunk.snapenhance.common.config.ModConfig
|
||||||
import me.rhunk.snapenhance.download.DownloadTaskManager
|
import me.rhunk.snapenhance.download.DownloadTaskManager
|
||||||
import me.rhunk.snapenhance.e2ee.E2EEImplementation
|
import me.rhunk.snapenhance.e2ee.E2EEImplementation
|
||||||
import me.rhunk.snapenhance.messaging.ModDatabase
|
import me.rhunk.snapenhance.messaging.ModDatabase
|
||||||
|
@ -5,16 +5,16 @@ import android.content.Intent
|
|||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
import me.rhunk.snapenhance.RemoteSideContext
|
import me.rhunk.snapenhance.RemoteSideContext
|
||||||
import me.rhunk.snapenhance.SharedContextHolder
|
import me.rhunk.snapenhance.SharedContextHolder
|
||||||
import me.rhunk.snapenhance.core.bridge.types.BridgeFileType
|
import me.rhunk.snapenhance.common.bridge.types.BridgeFileType
|
||||||
import me.rhunk.snapenhance.core.bridge.types.FileActionType
|
import me.rhunk.snapenhance.common.bridge.types.FileActionType
|
||||||
import me.rhunk.snapenhance.core.bridge.wrapper.LocaleWrapper
|
import me.rhunk.snapenhance.common.bridge.wrapper.LocaleWrapper
|
||||||
import me.rhunk.snapenhance.core.bridge.wrapper.MessageLoggerWrapper
|
import me.rhunk.snapenhance.common.bridge.wrapper.MessageLoggerWrapper
|
||||||
import me.rhunk.snapenhance.core.database.objects.FriendInfo
|
import me.rhunk.snapenhance.common.data.MessagingFriendInfo
|
||||||
import me.rhunk.snapenhance.core.logger.LogLevel
|
import me.rhunk.snapenhance.common.data.MessagingGroupInfo
|
||||||
import me.rhunk.snapenhance.core.messaging.MessagingFriendInfo
|
import me.rhunk.snapenhance.common.data.SocialScope
|
||||||
import me.rhunk.snapenhance.core.messaging.MessagingGroupInfo
|
import me.rhunk.snapenhance.common.database.impl.FriendInfo
|
||||||
import me.rhunk.snapenhance.core.messaging.SocialScope
|
import me.rhunk.snapenhance.common.logger.LogLevel
|
||||||
import me.rhunk.snapenhance.core.util.SerializableDataObject
|
import me.rhunk.snapenhance.common.util.SerializableDataObject
|
||||||
import me.rhunk.snapenhance.download.DownloadProcessor
|
import me.rhunk.snapenhance.download.DownloadProcessor
|
||||||
import kotlin.system.measureTimeMillis
|
import kotlin.system.measureTimeMillis
|
||||||
|
|
||||||
|
@ -3,8 +3,8 @@ package me.rhunk.snapenhance.bridge
|
|||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import me.rhunk.snapenhance.Constants
|
|
||||||
import me.rhunk.snapenhance.SharedContextHolder
|
import me.rhunk.snapenhance.SharedContextHolder
|
||||||
|
import me.rhunk.snapenhance.common.Constants
|
||||||
|
|
||||||
class ForceStartActivity : Activity() {
|
class ForceStartActivity : Activity() {
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package me.rhunk.snapenhance.download
|
package me.rhunk.snapenhance.download
|
||||||
|
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
import me.rhunk.snapenhance.core.download.data.DownloadMetadata
|
import me.rhunk.snapenhance.common.data.download.DownloadMetadata
|
||||||
import me.rhunk.snapenhance.core.download.data.DownloadStage
|
import me.rhunk.snapenhance.common.data.download.DownloadStage
|
||||||
|
|
||||||
data class DownloadObject(
|
data class DownloadObject(
|
||||||
var downloadId: Int = 0,
|
var downloadId: Int = 0,
|
||||||
|
@ -13,14 +13,14 @@ import kotlinx.coroutines.job
|
|||||||
import kotlinx.coroutines.joinAll
|
import kotlinx.coroutines.joinAll
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import me.rhunk.snapenhance.Constants
|
|
||||||
import me.rhunk.snapenhance.RemoteSideContext
|
import me.rhunk.snapenhance.RemoteSideContext
|
||||||
import me.rhunk.snapenhance.bridge.DownloadCallback
|
import me.rhunk.snapenhance.bridge.DownloadCallback
|
||||||
import me.rhunk.snapenhance.core.download.DownloadManagerClient
|
import me.rhunk.snapenhance.common.Constants
|
||||||
import me.rhunk.snapenhance.core.download.data.*
|
import me.rhunk.snapenhance.common.ReceiversConfig
|
||||||
import me.rhunk.snapenhance.core.util.download.RemoteMediaResolver
|
import me.rhunk.snapenhance.common.data.FileType
|
||||||
import me.rhunk.snapenhance.core.util.snap.MediaDownloaderHelper
|
import me.rhunk.snapenhance.common.data.download.*
|
||||||
import me.rhunk.snapenhance.data.FileType
|
import me.rhunk.snapenhance.common.util.snap.MediaDownloaderHelper
|
||||||
|
import me.rhunk.snapenhance.common.util.snap.RemoteMediaResolver
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
import java.net.HttpURLConnection
|
import java.net.HttpURLConnection
|
||||||
@ -296,8 +296,8 @@ class DownloadProcessor (
|
|||||||
|
|
||||||
fun onReceive(intent: Intent) {
|
fun onReceive(intent: Intent) {
|
||||||
remoteSideContext.coroutineScope.launch {
|
remoteSideContext.coroutineScope.launch {
|
||||||
val downloadMetadata = gson.fromJson(intent.getStringExtra(DownloadManagerClient.DOWNLOAD_METADATA_EXTRA)!!, DownloadMetadata::class.java)
|
val downloadMetadata = gson.fromJson(intent.getStringExtra(ReceiversConfig.DOWNLOAD_METADATA_EXTRA)!!, DownloadMetadata::class.java)
|
||||||
val downloadRequest = gson.fromJson(intent.getStringExtra(DownloadManagerClient.DOWNLOAD_REQUEST_EXTRA)!!, DownloadRequest::class.java)
|
val downloadRequest = gson.fromJson(intent.getStringExtra(ReceiversConfig.DOWNLOAD_REQUEST_EXTRA)!!, DownloadRequest::class.java)
|
||||||
|
|
||||||
remoteSideContext.downloadTaskManager.canDownloadMedia(downloadMetadata.mediaIdentifier)?.let { downloadStage ->
|
remoteSideContext.downloadTaskManager.canDownloadMedia(downloadMetadata.mediaIdentifier)?.let { downloadStage ->
|
||||||
translation[if (downloadStage.isFinalStage) {
|
translation[if (downloadStage.isFinalStage) {
|
||||||
|
@ -3,12 +3,12 @@ package me.rhunk.snapenhance.download
|
|||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.database.sqlite.SQLiteDatabase
|
import android.database.sqlite.SQLiteDatabase
|
||||||
import me.rhunk.snapenhance.core.download.data.DownloadMetadata
|
import me.rhunk.snapenhance.common.data.download.DownloadMetadata
|
||||||
import me.rhunk.snapenhance.core.download.data.DownloadStage
|
import me.rhunk.snapenhance.common.data.download.DownloadStage
|
||||||
import me.rhunk.snapenhance.core.download.data.MediaDownloadSource
|
import me.rhunk.snapenhance.common.data.download.MediaDownloadSource
|
||||||
import me.rhunk.snapenhance.core.util.SQLiteDatabaseHelper
|
import me.rhunk.snapenhance.common.util.SQLiteDatabaseHelper
|
||||||
import me.rhunk.snapenhance.core.util.ktx.getIntOrNull
|
import me.rhunk.snapenhance.common.util.ktx.getIntOrNull
|
||||||
import me.rhunk.snapenhance.core.util.ktx.getStringOrNull
|
import me.rhunk.snapenhance.common.util.ktx.getStringOrNull
|
||||||
import java.util.concurrent.Executors
|
import java.util.concurrent.Executors
|
||||||
|
|
||||||
class DownloadTaskManager {
|
class DownloadTaskManager {
|
||||||
@ -162,7 +162,8 @@ class DownloadTaskManager {
|
|||||||
metadata = DownloadMetadata(
|
metadata = DownloadMetadata(
|
||||||
outputPath = cursor.getStringOrNull("outputPath")!!,
|
outputPath = cursor.getStringOrNull("outputPath")!!,
|
||||||
mediaIdentifier = cursor.getStringOrNull("hash"),
|
mediaIdentifier = cursor.getStringOrNull("hash"),
|
||||||
downloadSource = cursor.getStringOrNull("downloadSource") ?: MediaDownloadSource.NONE.key,
|
downloadSource = cursor.getStringOrNull("downloadSource")
|
||||||
|
?: MediaDownloadSource.NONE.key,
|
||||||
mediaAuthor = cursor.getStringOrNull("mediaAuthor"),
|
mediaAuthor = cursor.getStringOrNull("mediaAuthor"),
|
||||||
iconUrl = cursor.getStringOrNull("iconUrl")
|
iconUrl = cursor.getStringOrNull("iconUrl")
|
||||||
)
|
)
|
||||||
|
@ -5,9 +5,8 @@ import com.arthenica.ffmpegkit.FFmpegSession
|
|||||||
import com.arthenica.ffmpegkit.Level
|
import com.arthenica.ffmpegkit.Level
|
||||||
import kotlinx.coroutines.suspendCancellableCoroutine
|
import kotlinx.coroutines.suspendCancellableCoroutine
|
||||||
import me.rhunk.snapenhance.LogManager
|
import me.rhunk.snapenhance.LogManager
|
||||||
import me.rhunk.snapenhance.core.Logger
|
import me.rhunk.snapenhance.common.config.impl.DownloaderConfig
|
||||||
import me.rhunk.snapenhance.core.config.impl.DownloaderConfig
|
import me.rhunk.snapenhance.common.logger.LogLevel
|
||||||
import me.rhunk.snapenhance.core.logger.LogLevel
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.concurrent.Executors
|
import java.util.concurrent.Executors
|
||||||
|
|
||||||
@ -71,7 +70,7 @@ class FFMpegProcessor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.directDebug("arguments: $stringBuilder", "FFMpegProcessor")
|
logManager.debug("arguments: $stringBuilder", "FFMpegProcessor")
|
||||||
|
|
||||||
FFmpegKit.executeAsync(stringBuilder.toString(),
|
FFmpegKit.executeAsync(stringBuilder.toString(),
|
||||||
{ session ->
|
{ session ->
|
||||||
|
@ -2,16 +2,16 @@ package me.rhunk.snapenhance.messaging
|
|||||||
|
|
||||||
import android.database.sqlite.SQLiteDatabase
|
import android.database.sqlite.SQLiteDatabase
|
||||||
import me.rhunk.snapenhance.RemoteSideContext
|
import me.rhunk.snapenhance.RemoteSideContext
|
||||||
import me.rhunk.snapenhance.core.database.objects.FriendInfo
|
import me.rhunk.snapenhance.common.data.FriendStreaks
|
||||||
import me.rhunk.snapenhance.core.messaging.FriendStreaks
|
import me.rhunk.snapenhance.common.data.MessagingFriendInfo
|
||||||
import me.rhunk.snapenhance.core.messaging.MessagingFriendInfo
|
import me.rhunk.snapenhance.common.data.MessagingGroupInfo
|
||||||
import me.rhunk.snapenhance.core.messaging.MessagingGroupInfo
|
import me.rhunk.snapenhance.common.data.MessagingRuleType
|
||||||
import me.rhunk.snapenhance.core.messaging.MessagingRuleType
|
import me.rhunk.snapenhance.common.database.impl.FriendInfo
|
||||||
import me.rhunk.snapenhance.core.util.SQLiteDatabaseHelper
|
import me.rhunk.snapenhance.common.scripting.type.ModuleInfo
|
||||||
import me.rhunk.snapenhance.core.util.ktx.getInteger
|
import me.rhunk.snapenhance.common.util.SQLiteDatabaseHelper
|
||||||
import me.rhunk.snapenhance.core.util.ktx.getLongOrNull
|
import me.rhunk.snapenhance.common.util.ktx.getInteger
|
||||||
import me.rhunk.snapenhance.core.util.ktx.getStringOrNull
|
import me.rhunk.snapenhance.common.util.ktx.getLongOrNull
|
||||||
import me.rhunk.snapenhance.scripting.type.ModuleInfo
|
import me.rhunk.snapenhance.common.util.ktx.getStringOrNull
|
||||||
import java.util.concurrent.Executors
|
import java.util.concurrent.Executors
|
||||||
|
|
||||||
|
|
||||||
@ -75,11 +75,13 @@ class ModDatabase(
|
|||||||
return database.rawQuery("SELECT * FROM groups", null).use { cursor ->
|
return database.rawQuery("SELECT * FROM groups", null).use { cursor ->
|
||||||
val groups = mutableListOf<MessagingGroupInfo>()
|
val groups = mutableListOf<MessagingGroupInfo>()
|
||||||
while (cursor.moveToNext()) {
|
while (cursor.moveToNext()) {
|
||||||
groups.add(MessagingGroupInfo(
|
groups.add(
|
||||||
|
MessagingGroupInfo(
|
||||||
conversationId = cursor.getStringOrNull("conversationId")!!,
|
conversationId = cursor.getStringOrNull("conversationId")!!,
|
||||||
name = cursor.getStringOrNull("name")!!,
|
name = cursor.getStringOrNull("name")!!,
|
||||||
participantsCount = cursor.getInteger("participantsCount")
|
participantsCount = cursor.getInteger("participantsCount")
|
||||||
))
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
groups
|
groups
|
||||||
}
|
}
|
||||||
@ -90,13 +92,15 @@ class ModDatabase(
|
|||||||
val friends = mutableListOf<MessagingFriendInfo>()
|
val friends = mutableListOf<MessagingFriendInfo>()
|
||||||
while (cursor.moveToNext()) {
|
while (cursor.moveToNext()) {
|
||||||
runCatching {
|
runCatching {
|
||||||
friends.add(MessagingFriendInfo(
|
friends.add(
|
||||||
|
MessagingFriendInfo(
|
||||||
userId = cursor.getStringOrNull("userId")!!,
|
userId = cursor.getStringOrNull("userId")!!,
|
||||||
displayName = cursor.getStringOrNull("displayName"),
|
displayName = cursor.getStringOrNull("displayName"),
|
||||||
mutableUsername = cursor.getStringOrNull("mutableUsername")!!,
|
mutableUsername = cursor.getStringOrNull("mutableUsername")!!,
|
||||||
bitmojiId = cursor.getStringOrNull("bitmojiId"),
|
bitmojiId = cursor.getStringOrNull("bitmojiId"),
|
||||||
selfieId = cursor.getStringOrNull("selfieId")
|
selfieId = cursor.getStringOrNull("selfieId")
|
||||||
))
|
)
|
||||||
|
)
|
||||||
}.onFailure {
|
}.onFailure {
|
||||||
context.log.error("Failed to parse friend", it)
|
context.log.error("Failed to parse friend", it)
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ import me.rhunk.snapenhance.R
|
|||||||
import me.rhunk.snapenhance.RemoteSideContext
|
import me.rhunk.snapenhance.RemoteSideContext
|
||||||
import me.rhunk.snapenhance.SharedContextHolder
|
import me.rhunk.snapenhance.SharedContextHolder
|
||||||
import me.rhunk.snapenhance.bridge.ForceStartActivity
|
import me.rhunk.snapenhance.bridge.ForceStartActivity
|
||||||
import me.rhunk.snapenhance.core.util.snap.BitmojiSelfie
|
import me.rhunk.snapenhance.common.util.snap.BitmojiSelfie
|
||||||
import me.rhunk.snapenhance.ui.util.ImageRequestHelper
|
import me.rhunk.snapenhance.ui.util.ImageRequestHelper
|
||||||
|
|
||||||
class StreaksReminder(
|
class StreaksReminder(
|
||||||
|
@ -5,11 +5,12 @@ import androidx.documentfile.provider.DocumentFile
|
|||||||
import me.rhunk.snapenhance.RemoteSideContext
|
import me.rhunk.snapenhance.RemoteSideContext
|
||||||
import me.rhunk.snapenhance.bridge.scripting.IPCListener
|
import me.rhunk.snapenhance.bridge.scripting.IPCListener
|
||||||
import me.rhunk.snapenhance.bridge.scripting.IScripting
|
import me.rhunk.snapenhance.bridge.scripting.IScripting
|
||||||
|
import me.rhunk.snapenhance.common.scripting.ScriptRuntime
|
||||||
|
import me.rhunk.snapenhance.common.scripting.type.ModuleInfo
|
||||||
import me.rhunk.snapenhance.scripting.impl.IPCListeners
|
import me.rhunk.snapenhance.scripting.impl.IPCListeners
|
||||||
|
import me.rhunk.snapenhance.scripting.impl.RemoteManagerIPC
|
||||||
import me.rhunk.snapenhance.scripting.impl.ui.InterfaceBuilder
|
import me.rhunk.snapenhance.scripting.impl.ui.InterfaceBuilder
|
||||||
import me.rhunk.snapenhance.scripting.impl.ui.InterfaceManager
|
import me.rhunk.snapenhance.scripting.impl.ui.InterfaceManager
|
||||||
import me.rhunk.snapenhance.scripting.impl.RemoteManagerIPC
|
|
||||||
import me.rhunk.snapenhance.scripting.type.ModuleInfo
|
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
|
|
||||||
class RemoteScriptManager(
|
class RemoteScriptManager(
|
||||||
|
@ -2,10 +2,10 @@ package me.rhunk.snapenhance.scripting.impl
|
|||||||
|
|
||||||
import android.os.DeadObjectException
|
import android.os.DeadObjectException
|
||||||
import me.rhunk.snapenhance.bridge.scripting.IPCListener
|
import me.rhunk.snapenhance.bridge.scripting.IPCListener
|
||||||
import me.rhunk.snapenhance.core.logger.AbstractLogger
|
import me.rhunk.snapenhance.common.logger.AbstractLogger
|
||||||
import me.rhunk.snapenhance.scripting.IPCInterface
|
import me.rhunk.snapenhance.common.scripting.IPCInterface
|
||||||
import me.rhunk.snapenhance.scripting.Listener
|
import me.rhunk.snapenhance.common.scripting.Listener
|
||||||
import me.rhunk.snapenhance.scripting.type.ModuleInfo
|
import me.rhunk.snapenhance.common.scripting.type.ModuleInfo
|
||||||
import java.util.concurrent.ConcurrentHashMap
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
|
|
||||||
typealias IPCListeners = ConcurrentHashMap<String, MutableMap<String, MutableSet<IPCListener>>> // channel, eventName -> listeners
|
typealias IPCListeners = ConcurrentHashMap<String, MutableMap<String, MutableSet<IPCListener>>> // channel, eventName -> listeners
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package me.rhunk.snapenhance.scripting.impl.ui
|
package me.rhunk.snapenhance.scripting.impl.ui
|
||||||
|
|
||||||
import me.rhunk.snapenhance.core.logger.AbstractLogger
|
import me.rhunk.snapenhance.common.logger.AbstractLogger
|
||||||
|
import me.rhunk.snapenhance.common.scripting.type.ModuleInfo
|
||||||
import me.rhunk.snapenhance.scripting.impl.ui.components.Node
|
import me.rhunk.snapenhance.scripting.impl.ui.components.Node
|
||||||
import me.rhunk.snapenhance.scripting.impl.ui.components.NodeType
|
import me.rhunk.snapenhance.scripting.impl.ui.components.NodeType
|
||||||
import me.rhunk.snapenhance.scripting.impl.ui.components.impl.RowColumnNode
|
import me.rhunk.snapenhance.scripting.impl.ui.components.impl.RowColumnNode
|
||||||
import me.rhunk.snapenhance.scripting.type.ModuleInfo
|
|
||||||
import org.mozilla.javascript.Context
|
import org.mozilla.javascript.Context
|
||||||
import org.mozilla.javascript.Function
|
import org.mozilla.javascript.Function
|
||||||
import org.mozilla.javascript.annotations.JSFunction
|
import org.mozilla.javascript.annotations.JSFunction
|
||||||
|
@ -8,7 +8,7 @@ import android.os.Bundle
|
|||||||
import android.view.MotionEvent
|
import android.view.MotionEvent
|
||||||
import android.widget.Button
|
import android.widget.Button
|
||||||
import android.widget.EditText
|
import android.widget.EditText
|
||||||
import me.rhunk.snapenhance.core.R
|
import me.rhunk.snapenhance.R
|
||||||
import org.osmdroid.config.Configuration
|
import org.osmdroid.config.Configuration
|
||||||
import org.osmdroid.tileprovider.tilesource.TileSourceFactory
|
import org.osmdroid.tileprovider.tilesource.TileSourceFactory
|
||||||
import org.osmdroid.util.GeoPoint
|
import org.osmdroid.util.GeoPoint
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package me.rhunk.snapenhance.ui.manager.data
|
package me.rhunk.snapenhance.ui.manager.data
|
||||||
|
|
||||||
import com.google.gson.JsonParser
|
import com.google.gson.JsonParser
|
||||||
import me.rhunk.snapenhance.core.BuildConfig
|
import me.rhunk.snapenhance.common.BuildConfig
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
import okhttp3.Request
|
import okhttp3.Request
|
||||||
|
|
||||||
|
@ -28,8 +28,8 @@ import coil.compose.rememberAsyncImagePainter
|
|||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.future.asCompletableFuture
|
import kotlinx.coroutines.future.asCompletableFuture
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import me.rhunk.snapenhance.core.download.data.MediaDownloadSource
|
import me.rhunk.snapenhance.common.data.FileType
|
||||||
import me.rhunk.snapenhance.data.FileType
|
import me.rhunk.snapenhance.common.data.download.MediaDownloadSource
|
||||||
import me.rhunk.snapenhance.download.DownloadObject
|
import me.rhunk.snapenhance.download.DownloadObject
|
||||||
import me.rhunk.snapenhance.ui.manager.Section
|
import me.rhunk.snapenhance.ui.manager.Section
|
||||||
import me.rhunk.snapenhance.ui.util.BitmojiImage
|
import me.rhunk.snapenhance.ui.util.BitmojiImage
|
||||||
|
@ -37,7 +37,7 @@ import androidx.navigation.navigation
|
|||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import me.rhunk.snapenhance.core.config.*
|
import me.rhunk.snapenhance.common.config.*
|
||||||
import me.rhunk.snapenhance.ui.manager.MainActivity
|
import me.rhunk.snapenhance.ui.manager.MainActivity
|
||||||
import me.rhunk.snapenhance.ui.manager.Section
|
import me.rhunk.snapenhance.ui.manager.Section
|
||||||
import me.rhunk.snapenhance.ui.util.*
|
import me.rhunk.snapenhance.ui.util.*
|
||||||
|
@ -33,8 +33,8 @@ import kotlinx.coroutines.Dispatchers
|
|||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import me.rhunk.snapenhance.LogReader
|
import me.rhunk.snapenhance.LogReader
|
||||||
import me.rhunk.snapenhance.RemoteSideContext
|
import me.rhunk.snapenhance.RemoteSideContext
|
||||||
import me.rhunk.snapenhance.core.logger.LogChannel
|
import me.rhunk.snapenhance.common.logger.LogChannel
|
||||||
import me.rhunk.snapenhance.core.logger.LogLevel
|
import me.rhunk.snapenhance.common.logger.LogLevel
|
||||||
|
|
||||||
class HomeSubSection(
|
class HomeSubSection(
|
||||||
private val context: RemoteSideContext
|
private val context: RemoteSideContext
|
||||||
|
@ -20,10 +20,9 @@ import androidx.compose.ui.text.font.FontWeight
|
|||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import androidx.compose.ui.window.Dialog
|
import androidx.compose.ui.window.Dialog
|
||||||
import me.rhunk.snapenhance.Constants
|
import me.rhunk.snapenhance.common.Constants
|
||||||
import me.rhunk.snapenhance.action.EnumAction
|
import me.rhunk.snapenhance.common.action.EnumAction
|
||||||
import me.rhunk.snapenhance.core.bridge.types.BridgeFileType
|
import me.rhunk.snapenhance.common.bridge.types.BridgeFileType
|
||||||
import me.rhunk.snapenhance.manager.impl.ActionManager
|
|
||||||
import me.rhunk.snapenhance.ui.manager.Section
|
import me.rhunk.snapenhance.ui.manager.Section
|
||||||
import me.rhunk.snapenhance.ui.util.AlertDialogs
|
import me.rhunk.snapenhance.ui.util.AlertDialogs
|
||||||
|
|
||||||
@ -83,7 +82,7 @@ class SettingsSection : Section() {
|
|||||||
|
|
||||||
private fun launchActionIntent(action: EnumAction) {
|
private fun launchActionIntent(action: EnumAction) {
|
||||||
val intent = context.androidContext.packageManager.getLaunchIntentForPackage(Constants.SNAPCHAT_PACKAGE_NAME)
|
val intent = context.androidContext.packageManager.getLaunchIntentForPackage(Constants.SNAPCHAT_PACKAGE_NAME)
|
||||||
intent?.putExtra(ActionManager.ACTION_PARAMETER, action.key)
|
intent?.putExtra(EnumAction.ACTION_PARAMETER, action.key)
|
||||||
context.androidContext.startActivity(intent)
|
context.androidContext.startActivity(intent)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ import androidx.compose.ui.graphics.Color
|
|||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import me.rhunk.snapenhance.core.Logger
|
import me.rhunk.snapenhance.common.logger.AbstractLogger
|
||||||
import me.rhunk.snapenhance.scripting.impl.ui.InterfaceBuilder
|
import me.rhunk.snapenhance.scripting.impl.ui.InterfaceBuilder
|
||||||
import me.rhunk.snapenhance.scripting.impl.ui.components.Node
|
import me.rhunk.snapenhance.scripting.impl.ui.components.Node
|
||||||
import me.rhunk.snapenhance.scripting.impl.ui.components.NodeType
|
import me.rhunk.snapenhance.scripting.impl.ui.components.NodeType
|
||||||
@ -54,7 +54,7 @@ private fun DrawNode(node: Node) {
|
|||||||
runCatching {
|
runCatching {
|
||||||
callback()
|
callback()
|
||||||
}.onFailure {
|
}.onFailure {
|
||||||
Logger.directError("Error running callback", it)
|
AbstractLogger.directError("Error running callback", it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ import androidx.compose.ui.unit.dp
|
|||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import me.rhunk.snapenhance.scripting.type.ModuleInfo
|
import me.rhunk.snapenhance.common.scripting.type.ModuleInfo
|
||||||
import me.rhunk.snapenhance.ui.manager.Section
|
import me.rhunk.snapenhance.ui.manager.Section
|
||||||
import me.rhunk.snapenhance.ui.util.pullrefresh.PullRefreshIndicator
|
import me.rhunk.snapenhance.ui.util.pullrefresh.PullRefreshIndicator
|
||||||
import me.rhunk.snapenhance.ui.util.pullrefresh.pullRefresh
|
import me.rhunk.snapenhance.ui.util.pullrefresh.pullRefresh
|
||||||
|
@ -24,11 +24,11 @@ import kotlinx.coroutines.delay
|
|||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import me.rhunk.snapenhance.RemoteSideContext
|
import me.rhunk.snapenhance.RemoteSideContext
|
||||||
import me.rhunk.snapenhance.core.bridge.BridgeClient
|
import me.rhunk.snapenhance.common.ReceiversConfig
|
||||||
import me.rhunk.snapenhance.core.messaging.MessagingFriendInfo
|
import me.rhunk.snapenhance.common.data.MessagingFriendInfo
|
||||||
import me.rhunk.snapenhance.core.messaging.MessagingGroupInfo
|
import me.rhunk.snapenhance.common.data.MessagingGroupInfo
|
||||||
import me.rhunk.snapenhance.core.messaging.SocialScope
|
import me.rhunk.snapenhance.common.data.SocialScope
|
||||||
import me.rhunk.snapenhance.core.util.snap.SnapWidgetBroadcastReceiverHelper
|
import me.rhunk.snapenhance.common.util.snap.SnapWidgetBroadcastReceiverHelper
|
||||||
|
|
||||||
class AddFriendDialog(
|
class AddFriendDialog(
|
||||||
private val context: RemoteSideContext,
|
private val context: RemoteSideContext,
|
||||||
@ -128,7 +128,7 @@ class AddFriendDialog(
|
|||||||
timeoutJob?.cancel()
|
timeoutJob?.cancel()
|
||||||
hasFetchError = false
|
hasFetchError = false
|
||||||
}
|
}
|
||||||
SnapWidgetBroadcastReceiverHelper.create(BridgeClient.BRIDGE_SYNC_ACTION) {}.also {
|
SnapWidgetBroadcastReceiverHelper.create(ReceiversConfig.BRIDGE_SYNC_ACTION) {}.also {
|
||||||
runCatching {
|
runCatching {
|
||||||
context.androidContext.sendBroadcast(it)
|
context.androidContext.sendBroadcast(it)
|
||||||
}.onFailure {
|
}.onFailure {
|
||||||
|
@ -22,9 +22,9 @@ import androidx.navigation.NavController
|
|||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import me.rhunk.snapenhance.RemoteSideContext
|
import me.rhunk.snapenhance.RemoteSideContext
|
||||||
import me.rhunk.snapenhance.core.messaging.MessagingRuleType
|
import me.rhunk.snapenhance.common.data.MessagingRuleType
|
||||||
import me.rhunk.snapenhance.core.messaging.SocialScope
|
import me.rhunk.snapenhance.common.data.SocialScope
|
||||||
import me.rhunk.snapenhance.core.util.snap.BitmojiSelfie
|
import me.rhunk.snapenhance.common.util.snap.BitmojiSelfie
|
||||||
import me.rhunk.snapenhance.ui.util.AlertDialogs
|
import me.rhunk.snapenhance.ui.util.AlertDialogs
|
||||||
import me.rhunk.snapenhance.ui.util.BitmojiImage
|
import me.rhunk.snapenhance.ui.util.BitmojiImage
|
||||||
import me.rhunk.snapenhance.ui.util.Dialog
|
import me.rhunk.snapenhance.ui.util.Dialog
|
||||||
|
@ -27,10 +27,10 @@ import androidx.navigation.compose.composable
|
|||||||
import androidx.navigation.navigation
|
import androidx.navigation.navigation
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import me.rhunk.snapenhance.R
|
import me.rhunk.snapenhance.R
|
||||||
import me.rhunk.snapenhance.core.messaging.MessagingFriendInfo
|
import me.rhunk.snapenhance.common.data.MessagingFriendInfo
|
||||||
import me.rhunk.snapenhance.core.messaging.MessagingGroupInfo
|
import me.rhunk.snapenhance.common.data.MessagingGroupInfo
|
||||||
import me.rhunk.snapenhance.core.messaging.SocialScope
|
import me.rhunk.snapenhance.common.data.SocialScope
|
||||||
import me.rhunk.snapenhance.core.util.snap.BitmojiSelfie
|
import me.rhunk.snapenhance.common.util.snap.BitmojiSelfie
|
||||||
import me.rhunk.snapenhance.ui.manager.Section
|
import me.rhunk.snapenhance.ui.manager.Section
|
||||||
import me.rhunk.snapenhance.ui.util.AlertDialogs
|
import me.rhunk.snapenhance.ui.util.AlertDialogs
|
||||||
import me.rhunk.snapenhance.ui.util.BitmojiImage
|
import me.rhunk.snapenhance.ui.util.BitmojiImage
|
||||||
|
@ -14,14 +14,18 @@ import androidx.compose.material3.Button
|
|||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.Surface
|
import androidx.compose.material3.Surface
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.*
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import androidx.compose.ui.window.Dialog
|
import androidx.compose.ui.window.Dialog
|
||||||
import me.rhunk.snapenhance.core.bridge.wrapper.LocaleWrapper
|
import me.rhunk.snapenhance.common.bridge.wrapper.LocaleWrapper
|
||||||
import me.rhunk.snapenhance.ui.setup.screens.SetupScreen
|
import me.rhunk.snapenhance.ui.setup.screens.SetupScreen
|
||||||
import me.rhunk.snapenhance.ui.util.ObservableMutableState
|
import me.rhunk.snapenhance.ui.util.ObservableMutableState
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
@ -4,7 +4,7 @@ import android.content.Intent
|
|||||||
import androidx.activity.ComponentActivity
|
import androidx.activity.ComponentActivity
|
||||||
import androidx.activity.result.ActivityResultLauncher
|
import androidx.activity.result.ActivityResultLauncher
|
||||||
import androidx.activity.result.contract.ActivityResultContracts
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import me.rhunk.snapenhance.core.Logger
|
import me.rhunk.snapenhance.common.logger.AbstractLogger
|
||||||
|
|
||||||
typealias ActivityLauncherCallback = (resultCode: Int, intent: Intent?) -> Unit
|
typealias ActivityLauncherCallback = (resultCode: Int, intent: Intent?) -> Unit
|
||||||
|
|
||||||
@ -17,7 +17,7 @@ class ActivityLauncherHelper(
|
|||||||
runCatching {
|
runCatching {
|
||||||
callback?.let { it(if (result) ComponentActivity.RESULT_OK else ComponentActivity.RESULT_CANCELED, null) }
|
callback?.let { it(if (result) ComponentActivity.RESULT_OK else ComponentActivity.RESULT_CANCELED, null) }
|
||||||
}.onFailure {
|
}.onFailure {
|
||||||
Logger.directError("Failed to process activity result", it)
|
AbstractLogger.directError("Failed to process activity result", it)
|
||||||
}
|
}
|
||||||
callback = null
|
callback = null
|
||||||
}
|
}
|
||||||
@ -27,7 +27,7 @@ class ActivityLauncherHelper(
|
|||||||
runCatching {
|
runCatching {
|
||||||
callback?.let { it(result.resultCode, result.data) }
|
callback?.let { it(result.resultCode, result.data) }
|
||||||
}.onFailure {
|
}.onFailure {
|
||||||
Logger.directError("Failed to process activity result", it)
|
AbstractLogger.directError("Failed to process activity result", it)
|
||||||
}
|
}
|
||||||
callback = null
|
callback = null
|
||||||
}
|
}
|
||||||
|
@ -22,9 +22,9 @@ import androidx.compose.ui.text.input.KeyboardType
|
|||||||
import androidx.compose.ui.text.input.TextFieldValue
|
import androidx.compose.ui.text.input.TextFieldValue
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import me.rhunk.snapenhance.core.bridge.wrapper.LocaleWrapper
|
import me.rhunk.snapenhance.common.bridge.wrapper.LocaleWrapper
|
||||||
import me.rhunk.snapenhance.core.config.DataProcessors
|
import me.rhunk.snapenhance.common.config.DataProcessors
|
||||||
import me.rhunk.snapenhance.core.config.PropertyPair
|
import me.rhunk.snapenhance.common.config.PropertyPair
|
||||||
|
|
||||||
|
|
||||||
class AlertDialogs(
|
class AlertDialogs(
|
||||||
|
@ -12,3 +12,10 @@ rootProject.ext.set("appVersionName", versionName)
|
|||||||
rootProject.ext.set("appVersionCode", versionCode)
|
rootProject.ext.set("appVersionCode", versionCode)
|
||||||
rootProject.ext.set("applicationId", "me.rhunk.snapenhance")
|
rootProject.ext.set("applicationId", "me.rhunk.snapenhance")
|
||||||
rootProject.ext.set("nativeName", properties["custom_native_name"] ?: java.security.SecureRandom().nextLong(1000000000, 99999999999).toString(16))
|
rootProject.ext.set("nativeName", properties["custom_native_name"] ?: java.security.SecureRandom().nextLong(1000000000, 99999999999).toString(16))
|
||||||
|
|
||||||
|
tasks.register("getVersion") {
|
||||||
|
doLast {
|
||||||
|
val versionFile = File("app/build/version.txt")
|
||||||
|
versionFile.writeText(versionName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
1
common/.gitignore
vendored
Normal file
1
common/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/build
|
37
common/build.gradle.kts
Normal file
37
common/build.gradle.kts
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
plugins {
|
||||||
|
alias(libs.plugins.androidLibrary)
|
||||||
|
alias(libs.plugins.kotlinAndroid)
|
||||||
|
}
|
||||||
|
|
||||||
|
android {
|
||||||
|
namespace = rootProject.ext["applicationId"].toString() + ".common"
|
||||||
|
compileSdk = 34
|
||||||
|
|
||||||
|
buildFeatures {
|
||||||
|
aidl = true
|
||||||
|
buildConfig = true
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultConfig {
|
||||||
|
minSdk = 28
|
||||||
|
buildConfigField("String", "VERSION_NAME", "\"${rootProject.ext["appVersionName"]}\"")
|
||||||
|
buildConfigField("int", "VERSION_CODE", "${rootProject.ext["appVersionCode"]}")
|
||||||
|
buildConfigField("String", "APPLICATION_ID", "\"${rootProject.ext["applicationId"]}\"")
|
||||||
|
buildConfigField("int", "BUILD_DATE", "${System.currentTimeMillis() / 1000}")
|
||||||
|
}
|
||||||
|
|
||||||
|
kotlinOptions {
|
||||||
|
jvmTarget = "1.8"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation(libs.coroutines)
|
||||||
|
implementation(libs.gson)
|
||||||
|
implementation(libs.okhttp)
|
||||||
|
implementation(libs.androidx.documentfile)
|
||||||
|
implementation(libs.rhino)
|
||||||
|
|
||||||
|
implementation(project(":stub"))
|
||||||
|
implementation(project(":mapper"))
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package me.rhunk.snapenhance
|
package me.rhunk.snapenhance.common
|
||||||
|
|
||||||
object Constants {
|
object Constants {
|
||||||
const val SNAPCHAT_PACKAGE_NAME = "com.snapchat.android"
|
const val SNAPCHAT_PACKAGE_NAME = "com.snapchat.android"
|
@ -0,0 +1,7 @@
|
|||||||
|
package me.rhunk.snapenhance.common
|
||||||
|
|
||||||
|
object ReceiversConfig {
|
||||||
|
const val BRIDGE_SYNC_ACTION = BuildConfig.APPLICATION_ID + ".core.bridge.SYNC"
|
||||||
|
const val DOWNLOAD_REQUEST_EXTRA = "request"
|
||||||
|
const val DOWNLOAD_METADATA_EXTRA = "metadata"
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package me.rhunk.snapenhance.common.action
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
enum class EnumAction(
|
||||||
|
val key: String,
|
||||||
|
val exitOnFinish: Boolean = false,
|
||||||
|
val isCritical: Boolean = false,
|
||||||
|
) {
|
||||||
|
CLEAN_CACHE("clean_snapchat_cache", exitOnFinish = true),
|
||||||
|
EXPORT_CHAT_MESSAGES("export_chat_messages"),
|
||||||
|
OPEN_MAP("open_map");
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val ACTION_PARAMETER = "se_action"
|
||||||
|
}
|
||||||
|
}
|
@ -1,11 +1,11 @@
|
|||||||
package me.rhunk.snapenhance.core.bridge
|
package me.rhunk.snapenhance.common.bridge
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import me.rhunk.snapenhance.core.bridge.types.BridgeFileType
|
import me.rhunk.snapenhance.common.bridge.types.BridgeFileType
|
||||||
|
|
||||||
open class FileLoaderWrapper(
|
open class FileLoaderWrapper(
|
||||||
private val fileType: BridgeFileType,
|
val fileType: BridgeFileType,
|
||||||
private val defaultContent: ByteArray
|
val defaultContent: ByteArray
|
||||||
) {
|
) {
|
||||||
lateinit var isFileExists: () -> Boolean
|
lateinit var isFileExists: () -> Boolean
|
||||||
lateinit var write: (ByteArray) -> Unit
|
lateinit var write: (ByteArray) -> Unit
|
||||||
@ -26,10 +26,4 @@ open class FileLoaderWrapper(
|
|||||||
delete = { file.delete() }
|
delete = { file.delete() }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun loadFromBridge(bridgeClient: BridgeClient) {
|
|
||||||
isFileExists = { bridgeClient.isFileExists(fileType) }
|
|
||||||
read = { bridgeClient.createAndReadFile(fileType, defaultContent) }
|
|
||||||
write = { bridgeClient.writeFile(fileType, it) }
|
|
||||||
delete = { bridgeClient.deleteFile(fileType) }
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package me.rhunk.snapenhance.core.bridge.types
|
package me.rhunk.snapenhance.common.bridge.types
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import java.io.File
|
import java.io.File
|
@ -1,4 +1,4 @@
|
|||||||
package me.rhunk.snapenhance.core.bridge.types
|
package me.rhunk.snapenhance.common.bridge.types
|
||||||
|
|
||||||
enum class FileActionType {
|
enum class FileActionType {
|
||||||
CREATE_AND_READ, READ, WRITE, DELETE, EXISTS
|
CREATE_AND_READ, READ, WRITE, DELETE, EXISTS
|
@ -0,0 +1,6 @@
|
|||||||
|
package me.rhunk.snapenhance.common.bridge.types
|
||||||
|
|
||||||
|
data class LocalePair(
|
||||||
|
val locale: String,
|
||||||
|
val content: String
|
||||||
|
)
|
@ -1,11 +1,10 @@
|
|||||||
package me.rhunk.snapenhance.core.bridge.wrapper
|
package me.rhunk.snapenhance.common.bridge.wrapper
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
import com.google.gson.JsonParser
|
import com.google.gson.JsonParser
|
||||||
import me.rhunk.snapenhance.core.Logger
|
import me.rhunk.snapenhance.common.bridge.types.LocalePair
|
||||||
import me.rhunk.snapenhance.core.bridge.BridgeClient
|
import me.rhunk.snapenhance.common.logger.AbstractLogger
|
||||||
import me.rhunk.snapenhance.data.LocalePair
|
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
|
||||||
|
|
||||||
@ -62,8 +61,8 @@ class LocaleWrapper {
|
|||||||
scanObject(translations)
|
scanObject(translations)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun loadFromBridge(bridgeClient: BridgeClient) {
|
fun loadFromCallback(callback: (String) -> List<LocalePair>) {
|
||||||
bridgeClient.fetchLocales(userLocale).forEach {
|
callback(userLocale).forEach {
|
||||||
load(it)
|
load(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -80,7 +79,7 @@ class LocaleWrapper {
|
|||||||
loadFromContext(context)
|
loadFromContext(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
operator fun get(key: String) = translationMap[key] ?: key.also { Logger.directDebug("Missing translation for $key") }
|
operator fun get(key: String) = translationMap[key] ?: key.also { AbstractLogger.directDebug("Missing translation for $key") }
|
||||||
|
|
||||||
fun format(key: String, vararg args: Pair<String, String>): String {
|
fun format(key: String, vararg args: Pair<String, String>): String {
|
||||||
return args.fold(get(key)) { acc, pair ->
|
return args.fold(get(key)) { acc, pair ->
|
@ -1,13 +1,12 @@
|
|||||||
package me.rhunk.snapenhance.core.bridge.wrapper
|
package me.rhunk.snapenhance.common.bridge.wrapper
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import com.google.gson.GsonBuilder
|
import com.google.gson.GsonBuilder
|
||||||
import com.google.gson.JsonElement
|
import com.google.gson.JsonElement
|
||||||
import com.google.gson.JsonParser
|
import com.google.gson.JsonParser
|
||||||
import me.rhunk.snapenhance.Constants
|
import me.rhunk.snapenhance.common.Constants
|
||||||
import me.rhunk.snapenhance.core.Logger
|
import me.rhunk.snapenhance.common.bridge.FileLoaderWrapper
|
||||||
import me.rhunk.snapenhance.core.bridge.FileLoaderWrapper
|
import me.rhunk.snapenhance.common.bridge.types.BridgeFileType
|
||||||
import me.rhunk.snapenhance.core.bridge.types.BridgeFileType
|
|
||||||
import me.rhunk.snapenhance.mapper.Mapper
|
import me.rhunk.snapenhance.mapper.Mapper
|
||||||
import me.rhunk.snapenhance.mapper.impl.*
|
import me.rhunk.snapenhance.mapper.impl.*
|
||||||
import java.util.concurrent.ConcurrentHashMap
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
@ -107,8 +106,6 @@ class MappingsWrapper : FileLoaderWrapper(BridgeFileType.MAPPINGS, "{}".toByteAr
|
|||||||
addProperty("snap_build_number", snapBuildNumber)
|
addProperty("snap_build_number", snapBuildNumber)
|
||||||
}
|
}
|
||||||
write(result.toString().toByteArray())
|
write(result.toString().toByteArray())
|
||||||
}.also {
|
|
||||||
Logger.directDebug("Generated mappings in $it ms")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,9 +1,9 @@
|
|||||||
package me.rhunk.snapenhance.core.bridge.wrapper
|
package me.rhunk.snapenhance.common.bridge.wrapper
|
||||||
|
|
||||||
import android.content.ContentValues
|
import android.content.ContentValues
|
||||||
import android.database.sqlite.SQLiteDatabase
|
import android.database.sqlite.SQLiteDatabase
|
||||||
import me.rhunk.snapenhance.bridge.MessageLoggerInterface
|
import me.rhunk.snapenhance.bridge.MessageLoggerInterface
|
||||||
import me.rhunk.snapenhance.core.util.SQLiteDatabaseHelper
|
import me.rhunk.snapenhance.common.util.SQLiteDatabaseHelper
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
package me.rhunk.snapenhance.core.config
|
package me.rhunk.snapenhance.common.config
|
||||||
|
|
||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
import kotlin.reflect.KProperty
|
import kotlin.reflect.KProperty
|
@ -1,6 +1,6 @@
|
|||||||
package me.rhunk.snapenhance.core.config
|
package me.rhunk.snapenhance.common.config
|
||||||
|
|
||||||
import me.rhunk.snapenhance.core.bridge.wrapper.LocaleWrapper
|
import me.rhunk.snapenhance.common.bridge.wrapper.LocaleWrapper
|
||||||
import kotlin.reflect.KProperty
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
data class PropertyPair<T>(
|
data class PropertyPair<T>(
|
@ -1,4 +1,4 @@
|
|||||||
package me.rhunk.snapenhance.core.config
|
package me.rhunk.snapenhance.common.config
|
||||||
|
|
||||||
import com.google.gson.JsonArray
|
import com.google.gson.JsonArray
|
||||||
import com.google.gson.JsonElement
|
import com.google.gson.JsonElement
|
@ -1,16 +1,15 @@
|
|||||||
package me.rhunk.snapenhance.core.config
|
package me.rhunk.snapenhance.common.config
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import com.google.gson.GsonBuilder
|
import com.google.gson.GsonBuilder
|
||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
import me.rhunk.snapenhance.bridge.ConfigStateListener
|
import me.rhunk.snapenhance.bridge.ConfigStateListener
|
||||||
import me.rhunk.snapenhance.core.Logger
|
import me.rhunk.snapenhance.common.bridge.FileLoaderWrapper
|
||||||
import me.rhunk.snapenhance.core.bridge.BridgeClient
|
import me.rhunk.snapenhance.common.bridge.types.BridgeFileType
|
||||||
import me.rhunk.snapenhance.core.bridge.FileLoaderWrapper
|
import me.rhunk.snapenhance.common.bridge.wrapper.LocaleWrapper
|
||||||
import me.rhunk.snapenhance.core.bridge.types.BridgeFileType
|
import me.rhunk.snapenhance.common.config.impl.RootConfig
|
||||||
import me.rhunk.snapenhance.core.bridge.wrapper.LocaleWrapper
|
import me.rhunk.snapenhance.common.logger.AbstractLogger
|
||||||
import me.rhunk.snapenhance.core.config.impl.RootConfig
|
|
||||||
import kotlin.properties.Delegates
|
import kotlin.properties.Delegates
|
||||||
|
|
||||||
class ModConfig {
|
class ModConfig {
|
||||||
@ -106,7 +105,7 @@ class ModConfig {
|
|||||||
else if (shouldRestart) it.onRestartRequired()
|
else if (shouldRestart) it.onRestartRequired()
|
||||||
}
|
}
|
||||||
}.onFailure {
|
}.onFailure {
|
||||||
Logger.directError("Error while calling config state listener", it, "ConfigStateListener")
|
AbstractLogger.directError("Error while calling config state listener", it, "ConfigStateListener")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,8 +124,8 @@ class ModConfig {
|
|||||||
load()
|
load()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun loadFromBridge(bridgeClient: BridgeClient) {
|
fun loadFromCallback(callback: (FileLoaderWrapper) -> Unit) {
|
||||||
file.loadFromBridge(bridgeClient)
|
callback(file)
|
||||||
load()
|
load()
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
package me.rhunk.snapenhance.common.config.impl
|
||||||
|
|
||||||
|
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||||
|
import me.rhunk.snapenhance.common.config.ConfigFlag
|
||||||
|
import me.rhunk.snapenhance.common.config.FeatureNotice
|
||||||
|
|
||||||
|
class Camera : ConfigContainer() {
|
||||||
|
companion object {
|
||||||
|
val resolutions = listOf("3264x2448", "3264x1840", "3264x1504", "2688x1512", "2560x1920", "2448x2448", "2340x1080", "2160x1080", "1920x1440", "1920x1080", "1600x1200", "1600x960", "1600x900", "1600x736", "1600x720", "1560x720", "1520x720", "1440x1080", "1440x720", "1280x720", "1080x1080", "1080x720", "960x720", "720x720", "720x480", "640x480", "352x288", "320x240", "176x144").toTypedArray()
|
||||||
|
}
|
||||||
|
|
||||||
|
val disable = boolean("disable_camera")
|
||||||
|
val immersiveCameraPreview = boolean("immersive_camera_preview") { addNotices(FeatureNotice.UNSTABLE) }
|
||||||
|
val overridePreviewResolution = unique("override_preview_resolution", *resolutions)
|
||||||
|
{ addFlags(ConfigFlag.NO_TRANSLATE) }
|
||||||
|
val overridePictureResolution = unique("override_picture_resolution", *resolutions)
|
||||||
|
{ addFlags(ConfigFlag.NO_TRANSLATE) }
|
||||||
|
val customFrameRate = unique("custom_frame_rate",
|
||||||
|
"5", "10", "20", "25", "30", "48", "60", "90", "120"
|
||||||
|
) { addNotices(FeatureNotice.UNSTABLE); addFlags(ConfigFlag.NO_TRANSLATE) }
|
||||||
|
val forceCameraSourceEncoding = boolean("force_camera_source_encoding")
|
||||||
|
}
|
@ -1,8 +1,8 @@
|
|||||||
package me.rhunk.snapenhance.core.config.impl
|
package me.rhunk.snapenhance.common.config.impl
|
||||||
|
|
||||||
import me.rhunk.snapenhance.core.config.ConfigContainer
|
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||||
import me.rhunk.snapenhance.core.config.ConfigFlag
|
import me.rhunk.snapenhance.common.config.ConfigFlag
|
||||||
import me.rhunk.snapenhance.core.config.FeatureNotice
|
import me.rhunk.snapenhance.common.config.FeatureNotice
|
||||||
|
|
||||||
class DownloaderConfig : ConfigContainer() {
|
class DownloaderConfig : ConfigContainer() {
|
||||||
inner class FFMpegOptions : ConfigContainer() {
|
inner class FFMpegOptions : ConfigContainer() {
|
@ -1,6 +1,6 @@
|
|||||||
package me.rhunk.snapenhance.core.config.impl
|
package me.rhunk.snapenhance.common.config.impl
|
||||||
|
|
||||||
import me.rhunk.snapenhance.core.config.ConfigContainer
|
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||||
|
|
||||||
class E2EEConfig : ConfigContainer(hasGlobalState = true) {
|
class E2EEConfig : ConfigContainer(hasGlobalState = true) {
|
||||||
val encryptedMessageIndicator = boolean("encrypted_message_indicator")
|
val encryptedMessageIndicator = boolean("encrypted_message_indicator")
|
@ -1,7 +1,7 @@
|
|||||||
package me.rhunk.snapenhance.core.config.impl
|
package me.rhunk.snapenhance.common.config.impl
|
||||||
|
|
||||||
import me.rhunk.snapenhance.core.config.ConfigContainer
|
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||||
import me.rhunk.snapenhance.core.config.FeatureNotice
|
import me.rhunk.snapenhance.common.config.FeatureNotice
|
||||||
|
|
||||||
class Experimental : ConfigContainer() {
|
class Experimental : ConfigContainer() {
|
||||||
val nativeHooks = container("native_hooks", NativeHooks()) { icon = "Memory"; requireRestart() }
|
val nativeHooks = container("native_hooks", NativeHooks()) { icon = "Memory"; requireRestart() }
|
@ -1,13 +1,14 @@
|
|||||||
package me.rhunk.snapenhance.core.config.impl
|
package me.rhunk.snapenhance.common.config.impl
|
||||||
|
|
||||||
import me.rhunk.snapenhance.core.config.ConfigContainer
|
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||||
import me.rhunk.snapenhance.core.config.FeatureNotice
|
import me.rhunk.snapenhance.common.config.FeatureNotice
|
||||||
|
|
||||||
class Global : ConfigContainer() {
|
class Global : ConfigContainer() {
|
||||||
val snapchatPlus = boolean("snapchat_plus") { addNotices(FeatureNotice.BAN_RISK); requireRestart() }
|
val snapchatPlus = boolean("snapchat_plus") { addNotices(FeatureNotice.BAN_RISK); requireRestart() }
|
||||||
val disableMetrics = boolean("disable_metrics")
|
val disableMetrics = boolean("disable_metrics")
|
||||||
val blockAds = boolean("block_ads")
|
val blockAds = boolean("block_ads")
|
||||||
val bypassVideoLengthRestriction = unique("bypass_video_length_restriction", "split", "single") { addNotices(FeatureNotice.BAN_RISK); requireRestart() }
|
val bypassVideoLengthRestriction = unique("bypass_video_length_restriction", "split", "single") { addNotices(
|
||||||
|
FeatureNotice.BAN_RISK); requireRestart() }
|
||||||
val disableGooglePlayDialogs = boolean("disable_google_play_dialogs") { requireRestart() }
|
val disableGooglePlayDialogs = boolean("disable_google_play_dialogs") { requireRestart() }
|
||||||
val forceMediaSourceQuality = boolean("force_media_source_quality")
|
val forceMediaSourceQuality = boolean("force_media_source_quality")
|
||||||
val disableSnapSplitting = boolean("disable_snap_splitting") { addNotices(FeatureNotice.INTERNAL_BEHAVIOR) }
|
val disableSnapSplitting = boolean("disable_snap_splitting") { addNotices(FeatureNotice.INTERNAL_BEHAVIOR) }
|
@ -1,8 +1,8 @@
|
|||||||
package me.rhunk.snapenhance.core.config.impl
|
package me.rhunk.snapenhance.common.config.impl
|
||||||
|
|
||||||
import me.rhunk.snapenhance.core.config.ConfigContainer
|
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||||
import me.rhunk.snapenhance.core.config.FeatureNotice
|
import me.rhunk.snapenhance.common.config.FeatureNotice
|
||||||
import me.rhunk.snapenhance.data.NotificationType
|
import me.rhunk.snapenhance.common.data.NotificationType
|
||||||
|
|
||||||
class MessagingTweaks : ConfigContainer() {
|
class MessagingTweaks : ConfigContainer() {
|
||||||
val anonymousStoryViewing = boolean("anonymous_story_viewing")
|
val anonymousStoryViewing = boolean("anonymous_story_viewing")
|
@ -1,6 +1,6 @@
|
|||||||
package me.rhunk.snapenhance.core.config.impl
|
package me.rhunk.snapenhance.common.config.impl
|
||||||
|
|
||||||
import me.rhunk.snapenhance.core.config.ConfigContainer
|
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||||
|
|
||||||
class NativeHooks: ConfigContainer(hasGlobalState = true) {
|
class NativeHooks: ConfigContainer(hasGlobalState = true) {
|
||||||
val disableBitmoji = boolean("disable_bitmoji")
|
val disableBitmoji = boolean("disable_bitmoji")
|
@ -1,7 +1,7 @@
|
|||||||
package me.rhunk.snapenhance.core.config.impl
|
package me.rhunk.snapenhance.common.config.impl
|
||||||
|
|
||||||
import me.rhunk.snapenhance.core.config.ConfigContainer
|
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||||
import me.rhunk.snapenhance.core.config.FeatureNotice
|
import me.rhunk.snapenhance.common.config.FeatureNotice
|
||||||
|
|
||||||
class RootConfig : ConfigContainer() {
|
class RootConfig : ConfigContainer() {
|
||||||
val downloader = container("downloader", DownloaderConfig()) { icon = "Download"}
|
val downloader = container("downloader", DownloaderConfig()) { icon = "Download"}
|
@ -1,9 +1,9 @@
|
|||||||
package me.rhunk.snapenhance.core.config.impl
|
package me.rhunk.snapenhance.common.config.impl
|
||||||
|
|
||||||
import me.rhunk.snapenhance.core.config.ConfigContainer
|
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||||
import me.rhunk.snapenhance.core.config.PropertyValue
|
import me.rhunk.snapenhance.common.config.PropertyValue
|
||||||
import me.rhunk.snapenhance.core.messaging.MessagingRuleType
|
import me.rhunk.snapenhance.common.data.MessagingRuleType
|
||||||
import me.rhunk.snapenhance.core.messaging.RuleState
|
import me.rhunk.snapenhance.common.data.RuleState
|
||||||
|
|
||||||
|
|
||||||
class Rules : ConfigContainer() {
|
class Rules : ConfigContainer() {
|
@ -1,7 +1,7 @@
|
|||||||
package me.rhunk.snapenhance.core.config.impl
|
package me.rhunk.snapenhance.common.config.impl
|
||||||
|
|
||||||
import me.rhunk.snapenhance.core.config.ConfigContainer
|
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||||
import me.rhunk.snapenhance.core.config.ConfigFlag
|
import me.rhunk.snapenhance.common.config.ConfigFlag
|
||||||
|
|
||||||
class Scripting : ConfigContainer() {
|
class Scripting : ConfigContainer() {
|
||||||
val developerMode = boolean("developer_mode", false) { requireRestart() }
|
val developerMode = boolean("developer_mode", false) { requireRestart() }
|
@ -1,7 +1,7 @@
|
|||||||
package me.rhunk.snapenhance.core.config.impl
|
package me.rhunk.snapenhance.common.config.impl
|
||||||
|
|
||||||
import me.rhunk.snapenhance.core.config.ConfigContainer
|
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||||
import me.rhunk.snapenhance.core.config.FeatureNotice
|
import me.rhunk.snapenhance.common.config.FeatureNotice
|
||||||
|
|
||||||
class Spoof : ConfigContainer() {
|
class Spoof : ConfigContainer() {
|
||||||
inner class Location : ConfigContainer(hasGlobalState = true) {
|
inner class Location : ConfigContainer(hasGlobalState = true) {
|
@ -1,6 +1,6 @@
|
|||||||
package me.rhunk.snapenhance.core.config.impl
|
package me.rhunk.snapenhance.common.config.impl
|
||||||
|
|
||||||
import me.rhunk.snapenhance.core.config.ConfigContainer
|
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||||
|
|
||||||
class StreaksReminderConfig : ConfigContainer(hasGlobalState = true) {
|
class StreaksReminderConfig : ConfigContainer(hasGlobalState = true) {
|
||||||
val interval = integer("interval", 2)
|
val interval = integer("interval", 2)
|
@ -1,14 +1,17 @@
|
|||||||
package me.rhunk.snapenhance.core.config.impl
|
package me.rhunk.snapenhance.common.config.impl
|
||||||
|
|
||||||
import me.rhunk.snapenhance.core.config.ConfigContainer
|
import me.rhunk.snapenhance.common.config.ConfigContainer
|
||||||
import me.rhunk.snapenhance.core.config.FeatureNotice
|
import me.rhunk.snapenhance.common.config.FeatureNotice
|
||||||
import me.rhunk.snapenhance.core.messaging.MessagingRuleType
|
import me.rhunk.snapenhance.common.data.MessagingRuleType
|
||||||
import me.rhunk.snapenhance.features.impl.ui.ClientBootstrapOverride
|
|
||||||
|
|
||||||
class UserInterfaceTweaks : ConfigContainer() {
|
class UserInterfaceTweaks : ConfigContainer() {
|
||||||
inner class BootstrapOverride : ConfigContainer() {
|
class BootstrapOverride : ConfigContainer() {
|
||||||
|
companion object {
|
||||||
|
val tabs = arrayOf("map", "chat", "camera", "discover", "spotlight")
|
||||||
|
}
|
||||||
|
|
||||||
val appAppearance = unique("app_appearance", "always_light", "always_dark")
|
val appAppearance = unique("app_appearance", "always_light", "always_dark")
|
||||||
val homeTab = unique("home_tab", *ClientBootstrapOverride.tabs) { addNotices(FeatureNotice.UNSTABLE) }
|
val homeTab = unique("home_tab", *tabs) { addNotices(FeatureNotice.UNSTABLE) }
|
||||||
}
|
}
|
||||||
|
|
||||||
inner class FriendFeedMessagePreview : ConfigContainer(hasGlobalState = true) {
|
inner class FriendFeedMessagePreview : ConfigContainer(hasGlobalState = true) {
|
@ -1,6 +1,5 @@
|
|||||||
package me.rhunk.snapenhance.data
|
package me.rhunk.snapenhance.common.data
|
||||||
|
|
||||||
import me.rhunk.snapenhance.core.Logger
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
|
|
||||||
@ -61,9 +60,7 @@ enum class FileType(
|
|||||||
val headerBytes = ByteArray(16)
|
val headerBytes = ByteArray(16)
|
||||||
System.arraycopy(array, 0, headerBytes, 0, 16)
|
System.arraycopy(array, 0, headerBytes, 0, 16)
|
||||||
val hex = bytesToHex(headerBytes)
|
val hex = bytesToHex(headerBytes)
|
||||||
return fileSignatures.entries.firstOrNull { hex.startsWith(it.key) }?.value ?: UNKNOWN.also {
|
return fileSignatures.entries.firstOrNull { hex.startsWith(it.key) }?.value ?: UNKNOWN
|
||||||
Logger.directDebug("unknown file type, header: $hex", "FileType")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun fromInputStream(inputStream: InputStream): FileType {
|
fun fromInputStream(inputStream: InputStream): FileType {
|
@ -1,6 +1,6 @@
|
|||||||
package me.rhunk.snapenhance.core.messaging
|
package me.rhunk.snapenhance.common.data
|
||||||
|
|
||||||
import me.rhunk.snapenhance.core.util.SerializableDataObject
|
import me.rhunk.snapenhance.common.util.SerializableDataObject
|
||||||
|
|
||||||
|
|
||||||
enum class RuleState(
|
enum class RuleState(
|
@ -1,6 +1,6 @@
|
|||||||
package me.rhunk.snapenhance.data
|
package me.rhunk.snapenhance.common.data
|
||||||
|
|
||||||
import me.rhunk.snapenhance.core.util.protobuf.ProtoReader
|
import me.rhunk.snapenhance.common.util.protobuf.ProtoReader
|
||||||
|
|
||||||
enum class MessageState {
|
enum class MessageState {
|
||||||
PREPARING, SENDING, COMMITTED, FAILED, CANCELING
|
PREPARING, SENDING, COMMITTED, FAILED, CANCELING
|
@ -1,4 +1,4 @@
|
|||||||
package me.rhunk.snapenhance.core.download.data
|
package me.rhunk.snapenhance.common.data.download
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
package me.rhunk.snapenhance.core.download.data
|
package me.rhunk.snapenhance.common.data.download
|
||||||
|
|
||||||
data class DownloadMetadata(
|
data class DownloadMetadata(
|
||||||
val mediaIdentifier: String?,
|
val mediaIdentifier: String?,
|
@ -1,4 +1,4 @@
|
|||||||
package me.rhunk.snapenhance.core.download.data
|
package me.rhunk.snapenhance.common.data.download
|
||||||
|
|
||||||
|
|
||||||
data class DashOptions(val offsetTime: Long, val duration: Long?)
|
data class DashOptions(val offsetTime: Long, val duration: Long?)
|
@ -1,4 +1,4 @@
|
|||||||
package me.rhunk.snapenhance.core.download.data
|
package me.rhunk.snapenhance.common.data.download
|
||||||
|
|
||||||
enum class DownloadStage(
|
enum class DownloadStage(
|
||||||
val isFinalStage: Boolean = false,
|
val isFinalStage: Boolean = false,
|
@ -1,4 +1,4 @@
|
|||||||
package me.rhunk.snapenhance.core.download.data
|
package me.rhunk.snapenhance.common.data.download
|
||||||
|
|
||||||
enum class MediaDownloadSource(
|
enum class MediaDownloadSource(
|
||||||
val key: String,
|
val key: String,
|
@ -1,8 +1,7 @@
|
|||||||
@file:OptIn(ExperimentalEncodingApi::class)
|
@file:OptIn(ExperimentalEncodingApi::class)
|
||||||
|
|
||||||
package me.rhunk.snapenhance.core.download.data
|
package me.rhunk.snapenhance.common.data.download
|
||||||
|
|
||||||
import me.rhunk.snapenhance.data.wrapper.impl.media.EncryptionWrapper
|
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
import javax.crypto.Cipher
|
import javax.crypto.Cipher
|
||||||
import javax.crypto.CipherInputStream
|
import javax.crypto.CipherInputStream
|
||||||
@ -25,6 +24,3 @@ data class MediaEncryptionKeyPair(
|
|||||||
|
|
||||||
fun Pair<ByteArray, ByteArray>.toKeyPair()
|
fun Pair<ByteArray, ByteArray>.toKeyPair()
|
||||||
= MediaEncryptionKeyPair(Base64.UrlSafe.encode(this.first), Base64.UrlSafe.encode(this.second))
|
= MediaEncryptionKeyPair(Base64.UrlSafe.encode(this.first), Base64.UrlSafe.encode(this.second))
|
||||||
|
|
||||||
fun EncryptionWrapper.toKeyPair()
|
|
||||||
= MediaEncryptionKeyPair(Base64.UrlSafe.encode(this.keySpec), Base64.UrlSafe.encode(this.ivKeyParameterSpec))
|
|
@ -1,4 +1,4 @@
|
|||||||
package me.rhunk.snapenhance.core.download.data
|
package me.rhunk.snapenhance.common.data.download
|
||||||
|
|
||||||
enum class SplitMediaAssetType {
|
enum class SplitMediaAssetType {
|
||||||
ORIGINAL, OVERLAY
|
ORIGINAL, OVERLAY
|
@ -1,4 +1,4 @@
|
|||||||
package me.rhunk.snapenhance.core.database
|
package me.rhunk.snapenhance.common.database
|
||||||
|
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
|
|
@ -1,15 +1,12 @@
|
|||||||
package me.rhunk.snapenhance.core.database.objects
|
package me.rhunk.snapenhance.common.database.impl
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import me.rhunk.snapenhance.Constants
|
import me.rhunk.snapenhance.common.database.DatabaseObject
|
||||||
import me.rhunk.snapenhance.core.database.DatabaseObject
|
import me.rhunk.snapenhance.common.util.ktx.getBlobOrNull
|
||||||
import me.rhunk.snapenhance.core.util.ktx.getBlobOrNull
|
import me.rhunk.snapenhance.common.util.ktx.getInteger
|
||||||
import me.rhunk.snapenhance.core.util.ktx.getInteger
|
import me.rhunk.snapenhance.common.util.ktx.getLong
|
||||||
import me.rhunk.snapenhance.core.util.ktx.getLong
|
import me.rhunk.snapenhance.common.util.ktx.getStringOrNull
|
||||||
import me.rhunk.snapenhance.core.util.ktx.getStringOrNull
|
|
||||||
import me.rhunk.snapenhance.core.util.protobuf.ProtoReader
|
|
||||||
import me.rhunk.snapenhance.data.ContentType
|
|
||||||
|
|
||||||
@Suppress("ArrayInDataClass")
|
@Suppress("ArrayInDataClass")
|
||||||
data class ConversationMessage(
|
data class ConversationMessage(
|
@ -1,12 +1,12 @@
|
|||||||
package me.rhunk.snapenhance.core.database.objects
|
package me.rhunk.snapenhance.common.database.impl
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import me.rhunk.snapenhance.core.database.DatabaseObject
|
import me.rhunk.snapenhance.common.database.DatabaseObject
|
||||||
import me.rhunk.snapenhance.core.util.ktx.getIntOrNull
|
import me.rhunk.snapenhance.common.util.ktx.getIntOrNull
|
||||||
import me.rhunk.snapenhance.core.util.ktx.getInteger
|
import me.rhunk.snapenhance.common.util.ktx.getInteger
|
||||||
import me.rhunk.snapenhance.core.util.ktx.getLong
|
import me.rhunk.snapenhance.common.util.ktx.getLong
|
||||||
import me.rhunk.snapenhance.core.util.ktx.getStringOrNull
|
import me.rhunk.snapenhance.common.util.ktx.getStringOrNull
|
||||||
|
|
||||||
data class FriendFeedEntry(
|
data class FriendFeedEntry(
|
||||||
var id: Int = 0,
|
var id: Int = 0,
|
@ -1,12 +1,12 @@
|
|||||||
package me.rhunk.snapenhance.core.database.objects
|
package me.rhunk.snapenhance.common.database.impl
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import me.rhunk.snapenhance.core.database.DatabaseObject
|
import me.rhunk.snapenhance.common.database.DatabaseObject
|
||||||
import me.rhunk.snapenhance.core.util.SerializableDataObject
|
import me.rhunk.snapenhance.common.util.SerializableDataObject
|
||||||
import me.rhunk.snapenhance.core.util.ktx.getInteger
|
import me.rhunk.snapenhance.common.util.ktx.getInteger
|
||||||
import me.rhunk.snapenhance.core.util.ktx.getLong
|
import me.rhunk.snapenhance.common.util.ktx.getLong
|
||||||
import me.rhunk.snapenhance.core.util.ktx.getStringOrNull
|
import me.rhunk.snapenhance.common.util.ktx.getStringOrNull
|
||||||
|
|
||||||
data class FriendInfo(
|
data class FriendInfo(
|
||||||
var id: Int = 0,
|
var id: Int = 0,
|
@ -1,10 +1,10 @@
|
|||||||
package me.rhunk.snapenhance.core.database.objects
|
package me.rhunk.snapenhance.common.database.impl
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import me.rhunk.snapenhance.core.database.DatabaseObject
|
import me.rhunk.snapenhance.common.database.DatabaseObject
|
||||||
import me.rhunk.snapenhance.core.util.ktx.getInteger
|
import me.rhunk.snapenhance.common.util.ktx.getInteger
|
||||||
import me.rhunk.snapenhance.core.util.ktx.getStringOrNull
|
import me.rhunk.snapenhance.common.util.ktx.getStringOrNull
|
||||||
|
|
||||||
data class StoryEntry(
|
data class StoryEntry(
|
||||||
var id: Int = 0,
|
var id: Int = 0,
|
@ -1,10 +1,10 @@
|
|||||||
package me.rhunk.snapenhance.core.database.objects
|
package me.rhunk.snapenhance.common.database.impl
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import me.rhunk.snapenhance.core.database.DatabaseObject
|
import me.rhunk.snapenhance.common.database.DatabaseObject
|
||||||
import me.rhunk.snapenhance.core.util.ktx.getInteger
|
import me.rhunk.snapenhance.common.util.ktx.getInteger
|
||||||
import me.rhunk.snapenhance.core.util.ktx.getStringOrNull
|
import me.rhunk.snapenhance.common.util.ktx.getStringOrNull
|
||||||
|
|
||||||
class UserConversationLink(
|
class UserConversationLink(
|
||||||
var userId: String? = null,
|
var userId: String? = null,
|
@ -1,10 +1,26 @@
|
|||||||
package me.rhunk.snapenhance.core.logger
|
package me.rhunk.snapenhance.common.logger
|
||||||
|
|
||||||
|
import android.util.Log
|
||||||
|
|
||||||
abstract class AbstractLogger(
|
abstract class AbstractLogger(
|
||||||
logChannel: LogChannel,
|
logChannel: LogChannel,
|
||||||
) {
|
) {
|
||||||
private val TAG = logChannel.shortName
|
private val TAG = logChannel.shortName
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
|
||||||
|
private const val TAG = "SnapEnhanceCommon"
|
||||||
|
|
||||||
|
fun directDebug(message: Any?, tag: String = TAG) {
|
||||||
|
Log.println(Log.DEBUG, tag, message.toString())
|
||||||
|
}
|
||||||
|
|
||||||
|
fun directError(message: Any?, throwable: Throwable, tag: String = TAG) {
|
||||||
|
Log.println(Log.ERROR, tag, message.toString())
|
||||||
|
Log.println(Log.ERROR, tag, throwable.toString())
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
open fun debug(message: Any?, tag: String = TAG) {}
|
open fun debug(message: Any?, tag: String = TAG) {}
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user