/* Copyright (C) 2020-2024 Daniel Dakhno
This file is part of Gadgetbridge.
Gadgetbridge is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Gadgetbridge is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see . */
package nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil_hr.translation;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.ArrayList;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file.FileHandle;
import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.requests.fossil.file.FileGetRequest;
public abstract class TranslationsGetRequest extends FileGetRequest {
public TranslationsGetRequest(FossilWatchAdapter adapter) {
super(FileHandle.ASSET_TRANSLATIONS, adapter);
}
@Override
public void handleFileData(byte[] fileData) {
ByteBuffer buffer = ByteBuffer.wrap(fileData);
buffer.order(ByteOrder.LITTLE_ENDIAN);
byte[] localeBytes = new byte[5];
buffer.get(localeBytes);
String locale = new String(localeBytes);
buffer.get(); // locale null byte
ArrayList translations = new ArrayList<>();
while(buffer.remaining() > 0){
int originalLength = buffer.getShort() - 1; // subtracting null terminator
byte[] originalBytes = new byte[originalLength];
buffer.get(originalBytes);
buffer.get(); // should always return null terminator
int translatedLength = buffer.getShort() - 1;
byte[] translatedBytes = new byte[translatedLength];
buffer.get(translatedBytes);
buffer.get(); // should always return null terminator
String original = new String(originalBytes);
String translated = new String(translatedBytes);
translations.add(new TranslationItem(original, translated));
}
handleTranslations(
new TranslationData(
locale,
translations.toArray(new TranslationItem[0])
)
);
}
public abstract void handleTranslations(TranslationData translationDate);
}