package com.sabdroidex.fragments;
import android.os.Bundle;
import android.os.Message;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Toast;
import com.sabdroidex.R;
import com.sabdroidex.adapters.QueueAdapter;
import com.sabdroidex.controllers.SABController;
import com.sabdroidex.controllers.sabnzbd.SABnzbdController;
import com.sabdroidex.data.JSONBased;
import com.sabdroidex.data.sabnzbd.Queue;
import com.sabdroidex.fragments.dialogs.sabnzbd.QueueElementActionDialog;
import com.sabdroidex.interfaces.DialogFragmentManagerHolder;
import com.sabdroidex.interfaces.UpdateableActivity;
import com.sabdroidex.utils.Preferences;
import com.sabdroidex.utils.SABHandler;
public class QueueFragment extends SABFragment {
private static final String TAG = "QueueFragment";
private boolean paused = false;
private static Queue queue;
private QueueAdapter queueAdapter;
// Instantiating the Handler associated with the main thread.
private final SABHandler messageHandler = new SABHandler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == SABnzbdController.MESSAGE.QUEUE.hashCode()) {
try {
queue = (Queue) msg.obj;
updateQueueList();
}
catch (Exception e) {
Log.e(TAG, e.getLocalizedMessage() == null ? e.toString() : e.getLocalizedMessage());
}
}
if (msg.what == SABController.MESSAGE.UPDATE.hashCode()) {
try {
((UpdateableActivity) getParentActivity()).updateState(false);
if (msg.obj instanceof String && !"".equals(msg.obj)) {
Toast.makeText(getParentActivity(), (String) msg.obj, Toast.LENGTH_LONG).show();
}
}
catch (Exception e) {
Log.e(TAG, e.getLocalizedMessage() == null ? e.toString() : e.getLocalizedMessage());
}
}
}
};
/**
*
*/
public QueueFragment() {}
/**
*
* @param downloadRows
*/
public QueueFragment(Queue downloadRows) {
queue = downloadRows;
}
@Override
public int getTitle() {
return R.string.tab_queue;
}
/**
* Refreshing the queue during startup or on user request. Asks to configure
* if still not done
*/
public void manualRefreshQueue() {
if (!Preferences.isSet(Preferences.SABNZBD_URL)) {
((DialogFragmentManagerHolder)getActivity()).getDialogFragmentManager().showSetupDialog();
return;
}
SABnzbdController.refreshQueue(messageHandler);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
queueAdapter = new QueueAdapter(getActivity(), queue.getQueueElements());
LinearLayout downloadView = (LinearLayout) inflater.inflate(R.layout.list, null);
ListView queueList = (ListView) downloadView.findViewById(R.id.elementList);
downloadView.removeAllViews();
queueList.setAdapter(queueAdapter);
queueList.setOnItemClickListener(new QueueItemClickListener());
return queueList;
}
@Override
public void onCreate(Bundle savedInstanceState) {
startAutomaticUpdater();
messageHandler.setActivity(getActivity());
super.onCreate(savedInstanceState);
}
@Override
public void onPause() {
super.onPause();
paused = true;
}
@Override
public void onResume() {
super.onResume();
paused = false;
}
@Override
public JSONBased getDataCache() {
return queue;
}
/**
* Fires up a new Thread to update the queue every X minutes
*/
private void startAutomaticUpdater() {
Thread updater = new Thread() {
@Override
public void run() {
for (; !isInterrupted();) {
try {
int rate = Integer.valueOf(Preferences.get("refresh_rate", "5000"));
Thread.sleep(rate);
}
catch (Exception e) {
Log.e(TAG, "Could not sleep !!");
}
if (!paused)
SABnzbdController.refreshQueue(messageHandler);
}
}
};
updater.start();
}
/**
* Updates the queue {@link android.widget.ListView}
*/
private void updateQueueList() {
/**
* This might happens if a rotation occurs
*/
if (queueAdapter != null || queue != null) {
queueAdapter.setItems(queue.getQueueElements());
queueAdapter.notifyDataSetChanged();
}
((UpdateableActivity) getActivity()).updateLabels(queue);
((UpdateableActivity) getActivity()).updateState(true);
}
private class QueueItemClickListener implements OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
try {
QueueElementActionDialog queueElementActionDialog = new QueueElementActionDialog(messageHandler, queue.getQueueElements().get(position));
queueElementActionDialog.show(getActivity().getSupportFragmentManager(), "queueaction");
}
catch (Exception e) {
Log.e(TAG, e.getLocalizedMessage());
}
}
}
public void pauseResumeQueue() {
SABnzbdController.pauseResumeQueue(messageHandler);
}
}