2022-04-04 14:03:10 +00:00
|
|
|
package com.coldmint.rust.pro
|
|
|
|
|
|
|
|
import android.annotation.SuppressLint
|
|
|
|
import com.coldmint.rust.pro.base.BaseActivity
|
|
|
|
import org.json.JSONObject
|
|
|
|
import android.os.Bundle
|
|
|
|
import android.content.Intent
|
2022-08-17 01:25:20 +00:00
|
|
|
import android.text.Editable
|
|
|
|
import android.text.TextWatcher
|
2022-08-14 02:43:53 +00:00
|
|
|
import android.util.Log
|
2022-04-04 14:03:10 +00:00
|
|
|
import com.coldmint.rust.pro.tool.AppSettings
|
|
|
|
import org.json.JSONException
|
|
|
|
import org.json.JSONArray
|
|
|
|
import android.view.inputmethod.EditorInfo
|
2022-08-14 02:43:53 +00:00
|
|
|
import android.view.LayoutInflater
|
2022-04-04 14:03:10 +00:00
|
|
|
import android.view.Menu
|
|
|
|
import android.view.MenuItem
|
|
|
|
import com.google.android.material.snackbar.Snackbar
|
|
|
|
import com.coldmint.rust.core.SourceFile
|
|
|
|
import android.view.View
|
|
|
|
import android.view.inputmethod.InputMethodManager
|
|
|
|
import android.widget.*
|
|
|
|
import androidx.core.view.isVisible
|
2022-08-14 02:43:53 +00:00
|
|
|
import androidx.lifecycle.viewModelScope
|
|
|
|
import com.coldmint.dialog.CoreDialog
|
|
|
|
import com.coldmint.rust.core.LocalTemplatePackage
|
2022-04-04 14:03:10 +00:00
|
|
|
import com.coldmint.rust.core.dataBean.InputParserDataBean
|
|
|
|
import com.coldmint.rust.core.dataBean.IntroducingDataBean
|
|
|
|
import com.coldmint.rust.core.dataBean.ListParserDataBean
|
2022-08-14 02:43:53 +00:00
|
|
|
import com.coldmint.rust.core.dataBean.template.LocalTemplateFile
|
|
|
|
import com.coldmint.rust.core.dataBean.template.TemplatePackage
|
2022-08-17 01:25:20 +00:00
|
|
|
import com.coldmint.rust.core.dataBean.template.WebTemplateData
|
|
|
|
import com.coldmint.rust.core.interfaces.ApiCallBack
|
2022-04-04 14:03:10 +00:00
|
|
|
import com.coldmint.rust.core.interfaces.TemplateParser
|
|
|
|
import com.coldmint.rust.core.templateParser.InputParser
|
|
|
|
import com.coldmint.rust.core.templateParser.IntroducingParser
|
|
|
|
import com.coldmint.rust.core.templateParser.ListParser
|
|
|
|
import com.coldmint.rust.core.tool.FileOperator
|
2022-08-17 01:25:20 +00:00
|
|
|
import com.coldmint.rust.core.web.ServerConfiguration
|
|
|
|
import com.coldmint.rust.core.web.TemplatePhp
|
2022-04-04 14:03:10 +00:00
|
|
|
import com.coldmint.rust.pro.databinding.ActivityTemplateParserBinding
|
2022-07-06 06:04:54 +00:00
|
|
|
import com.coldmint.rust.pro.tool.UnitAutoCompleteHelper
|
2022-08-14 02:43:53 +00:00
|
|
|
import com.coldmint.rust.pro.viewmodel.TemplateParserViewModel
|
2022-08-17 01:25:20 +00:00
|
|
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
|
|
|
import com.google.android.material.dialog.MaterialDialogs
|
2022-04-04 14:03:10 +00:00
|
|
|
import com.google.android.material.textfield.TextInputLayout
|
|
|
|
import com.google.gson.Gson
|
|
|
|
import java.io.File
|
|
|
|
import java.util.*
|
|
|
|
import java.util.concurrent.Executors
|
|
|
|
import kotlin.collections.ArrayList
|
|
|
|
import kotlin.concurrent.thread
|
|
|
|
|
2022-08-14 02:43:53 +00:00
|
|
|
class TemplateParserActivity : BaseActivity<ActivityTemplateParserBinding>() {
|
2022-04-04 14:03:10 +00:00
|
|
|
|
2022-08-14 02:43:53 +00:00
|
|
|
val viewModel: TemplateParserViewModel by lazy {
|
|
|
|
TemplateParserViewModel()
|
|
|
|
}
|
|
|
|
|
|
|
|
private val language by lazy {
|
|
|
|
AppSettings.getValue(AppSettings.Setting.AppLanguage, Locale.getDefault().language)
|
2022-04-04 14:03:10 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
|
|
|
val inflater = menuInflater
|
|
|
|
inflater.inflate(R.menu.menu_template, menu)
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
@SuppressLint("CheckResult")
|
|
|
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
|
|
|
when (item.itemId) {
|
|
|
|
R.id.preview_static_code -> {
|
2022-08-14 02:43:53 +00:00
|
|
|
var code = viewModel.getCode()
|
|
|
|
if (code.isBlank()) {
|
|
|
|
code = getString(R.string.not_found_data2)
|
2022-04-04 14:03:10 +00:00
|
|
|
}
|
2022-08-17 01:25:20 +00:00
|
|
|
MaterialAlertDialogBuilder(this).setTitle(viewModel.getTemplateName(language))
|
|
|
|
.setMessage(code).setPositiveButton(R.string.dialog_ok) { i, i2 ->
|
2022-08-14 02:43:53 +00:00
|
|
|
}.show()
|
2022-04-04 14:03:10 +00:00
|
|
|
}
|
|
|
|
}
|
2022-08-14 02:43:53 +00:00
|
|
|
return super.onOptionsItemSelected(item)
|
2022-04-04 14:03:10 +00:00
|
|
|
}
|
|
|
|
|
2022-08-14 02:43:53 +00:00
|
|
|
override fun whenCreateActivity(savedInstanceState: Bundle?, canUseView: Boolean) {
|
|
|
|
if (canUseView) {
|
|
|
|
setReturnButton()
|
2022-08-17 01:25:20 +00:00
|
|
|
val unitAutoCompleteHelper = UnitAutoCompleteHelper(this)
|
|
|
|
unitAutoCompleteHelper.onBindAutoCompleteTextView(viewBinding.fileNameInputView)
|
|
|
|
viewBinding.fileNameInputView.addTextChangedListener(object : TextWatcher {
|
|
|
|
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun afterTextChanged(p0: Editable?) {
|
|
|
|
val text = p0.toString()
|
|
|
|
if (text.isBlank()) {
|
|
|
|
viewBinding.fileNameInputLayout.error = getString(R.string.file_name_error)
|
|
|
|
} else {
|
|
|
|
viewBinding.fileNameInputLayout.isErrorEnabled = false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
})
|
|
|
|
viewBinding.fab.setOnClickListener {
|
|
|
|
val name = viewBinding.fileNameInputView.text.toString()
|
|
|
|
if (name.isNotBlank()) {
|
|
|
|
val build = viewModel.buildFile(this, name)
|
|
|
|
if (build) {
|
2022-09-04 07:49:29 +00:00
|
|
|
val data = Intent()
|
|
|
|
data.putExtra("File", viewModel.getOutputPath())
|
|
|
|
setResult(RESULT_OK, data)
|
2022-08-17 01:25:20 +00:00
|
|
|
finish()
|
|
|
|
} else {
|
|
|
|
Snackbar.make(
|
|
|
|
viewBinding.fab,
|
|
|
|
R.string.create_unit_failed,
|
|
|
|
Snackbar.LENGTH_SHORT
|
|
|
|
).show()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
val createDirectory = intent.getStringExtra("createDirectory")
|
|
|
|
if (createDirectory == null) {
|
|
|
|
Toast.makeText(this, "没有设置创建目录", Toast.LENGTH_SHORT).show()
|
|
|
|
finish()
|
|
|
|
return
|
|
|
|
}
|
|
|
|
viewModel.setCreateDirectory(createDirectory)
|
2022-08-14 02:43:53 +00:00
|
|
|
val link = intent.getStringExtra("link")
|
|
|
|
if (link == null) {
|
|
|
|
Toast.makeText(this, "请设置链接", Toast.LENGTH_SHORT).show()
|
|
|
|
finish()
|
|
|
|
return
|
2022-04-04 14:03:10 +00:00
|
|
|
}
|
2022-08-14 02:43:53 +00:00
|
|
|
val isLocal = intent.getBooleanExtra("isLocal", false)
|
|
|
|
if (isLocal) {
|
|
|
|
Log.d("模板解析器", "读取本地模板$link")
|
|
|
|
viewModel.setTemplate(LocalTemplateFile(File(link)))
|
|
|
|
val templateParserList = viewModel.getTemplateParserList(this)
|
|
|
|
templateParserList.forEach {
|
|
|
|
viewBinding.base.addView(it.contextView)
|
2022-04-04 14:03:10 +00:00
|
|
|
}
|
2022-08-14 02:43:53 +00:00
|
|
|
viewBinding.linearLayout.isVisible = false
|
|
|
|
viewBinding.nestedScrollView.isVisible = true
|
|
|
|
title = viewModel.getTemplateName(language)
|
|
|
|
} else {
|
2022-08-17 01:25:20 +00:00
|
|
|
Log.d("模板解析器", "加载网络模板$link")
|
|
|
|
TemplatePhp.instance.getTemplate(link, object : ApiCallBack<WebTemplateData> {
|
|
|
|
override fun onResponse(t: WebTemplateData) {
|
|
|
|
if (t.code == ServerConfiguration.Success_Code) {
|
|
|
|
viewModel.setTemplate(t.data)
|
|
|
|
val templateParserList =
|
|
|
|
viewModel.getTemplateParserList(this@TemplateParserActivity)
|
|
|
|
templateParserList.forEach {
|
|
|
|
viewBinding.base.addView(it.contextView)
|
|
|
|
}
|
|
|
|
viewBinding.linearLayout.isVisible = false
|
|
|
|
viewBinding.nestedScrollView.isVisible = true
|
|
|
|
title = viewModel.getTemplateName(language)
|
|
|
|
} else {
|
|
|
|
Toast.makeText(
|
|
|
|
this@TemplateParserActivity,
|
|
|
|
t.message,
|
|
|
|
Toast.LENGTH_SHORT
|
|
|
|
).show()
|
|
|
|
finish()
|
|
|
|
}
|
|
|
|
}
|
2022-04-04 14:03:10 +00:00
|
|
|
|
2022-08-17 01:25:20 +00:00
|
|
|
override fun onFailure(e: Exception) {
|
|
|
|
e.printStackTrace()
|
|
|
|
Toast.makeText(
|
|
|
|
this@TemplateParserActivity,
|
|
|
|
R.string.network_error,
|
|
|
|
Toast.LENGTH_SHORT
|
|
|
|
).show()
|
|
|
|
finish()
|
|
|
|
}
|
|
|
|
|
|
|
|
})
|
2022-04-04 14:03:10 +00:00
|
|
|
}
|
2022-08-17 01:25:20 +00:00
|
|
|
|
2022-04-04 14:03:10 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-08-14 02:43:53 +00:00
|
|
|
override fun getViewBindingObject(layoutInflater: LayoutInflater): ActivityTemplateParserBinding {
|
|
|
|
return ActivityTemplateParserBinding.inflate(layoutInflater)
|
2022-04-04 14:03:10 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|