Compare commits

...

2 Commits

Author SHA1 Message Date
xiaji
7cd9d9a4bf 修复Flomo笔记提交:API Key改为可选,添加content_type参数 2026-04-06 08:20:15 +08:00
xiaji
0f0f1f8ea4 配置页添加模型删除功能 2026-04-06 08:10:25 +08:00
4 changed files with 50 additions and 9 deletions

View File

@@ -508,7 +508,7 @@ class MainActivity : AppCompatActivity() {
val settings = Gson().fromJson(json, NoteSettingsData::class.java) val settings = Gson().fromJson(json, NoteSettingsData::class.java)
val noteConfig = settings.noteApiConfig val noteConfig = settings.noteApiConfig
if (noteConfig == null || noteConfig.apiUrl.isBlank() || noteConfig.apiKey.isBlank()) { if (noteConfig == null || noteConfig.apiUrl.isBlank()) {
Toast.makeText(this, "请先配置笔记API", Toast.LENGTH_SHORT).show() Toast.makeText(this, "请先配置笔记API", Toast.LENGTH_SHORT).show()
return return
} }
@@ -541,10 +541,12 @@ class MainActivity : AppCompatActivity() {
return withContext(Dispatchers.IO) { return withContext(Dispatchers.IO) {
try { try {
val client = OkHttpClient() val client = OkHttpClient()
val requestBody = when (apiType) { val (requestBody, useAuth) = when (apiType) {
"Flomo" -> { "Flomo" -> {
val json = JSONObject().put("content", content) val json = JSONObject()
json.toString().toRequestBody("application/json".toMediaType()) .put("content", content)
.put("content_type", "markdown")
Pair(json.toString().toRequestBody("application/json".toMediaType()), false)
} }
"Notion" -> { "Notion" -> {
val json = JSONObject() val json = JSONObject()
@@ -556,20 +558,24 @@ class MainActivity : AppCompatActivity() {
) )
) )
) )
json.toString().toRequestBody("application/json".toMediaType()) Pair(json.toString().toRequestBody("application/json".toMediaType()), true)
} }
else -> { else -> {
val json = JSONObject().put("content", content) val json = JSONObject().put("content", content)
json.toString().toRequestBody("application/json".toMediaType()) Pair(json.toString().toRequestBody("application/json".toMediaType()), apiKey.isNotBlank())
} }
} }
val request = Request.Builder() val requestBuilder = Request.Builder()
.url(apiUrl) .url(apiUrl)
.addHeader("Authorization", "Bearer $apiKey")
.addHeader("Content-Type", "application/json") .addHeader("Content-Type", "application/json")
.post(requestBody) .post(requestBody)
.build()
if (useAuth && apiKey.isNotBlank()) {
requestBuilder.addHeader("Authorization", "Bearer $apiKey")
}
val request = requestBuilder.build()
val response = client.newCall(request).execute() val response = client.newCall(request).execute()
response.isSuccessful response.isSuccessful

View File

@@ -49,6 +49,7 @@ class SecondActivity : AppCompatActivity() {
private lateinit var spModelSelector: Spinner private lateinit var spModelSelector: Spinner
private lateinit var llModelList: LinearLayout private lateinit var llModelList: LinearLayout
private lateinit var btnAddModel: Button private lateinit var btnAddModel: Button
private lateinit var btnDeleteModel: Button
private lateinit var etBaseUrl: EditText private lateinit var etBaseUrl: EditText
private lateinit var etApiKey: EditText private lateinit var etApiKey: EditText
private lateinit var btnToggleApiKey: ImageButton private lateinit var btnToggleApiKey: ImageButton
@@ -160,6 +161,7 @@ class SecondActivity : AppCompatActivity() {
etModelName = findViewById(R.id.etModelName) etModelName = findViewById(R.id.etModelName)
spModelSelector = findViewById(R.id.spModelSelector) spModelSelector = findViewById(R.id.spModelSelector)
btnAddModel = findViewById(R.id.btnAddModel) btnAddModel = findViewById(R.id.btnAddModel)
btnDeleteModel = findViewById(R.id.btnDeleteModel)
btnTestConnection = findViewById(R.id.btnTestConnection) btnTestConnection = findViewById(R.id.btnTestConnection)
tvTestStatus = findViewById(R.id.tvTestStatus) tvTestStatus = findViewById(R.id.tvTestStatus)
@@ -382,6 +384,21 @@ class SecondActivity : AppCompatActivity() {
spModelSelector.setSelection(selectedLlmIndex) spModelSelector.setSelection(selectedLlmIndex)
} }
btnDeleteModel.setOnClickListener {
if (llmConfigs.size <= 1) {
Toast.makeText(this, "至少保留一个配置", Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
llmConfigs.removeAt(selectedLlmIndex)
if (selectedLlmIndex >= llmConfigs.size) {
selectedLlmIndex = llmConfigs.size - 1
}
loadSelectedModelToFields()
refreshModelSelector()
spModelSelector.setSelection(selectedLlmIndex)
Toast.makeText(this, "配置已删除", Toast.LENGTH_SHORT).show()
}
// Setup headers // Setup headers
llHeadersList.removeAllViews() llHeadersList.removeAllViews()
if (headerConfigs.isEmpty()) { if (headerConfigs.isEmpty()) {

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/error"/>
<corners android:radius="8dp"/>
</shape>

View File

@@ -182,6 +182,18 @@
android:background="@drawable/button_primary_bg" android:background="@drawable/button_primary_bg"
android:minWidth="0dp" android:minWidth="0dp"
android:minHeight="0dp"/> android:minHeight="0dp"/>
<Button
android:id="@+id/btnDeleteModel"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:layout_marginStart="4dp"
android:text="删除"
android:textSize="14sp"
android:textColor="@color/white"
android:background="@drawable/button_danger_bg"
android:minWidth="0dp"
android:minHeight="0dp"/>
</LinearLayout> </LinearLayout>
<!-- Base URL --> <!-- Base URL -->