1 /* ownCloud Android client application 
   2  *   Copyright (C) 2011-2012  Bartek Przybylski 
   3  *   Copyright (C) 2012-2013 ownCloud Inc. 
   5  *   This program is free software: you can redistribute it and/or modify 
   6  *   it under the terms of the GNU General Public License version 2, 
   7  *   as published by the Free Software Foundation. 
   9  *   This program is distributed in the hope that it will be useful, 
  10  *   but WITHOUT ANY WARRANTY; without even the implied warranty of 
  11  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
  12  *   GNU General Public License for more details. 
  14  *   You should have received a copy of the GNU General Public License 
  15  *   along with this program.  If not, see <http://www.gnu.org/licenses/>. 
  18 package com
.owncloud
.android
.db
; 
  20 import com
.owncloud
.android
.MainApp
; 
  21 import com
.owncloud
.android
.utils
.Log_OC
; 
  23 import android
.content
.ContentValues
; 
  24 import android
.content
.Context
; 
  25 import android
.database
.Cursor
; 
  26 import android
.database
.sqlite
.SQLiteDatabase
; 
  27 import android
.database
.sqlite
.SQLiteOpenHelper
; 
  30  * Custom database helper for ownCloud 
  32  * @author Bartek Przybylski 
  35 public class DbHandler 
{ 
  36     private SQLiteDatabase mDB
; 
  37     private OpenerHelper mHelper
; 
  38     private final String mDatabaseName
; 
  39     private final int mDatabaseVersion 
= 3; 
  41     private final String TABLE_INSTANT_UPLOAD 
= "instant_upload"; 
  43     public static final int UPLOAD_STATUS_UPLOAD_LATER 
= 0; 
  44     public static final int UPLOAD_STATUS_UPLOAD_FAILED 
= 1; 
  46     public DbHandler(Context context
) { 
  47         mDatabaseName 
= MainApp
.getDBName(); 
  48         mHelper 
= new OpenerHelper(context
); 
  49         mDB 
= mHelper
.getWritableDatabase(); 
  56     public boolean putFileForLater(String filepath
, String account
, String message
) { 
  57         ContentValues cv 
= new ContentValues(); 
  58         cv
.put("path", filepath
); 
  59         cv
.put("account", account
); 
  60         cv
.put("attempt", UPLOAD_STATUS_UPLOAD_LATER
); 
  61         cv
.put("message", message
); 
  62         long result 
= mDB
.insert(TABLE_INSTANT_UPLOAD
, null
, cv
); 
  63         Log_OC
.d(TABLE_INSTANT_UPLOAD
, "putFileForLater returns with: " + result 
+ " for file: " + filepath
); 
  67     public int updateFileState(String filepath
, Integer status
, String message
) { 
  68         ContentValues cv 
= new ContentValues(); 
  69         cv
.put("attempt", status
); 
  70         cv
.put("message", message
); 
  71         int result 
= mDB
.update(TABLE_INSTANT_UPLOAD
, cv
, "path=?", new String
[] { filepath 
}); 
  72         Log_OC
.d(TABLE_INSTANT_UPLOAD
, "updateFileState returns with: " + result 
+ " for file: " + filepath
); 
  76     public Cursor 
getAwaitingFiles() { 
  77         return mDB
.query(TABLE_INSTANT_UPLOAD
, null
, "attempt=" + UPLOAD_STATUS_UPLOAD_LATER
, null
, null
, null
, null
); 
  80     public Cursor 
getFailedFiles() { 
  81         return mDB
.query(TABLE_INSTANT_UPLOAD
, null
, "attempt>" + UPLOAD_STATUS_UPLOAD_LATER
, null
, null
, null
, null
); 
  84     public void clearFiles() { 
  85         mDB
.delete(TABLE_INSTANT_UPLOAD
, null
, null
); 
  91      * @return true when one or more pending files was removed 
  93     public boolean removeIUPendingFile(String localPath
) { 
  94         long result 
= mDB
.delete(TABLE_INSTANT_UPLOAD
, "path = ?", new String
[] { localPath 
}); 
  95         Log_OC
.d(TABLE_INSTANT_UPLOAD
, "delete returns with: " + result 
+ " for file: " + localPath
); 
 100     private class OpenerHelper 
extends SQLiteOpenHelper 
{ 
 101         public OpenerHelper(Context context
) { 
 102             super(context
, mDatabaseName
, null
, mDatabaseVersion
); 
 106         public void onCreate(SQLiteDatabase db
) { 
 107             db
.execSQL("CREATE TABLE " + TABLE_INSTANT_UPLOAD 
+ " (" + " _id INTEGER PRIMARY KEY, " + " path TEXT," 
 108                     + " account TEXT,attempt INTEGER,message TEXT);"); 
 112         public void onUpgrade(SQLiteDatabase db
, int oldVersion
, int newVersion
) { 
 113             if (oldVersion 
< 2) { 
 114                 db
.execSQL("ALTER TABLE " + TABLE_INSTANT_UPLOAD 
+ " ADD COLUMN attempt INTEGER;"); 
 116             db
.execSQL("ALTER TABLE " + TABLE_INSTANT_UPLOAD 
+ " ADD COLUMN message TEXT;");