Update project structure and impl all domain layer
This commit is contained in:
@@ -1,26 +0,0 @@
|
||||
package com.megboyzz.devmenu.data.repositories
|
||||
|
||||
class MyClass {
|
||||
|
||||
fun main(){
|
||||
|
||||
val input = readln().split(",").associate {
|
||||
val s = it.trim().split(" ")
|
||||
s[0] to s[1].toInt()
|
||||
}
|
||||
|
||||
var sum = 0
|
||||
|
||||
readln().split(" ").forEach {
|
||||
|
||||
val s = input[it] ?: 0
|
||||
sum += s
|
||||
|
||||
}
|
||||
|
||||
println(sum)
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,90 +0,0 @@
|
||||
package com.megboyzz.devmenu.data.util
|
||||
|
||||
import android.os.FileObserver
|
||||
import android.util.Log
|
||||
import java.io.File
|
||||
import java.io.FileInputStream
|
||||
import java.io.FileOutputStream
|
||||
import java.util.LinkedList
|
||||
import java.util.Queue
|
||||
import java.util.zip.ZipEntry
|
||||
import java.util.zip.ZipOutputStream
|
||||
|
||||
abstract class BaseObserver(source: String) : FileObserver(source) {
|
||||
|
||||
private val eventQueue : Queue<Int> = LinkedList()
|
||||
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
final override fun onEvent(event: Int, path: String?) {
|
||||
|
||||
val e = FileEvent.entries.find { it.value == event }
|
||||
|
||||
val fileEvent = e ?: FileEvent.UNKNOWN
|
||||
|
||||
Log.i("BaseObserver", "event code = ${event.toHexString()}, FileEvent is $fileEvent")
|
||||
|
||||
onEvent(fileEvent, path)
|
||||
}
|
||||
|
||||
private fun hasLastThreeEvents() = runCatching {
|
||||
eventQueue.size == 3 && eventQueue.poll() == OPEN && eventQueue.poll() == ACCESS && eventQueue.poll() == CLOSE_NOWRITE
|
||||
}.getOrNull() ?: false
|
||||
|
||||
abstract fun onEvent(event: FileEvent, path: String?)
|
||||
|
||||
protected fun File.list(regex: String = ".") =
|
||||
this.list { dir, _ -> Regex(regex).matches(dir.absolutePath) }?.asList() ?: listOf()
|
||||
|
||||
|
||||
protected infix fun File.copyToThe(destination: File){
|
||||
this.copyTo(destination, overwrite = true)
|
||||
}
|
||||
|
||||
protected fun zipAll(outputFolder: String, filesToCompress: List<String>) {
|
||||
if(filesToCompress.isEmpty()){
|
||||
Log.i("BaseObserver", "no files exit!")
|
||||
return
|
||||
}
|
||||
try {
|
||||
// Проверяем, существует ли выходная папка. Если нет, создаем её.
|
||||
val outputDir = File(outputFolder)
|
||||
if (!outputDir.exists()) outputDir.mkdirs()
|
||||
|
||||
// Генерируем имя ZIP-архива на основе времени
|
||||
val timestamp = System.currentTimeMillis()
|
||||
val zipFileName = "$outputFolder/saves_$timestamp.zip"
|
||||
val zipOutputStream = ZipOutputStream(FileOutputStream(zipFileName))
|
||||
|
||||
for (fileToCompress in filesToCompress) {
|
||||
// Проверяем, существует ли файл
|
||||
val inputFile = File(fileToCompress)
|
||||
if (inputFile.exists()) {
|
||||
// Создаем объект ZipEntry для каждого файла
|
||||
val zipEntry = ZipEntry(inputFile.name)
|
||||
zipOutputStream.putNextEntry(zipEntry)
|
||||
|
||||
// Читаем содержимое файла и записываем его в ZIP-архив
|
||||
val fileInputStream = FileInputStream(inputFile)
|
||||
val buffer = ByteArray(1024)
|
||||
var len: Int
|
||||
while (fileInputStream.read(buffer).also { len = it } > 0) {
|
||||
zipOutputStream.write(buffer, 0, len)
|
||||
}
|
||||
fileInputStream.close()
|
||||
|
||||
// Закрываем текущий ZipEntry
|
||||
zipOutputStream.closeEntry()
|
||||
} else {
|
||||
Log.i("SaveFileObserver", "Файл не существует: $fileToCompress")
|
||||
}
|
||||
}
|
||||
|
||||
// Закрываем ZipOutputStream
|
||||
zipOutputStream.close()
|
||||
Log.i("SaveFileObserver", "Архивация завершена. Архив создан: $zipFileName")
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
package com.megboyzz.devmenu.data.util
|
||||
|
||||
import android.os.FileObserver
|
||||
|
||||
enum class FileEvent(val value: Int) {
|
||||
|
||||
ACCESS(FileObserver.ACCESS),
|
||||
MODIFY(FileObserver.MODIFY),
|
||||
ATTRIB(FileObserver.ATTRIB),
|
||||
CLOSE_WRITE(FileObserver.CLOSE_WRITE),
|
||||
CLOSE_NOWRITE(FileObserver.CLOSE_NOWRITE),
|
||||
OPEN(FileObserver.OPEN),
|
||||
MOVED_FROM(FileObserver.MOVED_FROM),
|
||||
MOVED_TO(FileObserver.MOVED_TO),
|
||||
CREATE(FileObserver.CREATE),
|
||||
DELETE(FileObserver.DELETE),
|
||||
DELETE_SELF(FileObserver.DELETE_SELF),
|
||||
MOVE_SELF(FileObserver.MOVE_SELF),
|
||||
UNKNOWN(-1);
|
||||
|
||||
override fun toString() = this.name
|
||||
}
|
||||
@@ -1,52 +0,0 @@
|
||||
package com.megboyzz.devmenu.data.util
|
||||
|
||||
import android.util.Log
|
||||
import java.io.File
|
||||
import kotlin.concurrent.thread
|
||||
|
||||
|
||||
class SaveFileObserver(
|
||||
private val source: String,
|
||||
private val destinationFolder: String
|
||||
) : BaseObserver(source) {
|
||||
|
||||
private var countSnapshots: Int = 1
|
||||
|
||||
private val checkList = listOf(
|
||||
FileEvent.CLOSE_WRITE,
|
||||
FileEvent.MODIFY,
|
||||
//FileEvent.DELETE,
|
||||
FileEvent.CREATE,
|
||||
//FileEvent.ACCESS,
|
||||
//FileEvent.OPEN,
|
||||
FileEvent.CLOSE_NOWRITE
|
||||
)
|
||||
init {
|
||||
val dest = File(destinationFolder)
|
||||
if(dest.isFile) dest.delete()
|
||||
if(!dest.exists()) dest.mkdir()
|
||||
val list = dest.list{
|
||||
dir, name -> name.endsWith(".sb")
|
||||
}
|
||||
list?.forEach { File(dest, it).delete() }
|
||||
File(source) copyToThe File(destinationFolder, "BASE.sb")
|
||||
}
|
||||
|
||||
override fun onEvent(event: FileEvent, path: String?) {
|
||||
Log.i("SaveFileObserver", "onEvent $event")
|
||||
if (event in checkList) {
|
||||
Log.d("SaveFileObserver", "File created or modified: $source")
|
||||
File(source) copyToThe File(destinationFolder, "$event-$countSnapshots.sb")
|
||||
countSnapshots++
|
||||
}
|
||||
}
|
||||
|
||||
override fun stopWatching() {
|
||||
super.stopWatching()
|
||||
val filesList = File(destinationFolder).list{ _, name -> name.endsWith(".sb") }?.map { it }
|
||||
if (filesList != null) {
|
||||
zipAll(destinationFolder, filesList)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user