-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
23 changed files
with
598 additions
and
43 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
package me.kbai.zhenxunui.model | ||
|
||
data class ExecuteSql( | ||
val sql: String | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package me.kbai.zhenxunui.model | ||
|
||
import com.google.gson.annotations.SerializedName | ||
|
||
data class SqlLog( | ||
val id: Int, | ||
/** | ||
* The time for executed sql. sample: `2024-03-06T06:54:48.829937+00:00` | ||
*/ | ||
@SerializedName("create_time") | ||
val createTime: String, | ||
@SerializedName("is_suc") | ||
val success: Boolean, | ||
val ip: String, | ||
val result: String, | ||
val sql: String | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package me.kbai.zhenxunui.model | ||
|
||
import com.google.gson.annotations.SerializedName | ||
|
||
data class TableColumn( | ||
@SerializedName("column_name") | ||
val name: String, | ||
@SerializedName("data_type") | ||
val type: String, | ||
@SerializedName("max_length") | ||
val maxLength: Int?, | ||
@SerializedName("is_nullable") | ||
val nullable: String | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
package me.kbai.zhenxunui.model | ||
|
||
data class TableListItem( | ||
val name: String, | ||
val desc: String? | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
43 changes: 43 additions & 0 deletions
43
app/src/main/java/me/kbai/zhenxunui/ui/db/DbManageFragment.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package me.kbai.zhenxunui.ui.db | ||
|
||
import android.view.LayoutInflater | ||
import android.view.ViewGroup | ||
import androidx.fragment.app.viewModels | ||
import me.kbai.zhenxunui.base.BaseFragment | ||
import me.kbai.zhenxunui.databinding.FragmentDbManageBinding | ||
import me.kbai.zhenxunui.extends.setOnDebounceClickListener | ||
import me.kbai.zhenxunui.extends.viewLifecycleScope | ||
import me.kbai.zhenxunui.viewmodel.DbManageViewModel | ||
|
||
/** | ||
* @author Sean on 2023/5/30 | ||
*/ | ||
class DbManageFragment : BaseFragment<FragmentDbManageBinding>() { | ||
|
||
private val mViewModel by viewModels<DbManageViewModel>() | ||
|
||
override fun getViewBinding( | ||
inflater: LayoutInflater, | ||
container: ViewGroup? | ||
): FragmentDbManageBinding = FragmentDbManageBinding.inflate(inflater, container, false) | ||
|
||
override fun initView() = viewBinding.run { | ||
|
||
srlRefresh.setOnRefreshListener { | ||
mViewModel.requestTableList() | ||
} | ||
|
||
btnSql.setOnDebounceClickListener { | ||
//TODO | ||
} | ||
} | ||
|
||
override fun initData() { | ||
mViewModel.tables.observe(viewLifecycleOwner) { | ||
viewBinding.srlRefresh.isRefreshing = false | ||
viewBinding.rvTables.adapter = DbTableAdapter(it, mViewModel, viewLifecycleScope) | ||
} | ||
|
||
mViewModel.requestTableList() | ||
} | ||
} |
69 changes: 69 additions & 0 deletions
69
app/src/main/java/me/kbai/zhenxunui/ui/db/DbTableAdapter.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
package me.kbai.zhenxunui.ui.db | ||
|
||
import android.view.LayoutInflater | ||
import android.view.ViewGroup | ||
import androidx.core.view.isVisible | ||
import androidx.core.view.size | ||
import androidx.lifecycle.Observer | ||
import androidx.recyclerview.widget.RecyclerView | ||
import kotlinx.coroutines.CoroutineScope | ||
import kotlinx.coroutines.Job | ||
import kotlinx.coroutines.launch | ||
import me.kbai.zhenxunui.databinding.ItemDbManageTableBinding | ||
import me.kbai.zhenxunui.extends.setOnDebounceClickListener | ||
import me.kbai.zhenxunui.model.TableListItem | ||
import me.kbai.zhenxunui.viewmodel.DbManageViewModel | ||
|
||
class DbTableAdapter( | ||
private val data: List<TableListItem>, | ||
private val viewModel: DbManageViewModel, | ||
private val coroutineScope: CoroutineScope | ||
) : RecyclerView.Adapter<DbTableAdapter.ItemViewHolder>() { | ||
|
||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( | ||
ItemDbManageTableBinding.inflate(LayoutInflater.from(parent.context), parent, false) | ||
) | ||
|
||
override fun getItemCount() = data.size | ||
|
||
override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { | ||
val item = data[position] | ||
|
||
holder.binding.run { | ||
tvTableName.text = item.name | ||
tvDescription.text = item.desc | ||
|
||
root.setOnDebounceClickListener { | ||
elFields.toggleExpand() | ||
|
||
if (rvFields.adapter != null) { | ||
return@setOnDebounceClickListener | ||
} | ||
coroutineScope.launch { | ||
viewModel.getColumns(item.name) | ||
.collect { | ||
if (!holder.recycled) { | ||
pbWaiting.isVisible = false | ||
rvFields.adapter = TableFieldAdapter(it) | ||
rvFields.post { elFields.expand() } | ||
} | ||
} | ||
} | ||
} | ||
|
||
rvFields.adapter = null | ||
elFields.collapse(false) | ||
pbWaiting.isVisible = true | ||
holder.recycled = false | ||
} | ||
} | ||
|
||
override fun onViewRecycled(holder: ItemViewHolder) { | ||
holder.recycled = true | ||
} | ||
|
||
class ItemViewHolder(val binding: ItemDbManageTableBinding) : | ||
RecyclerView.ViewHolder(binding.root) { | ||
var recycled: Boolean = false | ||
} | ||
} |
37 changes: 37 additions & 0 deletions
37
app/src/main/java/me/kbai/zhenxunui/ui/db/TableFieldAdapter.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
package me.kbai.zhenxunui.ui.db | ||
|
||
import android.view.LayoutInflater | ||
import android.view.ViewGroup | ||
import androidx.recyclerview.widget.RecyclerView | ||
import me.kbai.zhenxunui.R | ||
import me.kbai.zhenxunui.databinding.ItemDbManageFieldBinding | ||
import me.kbai.zhenxunui.model.TableColumn | ||
|
||
class TableFieldAdapter( | ||
private val data: List<TableColumn> | ||
) : RecyclerView.Adapter<TableFieldAdapter.ItemViewHolder>() { | ||
|
||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( | ||
ItemDbManageFieldBinding.inflate( | ||
LayoutInflater.from(parent.context), parent, false | ||
) | ||
) | ||
|
||
override fun getItemCount() = data.size | ||
|
||
override fun onBindViewHolder(holder: ItemViewHolder, position: Int) = holder.binding.run { | ||
val item = data[position] | ||
|
||
tvName.text = item.name | ||
tvType.text = item.type | ||
tvMaxLength.text = | ||
tvMaxLength.context.getString( | ||
R.string.max_length_format, | ||
item.maxLength?.toString().orEmpty() | ||
) | ||
tvNullable.text = tvNullable.context.getString(R.string.nullable_format, item.nullable) | ||
} | ||
|
||
class ItemViewHolder(val binding: ItemDbManageFieldBinding) : | ||
RecyclerView.ViewHolder(binding.root) | ||
} |
19 changes: 0 additions & 19 deletions
19
app/src/main/java/me/kbai/zhenxunui/ui/home/HomeFragment.kt
This file was deleted.
Oops, something went wrong.
43 changes: 43 additions & 0 deletions
43
app/src/main/java/me/kbai/zhenxunui/viewmodel/DbManageViewModel.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package me.kbai.zhenxunui.viewmodel | ||
|
||
import androidx.lifecycle.LiveData | ||
import androidx.lifecycle.MutableLiveData | ||
import androidx.lifecycle.ViewModel | ||
import androidx.lifecycle.viewModelScope | ||
import androidx.webkit.internal.ApiFeature.M | ||
import kotlinx.coroutines.flow.flow | ||
import kotlinx.coroutines.launch | ||
import me.kbai.zhenxunui.extends.apiCollect | ||
import me.kbai.zhenxunui.model.TableColumn | ||
import me.kbai.zhenxunui.model.TableListItem | ||
import me.kbai.zhenxunui.repository.ApiRepository | ||
|
||
class DbManageViewModel : ViewModel() { | ||
|
||
private val _tables: MutableLiveData<List<TableListItem>> = MutableLiveData() | ||
val tables: LiveData<List<TableListItem>> = _tables | ||
|
||
private val _columnMap: MutableMap<String, List<TableColumn>> = HashMap() | ||
|
||
fun requestTableList() = viewModelScope.launch { | ||
ApiRepository.getTableList().apiCollect { | ||
if (it.success()) { | ||
_tables.value = it.data ?: return@apiCollect | ||
_columnMap.clear() | ||
} | ||
} | ||
} | ||
|
||
fun getColumns(table: String) = flow { | ||
val data = _columnMap[table] | ||
if (data != null) { | ||
emit(data) | ||
return@flow | ||
} | ||
val res = ApiRepository.getTableColumn(table).apiCollect() | ||
if (res.success() && res.data != null) { | ||
_columnMap[table] = res.data | ||
emit(res.data) | ||
} | ||
} | ||
} |
Oops, something went wrong.