-
Notifications
You must be signed in to change notification settings - Fork 0
/
FileHelper.kt
119 lines (101 loc) · 4.23 KB
/
FileHelper.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import org.json.JSONObject
import java.io.File
class FileHelper(val pathHelper: PathHelper) {
/**
* CREATE COM.COMPANY.EXAMPLE PATH DIRECTORIES
*/
fun createPathDirectories() {
for (dir in kotlinProjectDirs) {
val path = pathHelper.getTargetPath(dir)
val directories = File(pathHelper.replaceDirectoriesPath(path))
directories.mkdirs()
}
}
/**
* COPY NON MODIFIED FILES
*/
fun copyFiles() {
val sourceFolder = File(pathHelper.filesToCopy)
val targetFolder = File(pathHelper.targetDirPath)
if (targetFolder.exists()) {
Log.d("SDK files already exist in target path ${pathHelper.targetDirPath}, will try to delete previous build files.")
if (targetFolder.deleteRecursively()) {
Log.d("Old project files successfully deleted.")
} else {
Log.w("Could not delete old project files.")
}
}
targetFolder.mkdir()
if (!sourceFolder.copyRecursively(target = targetFolder, overwrite = true)) {
throw Exception("An error occurred while copying files with target folder : ${targetFolder.absolutePath}")
}
renameTxtXmlFiles(targetFolder)
}
private fun renameTxtXmlFiles(targetFolder: File) {
targetFolder.walkTopDown().filter { folder -> !folder.isHidden && folder.isDirectory }
.forEach { currentFolder ->
currentFolder.walkTopDown()
.filter { file -> !file.isHidden && file.isFile && file.absolutePath.endsWith(XML_TXT_EXT) }
.forEach { currentTxtXmlFile ->
val newFile = File(currentTxtXmlFile.absolutePath.replaceXmlTxtSuffix())
currentTxtXmlFile.renameTo(newFile)
}
}
}
}
fun getDumpedInfoFile(assetsPath: String): File {
val projectDataSetAndroidPath = getProjectDataSetAndroidPath(assetsPath)
val dumpInfoFile = File(projectDataSetAndroidPath + File.separator + "dump_info.json")
if (dumpInfoFile.exists()) {
dumpInfoFile.delete()
}
dumpInfoFile.parentFile.mkdirs()
if (!dumpInfoFile.createNewFile()) {
throw Exception("An error occurred while creating new file : $dumpInfoFile")
}
return dumpInfoFile
}
fun getProjectDataSetAndroidPath(assetsPath: String): String {
val projectDataSetDirPath = File(assetsPath).parentFile.parent
return projectDataSetDirPath + File.separator + "android"
}
fun getDataPath(assetsPath: String, tableName: String, index: Int? = null): String {
val path = assetsPath + File.separator + DATA_PATH_KEY + File.separator +
"$tableName.$DATA_DATASET_SUFFIX" + File.separator +
"$tableName."
return if (index == null) {
path + DATA_JSON_SUFFIX
} else {
"$path$index.$DATA_JSON_SUFFIX"
}
}
fun File.isWithTemplateName() = this.name.contains(TEMPLATE_PLACEHOLDER)
fun File.isActionFromNavBarTemplate() = this.name.contains("$ACTION_FROM_NAV_BAR_KEY$TEMPLATE_PLACEHOLDER")
fun File.readFile(): String {
return this.bufferedReader().use {
it.readText()
}
}
// Used for both custom templates and custom formatters
fun getManifest(path: String): File = File(path + File.separator + "manifest.json")
// Used for both custom templates and custom formatters
fun getManifestJSONContent(path: String): JSONObject? {
Log.d("getManifestJSONContent: $path")
val manifest = getManifest(path)
return getManifestJSONContent(manifest)
}
fun getManifestJSONContent(manifestFile: File): JSONObject? {
return if (manifestFile.exists()) {
val jsonString = manifestFile.readFile()
retrieveJSONObject(jsonString)
} else
null
}
fun imageExistsInFormatter(path: String, imageName: String): Boolean =
File(path + File.separator + "Images" + File.separator + imageName).exists()
fun imageExistsInFormatterInDarkMode(path: String, imageName: String): Boolean {
val file = File(path + File.separator + "Images" + File.separator + imageName)
val name = file.nameWithoutExtension + "_dark." + file.extension
val darkModeFile = File(path + File.separator + "Images" + File.separator + name)
return darkModeFile.exists()
}