Browse Source

- added remoterss/RemoteRssActivity.java

- added test menu to access it
- now parses uTorrent server RSS feeds/items
pull/313/head
twig 9 years ago
parent
commit
a20f9156f2
  1. 6
      app/src/main/AndroidManifest.xml
  2. 15
      app/src/main/java/org/transdroid/core/gui/TorrentsActivity.java
  3. 317
      app/src/main/java/org/transdroid/core/gui/remoterss/RemoteRssActivity.java
  4. 57
      app/src/main/java/org/transdroid/core/gui/remoterss/RemoteRssFilesAdapter.java
  5. 138
      app/src/main/java/org/transdroid/core/gui/remoterss/RemoteRssFragment.java
  6. 50
      app/src/main/java/org/transdroid/core/gui/remoterss/RemoteRssItemView.java
  7. 27
      app/src/main/java/org/transdroid/daemon/Utorrent/UtorrentAdapter.java
  8. 69
      app/src/main/java/org/transdroid/daemon/Utorrent/data/RemoteRssFile.java
  9. 169
      app/src/main/java/org/transdroid/daemon/Utorrent/data/UTorrentRssFeed.java
  10. 124
      app/src/main/res/layout/activity_remoterss.xml
  11. 40
      app/src/main/res/layout/fragment_remoterss.xml
  12. 58
      app/src/main/res/layout/list_item_remoterssitem.xml
  13. 5
      app/src/main/res/menu/activity_torrents_main.xml

6
app/src/main/AndroidManifest.xml

@ -239,6 +239,10 @@
android:name="org.transdroid.core.gui.rss.RssitemsActivity_" android:name="org.transdroid.core.gui.rss.RssitemsActivity_"
android:label="@string/rss_feeds" android:label="@string/rss_feeds"
android:theme="@style/TransdroidTheme" /> android:theme="@style/TransdroidTheme" />
<activity
android:name=".core.gui.remoterss.RemoteRssActivity_"
android:label="Remote RSS feeds"
android:theme="@style/TransdroidTheme" />
<!-- Background services --> <!-- Background services -->
<service android:name="org.transdroid.core.service.ServerCheckerService_" /> <service android:name="org.transdroid.core.service.ServerCheckerService_" />
@ -293,4 +297,4 @@
</receiver> </receiver>
</application> </application>
</manifest> </manifest>

15
app/src/main/java/org/transdroid/core/gui/TorrentsActivity.java

@ -83,6 +83,7 @@ import org.transdroid.core.gui.navigation.NavigationFilter;
import org.transdroid.core.gui.navigation.NavigationHelper; import org.transdroid.core.gui.navigation.NavigationHelper;
import org.transdroid.core.gui.navigation.RefreshableActivity; import org.transdroid.core.gui.navigation.RefreshableActivity;
import org.transdroid.core.gui.navigation.StatusType; import org.transdroid.core.gui.navigation.StatusType;
import org.transdroid.core.gui.remoterss.RemoteRssActivity_;
import org.transdroid.core.gui.rss.RssfeedsActivity_; import org.transdroid.core.gui.rss.RssfeedsActivity_;
import org.transdroid.core.gui.search.BarcodeHelper; import org.transdroid.core.gui.search.BarcodeHelper;
import org.transdroid.core.gui.search.FilePickerHelper; import org.transdroid.core.gui.search.FilePickerHelper;
@ -99,6 +100,8 @@ import org.transdroid.daemon.Torrent;
import org.transdroid.daemon.TorrentDetails; import org.transdroid.daemon.TorrentDetails;
import org.transdroid.daemon.TorrentFile; import org.transdroid.daemon.TorrentFile;
import org.transdroid.daemon.TorrentsSortBy; import org.transdroid.daemon.TorrentsSortBy;
import org.transdroid.daemon.Utorrent.UtorrentAdapter;
import org.transdroid.daemon.Utorrent.data.UTorrentRssFeed;
import org.transdroid.daemon.task.AddByFileTask; import org.transdroid.daemon.task.AddByFileTask;
import org.transdroid.daemon.task.AddByMagnetUrlTask; import org.transdroid.daemon.task.AddByMagnetUrlTask;
import org.transdroid.daemon.task.AddByUrlTask; import org.transdroid.daemon.task.AddByUrlTask;
@ -847,6 +850,18 @@ public class TorrentsActivity extends AppCompatActivity implements TorrentTasksE
MainSettingsActivity_.intent(this).start(); MainSettingsActivity_.intent(this).start();
} }
@OptionsItem(R.id.action_testing)
protected void openTesting() {
if (currentConnection instanceof UtorrentAdapter) {
ArrayList<UTorrentRssFeed> rssFeedItems = ((UtorrentAdapter) (currentConnection)).getRemoteRssFeeds();
RemoteRssActivity_.intent(this)
.feeds(rssFeedItems)
.start()
;
}
}
@OptionsItem(R.id.action_help) @OptionsItem(R.id.action_help)
protected void openHelp() { protected void openHelp() {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.transdroid.org/download/"))); startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.transdroid.org/download/")));

317
app/src/main/java/org/transdroid/core/gui/remoterss/RemoteRssActivity.java

