mirror of
https://github.com/iSoron/uhabits.git
synced 2025-12-06 09:08:52 -06:00
Verify database version before importing
This commit is contained in:
@@ -21,10 +21,10 @@ package org.isoron.uhabits;
|
|||||||
|
|
||||||
import android.app.*;
|
import android.app.*;
|
||||||
import android.content.*;
|
import android.content.*;
|
||||||
import android.support.annotation.*;
|
|
||||||
|
|
||||||
import com.activeandroid.*;
|
import com.activeandroid.*;
|
||||||
|
|
||||||
|
import org.isoron.uhabits.models.sqlite.*;
|
||||||
import org.isoron.uhabits.notifications.*;
|
import org.isoron.uhabits.notifications.*;
|
||||||
import org.isoron.uhabits.preferences.*;
|
import org.isoron.uhabits.preferences.*;
|
||||||
import org.isoron.uhabits.tasks.*;
|
import org.isoron.uhabits.tasks.*;
|
||||||
@@ -88,7 +88,16 @@ public class HabitsApplication extends Application
|
|||||||
if (db.exists()) db.delete();
|
if (db.exists()) db.delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
DatabaseUtils.initializeActiveAndroid(context);
|
try
|
||||||
|
{
|
||||||
|
DatabaseUtils.initializeActiveAndroid(context);
|
||||||
|
}
|
||||||
|
catch (InvalidDatabaseVersionException e)
|
||||||
|
{
|
||||||
|
File db = DatabaseUtils.getDatabaseFile(context);
|
||||||
|
db.renameTo(new File(db.getAbsolutePath() + ".invalid"));
|
||||||
|
DatabaseUtils.initializeActiveAndroid(context);
|
||||||
|
}
|
||||||
|
|
||||||
widgetUpdater = component.getWidgetUpdater();
|
widgetUpdater = component.getWidgetUpdater();
|
||||||
widgetUpdater.startListening();
|
widgetUpdater.startListening();
|
||||||
|
|||||||
@@ -19,20 +19,20 @@
|
|||||||
|
|
||||||
package org.isoron.uhabits.io;
|
package org.isoron.uhabits.io;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.*;
|
||||||
import android.database.Cursor;
|
import android.database.*;
|
||||||
import android.database.sqlite.SQLiteDatabase;
|
import android.database.sqlite.*;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.*;
|
||||||
|
import android.util.*;
|
||||||
|
|
||||||
import com.activeandroid.ActiveAndroid;
|
import com.activeandroid.*;
|
||||||
|
|
||||||
import org.isoron.uhabits.AppContext;
|
import org.isoron.uhabits.*;
|
||||||
import org.isoron.uhabits.models.*;
|
import org.isoron.uhabits.models.*;
|
||||||
import org.isoron.uhabits.utils.DatabaseUtils;
|
import org.isoron.uhabits.utils.DatabaseUtils;
|
||||||
import org.isoron.uhabits.utils.FileUtils;
|
import org.isoron.uhabits.utils.*;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.*;
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import javax.inject.*;
|
import javax.inject.*;
|
||||||
|
|
||||||
@@ -45,7 +45,8 @@ public class LoopDBImporter extends AbstractImporter
|
|||||||
private Context context;
|
private Context context;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public LoopDBImporter(@NonNull @AppContext Context context, @NonNull HabitList habits)
|
public LoopDBImporter(@NonNull @AppContext Context context,
|
||||||
|
@NonNull HabitList habits)
|
||||||
{
|
{
|
||||||
super(habits);
|
super(habits);
|
||||||
this.context = context;
|
this.context = context;
|
||||||
@@ -59,15 +60,29 @@ public class LoopDBImporter extends AbstractImporter
|
|||||||
SQLiteDatabase db = SQLiteDatabase.openDatabase(file.getPath(), null,
|
SQLiteDatabase db = SQLiteDatabase.openDatabase(file.getPath(), null,
|
||||||
SQLiteDatabase.OPEN_READONLY);
|
SQLiteDatabase.OPEN_READONLY);
|
||||||
|
|
||||||
|
boolean canHandle = true;
|
||||||
|
|
||||||
Cursor c = db.rawQuery(
|
Cursor c = db.rawQuery(
|
||||||
"select count(*) from SQLITE_MASTER where name=? or name=?",
|
"select count(*) from SQLITE_MASTER where name=? or name=?",
|
||||||
new String[]{"Checkmarks", "Repetitions"});
|
new String[]{ "Checkmarks", "Repetitions" });
|
||||||
|
|
||||||
boolean result = (c.moveToFirst() && c.getInt(0) == 2);
|
if (!c.moveToFirst() || c.getInt(0) != 2)
|
||||||
|
{
|
||||||
|
Log.w("LoopDBImporter", "Cannot handle file: tables not found");
|
||||||
|
canHandle = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (db.getVersion() > BuildConfig.databaseVersion)
|
||||||
|
{
|
||||||
|
Log.w("LoopDBImporter", String.format(
|
||||||
|
"Cannot handle file: incompatible version: %d > %d",
|
||||||
|
db.getVersion(), BuildConfig.databaseVersion));
|
||||||
|
canHandle = false;
|
||||||
|
}
|
||||||
|
|
||||||
c.close();
|
c.close();
|
||||||
db.close();
|
db.close();
|
||||||
return result;
|
return canHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
|
||||||
|
*
|
||||||
|
* This file is part of Loop Habit Tracker.
|
||||||
|
*
|
||||||
|
* Loop Habit Tracker is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
* option) any later version.
|
||||||
|
*
|
||||||
|
* Loop Habit Tracker 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 General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.isoron.uhabits.models.sqlite;
|
||||||
|
|
||||||
|
public class InvalidDatabaseVersionException extends RuntimeException
|
||||||
|
{
|
||||||
|
}
|
||||||
@@ -25,6 +25,7 @@ import android.support.annotation.*;
|
|||||||
import com.activeandroid.*;
|
import com.activeandroid.*;
|
||||||
|
|
||||||
import org.isoron.uhabits.*;
|
import org.isoron.uhabits.*;
|
||||||
|
import org.isoron.uhabits.models.sqlite.*;
|
||||||
import org.isoron.uhabits.models.sqlite.records.*;
|
import org.isoron.uhabits.models.sqlite.records.*;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
@@ -76,7 +77,16 @@ public abstract class DatabaseUtils
|
|||||||
RepetitionRecord.class, ScoreRecord.class, StreakRecord.class)
|
RepetitionRecord.class, ScoreRecord.class, StreakRecord.class)
|
||||||
.create();
|
.create();
|
||||||
|
|
||||||
ActiveAndroid.initialize(dbConfig);
|
try
|
||||||
|
{
|
||||||
|
ActiveAndroid.initialize(dbConfig);
|
||||||
|
}
|
||||||
|
catch (RuntimeException e)
|
||||||
|
{
|
||||||
|
if(e.getMessage().contains("downgrade"))
|
||||||
|
throw new InvalidDatabaseVersionException();
|
||||||
|
else throw e;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("ResultOfMethodCallIgnored")
|
@SuppressWarnings("ResultOfMethodCallIgnored")
|
||||||
|
|||||||
Reference in New Issue
Block a user