|
@@ -1,59 +1,95 @@
|
|
|
package com.owncloud.android.services.observer;
|
|
|
|
|
|
-import java.io.File;
|
|
|
-import java.util.HashSet;
|
|
|
+import android.app.Service;
|
|
|
+import android.content.ContentResolver;
|
|
|
+import android.content.Intent;
|
|
|
+import android.database.Cursor;
|
|
|
+import android.os.IBinder;
|
|
|
|
|
|
import com.owncloud.android.MainApp;
|
|
|
+import com.owncloud.android.datamodel.SyncedFolder;
|
|
|
+import com.owncloud.android.db.ProviderMeta;
|
|
|
import com.owncloud.android.lib.common.utils.Log_OC;
|
|
|
|
|
|
-import android.app.Service;
|
|
|
-import android.content.Context;
|
|
|
-import android.content.Intent;
|
|
|
-import android.content.SharedPreferences;
|
|
|
-import android.os.IBinder;
|
|
|
-import android.widget.Toast;
|
|
|
+import java.util.ArrayList;
|
|
|
|
|
|
public class SyncedFolderObserverService extends Service {
|
|
|
- private SyncedFolderObserver fileOb;
|
|
|
- private static final String TAG = "InstantUploadFolderObserverService";
|
|
|
+ private static final String TAG = "SyncedFolderObserverService";
|
|
|
+ private ContentResolver database;
|
|
|
+ private ArrayList<SyncedFolderObserver> syncedFolderObservers = new ArrayList<>();
|
|
|
|
|
|
@Override
|
|
|
public void onCreate() {
|
|
|
- File sdcard = new File("/mnt/sdcard/DCIM/");
|
|
|
- Log_OC.d("SyncedFolderObserverService", "watching file: " + sdcard.getAbsolutePath());
|
|
|
- fileOb = new SyncedFolderObserver(sdcard.getAbsolutePath(), "WhatsApp");
|
|
|
- fileOb.startWatching();
|
|
|
+ database = MainApp.getAppContext().getContentResolver();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public int onStartCommand(Intent intent, int flags, int startId) {
|
|
|
- // TODO Auto-generated method stub
|
|
|
- Log_OC.d("SyncedFolderObserverService", "start");
|
|
|
- return Service.START_NOT_STICKY;
|
|
|
- //return super.onStartCommand(intent, flags, startId);
|
|
|
+ for (SyncedFolder syncedFolder : getSyncedFolders()) {
|
|
|
+ SyncedFolderObserver observer = new SyncedFolderObserver(syncedFolder.getLocalPath(),
|
|
|
+ syncedFolder.getRemotePath());
|
|
|
|
|
|
- }
|
|
|
+ observer.startWatching();
|
|
|
+ syncedFolderObservers.add(observer);
|
|
|
+ }
|
|
|
|
|
|
- @Override
|
|
|
- public void onStart(Intent intent, int startid) {
|
|
|
- Log_OC.d("SyncedFolderObserverService", "start");
|
|
|
- fileOb.startWatching();
|
|
|
- /*for (int i = 0; i < fileOb_list.size(); ++i) {
|
|
|
- fileOb_list.get(i).startWatching();
|
|
|
- }*/
|
|
|
- Toast.makeText(this.getApplicationContext(), "start monitoring file modification", Toast.LENGTH_SHORT).show();
|
|
|
+ return Service.START_NOT_STICKY;
|
|
|
}
|
|
|
+
|
|
|
@Override
|
|
|
public void onDestroy() {
|
|
|
- fileOb.stopWatching();
|
|
|
- /*for (int i = 0; i < fileOb_list.size(); ++i) {
|
|
|
- fileOb_list.get(i).stopWatching();
|
|
|
- }*/
|
|
|
- Toast.makeText(this.getApplicationContext(), "stop monitoring file modification", Toast.LENGTH_SHORT).show();
|
|
|
+ for (SyncedFolderObserver observer : syncedFolderObservers) {
|
|
|
+ observer.stopWatching();
|
|
|
+ syncedFolderObservers.remove(observer);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public IBinder onBind(Intent arg0) {
|
|
|
return null;
|
|
|
}
|
|
|
+
|
|
|
+ private SyncedFolder[] getSyncedFolders() {
|
|
|
+ Cursor c = database.query(
|
|
|
+ ProviderMeta.ProviderTableMeta.CONTENT_URI_SYNCED_FOLDERS,
|
|
|
+ null,
|
|
|
+ "1=1",
|
|
|
+ null,
|
|
|
+ null
|
|
|
+ );
|
|
|
+ SyncedFolder[] list = new SyncedFolder[c.getCount()];
|
|
|
+ if (c.moveToFirst()) {
|
|
|
+ do {
|
|
|
+ SyncedFolder syncedFolder = createSyncedFolderFromCursor(c);
|
|
|
+ if (syncedFolder == null) {
|
|
|
+ Log_OC.e(TAG, "SyncedFolder could not be created from cursor");
|
|
|
+ } else {
|
|
|
+ list[c.getPosition()] = syncedFolder;
|
|
|
+ }
|
|
|
+ } while (c.moveToNext());
|
|
|
+
|
|
|
+ }
|
|
|
+ c.close();
|
|
|
+
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ private SyncedFolder createSyncedFolderFromCursor(Cursor c) {
|
|
|
+ SyncedFolder syncedFolder = null;
|
|
|
+ if (c != null) {
|
|
|
+ long id = c.getLong(c.getColumnIndex(ProviderMeta.ProviderTableMeta._ID));
|
|
|
+ String localPath = c.getString(c.getColumnIndex(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_LOCAL_PATH));
|
|
|
+ String remotePath = c.getString(c.getColumnIndex(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_REMOTE_PATH));
|
|
|
+ Boolean wifiOnly = c.getInt(c.getColumnIndex(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_WIFI_ONLY)) == 1;
|
|
|
+ Boolean chargingOnly = c.getInt(c.getColumnIndex(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_CHARGING_ONLY)) == 1;
|
|
|
+ Boolean subfolderByDate = c.getInt(c.getColumnIndex(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_SUBFOLDER_BY_DATE)) == 1;
|
|
|
+ String accountName = c.getString(c.getColumnIndex(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_ACCOUNT));
|
|
|
+ Integer uploadAction = c.getInt(c.getColumnIndex(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_UPLOAD_OPTION));
|
|
|
+ Boolean enabled = c.getInt(c.getColumnIndex(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_ENABLED)) == 1;
|
|
|
+
|
|
|
+ syncedFolder = new SyncedFolder(id, localPath, remotePath, wifiOnly, chargingOnly, subfolderByDate,
|
|
|
+ accountName, uploadAction, enabled);
|
|
|
+ }
|
|
|
+ return syncedFolder;
|
|
|
+ }
|
|
|
}
|