@ -0,0 +1,317 @@
/*
* Copyright 2010-2013 Eric Kok et al.
*
* Transdroid is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Transdroid is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Transdroid. If not, see <http://www.gnu.org/licenses/>.
*/
package org.transdroid.core.gui.remoterss;
import android.annotation.TargetApi;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.Extra;
import org.androidannotations.annotations.FragmentById;
import org.androidannotations.annotations.InstanceState;
import org.androidannotations.annotations.OptionsItem;
import org.androidannotations.annotations.OptionsMenu;
import org.androidannotations.annotations.ViewById;
import org.transdroid.R;
import org.transdroid.core.app.settings.SystemSettings_;
import org.transdroid.core.gui.TorrentsActivity;
import org.transdroid.core.gui.TorrentsActivity_;
import org.transdroid.daemon.Utorrent.data.UTorrentRssFeed;
import java.util.ArrayList;
/**
* An activity that holds a single torrents details fragment. It is used on devices (i.e. phones) where there is no room to show details in the {@link
* TorrentsActivity} directly. Task execution, such as loading of more details and updating file priorities, is performed in this activity via
* background methods.
* @author Eric Kok
*/
@EActivity(R.layout.activity_remoterss)
@OptionsMenu(R.menu.activity_details)
public class RemoteRssActivity extends AppCompatActivity {
@Extra
@InstanceState
protected ArrayList<UTorrentRssFeed> feeds;
// Settings
// private IDaemonAdapter currentConnection = null;
// Details view components
@ViewById
protected Toolbar torrentsToolbar;
@FragmentById(R.id.remoterss_fragment)
protected RemoteRssFragment fragmentRemoteRss;
@Override
public void onCreate(Bundle savedInstanceState) {
// Set the theme according to the user preference
if (SystemSettings_.getInstance_(this).useDarkTheme()) {
setTheme(R.style.TransdroidTheme_Dark);
}
super.onCreate(savedInstanceState);
}
@AfterViews
protected void init() {
// We require feeds to be specified; otherwise close the activity
if (feeds == null) {
finish();
return;
}
// Simple action bar with up, torrent name as title and refresh button
setSupportActionBar(torrentsToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// getSupportActionBar().setTitle(NavigationHelper.buildCondensedFontString(torrent.getName()));
// // Connect to the last used server
// ServerSetting lastUsed = applicationSettings.getLastUsedServer();
// fragmentDetails.setCurrentServerSettings(lastUsed);
// currentConnection = lastUsed.createServerAdapter(connectivityHelper.getConnectedNetworkName(), this);
// // Show details and load fine stats and torrent files
// fragmentDetails.updateTorrent(torrent);
// fragmentDetails.updateLabels(currentLabels);
// TODO: show all items
fragmentRemoteRss.updateTorrentFiles(feeds.get(0).files);
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@OptionsItem(android.R.id.home)
protected void navigateUp() {
TorrentsActivity_.intent(this)
.flags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
.start();
}
// @OptionsItem(R.id.action_refresh)
// public void refreshScreen() {
// fragmentRemoteRss.updateIsLoading(true, null);
// refreshTorrent();
// refreshTorrentDetails(torrent);
// refreshTorrentFiles(torrent);
// }
// @Background
// protected void refreshTorrent() {
// DaemonTaskResult result = RetrieveTask.create(currentConnection).execute(log);
// if (result instanceof RetrieveTaskSuccessResult) {
// onTorrentsRetrieved(((RetrieveTaskSuccessResult) result).getTorrents(), ((RetrieveTaskSuccessResult) result).getLabels());
// } else {
// onCommunicationError((DaemonTaskFailureResult) result, true);
// }
// }
//
// @Background
// public void refreshTorrentDetails(Torrent torrent) {
// if (!Daemon.supportsFineDetails(torrent.getDaemon())) {
// return;
// }
// DaemonTaskResult result = GetTorrentDetailsTask.create(currentConnection, torrent).execute(log);
// if (result instanceof GetTorrentDetailsTaskSuccessResult) {
// onTorrentDetailsRetrieved(torrent, ((GetTorrentDetailsTaskSuccessResult) result).getTorrentDetails());
// } else {
// onCommunicationError((DaemonTaskFailureResult) result, false);
// }
// }
//
// @Background
// public void refreshTorrentFiles(Torrent torrent) {
// if (!Daemon.supportsFileListing(torrent.getDaemon())) {
// return;
// }
// DaemonTaskResult result = GetFileListTask.create(currentConnection, torrent).execute(log);
// if (result instanceof GetFileListTaskSuccessResult) {
// onTorrentFilesRetrieved(torrent, ((GetFileListTaskSuccessResult) result).getFiles());
// } else {
// onCommunicationError((DaemonTaskFailureResult) result, false);
// }
// }
//
// @Background
// @Override
// public void resumeTorrent(Torrent torrent) {
// torrent.mimicResume();
// DaemonTaskResult result = ResumeTask.create(currentConnection, torrent).execute(log);
// if (result instanceof DaemonTaskSuccessResult) {
// onTaskSucceeded((DaemonTaskSuccessResult) result, getString(R.string.result_resumed, torrent.getName()));
// } else {
// onCommunicationError((DaemonTaskFailureResult) result, false);
// }
// }
//
// @Background
// @Override
// public void pauseTorrent(Torrent torrent) {
// torrent.mimicPause();
// DaemonTaskResult result = PauseTask.create(currentConnection, torrent).execute(log);
// if (result instanceof DaemonTaskSuccessResult) {
// onTaskSucceeded((DaemonTaskSuccessResult) result, getString(R.string.result_paused, torrent.getName()));
// } else {
// onCommunicationError((DaemonTaskFailureResult) result, false);
// }
// }
//
// @Background
// @Override
// public void startTorrent(Torrent torrent, boolean forced) {
// torrent.mimicStart();
// DaemonTaskResult result = StartTask.create(currentConnection, torrent, forced).execute(log);
// if (result instanceof DaemonTaskSuccessResult) {
// onTaskSucceeded((DaemonTaskSuccessResult) result, getString(R.string.result_started, torrent.getName()));
// } else {
// onCommunicationError((DaemonTaskFailureResult) result, false);
// }
// }
//
// @Background
// @Override
// public void stopTorrent(Torrent torrent) {
// torrent.mimicStop();
// DaemonTaskResult result = StopTask.create(currentConnection, torrent).execute(log);
// if (result instanceof DaemonTaskSuccessResult) {
// onTaskSucceeded((DaemonTaskSuccessResult) result, getString(R.string.result_stopped, torrent.getName()));
// } else {
// onCommunicationError((DaemonTaskFailureResult) result, false);
// }
// }
//
// @Background
// @Override
// public void removeTorrent(Torrent torrent, boolean withData) {
// DaemonTaskResult result = RemoveTask.create(currentConnection, torrent, withData).execute(log);
// if (result instanceof DaemonTaskSuccessResult) {
// // Close the details activity (as the torrent is now removed)
// closeActivity(getString(withData ? R.string.result_removed_with_data : R.string.result_removed, torrent.getName()));
// } else {
// onCommunicationError((DaemonTaskFailureResult) result, false);
// }
// }
//
// @UiThread
// protected void closeActivity(String closeText) {
// setResult(RESULT_OK, new Intent().putExtra("torrent_removed", true).putExtra("affected_torrent", torrent));
// finish();
// if (closeText != null) {
// SnackbarManager.show(Snackbar.with(this).text(closeText));
// }
// }
//
// @Background
// @Override
// public void updateLabel(Torrent torrent, String newLabel) {
// torrent.mimicNewLabel(newLabel);
// DaemonTaskResult result = SetLabelTask.create(currentConnection, torrent, newLabel == null ? "" : newLabel).execute(log);
// if (result instanceof DaemonTaskSuccessResult) {
// onTaskSucceeded((DaemonTaskSuccessResult) result, getString(R.string.result_labelset, newLabel));
// } else {
// onCommunicationError((DaemonTaskFailureResult) result, false);
// }
// }
//
// @Background
// @Override
// public void forceRecheckTorrent(Torrent torrent) {
// torrent.mimicCheckingStatus();
// DaemonTaskResult result = ForceRecheckTask.create(currentConnection, torrent).execute(log);
// if (result instanceof DaemonTaskSuccessResult) {
// onTaskSucceeded((DaemonTaskSuccessResult) result, getString(R.string.result_recheckedstarted, torrent.getName()));
// } else {
// onCommunicationError((DaemonTaskFailureResult) result, false);
// }
// }
//
// @Background
// @Override
// public void updateTrackers(Torrent torrent, List<String> newTrackers) {
// DaemonTaskResult result = SetTrackersTask.create(currentConnection, torrent, newTrackers).execute(log);
// if (result instanceof DaemonTaskSuccessResult) {
// onTaskSucceeded((DaemonTaskSuccessResult) result, getString(R.string.result_trackersupdated));
// } else {
// onCommunicationError((DaemonTaskFailureResult) result, false);
// }
// }
//
// @Background
// @Override
// public void updateLocation(Torrent torrent, String newLocation) {
// DaemonTaskResult result = SetDownloadLocationTask.create(currentConnection, torrent, newLocation).execute(log);
// if (result instanceof DaemonTaskSuccessResult) {
// onTaskSucceeded((DaemonTaskSuccessResult) result, getString(R.string.result_locationset, newLocation));
// } else {
// onCommunicationError((DaemonTaskFailureResult) result, false);
// }
// }
//
// @Background
// @Override
// public void updatePriority(Torrent torrent, List<TorrentFile> files, Priority priority) {
// DaemonTaskResult result = SetFilePriorityTask.create(currentConnection, torrent, priority, new ArrayList<>(files)).execute(log);
// if (result instanceof DaemonTaskSuccessResult) {
// onTaskSucceeded((DaemonTaskSuccessResult) result, getString(R.string.result_priotitiesset));
// } else {
// onCommunicationError((DaemonTaskFailureResult) result, false);
// }
// }
//
// @UiThread
// protected void onTaskSucceeded(DaemonTaskSuccessResult result, String successMessage) {
// // Set the activity result so the calling activity knows it needs to update its view
// setResult(RESULT_OK, new Intent().putExtra("torrent_updated", true).putExtra("affected_torrent", torrent));
// // Refresh the screen as well
// refreshTorrent();
// refreshTorrentDetails(torrent);
// SnackbarManager.show(Snackbar.with(this).text(successMessage));
// }
//
// @UiThread
// protected void onTorrentDetailsRetrieved(Torrent torrent, TorrentDetails torrentDetails) {
// // Update the details fragment with the new fine details for the shown torrent
// fragmentDetails.updateTorrentDetails(torrent, torrentDetails);
// }
//
// @UiThread
// protected void onTorrentFilesRetrieved(Torrent torrent, List<TorrentFile> torrentFiles) {
// // Update the details fragment with the newly retrieved list of files
// fragmentDetails.updateTorrentFiles(torrent, new ArrayList<>(torrentFiles));
// }
//
// @UiThread
// protected void onCommunicationError(DaemonTaskFailureResult result, boolean isCritical) {
// log.i(this, result.getException().toString());
// String error = getString(LocalTorrent.getResourceForDaemonException(result.getException()));
// fragmentDetails.updateIsLoading(false, isCritical ? error : null);
// SnackbarManager.show(Snackbar.with(this).text(getString(LocalTorrent.getResourceForDaemonException(result.getException())))
// .colorResource(R.color.red));
// }
//
// @UiThread
// protected void onTorrentsRetrieved(List<Torrent> torrents, List<org.transdroid.daemon.Label> labels) {
// // Update the details fragment accordingly
// fragmentDetails.updateIsLoading(false, null);
// fragmentDetails.perhapsUpdateTorrent(torrents);
// fragmentDetails.updateLabels(Label.convertToNavigationLabels(labels, getResources().getString(R.string.labels_unlabeled)));
// }
}

57
app/src/main/java/org/transdroid/core/gui/remoterss/RemoteRssFilesAdapter.java

@ -0,0 +1,57 @@
package org.transdroid.core.gui.remoterss;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import org.transdroid.daemon.Utorrent.data.RemoteRssFile;
import java.util.ArrayList;
import java.util.List;
public class RemoteRssFilesAdapter extends BaseAdapter {
protected Context context;
protected List<RemoteRssFile> files;
public RemoteRssFilesAdapter(Context context) {
this.context = context;
files = new ArrayList<>();
}
@Override
public int getCount() {
return files.size();
}
@Override
public Object getItem(int position) {
return files.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
RemoteRssItemView itemView;
if (convertView == null) {
itemView = RemoteRssItemView_.build(context);
}
else {
itemView = (RemoteRssItemView) convertView;
}
itemView.bind((RemoteRssFile) getItem(position));
return itemView;
}
public void updateFiles(List<RemoteRssFile> torrentFiles) {
files = torrentFiles;
notifyDataSetChanged();
}
}

138
app/src/main/java/org/transdroid/core/gui/remoterss/RemoteRssFragment.java

@ -0,0 +1,138 @@
/*
* Copyright 2010-2013 Eric Kok et al.
*
* Transdroid is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Transdroid is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Transdroid. If not, see <http://www.gnu.org/licenses/>.
*/
package org.transdroid.core.gui.remoterss;
import android.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.ActionMenuView;
import android.view.View;
import android.widget.ListView;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.InstanceState;
import org.androidannotations.annotations.ItemClick;
import org.androidannotations.annotations.ViewById;
import org.transdroid.R;
import org.transdroid.daemon.Utorrent.data.RemoteRssFile;
import java.util.ArrayList;
import java.util.List;
/**
* Fragment that shows detailed statistics about some torrent. These come from some already fetched {@link Torrent} object, but it also retrieves
* further detailed statistics. The actual execution of tasks is performed by the activity that contains this fragment, as per the {@link
* TorrentTasksExecutor} interface.
* @author Eric Kok
*/
@EFragment(R.layout.fragment_remoterss)
public class RemoteRssFragment extends Fragment {
// Local data
@InstanceState
protected ArrayList<RemoteRssFile> torrentFiles;
// Views
@ViewById
protected View detailsContainer;
@ViewById(R.id.contextual_menu)
protected ActionMenuView contextualMenu;
@ViewById
protected SwipeRefreshLayout swipeRefreshLayout;
@ViewById
protected ListView torrentsList;
protected RemoteRssFilesAdapter adapter;
@AfterViews
protected void init() {
// Inject menu options in the actions toolbar
setHasOptionsMenu(true);
// // On large screens where this fragment is shown next to the torrents list, we show a continues grey vertical
// // line to separate the lists visually
// if (!NavigationHelper_.getInstance_(getActivity()).isSmallScreen()) {
// if (SystemSettings_.getInstance_(getActivity()).useDarkTheme()) {
// detailsContainer.setBackgroundResource(R.drawable.details_list_background_dark);
// } else {
// detailsContainer.setBackgroundResource(R.drawable.details_list_background_light);
// }
// }
// if (getActivity() != null && getActivity() instanceof RefreshableActivity) {
// swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
// @Override
// public void onRefresh() {
// ((RefreshableActivity) getActivity()).refreshScreen();
// swipeRefreshLayout.setRefreshing(false); // Use our custom indicator
// }
// });
// }
// Set up details adapter (itself containing the actual lists to show), which allows multi-select and fast
// scrolling
adapter = new RemoteRssFilesAdapter(getActivity());
torrentsList.setAdapter(adapter);
torrentsList.setFastScrollEnabled(true);
// Restore the fragment state (on orientation changes et al.)
if (torrentFiles != null) {
updateTorrentFiles(torrentFiles);
}
}
/**
* Updates the list adapter to show a new list of torrent files, replacing the old files list.
* @param checkTorrent The torrent for which the details were retrieved
* @param newTorrentFiles The new, updated list of torrent file objects
*/
public void updateTorrentFiles(List<RemoteRssFile> remoteRssFiles) {
torrentFiles = new ArrayList<>(remoteRssFiles);
adapter.updateFiles(torrentFiles);
}
@ItemClick(resName = "torrents_list")
protected void detailsListClicked(int position) {
torrentsList.setItemChecked(position, false);
}
// @Override
// public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// super.onCreateOptionsMenu(menu, inflater);
//
// inflater.inflate(R.menu.fragment_details, menu);
// }
//
// @Override
// public boolean onOptionsItemSelected(MenuItem item) {
// switch (item.getItemId()) {
// case R.id.action_start_default:
//// startTorrentDefault();
// return true;
// }
//
// return super.onOptionsItemSelected(item);
// }
// @OptionsItem(R.id.action_start_default)
// protected void startTorrentDefault() {
// if (getTasksExecutor() != null)
// getTasksExecutor().startTorrent(torrent, false);
// }
}

50
app/src/main/java/org/transdroid/core/gui/remoterss/RemoteRssItemView.java

@ -0,0 +1,50 @@
/*
* Copyright 2010-2013 Eric Kok et al.
*
* Transdroid is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Transdroid is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Transdroid. If not, see <http://www.gnu.org/licenses/>.
*/
package org.transdroid.core.gui.remoterss;
import android.content.Context;
import android.widget.LinearLayout;
import android.widget.TextView;
import org.androidannotations.annotations.EViewGroup;
import org.androidannotations.annotations.ViewById;
import org.transdroid.R;
import org.transdroid.core.app.settings.RssfeedSetting;
import org.transdroid.daemon.Utorrent.data.RemoteRssFile;
/**
* View that represents some {@link RssfeedSetting} object and displays name as well as loads a favicon for the feed's site and can load how many new
* items are available.
* @author Eric Kok
*/
@EViewGroup(R.layout.list_item_remoterssitem)
public class RemoteRssItemView extends LinearLayout {
// Views
@ViewById
protected TextView nameText, dateText, labelText;
public RemoteRssItemView(Context context) {
super(context);
}
public void bind(RemoteRssFile file) {
nameText.setText(file.getName());
dateText.setText(String.valueOf(file.timestamp));
labelText.setText(file.feedLabel);
}
}

27
app/src/main/java/org/transdroid/daemon/Utorrent/UtorrentAdapter.java

@ -40,6 +40,7 @@ import org.transdroid.daemon.Torrent;
import org.transdroid.daemon.TorrentDetails; import org.transdroid.daemon.TorrentDetails;
import org.transdroid.daemon.TorrentFile; import org.transdroid.daemon.TorrentFile;
import org.transdroid.daemon.TorrentStatus; import org.transdroid.daemon.TorrentStatus;
import org.transdroid.daemon.Utorrent.data.UTorrentRssFeed;
import org.transdroid.daemon.task.AddByFileTask; import org.transdroid.daemon.task.AddByFileTask;
import org.transdroid.daemon.task.AddByMagnetUrlTask; import org.transdroid.daemon.task.AddByMagnetUrlTask;
import org.transdroid.daemon.task.AddByUrlTask; import org.transdroid.daemon.task.AddByUrlTask;
@ -113,6 +114,10 @@ public class UtorrentAdapter implements IDaemonAdapter {
private DaemonSettings settings; private DaemonSettings settings;
private DefaultHttpClient httpclient; private DefaultHttpClient httpclient;
private static ArrayList<UTorrentRssFeed> rssFeedItems;
/** /**
* Initialises an adapter that provides operations to the uTorrent web daemon * Initialises an adapter that provides operations to the uTorrent web daemon
*/ */
@ -129,6 +134,11 @@ public class UtorrentAdapter implements IDaemonAdapter {
// Request all torrents from server // Request all torrents from server
JSONObject result = makeUtorrentRequest(log, "&list=1"); JSONObject result = makeUtorrentRequest(log, "&list=1");
if (result.has("rssfeeds")) {
parseJsonRemoteRssLists(result.getJSONArray("rssfeeds"));
}
return new RetrieveTaskSuccessResult((RetrieveTask) task, return new RetrieveTaskSuccessResult((RetrieveTask) task,
parseJsonRetrieveTorrents(result.getJSONArray("torrents")), parseJsonRetrieveTorrents(result.getJSONArray("torrents")),
parseJsonRetrieveGetLabels(result.getJSONArray("label"))); parseJsonRetrieveGetLabels(result.getJSONArray("label")));
@ -310,6 +320,20 @@ public class UtorrentAdapter implements IDaemonAdapter {
} }
} }
private void parseJsonRemoteRssLists(JSONArray results) {
rssFeedItems = new ArrayList<>();
UTorrentRssFeed item;
for (int i = 0; i < results.length(); i++) {
try {
item = new UTorrentRssFeed(results.getJSONArray(i));
rssFeedItems.add(item);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
private ArrayList<Label> parseJsonRetrieveGetLabels(JSONArray lresults) throws JSONException { private ArrayList<Label> parseJsonRetrieveGetLabels(JSONArray lresults) throws JSONException {
// Parse response // Parse response
@ -620,4 +644,7 @@ public class UtorrentAdapter implements IDaemonAdapter {
return this.settings; return this.settings;
} }
public ArrayList<UTorrentRssFeed> getRemoteRssFeeds() {
return rssFeedItems;
}
} }

69
app/src/main/java/org/transdroid/daemon/Utorrent/data/RemoteRssFile.java

@ -0,0 +1,69 @@
package org.transdroid.daemon.Utorrent.data;
import android.os.Parcel;
import android.os.Parcelable;
import org.json.JSONArray;
import org.json.JSONException;
import org.transdroid.core.gui.lists.SimpleListItem;
public class RemoteRssFile implements Parcelable, SimpleListItem {
public String name;
public String title;
public String link;
public String feedLabel;
public long timestamp;
public int season;
public int episode;
public RemoteRssFile(JSONArray json) throws JSONException {
name = json.getString(0);
title = json.getString(1);
link = json.getString(2);
timestamp = json.getLong(5);
season = json.getInt(6);
episode = json.getInt(7);
}
public static final Parcelable.Creator<RemoteRssFile> CREATOR = new Parcelable.Creator<RemoteRssFile>() {
public RemoteRssFile createFromParcel(Parcel in) {
return new RemoteRssFile(in);
}
public RemoteRssFile[] newArray(int size) {
return new RemoteRssFile[size];
}
};
public RemoteRssFile(Parcel in) {
name = in.readString();
title = in.readString();
link = in.readString();
feedLabel = in.readString();
timestamp = in.readLong();
season = in.readInt();
episode = in.readInt();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeString(title);
dest.writeString(link);
dest.writeString(feedLabel);
dest.writeLong(timestamp);
dest.writeInt(season);
dest.writeInt(episode);
}
@Override
public String getName() {
return title;
}
}

169
app/src/main/java/org/transdroid/daemon/Utorrent/data/UTorrentRssFeed.java

@ -0,0 +1,169 @@
package org.transdroid.daemon.Utorrent.data;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;
import org.json.JSONArray;
import org.json.JSONException;
import java.util.ArrayList;
import java.util.List;
/**
* Created by twig on 29/05/2016.
*/
public class UTorrentRssFeed implements Parcelable {
/**
* [
* 1, // id?
* true, // enabled
* false, // false = use custom alias
* false, // ?
* false, // ?
* 0, // ?
* "Castle|http:\/\/showrss.info\/show\/53.rss", // Custom alias|url or url
* 1464520989, // las updated?
* [ // Files
* [
* "Castle 2009 Crossfire", // name?
* "Castle (2009) 8x22 Crossfire", // Title
* // link
* "magnet:?xt=urn:btih:58E032D0B2E595393828FAED47224B3A2C9CCFE6&dn=Castle+2009+S08E22+HDTV+x264+LOL&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",
* 0,
* 0,
* 1463455205, // timestamp
* 8, // season
* 22, // episode
* 0,
* 1,
* false,
* false
* ],
* [
* "Castle 2009 Crossfire",
* "Castle (2009) 8x22 Crossfire 720p",
* "magnet:?xt=urn:btih:6E7764AA9CB23A84914FDB1206A2CD7887CCD622&dn=Castle+2009+S08E22+720p+HDTV+X264+DIMENSION&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",
* 12,
* 0,
* 1463455205,
* 8,
* 22,
* 0,
* 1,
* false,
* false
* ],
* ["Castle 2009 Hell to Pay","Castle (2009) 8x21 Hell to Pay 720p","magnet:?xt=urn:btih:2436547E7A13201C9A3E9409C7D3112C8DF2560C&dn=Castle+2009+S08E21+720p+HDTV+x264+KILLERS&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",12,0,1462762205,8,21,0,1,false,false],
* ["Castle 2009 Hell to Pay","Castle (2009) 8x21 Hell to Pay","magnet:?xt=urn:btih:329A154C7A4FA68F55409C9F0203C0B0F6FB5F43&dn=Castle+2009+S08E21+HDTV+x264+KILLERS&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",0,0,1462762205,8,21,0,1,false,false],
* ["Castle 2009 Much Ado About Murder PROPER","Castle (2009) 8x20 Much Ado About Murder 720p PROPER","magnet:?xt=urn:btih:98A3CF3CC59EB71658964FCB709E572B1401E35E&dn=Castle+2009+S08E20+PROPER+720p+HDTV+x264+KILLERS&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",12,0,1462189505,8,20,0,1,true,false],
* ["Castle 2009 Much Ado About Murder PROPER","Castle (2009) 8x20 Much Ado About Murder PROPER","magnet:?xt=urn:btih:C1E4F55526B298C9BC9F481F781777E1ACD88536&dn=Castle+2009+S08E20+PROPER+HDTV+x264+KILLERS&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",0,0,1462189505,8,20,0,1,true,false],
* ["Castle 2009 Much Ado About Murder","Castle (2009) 8x20 Much Ado About Murder 720p","magnet:?xt=urn:btih:B80E9DA4DF7D88DC9BF62C8677233F6DB4E5E24E&dn=Castle+2009+S08E20+720p+HDTV+x264+FLEET&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",12,0,1462164608,8,20,0,1,false,false],
* ["Castle 2009 Much Ado About Murder","Castle (2009) 8x20 Much Ado About Murder","magnet:?xt=urn:btih:C73F67FDFCDBCF36686F16C79EDDE663669C72CD&dn=Castle+2009+S08E20+HDTV+x264+FLEET&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",0,0,1462164608,8,20,0,1,false,false],
* ["Castle 2009 Dead Again","Castle (2009) 8x19 Dead Again 720p","magnet:?xt=urn:btih:92FF43AF5BE73B8A79119C7C80CCCF3E5091D241&dn=Castle+2009+S08E19+720p+HDTV+x264+KILLERS&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",12,0,1461552608,8,19,0,1,false,false],
* ["Castle 2009 Dead Again","Castle (2009) 8x19 Dead Again","magnet:?xt=urn:btih:EE3DB0A002EF01B655777D8E56AF7C6046B22455&dn=Castle+2009+S08E19+HDTV+x264+KILLERS&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",0,0,1461552608,8,19,0,1,false,false],
* ["Castle 2009 Backstabber","Castle (2009) 8x18 Backstabber","magnet:?xt=urn:btih:C05B22BEE08D82C84B9A96728EE84FDB0E4286F5&dn=Castle+2009+S08E18+HDTV+x264+LOL&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",0,0,1460951407,8,18,0,1,false,false],
* ["Castle 2009 Backstabber","Castle (2009) 8x18 Backstabber 720p","magnet:?xt=urn:btih:27FB8EC5F537267F8A5543D728150E278B8E4D35&dn=Castle+2009+S08E18+720p+HDTV+x264+2HD&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",12,0,1460949608,8,18,0,1,false,false],
* ["Castle 2009 Death Wish","Castle (2009) 8x17 Death Wish","magnet:?xt=urn:btih:A772093AB91C9A87B1289DBFE7010B088A3FDCD4&dn=Castle+2009+S08E17+HDTV+x264+KILLERS&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",0,0,1460438409,8,17,0,1,false,false],
* ["Castle 2009 Death Wish","Castle (2009) 8x17 Death Wish 720p","magnet:?xt=urn:btih:ECAE7F4DCCB015F3052907CB9EBF255B718B74B4&dn=Castle+2009+S08E17+720p+HDTV+x264+AVS&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",12,0,1460433007,8,17,0,1,false,false],
* ["Castle 2009 Heartbreaker","Castle (2009) 8x16 Heartbreaker","magnet:?xt=urn:btih:1523E75580E6D4EDB34EAE287D53018C365A25BD&dn=Castle+S08E16+WEB+DL+x264+RARBG&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",0,0,1459863906,8,16,0,1,false,false],
* ["Castle 2009 Heartbreaker","Castle (2009) 8x16 Heartbreaker 720p","magnet:?xt=urn:btih:780628ABAADA1F7EEA98F4ED3FE971FCB2550D4E&dn=Castle+2009+S08E16+720p+HDTV+x264+SVA&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",12,0,1459828206,8,16,0,1,false,false],
* ["Castle 2009 Fidelis Ad Mortem","Castle (2009) 8x15 Fidelis Ad Mortem","magnet:?xt=urn:btih:ECB8DF64844076F4EB18349569FEA48DE4B4F2F9&dn=Castle+2009+S08E15+WEB+DL+x264+FUM&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",0,0,1458640207,8,15,0,1,false,false],
* ["Castle 2009 Fidelis Ad Mortem","Castle (2009) 8x15 Fidelis Ad Mortem 720p","magnet:?xt=urn:btih:829C270329F1527D5C1DF7AEE8D6E31028CB23A8&dn=Castle+2009+S08E15+720p+HDTV+x264+AVS&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",12,0,1458618610,8,15,0,1,false,false],
* ["Castle 2009 The G.D.S","Castle (2009) 8x14 The G.D.S.","magnet:?xt=urn:btih:4110431702205393AF8278E9018E4F2D9B3CB28E&dn=Castle+S08E14+WEB+DL+x264+RARBG&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",0,0,1457459708,8,14,0,1,false,false],
* ["Castle 2009 The G.D.S","Castle (2009) 8x14 The G.D.S. 720p","magnet:?xt=urn:btih:B69272F3FC841B6BA37EAE3D2E7128B2ED846F50&dn=Castle+2009+S08E14+720p+HDTV+x264+AVS&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",12,0,1457412606,8,14,0,1,false,false],
* ["Castle 2009 And Justice For All","Castle (2009) 8x13 And Justice For All 720p","magnet:?xt=urn:btih:9715C7CE755DFE6D23633D5E8BA08A7FE2DE7347&dn=Castle+2009+S08E13+720p+HDTV+x264+KILLERS&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",12,0,1456807809,8,13,0,1,false,false],
* ["Castle 2009 And Justice For All","Castle (2009) 8x13 And Justice For All","magnet:?xt=urn:btih:0638AC833ED9D2D72C880FF385651A6BA6CE28EE&dn=Castle+2009+S08E13+HDTV+x264+KILLERS&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",0,0,1456807809,8,13,0,1,false,false],
* ["Castle 2009 The Blame Game","Castle (2009) 8x12 The Blame Game 720p","magnet:?xt=urn:btih:E49F11DC34E7ADC87BBF798C6BB45D49C8475466&dn=Castle+2009+S08E12+720p+HDTV+X264+DIMENSION&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",12,0,1456195816,8,12,0,1,false,false],
* ["Castle 2009 The Blame Game","Castle (2009) 8x12 The Blame Game","magnet:?xt=urn:btih:A9417E1BDD7887C6DB18D06DB37DC48567766D04&dn=Castle+2009+S08E12+HDTV+x264+LOL&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",0,0,1456194022,8,12,0,1,false,false],
* ["Castle 2009 Dead Red","Castle (2009) 8x11 Dead Red 720p","magnet:?xt=urn:btih:94DD4AC8826A59814887E780D38F6D0FCD8590E3&dn=Castle+2009+S08E11+720p+HDTV+X264+DIMENSION&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",12,0,1455591012,8,11,0,1,false,false],
* ["Castle 2009 Dead Red","Castle (2009) 8x11 Dead Red","magnet:?xt=urn:btih:E44F825E3D3B6BE3471A833185B04DCA74A3674D&dn=Castle+2009+S08E11+HDTV+x264+LOL&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",0,0,1455589221,8,11,0,1,false,false],
* ["Castle 2009 Witness for the Prosecution","Castle (2009) 8x10 Witness for the Prosecution 720p","magnet:?xt=urn:btih:6E0F4DA3529B63BE75AECDC9EA1248305A8AD9D7&dn=Castle+2009+S08E10+720p+HDTV+X264+DIMENSION&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",12,0,1455515410,8,10,0,1,false,false],
* ["Castle 2009 Witness for the Prosecution","Castle (2009) 8x10 Witness for the Prosecution","magnet:?xt=urn:btih:8DD8E60B78C1A6703727FD54055C1DA4AD422222&dn=Castle+2009+S08E10+HDTV+x264+LOL&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",0,0,1455513610,8,10,0,1,false,false],
* ["Castle 2009","Castle (2009) 8x09","magnet:?xt=urn:btih:2F5BDC5958C2B7BCBC568D76F1487E68A95B74D3&dn=Castle+2009+S08E09+HDTV+x264+LOL&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",0,0,1454991609,8,9,0,1,false,false],
* ["Castle 2009","Castle (2009) 8x09 720p","magnet:?xt=urn:btih:E21DF496B8F838C37C2F191A623D6EA3315190BD&dn=Castle+2009+S08E09+720p+HDTV+X264+DIMENSION&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",12,0,1454991609,8,9,0,1,false,false],
* ["Castle 2009","Castle (2009) 8x08 720p","magnet:?xt=urn:btih:96A21B41A80043280AA2241C4530AF529655EB8D&dn=Castle+2009+S08E08+720p+HDTV+X264+DIMENSION&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",12,0,1448337002,8,8,0,1,false,false],
* ["Castle 2009","Castle (2009) 8x08","magnet:?xt=urn:btih:4E7BBE21D8B18DC09A9647038DC3254D7E85864C&dn=Castle+2009+S08E08+HDTV+x264+LOL&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",0,0,1448334902,8,8,0,1,false,false],
* ["Castle 2009","Castle (2009) 8x07","magnet:?xt=urn:btih:428208294D380ABDAA2CA9CD4DC0B1CC6CBD2CC8&dn=Castle+2009+S08E07+HDTV+x264+LOL&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",0,0,1447728601,8,7,0,1,false,false],
* ["Castle 2009","Castle (2009) 8x07 720p","magnet:?xt=urn:btih:3CDBF2ED5C14F1E514772D6541EC9D087F0AE3F3&dn=Castle+2009+S08E07+720p+HDTV+X264+DIMENSION&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",12,0,1447728601,8,7,0,1,false,false],
* ["Castle 2009","Castle (2009) 8x06 720p","magnet:?xt=urn:btih:BD99B76B9B3E9BC2401CBAB9100CB1A8CB0F9813&dn=Castle+2009+S08E06+720p+HDTV+X264+DIMENSION&tr=udp:\/\/tracker.coppersurfer.tk:6969\/announce&tr=udp:\/\/tracker.leechers-paradise.org:6969&tr=udp:\/\/open.demonii.com:1337",12,0,1447131002,8,6,0,1,false,false]
* ]
* ]
*/
public int feedID;
boolean enabled;
boolean isCustomAlias;
public String feedAlias;
public String feedURL;
public long lastUpdated;
public List<RemoteRssFile> files;
public UTorrentRssFeed(JSONArray json) throws JSONException {
Log.e("UTorrentRssFeedItem", "input");
feedID = json.getInt(0);
enabled = json.getBoolean(1);
isCustomAlias = !json.getBoolean(2);
feedURL = json.getString(6);
lastUpdated = json.getLong(7);
if (isCustomAlias) {
feedAlias = feedURL.split("\\|")[0];
feedURL = feedURL.split("\\|")[1];
}
else {
feedAlias = feedURL;
}
files = new ArrayList<>();
JSONArray filesJson = json.getJSONArray(8);
RemoteRssFile file;
for (int i = 0; i < filesJson.length(); i++) {
file = new RemoteRssFile(filesJson.getJSONArray(i));
file.feedLabel = feedAlias;
files.add(file);
}
}
public UTorrentRssFeed(Parcel in) {
feedID = in.readInt();
enabled = (in.readByte() == 1);
isCustomAlias = (in.readByte() == 1);
feedAlias = in.readString();
feedURL = in.readString();
lastUpdated = in.readLong();
files = new ArrayList<>();
in.readList(files, RemoteRssFile.class.getClassLoader());
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(feedID);
dest.writeByte((byte) (enabled ? 1 : 0));
dest.writeByte((byte) (isCustomAlias ? 1 : 0));
dest.writeString(feedAlias);
dest.writeString(feedURL);
dest.writeLong(lastUpdated);
dest.writeList(files);
}
public static final Parcelable.Creator<UTorrentRssFeed> CREATOR = new Parcelable.Creator<UTorrentRssFeed>() {
public UTorrentRssFeed createFromParcel(Parcel in) {
return new UTorrentRssFeed(in);
}
public UTorrentRssFeed[] newArray(int size) {
return new UTorrentRssFeed[size];
}
};
}

124
app/src/main/res/layout/activity_remoterss.xml

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2010-2013 Eric Kok et al.
Transdroid is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Transdroid is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Transdroid. If not, see <http://www.gnu.org/licenses/>.
-->
<!-- This layout is for phones in portrait and shows the torrents list with the filters as navigation drawer. -->
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".core.gui.remoterss.RemoteRssActivity_">
<!-- The main content view -->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="@+id/torrents_toolbar"
style="@style/DefaultToolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize" />
<android.support.v7.widget.Toolbar
android:id="@+id/actions_toolbar"
style="@style/SplitToolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:minHeight="?attr/actionBarSize"
android:paddingEnd="@dimen/ui_actions_padding"
android:paddingRight="@dimen/ui_actions_padding" />
<android.support.v7.widget.ActionMenuView
android:id="@+id/contextual_menu"
style="@style/SplitToolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:minHeight="?attr/actionBarSize"
android:visibility="gone"
tools:visibility="visible"/>
<fragment
android:id="@+id/remoterss_fragment"
class="org.transdroid.core.gui.remoterss.RemoteRssFragment_"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/actions_toolbar"
android:layout_below="@id/torrents_toolbar"
tools:layout="@layout/fragment_torrents" />
<View
style="@style/DefaultToolbarShadow"
android:layout_below="@id/torrents_toolbar" />
<View
style="@style/SplitToolbarShadow"
android:layout_above="@id/actions_toolbar" />
<include
layout="@layout/actionbar_addbutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_gravity="bottom|end"
android:layout_marginBottom="16dp"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp" />
</RelativeLayout>
<!-- The navigation drawer -->
<LinearLayout
android:id="@+id/drawer_container"
android:layout_width="@dimen/ui_filters_list"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="?attr/drawer_background"
android:orientation="vertical">
<ListView
android:id="@+id/drawer_list"
android:layout_width="@dimen/ui_filters_list"
android:layout_height="0dp"
android:layout_weight="1"
android:choiceMode="singleChoice"
android:divider="@null"
tools:listitem="@layout/list_item_filter" />
<android.support.v7.widget.SearchView
android:id="@+id/filter_search"
android:layout_width="@dimen/ui_filters_list"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginEnd="5dp"
android:layout_marginRight="10dp"
android:layout_marginTop="5dp"
app:iconifiedByDefault="false"
app:queryHint="@string/action_filter"
app:searchIcon="@drawable/ic_action_filter" />
</LinearLayout>
</android.support.v4.widget.DrawerLayout>

40
app/src/main/res/layout/fragment_remoterss.xml

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2010-2013 Eric Kok et al.
Transdroid is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Transdroid is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Transdroid. If not, see <http://www.gnu.org/licenses/>.
-->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipe_refresh_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/torrents_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:choiceMode="multipleChoiceModal"
android:clipToPadding="false"
android:paddingBottom="35dp"
tools:listitem="@layout/list_item_rssitem"
tools:visibility="visible"/>
</android.support.v4.widget.SwipeRefreshLayout>
</FrameLayout>

58
app/src/main/res/layout/list_item_remoterssitem.xml

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2010-2013 Eric Kok et al.
Transdroid is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Transdroid is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Transdroid. If not, see <http://www.gnu.org/licenses/>.
-->
<org.transdroid.core.gui.rss.RssitemStatusLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="?attr/activatable_background"
android:paddingBottom="@dimen/margin_default"
android:paddingLeft="@dimen/margin_default"
android:paddingRight="@dimen/margin_default"
android:paddingTop="@dimen/margin_default">
<TextView
android:id="@+id/name_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-condensed"
android:textColor="?attr/text_bright"
android:textIsSelectable="false"
android:textSize="@dimen/text_enlarged"
tools:text="Test RSS Item Text Here"/>
<TextView
android:id="@+id/date_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/name_text"
android:layout_marginTop="4dip"
android:textIsSelectable="false"
android:textSize="@dimen/text_small"
tools:text="25-12-2015"/>
<TextView
android:id="@+id/label_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/date_text"
android:layout_marginTop="4dip"
android:textIsSelectable="false"
android:textSize="@dimen/text_small"
tools:text="Label of torrent"/>
</org.transdroid.core.gui.rss.RssitemStatusLayout>

5
app/src/main/res/menu/activity_torrents_main.xml

@ -37,4 +37,9 @@
android:title="@string/action_settings" android:title="@string/action_settings"
app:showAsAction="always" /> app:showAsAction="always" />
<item
android:id="@+id/action_testing"
android:title="testing"
app:showAsAction="always" />
</menu> </menu>

Loading…
Cancel
Save