Skip to content

Commit

Permalink
fix: 新增工作目录设置,废弃storagePath设置,优化编译脚本
Browse files Browse the repository at this point in the history
  • Loading branch information
hectorqin committed Jul 21, 2022
1 parent 8222501 commit 3bb84c7
Show file tree
Hide file tree
Showing 12 changed files with 233 additions and 53 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,5 @@ out
/reader-assets
/.lh/

/simple-web/
/simple-web/
/tauri/
30 changes: 16 additions & 14 deletions build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ task=$1

version=""

rootDir=$(dirname $0)

checkJava()
{
if [ -d /Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home ]; then
Expand All @@ -25,13 +27,13 @@ getVersion()
version=$(grep -Eo "^version = .*" $1 | grep -Eo "['\"].*['\"]" | tr -d "'\"")
}

getVersion ./build.gradle.kts
getVersion $rootDir/build.gradle.kts

case $task in
build)
checkJava
# 调试打包
./gradlew buildReader
$rootDir/gradlew buildReader
;;
run)
checkJava
Expand All @@ -40,7 +42,7 @@ case $task in
if [[ -z "$port" ]]; then
port=8080
fi
./gradlew assemble --info
$rootDir/gradlew assemble --info
if test $? -eq 0; then
shift
shift
Expand All @@ -50,17 +52,17 @@ case $task in
win)
checkJava
# 打包 windows 安装包
JAVAFX_PLATFORM=win ./gradlew packageReaderWin
JAVAFX_PLATFORM=win $rootDir/gradlew packageReaderWin
;;
linux)
checkJava
# 打包 linux 安装包
JAVAFX_PLATFORM=linux ./gradlew packageReaderLinux
JAVAFX_PLATFORM=linux $rootDir/gradlew packageReaderLinux
;;
mac)
checkJava
# 打包 mac 安装包
JAVAFX_PLATFORM=mac ./gradlew packageReaderMac
JAVAFX_PLATFORM=mac $rootDir/gradlew packageReaderMac
;;
serve)
# 服务端一键运行
Expand All @@ -69,8 +71,8 @@ case $task in
port=8080
fi
mv src/main/java/com/htmake/reader/ReaderUIApplication.kt src/main/java/com/htmake/reader/ReaderUIApplication.kt.back
getVersion ./cli.gradle
./gradlew -b cli.gradle assemble --info
getVersion $rootDir/cli.gradle
$rootDir/gradlew -b cli.gradle assemble --info
if test $? -eq 0; then
shift
shift
Expand All @@ -85,29 +87,29 @@ case $task in
shift
export JAVA_HOME=$oldJAVAHome
mv src/main/java/com/htmake/reader/ReaderUIApplication.kt src/main/java/com/htmake/reader/ReaderUIApplication.kt.back
getVersion ./cli.gradle
./gradlew -b cli.gradle $@
getVersion $rootDir/cli.gradle
$rootDir/gradlew -b cli.gradle $@
mv src/main/java/com/htmake/reader/ReaderUIApplication.kt.back src/main/java/com/htmake/reader/ReaderUIApplication.kt
;;
yarn)
# yarn 快捷命令,默认 install
shift
cd web
cd $rootDir/web
yarn $@
;;
web)
# 开发web页面
cd web
cd $rootDir/web
yarn serve
;;
sync)
# 编译同步web资源
cd web
cd $rootDir/web
yarn sync
;;
*)
echo "
USAGE: ./build.sh build|run|win|linux|mac|serve|cli|yarn|web|sync
USAGE: $0 build|run|win|linux|mac|serve|cli|yarn|web|sync
build 调试打包
run 桌面端编译运行,需要先执行 sync 命令编译同步web资源
Expand Down
8 changes: 4 additions & 4 deletions doc.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@

## 数据存储

接口服务使用文件存储书源及目录等信息,存储位置为 storage 目录(可通过运行时添加 `-Dreader.app.storagePath=/path/to/storage` 修改)。
接口服务使用文件存储书源及目录等信息,存储位置为 storage 目录(可通过运行时添加 `-Dreader.app.workDir=/path/to/workDir` 修改工作目录,storage 为工作目录的子目录,名称不可更改)。

