mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-01-06 05:24:46 +01:00
add new database table for persisting logs. DEBUG builds only for
now. Keep the most recent 5K worth of messages. TODO: add a display activity and the ability to email them.
This commit is contained in:
parent
1216ec49d7
commit
d376679d00
4 changed files with 73 additions and 6 deletions
|
@ -43,8 +43,9 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||
public static final String TABLE_NAME_PAIRS = "pairs";
|
||||
public static final String TABLE_NAME_INVITES = "invites";
|
||||
public static final String TABLE_NAME_CHAT = "chat";
|
||||
public static final String TABLE_NAME_LOGS = "logs";
|
||||
private static final String DB_NAME = "xwdb";
|
||||
private static final int DB_VERSION = 26;
|
||||
private static final int DB_VERSION = 27;
|
||||
|
||||
public static final String GAME_NAME = "GAME_NAME";
|
||||
public static final String VISID = "VISID";
|
||||
|
@ -114,6 +115,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||
|
||||
public static final String SENDER = "SENDER";
|
||||
public static final String MESSAGE = "MESSAGE";
|
||||
public static final String TAG = "TAG";
|
||||
|
||||
private Context m_context;
|
||||
|
||||
|
@ -216,6 +218,12 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||
,{ MESSAGE, "TEXT" }
|
||||
};
|
||||
|
||||
private static final String[][] s_logsSchema = {
|
||||
{ TIMESTAMP, "DATETIME DEFAULT CURRENT_TIMESTAMP" },
|
||||
{ MESSAGE, "TEXT" },
|
||||
{ TAG, "TEXT" },
|
||||
};
|
||||
|
||||
public DBHelper( Context context )
|
||||
{
|
||||
super( context, DB_NAME, null, DB_VERSION );
|
||||
|
@ -241,13 +249,14 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||
createPairsTable( db );
|
||||
createInvitesTable( db );
|
||||
createChatsTable( db );
|
||||
createLogsTable( db );
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("fallthrough")
|
||||
public void onUpgrade( SQLiteDatabase db, int oldVersion, int newVersion )
|
||||
{
|
||||
DbgUtils.logf( "onUpgrade: old: %d; new: %d", oldVersion, newVersion );
|
||||
DbgUtils.logf( false, "onUpgrade: old: %d; new: %d", oldVersion, newVersion );
|
||||
|
||||
boolean madeSumTable = false;
|
||||
switch( oldVersion ) {
|
||||
|
@ -310,7 +319,9 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||
createInvitesTable( db );
|
||||
case 25:
|
||||
createChatsTable( db );
|
||||
|
||||
case 26:
|
||||
createLogsTable( db );
|
||||
|
||||
break;
|
||||
default:
|
||||
db.execSQL( "DROP TABLE " + TABLE_NAME_SUM + ";" );
|
||||
|
@ -419,6 +430,11 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||
createTable( db, TABLE_NAME_CHAT, s_chatsSchema );
|
||||
}
|
||||
|
||||
private void createLogsTable( SQLiteDatabase db )
|
||||
{
|
||||
createTable( db, TABLE_NAME_LOGS, s_logsSchema );
|
||||
}
|
||||
|
||||
// Move all existing games to the row previously named "cur games'
|
||||
private void moveToCurGames( SQLiteDatabase db )
|
||||
{
|
||||
|
|
|
@ -67,6 +67,9 @@ public class DBUtils {
|
|||
public static final int GROUPID_UNSPEC = -1;
|
||||
public static final String KEY_NEWGAMECOUNT = "DBUtils.newGameCount";
|
||||
|
||||
// how many log rows to keep?
|
||||
private static final int LOGLIMIT = 5000;
|
||||
|
||||
private static final String DICTS_SEP = ",";
|
||||
|
||||
private static final String ROW_ID = "rowid";
|
||||
|
@ -2405,6 +2408,35 @@ public class DBUtils {
|
|||
return bytes;
|
||||
}
|
||||
|
||||
public static void appendLog( String tag, String msg )
|
||||
{
|
||||
Context context = XWApp.getContext();
|
||||
if ( null != context ) {
|
||||
appendLog( context, msg );
|
||||
}
|
||||
}
|
||||
|
||||
private static void appendLog( Context context, String msg )
|
||||
{
|
||||
ContentValues values = new ContentValues();
|
||||
values.put( DBHelper.MESSAGE, msg );
|
||||
|
||||
initDB( context );
|
||||
synchronized( s_dbHelper ) {
|
||||
SQLiteDatabase db = s_dbHelper.getWritableDatabase();
|
||||
long rowid = db.insert( DBHelper.TABLE_NAME_LOGS, null, values );
|
||||
|
||||
if ( 0 == (rowid % (LOGLIMIT / 10)) ) {
|
||||
String where =
|
||||
String.format( "not rowid in (select rowid from %s order by TIMESTAMP desc limit %d)",
|
||||
DBHelper.TABLE_NAME_LOGS, LOGLIMIT );
|
||||
int nGone = db.delete( DBHelper.TABLE_NAME_LOGS, where, null );
|
||||
DbgUtils.logf( false, "appendLog(): deleted %d rows", nGone );
|
||||
}
|
||||
db.close();
|
||||
}
|
||||
}
|
||||
|
||||
private static void copyGameDB( Context context, boolean toSDCard )
|
||||
{
|
||||
String name = DBHelper.getDBName();
|
||||
|
|
|
@ -61,7 +61,12 @@ public class DbgUtils {
|
|||
logEnable( on );
|
||||
}
|
||||
|
||||
public static void logf( String msg )
|
||||
public static void logf( String msg )
|
||||
{
|
||||
logf( true, msg );
|
||||
}
|
||||
|
||||
public static void logf( boolean persist, String msg )
|
||||
{
|
||||
if ( s_doLog ) {
|
||||
String time = "";
|
||||
|
@ -71,15 +76,25 @@ public class DbgUtils {
|
|||
time = s_time.format("[%H:%M:%S]-");
|
||||
}
|
||||
long id = Thread.currentThread().getId();
|
||||
Log.d( TAG, time + id + "-" + msg );
|
||||
msg = time + id + "-" + msg;
|
||||
Log.d( TAG, msg );
|
||||
|
||||
if ( persist && BuildConfig.DEBUG ) {
|
||||
DBUtils.appendLog( TAG, msg );
|
||||
}
|
||||
}
|
||||
} // logf
|
||||
|
||||
public static void logf( String format, Object... args )
|
||||
{
|
||||
logf( true, format, args );
|
||||
}
|
||||
|
||||
public static void logf( boolean persist, String format, Object... args )
|
||||
{
|
||||
if ( s_doLog ) {
|
||||
Formatter formatter = new Formatter();
|
||||
logf( formatter.format( format, args ).toString() );
|
||||
logf( persist, formatter.format( format, args ).toString() );
|
||||
}
|
||||
} // logf
|
||||
|
||||
|
|
|
@ -54,10 +54,12 @@ public class XWApp extends Application {
|
|||
|
||||
private static UUID s_UUID = null;
|
||||
private static Boolean s_onEmulator = null;
|
||||
private static Context s_context = null;
|
||||
|
||||
@Override
|
||||
public void onCreate()
|
||||
{
|
||||
s_context = this;
|
||||
super.onCreate();
|
||||
|
||||
// This one line should always get logged even if logging is
|
||||
|
@ -118,4 +120,6 @@ public class XWApp extends Application {
|
|||
}
|
||||
return s_onEmulator;
|
||||
}
|
||||
|
||||
public static Context getContext() { return s_context; }
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue