diff --git a/app/src/main/java/fr/mobdev/goblim/Database.java b/app/src/main/java/fr/mobdev/goblim/Database.java index 0f79cc7..07749da 100644 --- a/app/src/main/java/fr/mobdev/goblim/Database.java +++ b/app/src/main/java/fr/mobdev/goblim/Database.java @@ -43,7 +43,7 @@ public class Database extends SQLiteOpenHelper { public static Database getInstance(Context context) { if(instance == null) - instance = new Database(context, "Lutim.db", null, 3); + instance = new Database(context, "Lutim.db", null, 4); return instance; } @@ -56,7 +56,7 @@ public class Database extends SQLiteOpenHelper { db.execSQL("Create table if not exists history (" + "id integer primary key autoincrement, url varchar(1024), short_hash varchar(1024), real_short_hash varchar(1024), date INTEGER, storage_duration INTEGER ,thumb TEXT, token varchar(1024));"); db.execSQL("Create table if not exists servers (" + - "id integer primary key autoincrement, url varchar(1024), isDefault INTEGER);"); + "id integer primary key autoincrement, url varchar(1024), isDefault INTEGER, default_delay INTEGER, max_delay INTEGER, max_file_size INTEGER);"); ContentValues values = new ContentValues(); values.put("url","https://framapic.org"); @@ -86,6 +86,26 @@ public class Database extends SQLiteOpenHelper { { db.execSQL("Alter table history add column token varchar(1024);"); } + if(oldVersion <= 3) + { + ContentValues values = new ContentValues(); + values.clear(); + values.put("url","https://wtf.roflcopter.fr/pics/"); + values.put("isDefault",false); + db.insert("servers", null, values); + values.clear(); + values.put("url","https://pic.infini.fr"); + values.put("isDefault",false); + db.insert("servers", null, values); + values.clear(); + values.put("url","https://pic.drakonix.net"); + values.put("isDefault",false); + db.insert("servers", null, values); + + db.execSQL("Alter table servers add column default_delay INTEGER;"); + db.execSQL("Alter table servers add column max_delay INTEGER;"); + db.execSQL("Alter table servers add column max_file_size INTEGER;"); + } } public List getHistory(boolean descendingOrder) { @@ -159,11 +179,14 @@ public class Database extends SQLiteOpenHelper { int col = 0; long id = cursor.getLong(col++); String url = cursor.getString(col++); - int defValue = cursor.getInt(col); + int defValue = cursor.getInt(col++); + int defaultDelay = cursor.getInt(col++); + int maxDelay = cursor.getInt(col++); + long maxFileSize = cursor.getLong(col); boolean isDefault = false; if(defValue == 1) isDefault = true; - Server server = new Server(id, url, isDefault); + Server server = new Server(id, url, isDefault,maxDelay,defaultDelay,maxFileSize); if(defaultFirst && isDefault) { servers.add(0,server); @@ -227,4 +250,16 @@ public class Database extends SQLiteOpenHelper { cursor.close(); return image; } + + void updateServer(long id, int defaultDelay, int maxDelay, long maxFileSize) { + ContentValues values = new ContentValues(); + String whereClause = "id = ?"; + String[] whereArgs = new String[1]; + whereArgs[0] = String.valueOf(id); + + values.put("default_delay",defaultDelay); + values.put("max_delay",maxDelay); + values.put("max_file_size",maxFileSize); + getWritableDatabase().update("servers",values,whereClause,whereArgs); + } } diff --git a/app/src/main/java/fr/mobdev/goblim/NetworkManager.java b/app/src/main/java/fr/mobdev/goblim/NetworkManager.java index 57522da..3c4f316 100644 --- a/app/src/main/java/fr/mobdev/goblim/NetworkManager.java +++ b/app/src/main/java/fr/mobdev/goblim/NetworkManager.java @@ -44,6 +44,7 @@ import android.provider.OpenableColumns; import fr.mobdev.goblim.listener.NetworkListener; import fr.mobdev.goblim.objects.Img; +import fr.mobdev.goblim.objects.Server; public class NetworkManager { @@ -110,6 +111,17 @@ public class NetworkManager { thread.addMessageQueue(mes); } + public void updateDefaultServersConf(Context context, List servers) { + for(Server server : servers) { + NetworkThread.Message mes = new NetworkThread.Message(); + mes.type = NetworkThread.Message_Type.GET_INFO; + mes.context = context; + mes.id = server.getId(); + mes.url = server.getUrl(); + addMessageToQueue(mes); + } + } + @@ -167,6 +179,9 @@ class NetworkThread extends Thread{ case UPLOAD_IMG: uploadImage(mes.context,mes.url,mes.nbDays,mes.imageUri,mes.fileNo,mes.fileNb); break; + case GET_INFO: + getInfo(mes.context,mes.url,mes.id); + break; } } catch (InterruptedException e) { @@ -175,7 +190,59 @@ class NetworkThread extends Thread{ } messages.remove(0); } + } + private void getInfo(Context context, String serverUrl, long id) { + if (!isConnectedToInternet(context)) + return; + URL url = null; + try { + if(!serverUrl.endsWith("/")) + serverUrl = serverUrl+"/"; + serverUrl = serverUrl + "infos"; + url = new URL(serverUrl); + } catch (Exception e) { + e.printStackTrace(); + } + + if (url != null) { + try { + HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); + if (urlConnection != null) { + InputStream stream = urlConnection.getInputStream(); + InputStreamReader isr = new InputStreamReader(stream); + BufferedReader br = new BufferedReader(isr); + boolean isReading = true; + String data; + String jsonStr = ""; + //get all data in a String + do { + try { + data = br.readLine(); + if (data != null) + jsonStr += data; + else + isReading = false; + } catch (IOException e) { + e.printStackTrace(); + isReading = false; + } + } while (isReading); + + JSONObject rootObject = new JSONObject(jsonStr); + if(rootObject.has("default_delay")) { + int defaultDelay = rootObject.getInt("default_delay"); + long maxFileSize = rootObject.getLong("max_file_size"); + int maxDelay = rootObject.getInt("max_delay"); + Database.getInstance(context).updateServer(id,defaultDelay,maxDelay,maxFileSize); + } + + stream.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } } private void deleteImage(final Context context, final String deleteUrl) { @@ -421,10 +488,12 @@ class NetworkThread extends Thread{ Uri imageUri; int fileNo; int fileNb; + long id; } enum Message_Type{ DELETE_IMG, - UPLOAD_IMG + UPLOAD_IMG, + GET_INFO } } diff --git a/app/src/main/java/fr/mobdev/goblim/activity/HistoryActivity.java b/app/src/main/java/fr/mobdev/goblim/activity/HistoryActivity.java index 5aa884a..e523761 100644 --- a/app/src/main/java/fr/mobdev/goblim/activity/HistoryActivity.java +++ b/app/src/main/java/fr/mobdev/goblim/activity/HistoryActivity.java @@ -46,6 +46,7 @@ import java.util.Locale; import java.util.TimeZone; import fr.mobdev.goblim.Database; +import fr.mobdev.goblim.NetworkManager; import fr.mobdev.goblim.objects.Img; import fr.mobdev.goblim.R; @@ -100,6 +101,8 @@ public class HistoryActivity extends AppCompatActivity { } }); + + NetworkManager.getInstance(null).updateDefaultServersConf(this,Database.getInstance(this).getServers(true)); } @Override diff --git a/app/src/main/java/fr/mobdev/goblim/activity/ServersActivity.java b/app/src/main/java/fr/mobdev/goblim/activity/ServersActivity.java index 660d416..ce9bcd3 100644 --- a/app/src/main/java/fr/mobdev/goblim/activity/ServersActivity.java +++ b/app/src/main/java/fr/mobdev/goblim/activity/ServersActivity.java @@ -40,6 +40,7 @@ import java.util.ArrayList; import java.util.List; import fr.mobdev.goblim.Database; +import fr.mobdev.goblim.NetworkManager; import fr.mobdev.goblim.dialog.ServerDialog; import fr.mobdev.goblim.listener.ServerListener; import fr.mobdev.goblim.objects.Server; @@ -132,6 +133,7 @@ public class ServersActivity extends AppCompatActivity { ListView serverList = (ListView) findViewById(R.id.servers_list); serverList.setAdapter(adapter); + NetworkManager.getInstance(null).updateDefaultServersConf(this,dbServers); } @Override diff --git a/app/src/main/java/fr/mobdev/goblim/activity/UploadActivity.java b/app/src/main/java/fr/mobdev/goblim/activity/UploadActivity.java index 1dc9f4b..18fd6ff 100644 --- a/app/src/main/java/fr/mobdev/goblim/activity/UploadActivity.java +++ b/app/src/main/java/fr/mobdev/goblim/activity/UploadActivity.java @@ -38,6 +38,7 @@ import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.FrameLayout; @@ -72,6 +73,7 @@ public class UploadActivity extends AppCompatActivity { private NetworkAdapter listener; private ArrayList uris; + private List servers; private List urls; private List deletedDays; private ProgressDialog progressDialog; @@ -159,6 +161,41 @@ public class UploadActivity extends AppCompatActivity { RecyclerView th = (RecyclerView) findViewById(R.id.imageList); th.setAdapter(adapter); Button uploadBt = (Button) findViewById(R.id.upload_button); + + Spinner serverSpinner = (Spinner) findViewById(R.id.servers_spinner); + serverSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + Server server = servers.get(position); + int defaultDelay = server.getDefautDelay(); + int pos = 0; + int min = Integer.MAX_VALUE; + int savePos = 0; + for(Integer delay : deletedDays) { + if(delay == defaultDelay) + break; + int diff = delay - defaultDelay; + if(min > Math.abs(diff)) { + min = Math.abs(diff); + savePos = pos; + } + pos++; + } + Spinner deleteDaySpinner = (Spinner) findViewById(R.id.delete_day_spinner); + if(pos >= deletedDays.size()) + deleteDaySpinner.setSelection(savePos); + else + deleteDaySpinner.setSelection(pos); + + } + + @Override + public void onNothingSelected(AdapterView parent) { + + } + }); + + //retrieve previous state if it exist if(savedInstanceState != null) { int selectedServer = savedInstanceState.getInt("selectedServer"); @@ -180,8 +217,7 @@ public class UploadActivity extends AppCompatActivity { } if (selectedServer < urls.size()) { - Spinner servers = (Spinner) findViewById(R.id.servers_spinner); - servers.setSelection(selectedServer); + serverSpinner.setSelection(selectedServer); } } deleteCache(); @@ -447,7 +483,7 @@ public class UploadActivity extends AppCompatActivity { //retrieve the selected server name in case it change his place in list String selectedServer = (String) serversSpinner.getSelectedItem(); - List servers = Database.getInstance(getApplicationContext()).getServers(true); + servers = Database.getInstance(getApplicationContext()).getServers(true); urls.clear(); int pos = 0; //create the string list of server name from database data @@ -587,7 +623,7 @@ public class UploadActivity extends AppCompatActivity { infosLayout.setVisibility(View.GONE); dataLayout.setVisibility(View.VISIBLE); } else { - for(int i = 0; clip != null && i < clip.getItemCount(); i++) { + for(int i = 0; i < clip.getItemCount(); i++) { Uri imageUri = clip.getItemAt(i).getUri(); if(imageUri == null) continue; diff --git a/app/src/main/java/fr/mobdev/goblim/objects/Server.java b/app/src/main/java/fr/mobdev/goblim/objects/Server.java index 9d5ec45..66b680a 100644 --- a/app/src/main/java/fr/mobdev/goblim/objects/Server.java +++ b/app/src/main/java/fr/mobdev/goblim/objects/Server.java @@ -23,12 +23,18 @@ public class Server { private long id; private String url; private boolean defaultServer; + private int maxDelay; + private int defaultDelay; + private long maxFileSize; - public Server(long id, String url, boolean defaultServer) + public Server(long id, String url, boolean defaultServer, int maxDelay, int defaultDelay, long maxFileSize) { this.id = id; this.url = url; this.defaultServer = defaultServer; + this.maxDelay = maxDelay; + this.defaultDelay = defaultDelay; + this.maxFileSize = maxFileSize; } public String getUrl() @@ -46,4 +52,15 @@ public class Server { return defaultServer; } + public int getMaxDelay() { + return maxDelay; + } + + public long getMaxFileSize() { + return maxFileSize; + } + + public int getDefautDelay() { + return defaultDelay; + } }