mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2025-01-25 16:15:55 +01:00
Extract device type migration to standalone function
This commit is contained in:
parent
c2a9f5d805
commit
dc825c87e7
@ -226,6 +226,10 @@ public class GBApplication extends Application {
|
|||||||
migratePrefs(getPrefsFileVersion());
|
migratePrefs(getPrefsFileVersion());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Uncomment the line below to force a device key migration, after you updated
|
||||||
|
// the devicetype.json file
|
||||||
|
//migrateDeviceTypes();
|
||||||
|
|
||||||
setupExceptionHandler();
|
setupExceptionHandler();
|
||||||
|
|
||||||
Weather.getInstance().setCacheFile(getCacheDir(), prefs.getBoolean("cache_weather", true));
|
Weather.getInstance().setCacheFile(getCacheDir(), prefs.getBoolean("cache_weather", true));
|
||||||
@ -680,36 +684,40 @@ public class GBApplication extends Application {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void migrateDeviceTypes() {
|
||||||
|
try (DBHandler db = acquireDB()) {
|
||||||
|
final InputStream inputStream = getAssets().open("migrations/devicetype.json");
|
||||||
|
final byte[] buffer = new byte[inputStream.available()];
|
||||||
|
inputStream.read(buffer);
|
||||||
|
inputStream.close();
|
||||||
|
final JSONObject deviceMapping = new JSONObject(new String(buffer));
|
||||||
|
final JSONObject deviceIdNameMapping = deviceMapping.getJSONObject("by-id");
|
||||||
|
|
||||||
|
final DaoSession daoSession = db.getDaoSession();
|
||||||
|
final List<Device> activeDevices = DBHelper.getActiveDevices(daoSession);
|
||||||
|
|
||||||
|
for (Device dbDevice : activeDevices) {
|
||||||
|
String deviceTypeName = dbDevice.getTypeName();
|
||||||
|
if(deviceTypeName.isEmpty() || deviceTypeName.equals("UNKNOWN")){
|
||||||
|
deviceTypeName = deviceIdNameMapping.optString(
|
||||||
|
String.valueOf(dbDevice.getType()),
|
||||||
|
"UNKNOWN"
|
||||||
|
);
|
||||||
|
dbDevice.setTypeName(deviceTypeName);
|
||||||
|
daoSession.getDeviceDao().update(dbDevice);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.w(TAG, "error acquiring DB lock");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void migratePrefs(int oldVersion) {
|
private void migratePrefs(int oldVersion) {
|
||||||
SharedPreferences.Editor editor = sharedPrefs.edit();
|
SharedPreferences.Editor editor = sharedPrefs.edit();
|
||||||
|
|
||||||
// this comes before all other migrations since the new column DeviceTypeName was added as non-null
|
// this comes before all other migrations since the new column DeviceTypeName was added as non-null
|
||||||
if (oldVersion < 25){
|
if (oldVersion < 25){
|
||||||
try (DBHandler db = acquireDB()) {
|
migrateDeviceTypes();
|
||||||
final InputStream inputStream = getAssets().open("migrations/devicetype.json");
|
|
||||||
final byte[] buffer = new byte[inputStream.available()];
|
|
||||||
inputStream.read(buffer);
|
|
||||||
inputStream.close();
|
|
||||||
final JSONObject deviceMapping = new JSONObject(new String(buffer));
|
|
||||||
final JSONObject deviceIdNameMapping = deviceMapping.getJSONObject("by-id");
|
|
||||||
|
|
||||||
final DaoSession daoSession = db.getDaoSession();
|
|
||||||
final List<Device> activeDevices = DBHelper.getActiveDevices(daoSession);
|
|
||||||
|
|
||||||
for (Device dbDevice : activeDevices) {
|
|
||||||
String deviceTypeName = dbDevice.getTypeName();
|
|
||||||
if(deviceTypeName.isEmpty()){
|
|
||||||
deviceTypeName = deviceIdNameMapping.optString(
|
|
||||||
String.valueOf(dbDevice.getType()),
|
|
||||||
"UNKNOWN"
|
|
||||||
);
|
|
||||||
dbDevice.setTypeName(deviceTypeName);
|
|
||||||
daoSession.getDeviceDao().update(dbDevice);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
Log.w(TAG, "error acquiring DB lock");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (oldVersion == 0) {
|
if (oldVersion == 0) {
|
||||||
|
@ -21,10 +21,6 @@
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
package nodomain.freeyourgadget.gadgetbridge.model;
|
package nodomain.freeyourgadget.gadgetbridge.model;
|
||||||
|
|
||||||
import androidx.annotation.DrawableRes;
|
|
||||||
import androidx.annotation.StringRes;
|
|
||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
|
import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.UnknownDeviceCoordinator;
|
import nodomain.freeyourgadget.gadgetbridge.devices.UnknownDeviceCoordinator;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.asteroidos.AsteroidOSDeviceCoordinator;
|
import nodomain.freeyourgadget.gadgetbridge.devices.asteroidos.AsteroidOSDeviceCoordinator;
|
||||||
@ -147,9 +143,16 @@ import nodomain.freeyourgadget.gadgetbridge.devices.zetime.ZeTimeCoordinator;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* For every supported device, a device type constant must exist.
|
* For every supported device, a device type constant must exist.
|
||||||
*
|
* <p>
|
||||||
* Note: they name of the enum is stored in the DB, so it is fixed forever,
|
* Note: they name of the enum is stored in the DB, so it is fixed forever,
|
||||||
* and may not be changed.
|
* and may not be changed.
|
||||||
|
* <p>
|
||||||
|
* Migration note: As of <a href="https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/3347">#3347</a>,
|
||||||
|
* the numeric device id is not used anymore. If your database has development devices that still used
|
||||||
|
* the numeric ID, you need to update assets/migrations/devicetype.json before installing Gadgetbridge
|
||||||
|
* after rebasing, in order for your device to be migrated correctly. If you failed to do this and the
|
||||||
|
* device is now not being displayed, please update the file and uncomment the call to migrateDeviceTypes
|
||||||
|
* in GBApplication.
|
||||||
*/
|
*/
|
||||||
public enum DeviceType {
|
public enum DeviceType {
|
||||||
UNKNOWN(UnknownDeviceCoordinator.class),
|
UNKNOWN(UnknownDeviceCoordinator.class),
|
||||||
|
Loading…
Reference in New Issue
Block a user