aboutsummaryrefslogtreecommitdiff
path: root/subsonic-android/src
diff options
context:
space:
mode:
authorScott Jackson <daneren2005@gmail.com>2013-07-09 22:25:20 -0700
committerScott Jackson <daneren2005@gmail.com>2013-07-09 22:25:20 -0700
commit232f308d7161e4f68ce8f2beecaf25e709988d4d (patch)
treed5229a2c2b288a0dbbf51fb9464593662aefcd77 /subsonic-android/src
parent5b15bbbd63e77d2a5e82cb20dcc9ff46fea1bf49 (diff)
downloaddsub-232f308d7161e4f68ce8f2beecaf25e709988d4d.tar.gz
dsub-232f308d7161e4f68ce8f2beecaf25e709988d4d.tar.bz2
dsub-232f308d7161e4f68ce8f2beecaf25e709988d4d.zip
Add offline support for podcasts
Diffstat (limited to 'subsonic-android/src')
-rw-r--r--subsonic-android/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java4
-rw-r--r--subsonic-android/src/github/daneren2005/dsub/service/OfflineMusicService.java23
-rw-r--r--subsonic-android/src/github/daneren2005/dsub/service/RESTMusicService.java14
-rw-r--r--subsonic-android/src/github/daneren2005/dsub/util/FileUtil.java13
4 files changed, 49 insertions, 5 deletions
diff --git a/subsonic-android/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java b/subsonic-android/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java
index 547eb0f3..9d34011e 100644
--- a/subsonic-android/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java
+++ b/subsonic-android/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java
@@ -221,10 +221,10 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Adapter
MusicDirectory.Entry entry = (MusicDirectory.Entry) entryList.getItemAtPosition(info.position);
onCreateContextMenu(menu, view, menuInfo, entry);
- if(!entry.isVideo() && !Util.isOffline(context) && playlistId == null && podcastId != null) {
+ if(!entry.isVideo() && !Util.isOffline(context) && playlistId == null && (podcastId != null || Util.isOffline(context) && podcastId == null)) {
menu.removeItem(R.id.song_menu_remove_playlist);
}
- if(podcastId != null) {
+ if(podcastId != null && !Util.isOffline(context)) {
String status = ((PodcastEpisode)entry).getStatus();
if("completed".equals(status)) {
menu.removeItem(R.id.song_menu_server_download);
diff --git a/subsonic-android/src/github/daneren2005/dsub/service/OfflineMusicService.java b/subsonic-android/src/github/daneren2005/dsub/service/OfflineMusicService.java
index 3bb30bc1..0a3b0f55 100644
--- a/subsonic-android/src/github/daneren2005/dsub/service/OfflineMusicService.java
+++ b/subsonic-android/src/github/daneren2005/dsub/service/OfflineMusicService.java
@@ -602,12 +602,31 @@ public class OfflineMusicService extends RESTMusicService {
@Override
public List<PodcastChannel> getPodcastChannels(boolean refresh, Context context, ProgressListener progressListener) throws Exception {
- throw new OfflineException("Getting Podcasts not available in offline mode");
+ List<PodcastChannel> channels = new ArrayList<PodcastChannel>();
+
+ File dir = FileUtil.getPodcastDirectory(context);
+ String line;
+ for(File file: dir.listFiles()) {
+ BufferedReader br = new BufferedReader(new FileReader(file));
+ while ((line = br.readLine()) != null && !"".equals(line)) {
+ PodcastChannel channel = new PodcastChannel();
+ channel.setId(line);
+ channel.setName(line);
+ channel.setStatus("completed");
+
+ if(FileUtil.getPodcastDirectory(context, channel).exists()) {
+ channels.add(channel);
+ }
+ }
+ br.close();
+ }
+
+ return channels;
}
@Override
public MusicDirectory getPodcastEpisodes(String id, Context context, ProgressListener progressListener) throws Exception {
- throw new OfflineException("Getting Podcasts not available in offline mode");
+ return getMusicDirectory(FileUtil.getPodcastDirectory(context, id).getPath(), null, false, context, progressListener);
}
@Override
diff --git a/subsonic-android/src/github/daneren2005/dsub/service/RESTMusicService.java b/subsonic-android/src/github/daneren2005/dsub/service/RESTMusicService.java
index a002dcb6..fddff16a 100644
--- a/subsonic-android/src/github/daneren2005/dsub/service/RESTMusicService.java
+++ b/subsonic-android/src/github/daneren2005/dsub/service/RESTMusicService.java
@@ -892,7 +892,19 @@ public class RESTMusicService implements MusicService {
Reader reader = getReader(context, progressListener, "getPodcasts", null, Arrays.asList("includeEpisodes"), Arrays.<Object>asList("false"));
try {
- return new PodcastChannelParser(context).parse(reader, progressListener);
+ List<PodcastChannel> channels = new PodcastChannelParser(context).parse(reader, progressListener);
+
+ String content = "";
+ for(PodcastChannel channel: channels) {
+ content += channel.getName() + "\n";
+ }
+
+ File file = FileUtil.getPodcastFile(context, Util.getServerName(context));
+ BufferedWriter bw = new BufferedWriter(new FileWriter(file));
+ bw.write(content);
+ bw.close();
+
+ return channels;
} finally {
Util.close(reader);
}
diff --git a/subsonic-android/src/github/daneren2005/dsub/util/FileUtil.java b/subsonic-android/src/github/daneren2005/dsub/util/FileUtil.java
index 267db36c..44be1921 100644
--- a/subsonic-android/src/github/daneren2005/dsub/util/FileUtil.java
+++ b/subsonic-android/src/github/daneren2005/dsub/util/FileUtil.java
@@ -152,10 +152,23 @@ public class FileUtil {
return dir;
}
+ public static File getPodcastFile(Context context, String server) {
+ File dir = getPodcastDirectory(context);
+ return new File(dir.getPath() + "/" + fileSystemSafe(server));
+ }
+ public static File getPodcastDirectory(Context context) {
+ File dir = new File(getSubsonicDirectory(), "podcasts");
+ ensureDirectoryExistsAndIsReadWritable(dir);
+ return dir;
+ }
public static File getPodcastDirectory(Context context, PodcastChannel channel) {
File dir = new File(getMusicDirectory(context).getPath() + "/" + fileSystemSafe(channel.getName()));
return dir;
}
+ public static File getPodcastDirectory(Context context, String channel) {
+ File dir = new File(getMusicDirectory(context).getPath() + "/" + fileSystemSafe(channel));
+ return dir;
+ }
public static void createDirectoryForParent(File file) {
File dir = file.getParentFile();