init devmenu models

This commit is contained in:
2023-10-20 18:04:34 +03:00
parent b3b6bbbb6b
commit d955b65ea2
53 changed files with 809 additions and 0 deletions
@@ -0,0 +1,3 @@
package com.megboyzz.devmenu.domain.entities
val devmenuId = "DevMenu"
@@ -0,0 +1,9 @@
package com.megboyzz.devmenu.domain.entities
import java.util.Date
data class FileProps(
val fileName: String,
val size: Int,
val dateOfCreation: Date
)
@@ -0,0 +1,19 @@
package com.megboyzz.devmenu.domain.entities
enum class GameLang(private val lang: String) {
System("sys"),
Chinese("cn"),
Dutch("nl"),
English("en"),
French("fr"),
Deutsch("de"),
Italian("it"),
Japanese("ja"),
Korean("kr"),
Portuguese("br"),
Russian("ru"),
Spanish("es");
override fun toString() = lang
}
@@ -0,0 +1,8 @@
package com.megboyzz.devmenu.domain.entities
data class Settings(
val enable: Boolean,
val trackingInterval: Int,
val pathToSaveTrackable: String,
val lang: GameLang
)
@@ -0,0 +1,8 @@
package com.megboyzz.devmenu.domain.entities
import java.util.Date
data class SvmwProps(
val description: String,
val date: Date
)
@@ -0,0 +1,14 @@
package com.megboyzz.devmenu.domain.repository
import com.megboyzz.devmenu.domain.entities.FileProps
import java.io.File
interface FilesRepository {
val internalRoot: File
val externalRoot: File
fun getFileProps(file: File): FileProps
}
@@ -0,0 +1,13 @@
package com.megboyzz.devmenu.domain.repository
import java.io.File
interface ReplacementRepository {
suspend fun replaceFile(what: File, to: File): Result<Boolean>
suspend fun recoverReplacement(replacement: File): Result<Boolean>
suspend fun getAllReplacements(): List<File>
}
@@ -0,0 +1,11 @@
package com.megboyzz.devmenu.domain.repository
import java.io.File
interface SaveRepository {
suspend fun loadSaveFile(file: File): Boolean
suspend fun uploadCurrentSaveFile(fileToUpload: File): Boolean
}
@@ -0,0 +1,11 @@
package com.megboyzz.devmenu.domain.repository
import com.megboyzz.devmenu.domain.entities.Settings
interface SettingsRepository {
suspend fun getSettings(): Settings
suspend fun setSettings(settings: Settings)
}
@@ -0,0 +1,20 @@
package com.megboyzz.devmenu.domain.repository
import com.megboyzz.devmenu.domain.entities.SvmwProps
import java.io.File
interface SvmwRepository {
suspend fun createSvmwFromCurrentSaveFileAndSetIt(): Boolean
suspend fun createSvmwFromCurrentSaveFile(fileToSave: File): Boolean
suspend fun createSvmw(fileToSave: File, saveFile: File): Boolean
suspend fun loadSvmw(svmw: File): Boolean
suspend fun getInfoAboutSvmw(svmw: File): SvmwProps?
suspend fun getInfoAboutLoadedSvmw(): SvmwProps?
}
@@ -0,0 +1,11 @@
package com.megboyzz.devmenu.domain.usecases.files
import com.megboyzz.devmenu.domain.repository.FilesRepository
import java.io.File
import javax.inject.Inject
class GetExternalFilesUseCase @Inject constructor(
private val filesRepository: FilesRepository
) {
operator fun invoke(childPath: String = ""): File = File(filesRepository.externalRoot, childPath)
}
@@ -0,0 +1,12 @@
package com.megboyzz.devmenu.domain.usecases.files
import com.megboyzz.devmenu.domain.entities.FileProps
import com.megboyzz.devmenu.domain.repository.FilesRepository
import java.io.File
import javax.inject.Inject
class GetFilePropsUseCase @Inject constructor(
private val filesRepository: FilesRepository
) {
operator fun invoke(file: File): FileProps = filesRepository.getFileProps(file)
}
@@ -0,0 +1,13 @@
package com.megboyzz.devmenu.domain.usecases.files
import com.megboyzz.devmenu.domain.repository.FilesRepository
import java.io.File
import javax.inject.Inject
class GetInternalFilesUseCase @Inject constructor(
private val filesRepository: FilesRepository
) {
operator fun invoke(childPath: String = ""): File = File(filesRepository.internalRoot, childPath)
}
@@ -0,0 +1,7 @@
package com.megboyzz.devmenu.domain.usecases.files
import java.io.File
class RemoveFileUseCase {
operator fun invoke(file: File): Boolean = file.delete()
}
@@ -0,0 +1,14 @@
package com.megboyzz.devmenu.domain.usecases.files
import com.megboyzz.devmenu.domain.repository.FilesRepository
import javax.inject.Inject
class RemoveInternalDataUseCase @Inject constructor(
private val filesRepository: FilesRepository
) {
operator fun invoke(): Boolean{
val listFiles = filesRepository.internalRoot.listFiles() ?: return false
listFiles.forEach { it.deleteRecursively() }
return true
}
}
@@ -0,0 +1,14 @@
package com.megboyzz.devmenu.domain.usecases.files
import com.megboyzz.devmenu.domain.repository.ReplacementRepository
import java.io.File
import javax.inject.Inject
class ReplaceFileUseCase @Inject constructor(
private val replacementRepository: ReplacementRepository
) {
suspend operator fun invoke(what: File, to: File): Result<Boolean>
= replacementRepository.replaceFile(what, to)
}
@@ -0,0 +1,10 @@
package com.megboyzz.devmenu.domain.usecases.replacement
import com.megboyzz.devmenu.domain.repository.ReplacementRepository
import javax.inject.Inject
class GetAllReplacedFilesUseCase @Inject constructor(
private val replacementRepository: ReplacementRepository
) {
suspend operator fun invoke() = replacementRepository.getAllReplacements()
}
@@ -0,0 +1,13 @@
package com.megboyzz.devmenu.domain.usecases.replacement
import javax.inject.Inject
class RecoverAllReplacementsUseCase @Inject constructor(
private val getAllReplacedFilesUseCase: GetAllReplacedFilesUseCase,
private val recoverReplacementUseCase: RecoverReplacementUseCase
) {
suspend operator fun invoke(){
val listReplacedFiles = getAllReplacedFilesUseCase()
listReplacedFiles.forEach { recoverReplacementUseCase(it) }
}
}
@@ -0,0 +1,11 @@
package com.megboyzz.devmenu.domain.usecases.replacement
import com.megboyzz.devmenu.domain.repository.ReplacementRepository
import java.io.File
import javax.inject.Inject
class RecoverReplacementUseCase @Inject constructor(
private val replacementRepository: ReplacementRepository
) {
suspend operator fun invoke(replacement: File) = replacementRepository.recoverReplacement(replacement)
}
@@ -0,0 +1,11 @@
package com.megboyzz.devmenu.domain.usecases.save
import com.megboyzz.devmenu.domain.repository.SaveRepository
import java.io.File
import javax.inject.Inject
class LoadSaveFileUseCase @Inject constructor(
private val saveRepository: SaveRepository
) {
suspend operator fun invoke(file: File) = if(file.exists()) saveRepository.loadSaveFile(file) else false
}
@@ -0,0 +1,15 @@
package com.megboyzz.devmenu.domain.usecases.save
import com.megboyzz.devmenu.domain.repository.SaveRepository
import java.io.File
import javax.inject.Inject
class UploadSaveFileUseCase @Inject constructor(
private val saveRepository: SaveRepository
) {
suspend operator fun invoke(fileToUpload: File) =
if(fileToUpload.exists())
saveRepository.uploadCurrentSaveFile(fileToUpload)
else
false
}
@@ -0,0 +1,11 @@
package com.megboyzz.devmenu.domain.usecases.settings
import com.megboyzz.devmenu.domain.entities.Settings
import com.megboyzz.devmenu.domain.repository.SettingsRepository
import javax.inject.Inject
class GetSettingsUseCase @Inject constructor(
private val settingsRepository: SettingsRepository
) {
suspend operator fun invoke(): Settings = settingsRepository.getSettings()
}
@@ -0,0 +1,11 @@
package com.megboyzz.devmenu.domain.usecases.settings
import com.megboyzz.devmenu.domain.entities.Settings
import com.megboyzz.devmenu.domain.repository.SettingsRepository
import javax.inject.Inject
class SetSettingsUseCase @Inject constructor(
private val settingsRepository: SettingsRepository
) {
suspend operator fun invoke(settings: Settings) = settingsRepository.setSettings(settings)
}
@@ -0,0 +1,12 @@
package com.megboyzz.devmenu.domain.usecases.settings
import com.megboyzz.devmenu.domain.entities.devmenuId
import com.megboyzz.devmenu.domain.repository.FilesRepository
import java.io.File
import javax.inject.Inject
class TurnOffDevMenuUseCase @Inject constructor(
private val filesRepository: FilesRepository
) {
operator fun invoke() = File(filesRepository.externalRoot, devmenuId).delete()
}
@@ -0,0 +1,27 @@
package com.megboyzz.devmenu.domain.usecases.svmw
import com.megboyzz.devmenu.domain.repository.SvmwRepository
import java.io.File
import javax.inject.Inject
class CreateSvmwFileUseCase @Inject constructor(
private val svmwRepository: SvmwRepository
) {
suspend operator fun invoke(
fileToSave: File? = null,
saveFile: File? = null
){
val a = fileToSave != null
val b = saveFile != null
when {
a && b -> svmwRepository.createSvmw(fileToSave!!, saveFile!!)
a && !b -> svmwRepository.createSvmwFromCurrentSaveFile(fileToSave!!)
!a && !b -> svmwRepository.createSvmwFromCurrentSaveFileAndSetIt()
}
}
}
@@ -0,0 +1,11 @@
package com.megboyzz.devmenu.domain.usecases.svmw
import com.megboyzz.devmenu.domain.repository.SvmwRepository
import java.io.File
import javax.inject.Inject
class GetSvmwFilePropsUseCase @Inject constructor(
private val svmwRepository: SvmwRepository
) {
suspend operator fun invoke(file: File) = svmwRepository.getInfoAboutSvmw(file)
}
@@ -0,0 +1,10 @@
package com.megboyzz.devmenu.domain.usecases.svmw
import com.megboyzz.devmenu.domain.repository.SvmwRepository
import javax.inject.Inject
class GetSvmwPropsUseCase @Inject constructor(
private val svmwRepository: SvmwRepository
) {
suspend operator fun invoke() = svmwRepository.getInfoAboutLoadedSvmw()
}
@@ -0,0 +1,11 @@
package com.megboyzz.devmenu.domain.usecases.svmw
import com.megboyzz.devmenu.domain.repository.SvmwRepository
import java.io.File
import javax.inject.Inject
class LoadSvmwUseCase @Inject constructor(
private val svmwRepository: SvmwRepository
) {
suspend operator fun invoke(file: File) = if(file.exists()) svmwRepository.loadSvmw(file) else false
}
@@ -0,0 +1,33 @@
import com.megboyzz.devmenu.domain.repository.FilesRepository
import com.megboyzz.devmenu.domain.repository.ReplacementRepository
import com.megboyzz.devmenu.domain.repository.SaveRepository
import com.megboyzz.devmenu.domain.repository.SettingsRepository
import com.megboyzz.devmenu.domain.repository.SvmwRepository
import org.mockito.Mockito.mock
import org.mockito.Mockito.`when`
import java.io.File
import kotlin.coroutines.coroutineContext
class UseCaseTest {
private val filesRepository = mock(FilesRepository::class.java)
private val replacementRepository = mock(ReplacementRepository::class.java)
private val saveRepository = mock(SaveRepository::class.java)
private val settingsRepository = mock(SettingsRepository::class.java)
private val svmwRepository = mock(SvmwRepository::class.java)
private val externalFile = File("D:\\NFSMW Online\\com.ea.games.nfs13_na")
private val internalFile = File("D:\\NFSMW Online")
init {
`when`(filesRepository.externalRoot).thenReturn(externalFile)
`when`(filesRepository.internalRoot).thenReturn(internalFile)
//`when`(replacementRepository.getAllReplacements()).thenReturn()
}
}