> MacOS客户端的存储目录是 `~/.reader/storage`,Window和Linux客户端为 `运行目录/storage`
Expand Down Expand Up @@ -110,7 +110,7 @@ storage
```yml
reader:
app:
storagePath: storage # 数据存储目录
workDir: "" # 工作目录
showUI: false # 是否显示UI
debug: false # 是否调试模式
packaged: false # 是否打包为客户端
Expand Down Expand Up @@ -386,8 +386,8 @@ yarn sync

java -jar build/libs/reader-${version}.jar

# 指定 storage 路径 默认为相对路径 storage
# java -Dreader.app.storagePath=cacheStorage -jar build/libs/reader-${version}.jar
# 指定 工作目录 路径 默认为当前目录
# java -jar build/libs/reader-${version}.jar --reader.app.workDir=reader

# web端 https://localhost:8080/
# 接口地址 https://localhost:8080/reader3/
Expand Down
41 changes: 33 additions & 8 deletions src/main/java/com/htmake/reader/ReaderUIApplication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ import com.htmake.reader.verticle.RestVerticle
import com.htmake.reader.utils.SpringContextUtils
import com.htmake.reader.SpringEvent

import com.htmake.reader.utils.getStorage
import com.htmake.reader.utils.saveStorage
import com.htmake.reader.utils.asJsonObject
import com.htmake.reader.utils.jsonEncode
import com.htmake.reader.utils.getRelativePath

import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.SpringApplication
Expand Down Expand Up @@ -63,6 +63,7 @@ import org.springframework.core.env.ConfigurableEnvironment
import org.springframework.core.env.MapPropertySource

import java.util.concurrent.CompletableFuture
import java.io.File

private val logger = KotlinLogging.logger {}
private var launchArgs = arrayOf<String>()
Expand All @@ -79,6 +80,7 @@ class ReaderUIApplication: Application() {
var isSpringBootLaunched = false
var springBootError = ""
var showUI = false
var workDir = ""

var defaultIcons = arrayOf<Image>();

Expand All @@ -92,6 +94,12 @@ class ReaderUIApplication: Application() {
var envListener = object: ApplicationListener<ApplicationEnvironmentPreparedEvent> {
override fun onApplicationEvent(event: ApplicationEnvironmentPreparedEvent) {
env = event.getEnvironment()
// 读取工作目录 命令行参数 > 环境变量
workDir = env.getProperty("reader.app.workDir", String::class.java) ?: ""
if (workDir.isEmpty()) {
workDir = env.getProperty("READER_APP_WORKDIR", String::class.java) ?: ""
}
logger.info("workDir: {}", workDir)
// 加载 windowConfig
var windowConfigSource = loadPropertySourceFromWindowConfig()
env.getPropertySources().addFirst(windowConfigSource)
Expand Down Expand Up @@ -260,8 +268,10 @@ class ReaderUIApplication: Application() {
windowConfigSource.put("reader.server.port", windowConfigPort)
}
}
val showUI = windowConfigMap.getOrDefault("showUI", true) as Boolean? ?: true
windowConfigSource.put("reader.app.showUI", showUI)
val showUI = windowConfigMap.getOrDefault("showUI", null)
if (showUI != null) {
windowConfigSource.put("reader.app.showUI", showUI as Boolean)
}
val debug = windowConfigMap.getOrDefault("debug", null)
if (debug != null) {
windowConfigSource.put("reader.app.debug", debug as Boolean)
Expand All @@ -274,10 +284,21 @@ class ReaderUIApplication: Application() {
return MapPropertySource("windowConfig", windowConfigSource)
}

fun getWorkDirFile(vararg subDirFiles: String): File {
if (workDir.isNotEmpty()) {
return File(workDir + File.separator + getRelativePath(*subDirFiles))
} else {
return File(getRelativePath(*subDirFiles))
}
}

fun loadWindowConfig() {
val windowConfigObject = asJsonObject(getStorage("windowConfig"))
if (windowConfigObject != null) {
windowConfigMap = windowConfigObject.map
val windowConfigFile = getWorkDirFile("storage", "windowConfig.json")
if (windowConfigFile.exists()) {
val windowConfigObject = asJsonObject(windowConfigFile.readText())
if (windowConfigObject != null) {
windowConfigMap = windowConfigObject.map
}
}
logger.info("windowConfigMap: {}", windowConfigMap)
}
Expand Down Expand Up @@ -381,7 +402,11 @@ class ReaderUIApplication: Application() {
}

override fun stop() {
saveStorage("windowConfig", value = windowConfigMap, pretty = true)
val windowConfigFile = getWorkDirFile("storage", "windowConfig.json")
if (!windowConfigFile.parentFile.exists()) {
windowConfigFile.parentFile.mkdirs()
}
windowConfigFile.writeText(jsonEncode(windowConfigMap, true))
super.stop()
var context = SpringContextUtils.getApplicationContext()
logger.info("application stop: {}", context)
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/com/htmake/reader/api/YueduApi.kt
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,11 @@ class YueduApi : RestVerticle() {
router.get("/reader3/searchBookContent").coroutineHandler { bookController.searchBookContent(it) }
router.post("/reader3/searchBookContent").coroutineHandler { bookController.searchBookContent(it) }

// mongodb 备份
router.post("/reader3/backupToMongodb").coroutineHandler { bookController.backupToMongodb(it) }
router.post("/reader3/restoreFromMongodb").coroutineHandler { bookController.restoreFromMongodb(it) }


/** 用户模块 */
// 上传文件
router.post("/reader3/uploadFile").coroutineHandler { userController.uploadFile(it) }
Expand Down
99 changes: 99 additions & 0 deletions src/main/java/com/htmake/reader/api/controller/BookController.kt
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import com.htmake.reader.utils.unzip
import com.htmake.reader.utils.zip
import com.htmake.reader.utils.jsonEncode
import com.htmake.reader.utils.getRelativePath
import com.htmake.reader.utils.MongoManager
import com.htmake.reader.verticle.RestVerticle
import com.htmake.reader.SpringEvent
import org.springframework.stereotype.Component
Expand Down Expand Up @@ -3023,4 +3024,102 @@ class BookController(coroutineContext: CoroutineContext): BaseController(corouti
val newText = content.substring(po1, po2)
return queryIndexInResult to newText
}

suspend fun backupToMongodb(context: RoutingContext): ReturnData {
val returnData = ReturnData()
if (!checkAuth(context)) {
return returnData.setData("NEED_LOGIN").setErrorMsg("请登录后使用")
}
if (!MongoManager.isInit()) {
return returnData.setErrorMsg("请先设置 mongoUri")
}
if (!checkManagerAuth(context)) {
return returnData.setData("NEED_SECURE_KEY").setErrorMsg("请输入管理密码")
}

val syncDataFileList = arrayListOf(*backupFileNames)

val handler = { userNameSpace: String ->
syncDataFileList.forEach {
getUserStorage(userNameSpace, it)?.let { content ->
saveUserStorage(userNameSpace, it, content)
}
}
}

handler("default")

if (appConfig.secure) {
var userMap = mutableMapOf<String, Map<String, Any>>()
var userMapJson: JsonObject? = asJsonObject(getStorage("data", "users"))
if (userMapJson != null) {
userMap = userMapJson.map as MutableMap<String, Map<String, Any>>
}
userMap.forEach {
try {
var ns = it.value.getOrDefault("username", "") as String? ?: ""
if (ns.isNotEmpty()) {
handler(ns)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
}

getStorage("users")?.let { content ->
saveStorage("users", value = content)
}
return returnData.setData("")
}

suspend fun restoreFromMongodb(context: RoutingContext): ReturnData {
val returnData = ReturnData()
if (!checkAuth(context)) {
return returnData.setData("NEED_LOGIN").setErrorMsg("请登录后使用")
}
if (!MongoManager.isInit()) {
return returnData.setErrorMsg("请先设置 mongoUri")
}
if (!checkManagerAuth(context)) {
return returnData.setData("NEED_SECURE_KEY").setErrorMsg("请输入管理密码")
}
val syncDataFileList = arrayListOf(*backupFileNames)
val handler = { userNameSpace: String ->
syncDataFileList.forEach {
var file = File(getWorkDir("storage", "data", userNameSpace, it + ".json"))
if (file.exists()) {
file.delete()
}
}
}

handler("default")

if (appConfig.secure) {
var userMap = mutableMapOf<String, Map<String, Any>>()
var userMapJson: JsonObject? = asJsonObject(getStorage("data", "users"))
if (userMapJson != null) {
userMap = userMapJson.map as MutableMap<String, Map<String, Any>>
}
userMap.forEach {
try {
var ns = it.value.getOrDefault("username", "") as String? ?: ""
if (ns.isNotEmpty()) {
handler(ns)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
}

var usersFile = File(getWorkDir("storage", "users.json"))
if (usersFile.exists()) {
usersFile.delete()
getStorage("users")
}

return returnData.setData("")
}
}
2 changes: 1 addition & 1 deletion src/main/java/com/htmake/reader/config/AppConfig.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import org.springframework.stereotype.Component
@Component
@ConfigurationProperties(prefix = "reader.app")
class AppConfig {
lateinit var storagePath: String // 存储路径
var workDir = "" // 工作目录
var showUI = false // 是否显示UI
var debug = false // 是否调试web
var packaged = false // 是否打包为app
Expand Down
Loading

0 comments on commit 3bb84c7

Please sign in to comment.