Skip to content

Commit c191110

Browse files
committed
*修复聊天时点击stop时,偶发闪退 fix #29
*修复bug,提升稳定性 *优化错误弹窗内容 *增加gpt-4o-2024-08-06模型
1 parent 41ec558 commit c191110

18 files changed

+218
-128
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ download and install the APK package from the [Releases section](https://github.
2929
- 🛠️ **Customizable**: Customizable prompts, model, temperature, history, and reply length limit settings, offering a personalized user experience.
3030
- 🌙 **Stylish**: Provides dark mode and customized themes to protect your eyes while enhancing user experience.
3131
- 🖼️ **Image recognition**: Supports image recognition function to quickly and accurately obtain image information.
32-
- 🌏 **Multilingual**: Supports multiple languages such as English, Simplified Chinese, Traditional Chinese, Italian, Spanish, German, Dutch, Arabic, Portuguese, Korean, Vietnamese.
32+
- 🌏 **Multilingual**: Supports multiple languages such as English, Simplified Chinese, Traditional Chinese, French, Italian, Spanish, German, Dutch, Arabic, Portuguese, Japanese, Korean, Vietnamese, Indonesian.
3333

3434

3535
## Special Thanks

README_CN.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ ChatAir 是 ChatGPT、Gemini 和 Claude 的原生Android应用程序,提供比
2929
- 🛠️ **定制**: 自定义 Prompt,模型、温度、历史记录以及回复长度限制参数设置,提供个性化的使用体验
3030
- 🌙 **酷炫**: 提供暗黑模式和自定义主题,护眼同时增加使用的体验性
3131
- 🖼️ **识图**: 支持图片识别功能,快速准确获取图像信息
32-
- 🌏 **多语**: 支持英语、简体中文、繁体中文、意大利语、西班牙语、德语、荷兰语、阿拉伯语、葡萄牙语、韩语、越南语
32+
- 🌏 **多语**: 支持英语、简体中文、繁体中文、法语、意大利语、西班牙语、德语、荷兰语、阿拉伯语、葡萄牙语、日语、韩语、越南语、印尼语
3333

3434

3535
## 感谢

TMessagesProj/src/main/java/org/telegram/messenger/SendMessagesHelper.java

+34-7
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import android.content.ClipDescription;
1313
import android.content.Context;
1414
import android.content.Intent;
15+
import android.content.pm.PackageInfo;
1516
import android.content.res.AssetFileDescriptor;
1617
import android.database.Cursor;
1718
import android.graphics.Bitmap;
@@ -44,6 +45,7 @@
4445
import android.widget.Toast;
4546

4647
import com.flyun.base.BaseMessage;
48+
import com.google.firebase.crashlytics.FirebaseCrashlytics;
4749
import com.theokanning.openai.GoogleHttpException;
4850
import com.theokanning.openai.OpenAiHttpException;
4951
import com.theokanning.openai.completion.chat.ChatCompletionChoice;
@@ -882,6 +884,7 @@ public SendMessagesHelper(int instance) {
882884
apiServer = UserConfig.getInstance(currentAccount).apiServer;
883885
llmType = LLMType.openAi;
884886
}
887+
OpenAiService.errorCallback = t -> FirebaseCrashlytics.getInstance().recordException(t);
885888
openAiService = new OpenAiService(token, 60, apiServer, llmType);
886889
}
887890
});
@@ -1351,9 +1354,13 @@ public void didReceivedNotification(int id, int account, final Object... args) {
13511354
}
13521355
} else if (id == NotificationCenter.cancelRequest) {
13531356

1357+
boolean isShowStopStream = false;
1358+
if(args.length > 0) {
1359+
isShowStopStream = (boolean) args[0];
1360+
}
13541361
if (openAiService != null && isRequesting) {
13551362
// isRequesting = false;
1356-
openAiService.clean(false);
1363+
openAiService.clean(false, isShowStopStream);
13571364
}
13581365
}
13591366
}
@@ -6087,7 +6094,7 @@ public void onError(OpenAiHttpException error, Throwable throwable) {
60876094
if (error != null) {
60886095
errorTx = error.getMessage();
60896096
} else {
6090-
errorTx = throwable.getMessage();
6097+
errorTx = formatError(throwable);
60916098
}
60926099

60936100
if (!TextUtils.isEmpty(errorTx)) {
@@ -6199,7 +6206,7 @@ public void onError(OpenAiHttpException error, Throwable throwable) {
61996206
} else {
62006207

62016208
// Log.e("test","err:" + throwable);
6202-
errorTx = throwable.getMessage();
6209+
errorTx = formatError(throwable);
62036210
}
62046211

62056212
if (!TextUtils.isEmpty(errorTx)) {
@@ -7111,7 +7118,7 @@ public void onError(GoogleHttpException error, Throwable throwable) {
71117118
errorTx = getGeminiError(error.getMessage());
71127119
} else {
71137120
// 增加Gemini 一问一答的错误提示
7114-
errorTx = getGeminiError(throwable.getMessage());
7121+
errorTx = getGeminiError(formatError(throwable));
71157122
}
71167123

71177124
if (!TextUtils.isEmpty(errorTx)) {
@@ -7224,7 +7231,7 @@ public void onError(GoogleHttpException error, Throwable throwable) {
72247231
+ "\n" + "message:" + getGeminiError(error.getMessage());
72257232
} else {
72267233
// 增加Gemini 一问一答的错误提示
7227-
errorTx = getGeminiError(throwable.getMessage());
7234+
errorTx = getGeminiError(formatError(throwable));
72287235
}
72297236

72307237
if (!TextUtils.isEmpty(errorTx)) {
@@ -7410,7 +7417,7 @@ public void onError(AnthropicHttpException error, Throwable throwable) {
74107417
if (error != null) {
74117418
errorTx = error.getMessage();
74127419
} else {
7413-
errorTx = throwable.getMessage();
7420+
errorTx = formatError(throwable);
74147421
}
74157422

74167423
if (!TextUtils.isEmpty(errorTx)) {
@@ -7504,7 +7511,7 @@ public void onError(AnthropicHttpException error, Throwable throwable) {
75047511
+ "\n" + "status:" + error.status
75057512
+ "\n" + "message:" + getGeminiError(error.getMessage());
75067513
} else {
7507-
errorTx = throwable.getMessage();
7514+
errorTx = formatError(throwable);
75087515
}
75097516

75107517
if (!TextUtils.isEmpty(errorTx)) {
@@ -10342,4 +10349,24 @@ private void setRequesting(boolean isRequesting) {
1034210349
getNotificationCenter().postNotificationName(NotificationCenter.updateSteam, this.isRequesting);
1034310350
});
1034410351
}
10352+
10353+
public static String formatError(Throwable throwable) {
10354+
String response = "";
10355+
String version = "App version: ";
10356+
10357+
try {
10358+
PackageInfo pInfo = ApplicationLoader.applicationContext.getPackageManager()
10359+
.getPackageInfo(ApplicationLoader.applicationContext.getPackageName(), 0);
10360+
version += String.format(Locale.US, "%s (%d)", pInfo.versionName,
10361+
pInfo.versionCode);
10362+
} catch (Exception e) {
10363+
}
10364+
10365+
if(throwable instanceof retrofit2.HttpException
10366+
&& ((retrofit2.HttpException) throwable).response() != null) {
10367+
response = ((retrofit2.HttpException) throwable).response().toString();
10368+
}
10369+
10370+
return throwable.getMessage() + "\n\n" + response + "\n\n" + version;
10371+
}
1034510372
}

TMessagesProj/src/main/java/org/telegram/messenger/UserConfig.java

+2
Original file line numberDiff line numberDiff line change
@@ -522,6 +522,8 @@ private void initAiModelList() {
522522
}
523523
aiModelList.put(15, new AiModelBean("GPT-4o mini", "gpt-4o-mini", true));
524524
aiModelList.put(13, new AiModelBean("GPT-4o", "gpt-4o", true));
525+
aiModelList.put(17, new AiModelBean("GPT-4o-0806", "gpt-4o-2024-08-06", true));
526+
aiModelList.put(18, new AiModelBean("GPT-4o-0513", "gpt-4o-2024-05-13", true));
525527
aiModelList.put(1, new AiModelBean("GPT-3.5", "gpt-3.5-turbo", true));
526528
aiModelList.put(2, new AiModelBean("GPT-3.5-0613", "gpt-3.5-turbo-0613", false));
527529
aiModelList.put(3, new AiModelBean("GPT-3.5-16k", "gpt-3.5-turbo-16k", true));

TMessagesProj/src/main/java/org/telegram/ui/ChangeApiKeyActivity.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.telegram.messenger.MessagesController;
2626
import org.telegram.messenger.NotificationCenter;
2727
import org.telegram.messenger.R;
28+
import org.telegram.messenger.SendMessagesHelper;
2829
import org.telegram.messenger.UserConfig;
2930
import org.telegram.messenger.browser.Browser;
3031
import org.telegram.ui.ActionBar.ActionBar;
@@ -264,7 +265,7 @@ public void onError(OpenAiHttpException error, Throwable throwable) {
264265
if (error != null) {
265266
errorTx = error.getMessage();
266267
} else {
267-
errorTx = throwable.getMessage();
268+
errorTx = SendMessagesHelper.formatError(throwable);
268269
}
269270

270271
AlertsCreator.processError(errorTx, ChangeApiKeyActivity.this);

TMessagesProj/src/main/java/org/telegram/ui/ChangeApiServerActivity.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.telegram.messenger.MessagesController;
2626
import org.telegram.messenger.NotificationCenter;
2727
import org.telegram.messenger.R;
28+
import org.telegram.messenger.SendMessagesHelper;
2829
import org.telegram.messenger.UserConfig;
2930
import org.telegram.ui.ActionBar.ActionBar;
3031
import org.telegram.ui.ActionBar.ActionBarMenu;
@@ -282,7 +283,7 @@ public void onError(OpenAiHttpException error, Throwable throwable) {
282283
if (error != null) {
283284
errorTx = error.getMessage();
284285
} else {
285-
errorTx = throwable.getMessage();
286+
errorTx = SendMessagesHelper.formatError(throwable);
286287
}
287288

288289
AlertsCreator.processError(errorTx, ChangeApiServerActivity.this);

TMessagesProj/src/main/java/org/telegram/ui/ChangeClaudeApiKeyActivity.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.telegram.messenger.MessagesController;
2626
import org.telegram.messenger.NotificationCenter;
2727
import org.telegram.messenger.R;
28+
import org.telegram.messenger.SendMessagesHelper;
2829
import org.telegram.messenger.UserConfig;
2930
import org.telegram.messenger.browser.Browser;
3031
import org.telegram.ui.ActionBar.ActionBar;
@@ -256,14 +257,14 @@ public void onSuccess(ChatACompletionResponse result) {
256257
}
257258

258259
@Override
259-
public void onError(AnthropicHttpException error, Throwable Throwable) {
260+
public void onError(AnthropicHttpException error, Throwable throwable) {
260261
AndroidUtilities.runOnUIThread(() -> {
261262
String errorTx;
262263
isReq = false;
263264
if (error != null) {
264265
errorTx = error.getMessage();
265266
} else {
266-
errorTx = Throwable.getMessage();
267+
errorTx = SendMessagesHelper.formatError(throwable);
267268
}
268269

269270
AlertsCreator.processError(errorTx, ChangeClaudeApiKeyActivity.this);

TMessagesProj/src/main/java/org/telegram/ui/ChangeClaudeApiServerActivity.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.telegram.messenger.MessagesController;
2626
import org.telegram.messenger.NotificationCenter;
2727
import org.telegram.messenger.R;
28+
import org.telegram.messenger.SendMessagesHelper;
2829
import org.telegram.messenger.UserConfig;
2930
import org.telegram.ui.ActionBar.ActionBar;
3031
import org.telegram.ui.ActionBar.ActionBarMenu;
@@ -286,14 +287,14 @@ public void onSuccess(ChatACompletionResponse result) {
286287
}
287288

288289
@Override
289-
public void onError(AnthropicHttpException error, Throwable Throwable) {
290+
public void onError(AnthropicHttpException error, Throwable throwable) {
290291
AndroidUtilities.runOnUIThread(() -> {
291292
String errorTx;
292293
isReq = false;
293294
if (error != null) {
294295
errorTx = error.getMessage();
295296
} else {
296-
errorTx = Throwable.getMessage();
297+
errorTx = SendMessagesHelper.formatError(throwable);
297298
}
298299

299300
AlertsCreator.processError(errorTx, ChangeClaudeApiServerActivity.this);

TMessagesProj/src/main/java/org/telegram/ui/ChangeGoogleApiKeyActivity.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.telegram.messenger.MessagesController;
2828
import org.telegram.messenger.NotificationCenter;
2929
import org.telegram.messenger.R;
30+
import org.telegram.messenger.SendMessagesHelper;
3031
import org.telegram.messenger.UserConfig;
3132
import org.telegram.messenger.browser.Browser;
3233
import org.telegram.ui.ActionBar.ActionBar;
@@ -275,7 +276,7 @@ public void onError(GoogleHttpException error, Throwable throwable) {
275276
if (error != null) {
276277
errorTx = error.getMessage();
277278
} else {
278-
errorTx = throwable.getMessage();
279+
errorTx = SendMessagesHelper.formatError(throwable);
279280
}
280281

281282
AlertsCreator.processError(errorTx, ChangeGoogleApiKeyActivity.this);

TMessagesProj/src/main/java/org/telegram/ui/ChangeGoogleApiServerActivity.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.telegram.messenger.MessagesController;
2828
import org.telegram.messenger.NotificationCenter;
2929
import org.telegram.messenger.R;
30+
import org.telegram.messenger.SendMessagesHelper;
3031
import org.telegram.messenger.UserConfig;
3132
import org.telegram.ui.ActionBar.ActionBar;
3233
import org.telegram.ui.ActionBar.ActionBarMenu;
@@ -296,7 +297,7 @@ public void onError(GoogleHttpException error, Throwable throwable) {
296297
if (error != null) {
297298
errorTx = error.getMessage();
298299
} else {
299-
errorTx = throwable.getMessage();
300+
errorTx = SendMessagesHelper.formatError(throwable);
300301
}
301302

302303
AlertsCreator.processError(errorTx, ChangeGoogleApiServerActivity.this);

TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -2264,7 +2264,7 @@ protected int getCurrentColor() {
22642264
}
22652265
textFieldContainer.addView(cancelStreamButton, LayoutHelper.createFrame(48, 48, Gravity.BOTTOM | Gravity.RIGHT));
22662266
cancelStreamButton.setOnClickListener(view -> {
2267-
NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.cancelRequest);
2267+
NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.cancelRequest, true);
22682268
});
22692269

22702270
if (isInScheduleMode()) {
@@ -9408,7 +9408,9 @@ public void didReceivedNotification(int id, int account, Object... args) {
94089408
isHideStopStream = !isShowStopStream;
94099409
cancelStreamButton.setVisibility(isShowStopStream ? VISIBLE : GONE);
94109410
sendButtonContainer.setVisibility(!isShowStopStream ? VISIBLE : GONE);
9411-
attachButton.setVisibility(!isShowStopStream ? VISIBLE : GONE);
9411+
if (!UserConfig.getInstance(currentAccount).isOldAgreement) {
9412+
attachButton.setVisibility(!isShowStopStream ? VISIBLE : GONE);
9413+
}
94129414
} else if (id == NotificationCenter.updateModel) {
94139415
updateAttachInterface();
94149416
}

TMessagesProj/src/main/res/values-zh/strings.xml

+1
Original file line numberDiff line numberDiff line change
@@ -1334,6 +1334,7 @@
13341334
<string name="BlockUsers">屏蔽用户</string>
13351335
<string name="BlockUserMessage">您要屏蔽 %1$s 在 ChatAir 上给您发送的消息与拨打的电话吗?</string>
13361336
<string name="BlockUsersMessage">您要屏蔽 %1$s 在 ChatAir 上给您发送的消息与拨打的电话吗?</string>
1337+
<string name="MessageCopied">消息已复制到剪贴板</string>
13371338
<string name="UserBlocked">用户已屏蔽</string>
13381339
<string name="UserUnblocked">用户已取消屏蔽</string>
13391340
<string name="EditContact">编辑联系人</string>

gradle.properties

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
1414
# org.gradle.parallel=true
1515
#Sat Mar 12 05:53:50 MSK 2016
16-
APP_VERSION_CODE=10
17-
APP_VERSION_NAME=1.1.0
16+
APP_VERSION_CODE=11
17+
APP_VERSION_NAME=1.1.1
1818
APP_PACKAGE=info.flyun.chatair
1919
RELEASE_KEY_PASSWORD=android
2020
RELEASE_KEY_ALIAS=androidkey

0 commit comments

Comments
 (0)