synchronized access to log in nsclient

This commit is contained in:
Milos Kozak 2018-03-23 22:37:27 +01:00
parent 22d617cbc0
commit cbd60cfdbe
4 changed files with 17 additions and 12 deletions

View file

@ -48,7 +48,7 @@ public class NSClientInternalPlugin implements PluginBase {
static public Handler handler; static public Handler handler;
private static List<EventNSClientNewLog> listLog = new ArrayList<>(); private final static List<EventNSClientNewLog> listLog = new ArrayList<>();
static Spanned textLog = Html.fromHtml(""); static Spanned textLog = Html.fromHtml("");
public boolean paused = false; public boolean paused = false;
@ -177,7 +177,9 @@ public class NSClientInternalPlugin implements PluginBase {
handler.post(new Runnable() { handler.post(new Runnable() {
@Override @Override
public void run() { public void run() {
listLog = new ArrayList<>(); synchronized (listLog) {
listLog.clear();
}
MainApp.bus().post(new EventNSClientUpdateGUI()); MainApp.bus().post(new EventNSClientUpdateGUI());
} }
}); });
@ -187,11 +189,13 @@ public class NSClientInternalPlugin implements PluginBase {
handler.post(new Runnable() { handler.post(new Runnable() {
@Override @Override
public void run() { public void run() {
synchronized (listLog) {
listLog.add(ev); listLog.add(ev);
// remove the first line if log is too large // remove the first line if log is too large
if (listLog.size() >= Constants.MAX_LOG_LINES) { if (listLog.size() >= Constants.MAX_LOG_LINES) {
listLog.remove(0); listLog.remove(0);
} }
}
MainApp.bus().post(new EventNSClientUpdateGUI()); MainApp.bus().post(new EventNSClientUpdateGUI());
} }
}); });
@ -200,10 +204,11 @@ public class NSClientInternalPlugin implements PluginBase {
static synchronized void updateLog() { static synchronized void updateLog() {
try { try {
StringBuilder newTextLog = new StringBuilder(); StringBuilder newTextLog = new StringBuilder();
List<EventNSClientNewLog> temporaryList = new ArrayList<>(listLog); synchronized (listLog) {
for (EventNSClientNewLog log : temporaryList) { for (EventNSClientNewLog log : listLog) {
newTextLog.append(log.toPreparedHtml()); newTextLog.append(log.toPreparedHtml());
} }
}
textLog = Html.fromHtml(newTextLog.toString()); textLog = Html.fromHtml(newTextLog.toString());
} catch (OutOfMemoryError e) { } catch (OutOfMemoryError e) {
ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), "Out of memory!\nStop using this phone !!!", R.raw.error); ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), "Out of memory!\nStop using this phone !!!", R.raw.error);

View file

@ -448,7 +448,7 @@
<string name="settings_password">Парола за настройки</string> <string name="settings_password">Парола за настройки</string>
<string name="unlock_settings">Отключи настройките</string> <string name="unlock_settings">Отключи настройките</string>
<string name="approachingdailylimit">Близо до максмалния дневен инсулин</string> <string name="approachingdailylimit">Близо до максмалния дневен инсулин</string>
<string name="nsclientinternal">вътрешен NSClient</string> <string name="nsclientinternal">NSClient</string>
<string name="nsclientinternal_shortname">NSCI</string> <string name="nsclientinternal_shortname">NSCI</string>
<string name="nsclientinternal_url">URL:</string> <string name="nsclientinternal_url">URL:</string>
<string name="nsclientinternal_autoscroll">Автопревъртане</string> <string name="nsclientinternal_autoscroll">Автопревъртане</string>

View file

@ -442,7 +442,7 @@
<string name="nosuccess">neúspěšně - zkontrolujte mobil</string> <string name="nosuccess">neúspěšně - zkontrolujte mobil</string>
<string name="notavailable">Nedostupný</string> <string name="notavailable">Nedostupný</string>
<string name="nowritepermission">NSClient nedostal oprávnění k zápisu. Špatné API secret?</string> <string name="nowritepermission">NSClient nedostal oprávnění k zápisu. Špatné API secret?</string>
<string name="nsclientinternal">NSClient interní</string> <string name="nsclientinternal">NSClient</string>
<string name="nsclientinternal_autoscroll">Posouvat</string> <string name="nsclientinternal_autoscroll">Posouvat</string>
<string name="nsclientinternal_secret_dialogmessage">Vložte API secret (min 12. znaků)</string> <string name="nsclientinternal_secret_dialogmessage">Vložte API secret (min 12. znaků)</string>
<string name="nsclientinternal_shortname">NSCl</string> <string name="nsclientinternal_shortname">NSCl</string>

View file

@ -261,7 +261,7 @@
<string name="ns_sync_use_absolute_title">только абсолютные величины для базала</string> <string name="ns_sync_use_absolute_title">только абсолютные величины для базала</string>
<string name="ns_upload_only">только передача в NS (синхронизация отсутствует)</string> <string name="ns_upload_only">только передача в NS (синхронизация отсутствует)</string>
<string name="ns_upload_only_summary">только передача в NS. работает в SGV только если выбран местный источник вроде xdrip. не работает в профилях при действующем профиле NS</string> <string name="ns_upload_only_summary">только передача в NS. работает в SGV только если выбран местный источник вроде xdrip. не работает в профилях при действующем профиле NS</string>
<string name="nsclientinternal">внутренний клиент NS</string> <string name="nsclientinternal">клиент NS</string>
<string name="nsclientinternal_autoscroll">автоскроллинг</string> <string name="nsclientinternal_autoscroll">автоскроллинг</string>
<string name="nsclientinternal_secret_dialogmessage">введите API secret для NS (мин 12 знаков)</string> <string name="nsclientinternal_secret_dialogmessage">введите API secret для NS (мин 12 знаков)</string>
<string name="nsclientinternal_secret_dialogtitle">API secret для NS</string> <string name="nsclientinternal_secret_dialogtitle">API secret для NS</string>