From 076740222131d6dac90c54dbaf4fc99c0b40dac7 Mon Sep 17 00:00:00 2001 From: chripede Date: Sat, 23 Jan 2010 22:44:22 +0000 Subject: [PATCH] * manage queue items git-svn-id: http://sabdroidplus.googlecode.com/svn/trunk@6 cd30d2d2-fef5-11de-8cb8-1d395499b42c --- AndroidManifest.xml | 3 +- res/drawable/icon.png | Bin 8530 -> 8072 bytes res/layout/queue_list_item.xml | 3 + res/xml/preferences.xml | 8 +- .../googlecode/sabdroidplus/SABDroidPlus.java | 77 +++++++++++++++- .../activity/queue/QueueListRowAdapter.java | 2 + .../sabnzbd/SABnzbdController.java | 85 ++++++++++++++++-- .../sabdroidplus/util/HttpUtil.java | 16 ++-- 8 files changed, 171 insertions(+), 23 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 8faae94..1750b04 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,7 +1,6 @@ + package="com.googlecode.sabdroidplus" android:versionCode="1" android:versionName="1.0 Beta1"> diff --git a/res/drawable/icon.png b/res/drawable/icon.png index ec94d1fa8e58fefabe3aea15dfb39d1ea8bd8476..0cef91bd212d094eca86dd2562d9b67bc2e4fae8 100644 GIT binary patch literal 8072 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 diff --git a/res/layout/queue_list_item.xml b/res/layout/queue_list_item.xml index 83ef3de..109ea08 100644 --- a/res/layout/queue_list_item.xml +++ b/res/layout/queue_list_item.xml @@ -43,4 +43,7 @@ /> + + + diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml index b52adb7..e9669bc 100644 --- a/res/xml/preferences.xml +++ b/res/xml/preferences.xml @@ -43,10 +43,8 @@ - - - - - + + + \ No newline at end of file diff --git a/src/com/googlecode/sabdroidplus/SABDroidPlus.java b/src/com/googlecode/sabdroidplus/SABDroidPlus.java index a5c85c7..60ccd3e 100644 --- a/src/com/googlecode/sabdroidplus/SABDroidPlus.java +++ b/src/com/googlecode/sabdroidplus/SABDroidPlus.java @@ -16,15 +16,19 @@ import android.os.Bundle; import android.os.Handler; import android.os.Message; +import android.view.ContextMenu; import android.view.Menu; import android.view.MenuItem; +import android.view.View; import android.view.Window; +import android.view.ContextMenu.ContextMenuInfo; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; +import android.widget.AdapterView.AdapterContextMenuInfo; import com.googlecode.sabdroidplus.activity.SettingsActivity; import com.googlecode.sabdroidplus.activity.queue.QueueListRowAdapter; @@ -42,11 +46,17 @@ public class SABDroidPlus extends Activity private static final int MENU_QUIT = 3; private static final int MENU_PLAY_PAUSE = 4; private static final int MENU_ADD_NZB = 5; + + private static final int CONTEXT_RENAME = 1; + private static final int CONTEXT_DELETE = 2; + private static final int CONTEXT_MOVEUP = 3; + private static final int CONTEXT_MOVEDOWN = 4; final static int DIALOG_SETUP_PROMPT = 999; private static ArrayList rows = new ArrayList(); private static JSONObject backupJsonObject; + private ListView listView = null; protected boolean paused; @SuppressWarnings("unchecked") @@ -60,8 +70,9 @@ protected void onCreate(Bundle savedInstanceState) SharedPreferences preferences = getSharedPreferences(SABDroidConstants.PREFERENCES_KEY, 0); Preferences.update(preferences); - ListView listView = (ListView) findViewById(R.id.queueList); + listView = (ListView) findViewById(R.id.queueList); listView.setAdapter(new QueueListRowAdapter(this, rows)); + registerForContextMenu(listView); // Tries to fetch recoverable data Object data[] = (Object[]) getLastNonConfigurationInstance(); @@ -212,6 +223,12 @@ public void handleMessage(Message msg) case SABnzbdController.MESSAGE_HIDE_INDERTERMINATE_PROGRESS_BAR: setProgressBarIndeterminateVisibility(false); break; + + case SABnzbdController.MESSAGE_REMOVE_ITEM: + case SABnzbdController.MESSAGE_MOVED_ITEM: + case SABnzbdController.MESSAGE_RENAMED_ITEM: + SABnzbdController.refreshQueue(messageHandler); + break; default: break; @@ -375,6 +392,64 @@ public Object onRetainNonConfigurationInstance() data[1] = backupJsonObject; return data; } + + @Override + public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { + super.onCreateContextMenu(menu, v, menuInfo); + + menu.setHeaderTitle("Manage queue item"); + menu.add(0, CONTEXT_RENAME, 0, "Rename"); + menu.add(0, CONTEXT_DELETE, 0, "Delete"); + menu.add(0, CONTEXT_MOVEUP, 0, "Move up"); + menu.add(0, CONTEXT_MOVEDOWN, 0, "Move down"); + } + + @Override + public boolean onContextItemSelected(MenuItem item) { + AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); + + View selectedItem = listView.getAdapter().getView(info.position, null, null); + final String nzoId = ((TextView)selectedItem.findViewById(R.id.queueRowNzoId)).getText().toString(); + + switch(item.getItemId()) + { + case CONTEXT_DELETE: + SABnzbdController.removeItem(messageHandler, nzoId); + break; + case CONTEXT_RENAME: + AlertDialog.Builder alertDialog = new AlertDialog.Builder(this); + alertDialog.setTitle("Rename"); + alertDialog.setMessage("Enter new name"); + final EditText textInput = new EditText(this); + String currentName = ((TextView)selectedItem.findViewById(R.id.queueRowLabelFilename)).getText().toString(); + textInput.setText(currentName); + alertDialog.setView(textInput); + alertDialog.setPositiveButton("Ok", new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + String newName = textInput.getText().toString(); + SABnzbdController.renameItem(messageHandler, nzoId, newName); + } + }); + alertDialog.setNegativeButton("Cancel", new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // Do nothing + } + }); + alertDialog.show(); + break; + case CONTEXT_MOVEUP: + int position = info.position == 0 ? 0 : info.position - 1; + SABnzbdController.moveItem(messageHandler, nzoId, position); + break; + case CONTEXT_MOVEDOWN: + int downPosition = info.position == (listView.getCount()-1) ? (listView.getCount()-1): info.position + 1; + SABnzbdController.moveItem(messageHandler, nzoId, downPosition); + break; + } + return true; + } private void updateStatus(String message) { diff --git a/src/com/googlecode/sabdroidplus/activity/queue/QueueListRowAdapter.java b/src/com/googlecode/sabdroidplus/activity/queue/QueueListRowAdapter.java index 95f1a29..920e3b7 100644 --- a/src/com/googlecode/sabdroidplus/activity/queue/QueueListRowAdapter.java +++ b/src/com/googlecode/sabdroidplus/activity/queue/QueueListRowAdapter.java @@ -43,6 +43,8 @@ public View getView(int position, View convertView, ViewGroup parent) String completed = Formatter.formatShort(values[2]) + " / " + Formatter.formatShort(values[1]) + " MB"; ((TextView) row.findViewById(R.id.queueRowLabelCompleted)).setText(completed); + + ((TextView) row.findViewById(R.id.queueRowNzoId)).setText(values[3]); return (row); } diff --git a/src/com/googlecode/sabdroidplus/sabnzbd/SABnzbdController.java b/src/com/googlecode/sabdroidplus/sabnzbd/SABnzbdController.java index 5f82a5f..91641ea 100644 --- a/src/com/googlecode/sabdroidplus/sabnzbd/SABnzbdController.java +++ b/src/com/googlecode/sabdroidplus/sabnzbd/SABnzbdController.java @@ -13,7 +13,7 @@ import com.googlecode.sabdroidplus.Preferences; import com.googlecode.sabdroidplus.util.HttpUtil; -import com.googlecode.sabdroidplus.util.HttpUtil.ServerConnectinoException; +import com.googlecode.sabdroidplus.util.HttpUtil.ServerConnectionException; public final class SABnzbdController { @@ -29,6 +29,9 @@ public final class SABnzbdController public final static int MESSAGE_LOAD_CATEGORIES = 5; public final static int MESSAGE_ADD_NZB = 6; + public static final int MESSAGE_REMOVE_ITEM = 7; + public static final int MESSAGE_MOVED_ITEM = 8; + public static final int MESSAGE_RENAMED_ITEM = 9; public static final String STATUS_PAUSED = "paused"; @@ -135,6 +138,7 @@ public void run() String rowValues = jobs.getJSONObject(i).get("filename").toString(); rowValues = rowValues + "#" + jobs.getJSONObject(i).getDouble("mb"); rowValues = rowValues + "#" + jobs.getJSONObject(i).getDouble("mbleft"); + rowValues = rowValues + "#" + jobs.getJSONObject(i).getString("id"); rows.add(rowValues); } @@ -151,7 +155,7 @@ public void run() message.setData(bundle); message.sendToTarget(); } - catch (ServerConnectinoException e) + catch (ServerConnectionException e) { sendUpdateMessageStatus(messageHandler, e.getMessage()); } @@ -190,7 +194,7 @@ private static void sendUpdateMessageStatus(Handler messageHandler, String text) message.sendToTarget(); } - public static String makeApiCall(String command, String xTraParams) throws ServerConnectinoException + public static String makeApiCall(String command, String xTraParams) throws ServerConnectionException { String url = URL_TEMPLATE; url = url.replace("[SERVER_URL]", fixUrlFromPreferences(Preferences.get(Preferences.SERVER_URL))); @@ -236,14 +240,14 @@ private static String getPreferencesParams() return ""; } - public static String makeApiCall(String command) throws ServerConnectinoException + public static String makeApiCall(String command) throws ServerConnectionException { return makeApiCall(command, ""); } public static void addNewzbinId(final Handler messageHandler, final int value) { - if(executingCommand || !Preferences.isSet(Preferences.SERVER_URL)) + if(!Preferences.isSet(Preferences.SERVER_URL)) return; Thread thread = new Thread() @@ -267,8 +271,7 @@ public void run() public static void addFile(final Handler messageHandler, final String nzbUrl, final String category) { - // Already running or settings not ready - if (executingCommand || !Preferences.isSet(Preferences.SERVER_URL)) + if (!Preferences.isSet(Preferences.SERVER_URL)) return; Thread thread = new Thread() @@ -352,4 +355,72 @@ public void run() thread.start(); } + + public static void removeItem(final Handler messageHandler, final String nzoId) + { + Thread thread = new Thread() + { + @Override + public void run() { + try { + makeApiCall("queue", "name=delete&value=" + nzoId); + } catch (ServerConnectionException e) { + e.printStackTrace(); + } + + Message msg = new Message(); + msg.setTarget(messageHandler); + msg.what = MESSAGE_REMOVE_ITEM; + msg.sendToTarget(); + } + }; + + thread.start(); + } + + public static void moveItem(final Handler messageHandler, final String nzoId, final int position) + { + Thread thread = new Thread() + { + @Override + public void run() + { + try { + makeApiCall("switch", "value=" + nzoId + "&value2=" + position); + } catch (ServerConnectionException e) { + e.printStackTrace(); + } + + Message msg = new Message(); + msg.setTarget(messageHandler); + msg.what = MESSAGE_MOVED_ITEM; + msg.sendToTarget(); + } + }; + + thread.start(); + } + + public static void renameItem(final Handler messageHandler, final String nzoId, final String newName) + { + Thread thread = new Thread() + { + @Override + public void run() + { + try { + makeApiCall("queue", "name=rename&value=" + nzoId + "&value2=" + newName); + } catch (ServerConnectionException e) { + e.printStackTrace(); + } + + Message msg = new Message(); + msg.setTarget(messageHandler); + msg.what = MESSAGE_RENAMED_ITEM; + msg.sendToTarget(); + } + }; + + thread.start(); + } } diff --git a/src/com/googlecode/sabdroidplus/util/HttpUtil.java b/src/com/googlecode/sabdroidplus/util/HttpUtil.java index c2b8c1d..9e1802d 100644 --- a/src/com/googlecode/sabdroidplus/util/HttpUtil.java +++ b/src/com/googlecode/sabdroidplus/util/HttpUtil.java @@ -37,9 +37,9 @@ public static HttpUtil instance() /** * Gets data from URL * throws {@link RuntimeException} If anything goes wrong - * @throws ServerConnectinoException + * @throws ServerConnectionException */ - public String getData(String url) throws ServerConnectinoException + public String getData(String url) throws ServerConnectionException { try { @@ -51,7 +51,7 @@ public String getData(String url) throws ServerConnectinoException if (status != HttpStatus.SC_OK) { - throw new ServerConnectinoException("Connection Error: " + response.getStatusLine().getReasonPhrase()); + throw new ServerConnectionException("Connection Error: " + response.getStatusLine().getReasonPhrase()); } else { @@ -60,13 +60,13 @@ public String getData(String url) throws ServerConnectinoException return inputStreamAsString(content); } } - catch (ServerConnectinoException e) + catch (ServerConnectionException e) { - throw new ServerConnectinoException(e.getMessage()); + throw new ServerConnectionException(e.getMessage()); } catch (IOException e) { - throw new ServerConnectinoException("Connection timeout!"); + throw new ServerConnectionException("Connection timeout!"); } catch (Throwable e) { @@ -92,11 +92,11 @@ public static String inputStreamAsString(InputStream stream) throws IOException return result.substring(0, result.length() - 1); } - public class ServerConnectinoException extends Exception + public class ServerConnectionException extends Exception { private static final long serialVersionUID = -7812290125811215338L; - public ServerConnectinoException(String message) + public ServerConnectionException(String message) { super(message); }