aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/github/daneren2005
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/github/daneren2005')
-rw-r--r--app/src/main/java/github/daneren2005/dsub/activity/SubsonicActivity.java16
-rw-r--r--app/src/main/java/github/daneren2005/dsub/domain/MusicDirectory.java13
-rw-r--r--app/src/main/java/github/daneren2005/dsub/fragments/ChatFragment.java1
-rw-r--r--app/src/main/java/github/daneren2005/dsub/fragments/MainFragment.java3
-rw-r--r--app/src/main/java/github/daneren2005/dsub/fragments/NowPlayingFragment.java2
-rw-r--r--app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java2
-rw-r--r--app/src/main/java/github/daneren2005/dsub/fragments/SubsonicFragment.java18
-rw-r--r--app/src/main/java/github/daneren2005/dsub/provider/DSubWidgetProvider.java12
-rw-r--r--app/src/main/java/github/daneren2005/dsub/service/ChromeCastController.java25
-rw-r--r--app/src/main/java/github/daneren2005/dsub/service/DownloadService.java1
-rw-r--r--app/src/main/java/github/daneren2005/dsub/service/DownloadServiceLifecycleSupport.java14
-rw-r--r--app/src/main/java/github/daneren2005/dsub/service/OfflineMusicService.java6
-rw-r--r--app/src/main/java/github/daneren2005/dsub/service/RESTMusicService.java24
-rw-r--r--app/src/main/java/github/daneren2005/dsub/service/parser/AbstractParser.java10
14 files changed, 113 insertions, 34 deletions
diff --git a/app/src/main/java/github/daneren2005/dsub/activity/SubsonicActivity.java b/app/src/main/java/github/daneren2005/dsub/activity/SubsonicActivity.java
index d67893ef..dc64e9d1 100644
--- a/app/src/main/java/github/daneren2005/dsub/activity/SubsonicActivity.java
+++ b/app/src/main/java/github/daneren2005/dsub/activity/SubsonicActivity.java
@@ -954,6 +954,22 @@ public class SubsonicActivity extends AppCompatActivity implements OnItemSelecte
runnable.run();
} else {
afterServiceAvailable.add(runnable);
+ checkIfServiceAvailable();
+ }
+ }
+ private void checkIfServiceAvailable() {
+ if(getDownloadService() == null) {
+ handler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ checkIfServiceAvailable();
+ }
+ }, 50);
+ } else if(afterServiceAvailable.size() > 0) {
+ for(Runnable runnable: afterServiceAvailable) {
+ handler.post(runnable);
+ }
+ afterServiceAvailable.clear();
}
}
diff --git a/app/src/main/java/github/daneren2005/dsub/domain/MusicDirectory.java b/app/src/main/java/github/daneren2005/dsub/domain/MusicDirectory.java
index 42aa5288..42c97b9e 100644
--- a/app/src/main/java/github/daneren2005/dsub/domain/MusicDirectory.java
+++ b/app/src/main/java/github/daneren2005/dsub/domain/MusicDirectory.java
@@ -20,6 +20,7 @@ package github.daneren2005.dsub.domain;
import android.annotation.TargetApi;
import android.content.Context;
+import android.content.SharedPreferences;
import android.media.MediaMetadataRetriever;
import android.os.Build;
import android.util.Log;
@@ -525,6 +526,18 @@ public class MusicDirectory implements Serializable {
this.closeness = closeness;
}
+ public boolean isOnlineId(Context context) {
+ try {
+ String cacheLocation = Util.getPreferences(context).getString(Constants.PREFERENCES_KEY_CACHE_LOCATION, null);
+ return cacheLocation == null || id == null || id.indexOf(cacheLocation) == -1;
+ } catch(Exception e) {
+ Log.w(TAG, "Failed to check online id validity");
+
+ // Err on the side of default functionality
+ return true;
+ }
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) {
diff --git a/app/src/main/java/github/daneren2005/dsub/fragments/ChatFragment.java b/app/src/main/java/github/daneren2005/dsub/fragments/ChatFragment.java
index 3e48f1a6..febf22de 100644
--- a/app/src/main/java/github/daneren2005/dsub/fragments/ChatFragment.java
+++ b/app/src/main/java/github/daneren2005/dsub/fragments/ChatFragment.java
@@ -81,6 +81,7 @@ public class ChatFragment extends SubsonicFragment {
});
chatListView = (ListView) rootView.findViewById(R.id.chat_entries);
+ chatListView.setStackFromBottom(true);
messageEditText.setImeActionLabel("Send", KeyEvent.KEYCODE_ENTER);
messageEditText.addTextChangedListener(new TextWatcher() {
diff --git a/app/src/main/java/github/daneren2005/dsub/fragments/MainFragment.java b/app/src/main/java/github/daneren2005/dsub/fragments/MainFragment.java
index ea894485..cb94ed19 100644
--- a/app/src/main/java/github/daneren2005/dsub/fragments/MainFragment.java
+++ b/app/src/main/java/github/daneren2005/dsub/fragments/MainFragment.java
@@ -1,6 +1,7 @@
package github.daneren2005.dsub.fragments;
import android.content.res.Resources;
+import android.os.Environment;
import android.support.v7.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
@@ -247,7 +248,7 @@ public class MainFragment extends SelectRecyclerFragment<Integer> {
@Override
protected File doInBackground() throws Throwable {
updateProgress("Gathering Logs");
- File logcat = new File(FileUtil.getSubsonicDirectory(context), "logcat.txt");
+ File logcat = new File(Environment.getExternalStorageDirectory(), "dsub-logcat.txt");
Util.delete(logcat);
Process logcatProc = null;
diff --git a/app/src/main/java/github/daneren2005/dsub/fragments/NowPlayingFragment.java b/app/src/main/java/github/daneren2005/dsub/fragments/NowPlayingFragment.java
index f312675f..892891d2 100644
--- a/app/src/main/java/github/daneren2005/dsub/fragments/NowPlayingFragment.java
+++ b/app/src/main/java/github/daneren2005/dsub/fragments/NowPlayingFragment.java
@@ -560,7 +560,7 @@ public class NowPlayingFragment extends SubsonicFragment implements OnGestureLis
@Override
public boolean onContextItemSelected(MenuItem menuItem, UpdateView<DownloadFile> updateView, DownloadFile downloadFile) {
- if(onContextItemSelected(menuItem, downloadFile)) {
+ if(onContextItemSelected(menuItem, downloadFile.getSong())) {
return true;
}
diff --git a/app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java b/app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java
index abd1c6aa..2db10c2e 100644
--- a/app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java
+++ b/app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java
@@ -858,7 +858,7 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Section
RecursiveLoader onValid = new RecursiveLoader(context) {
@Override
protected Boolean doInBackground() throws Throwable {
- getSongsRecursively(entries, songs);
+ getSongsRecursively(entries, true);
getDownloadService().downloadBackground(songs, save);
return null;
}
diff --git a/app/src/main/java/github/daneren2005/dsub/fragments/SubsonicFragment.java b/app/src/main/java/github/daneren2005/dsub/fragments/SubsonicFragment.java
index 8a0752be..8672f534 100644
--- a/app/src/main/java/github/daneren2005/dsub/fragments/SubsonicFragment.java
+++ b/app/src/main/java/github/daneren2005/dsub/fragments/SubsonicFragment.java
@@ -1943,7 +1943,7 @@ public class SubsonicFragment extends Fragment implements SwipeRefreshLayout.OnR
new RecursiveLoader(context) {
@Override
protected Boolean doInBackground() throws Throwable {
- getSongsRecursively(entries, songs);
+ getSongsRecursively(entries, true);
getDownloadService().downloadBackground(songs, save);
return null;
}
@@ -2018,14 +2018,24 @@ public class SubsonicFragment extends Fragment implements SwipeRefreshLayout.OnR
}
protected void getSongsRecursively(List<Entry> entry) throws Exception {
- getSongsRecursively(entry, songs);
+ getSongsRecursively(entry, false);
+ }
+ protected void getSongsRecursively(List<Entry> entry, boolean allowVideo) throws Exception {
+ getSongsRecursively(entry, songs, allowVideo);
}
protected void getSongsRecursively(List<Entry> entry, List<Entry> songs) throws Exception {
+ getSongsRecursively(entry, songs, false);
+ }
+ protected void getSongsRecursively(List<Entry> entry, List<Entry> songs, boolean allowVideo) throws Exception {
MusicDirectory dir = new MusicDirectory();
dir.addChildren(entry);
- getSongsRecursively(dir, songs);
+ getSongsRecursively(dir, songs, allowVideo);
}
+
protected void getSongsRecursively(MusicDirectory parent, List<Entry> songs) throws Exception {
+ getSongsRecursively(parent, songs, false);
+ }
+ protected void getSongsRecursively(MusicDirectory parent, List<Entry> songs, boolean allowVideo) throws Exception {
if (songs.size() > MAX_SONGS) {
return;
}
@@ -2045,7 +2055,7 @@ public class SubsonicFragment extends Fragment implements SwipeRefreshLayout.OnR
}
for (Entry song : parent.getChildren(false, true)) {
- if (!song.isVideo() && song.getRating() != 1) {
+ if ((!song.isVideo() || allowVideo) && song.getRating() != 1) {
songs.add(song);
}
}
diff --git a/app/src/main/java/github/daneren2005/dsub/provider/DSubWidgetProvider.java b/app/src/main/java/github/daneren2005/dsub/provider/DSubWidgetProvider.java
index 83733618..18660fa2 100644
--- a/app/src/main/java/github/daneren2005/dsub/provider/DSubWidgetProvider.java
+++ b/app/src/main/java/github/daneren2005/dsub/provider/DSubWidgetProvider.java
@@ -165,10 +165,14 @@ public class DSubWidgetProvider extends AppWidgetProvider {
MusicDirectory.Entry currentPlaying = null;
if(service == null) {
// Deserialize from playling list to setup
- PlayerQueue state = FileUtil.deserialize(context, DownloadServiceLifecycleSupport.FILENAME_DOWNLOADS_SER, PlayerQueue.class);
- if(state != null && state.currentPlayingIndex != -1) {
- currentPlaying = state.songs.get(state.currentPlayingIndex);
- }
+ try {
+ PlayerQueue state = FileUtil.deserialize(context, DownloadServiceLifecycleSupport.FILENAME_DOWNLOADS_SER, PlayerQueue.class);
+ if (state != null && state.currentPlayingIndex != -1) {
+ currentPlaying = state.songs.get(state.currentPlayingIndex);
+ }
+ } catch(Exception e) {
+ Log.e(TAG, "Failed to grab current playing", e);
+ }
} else {
currentPlaying = service.getCurrentPlaying() == null ? null : service.getCurrentPlaying().getSong();
}
diff --git a/app/src/main/java/github/daneren2005/dsub/service/ChromeCastController.java b/app/src/main/java/github/daneren2005/dsub/service/ChromeCastController.java
index a729ed4e..2f6ecd90 100644
--- a/app/src/main/java/github/daneren2005/dsub/service/ChromeCastController.java
+++ b/app/src/main/java/github/daneren2005/dsub/service/ChromeCastController.java
@@ -319,21 +319,22 @@ public class ChromeCastController extends RemoteController {
meta.putString(MediaMetadata.KEY_ALBUM_ARTIST, song.getArtist());
meta.putString(MediaMetadata.KEY_ALBUM_TITLE, song.getAlbum());
- String coverArt = "";
- if(proxy == null || proxy instanceof WebProxy) {
- coverArt = musicService.getCoverArtUrl(downloadService, song);
+ if(castDevice.hasCapability(CastDevice.CAPABILITY_VIDEO_OUT)) {
+ if (proxy == null || proxy instanceof WebProxy) {
+ String coverArt = musicService.getCoverArtUrl(downloadService, song);
- // If proxy is going, it is a web proxy
- if(proxy != null) {
- coverArt = proxy.getPublicAddress(coverArt);
- }
+ // If proxy is going, it is a web proxy
+ if (proxy != null) {
+ coverArt = proxy.getPublicAddress(coverArt);
+ }
- meta.addImage(new WebImage(Uri.parse(coverArt)));
- } else {
- File coverArtFile = FileUtil.getAlbumArtFile(downloadService, song);
- if(coverArtFile != null && coverArtFile.exists()) {
- coverArt = proxy.getPublicAddress(coverArtFile.getPath());
meta.addImage(new WebImage(Uri.parse(coverArt)));
+ } else {
+ File coverArtFile = FileUtil.getAlbumArtFile(downloadService, song);
+ if (coverArtFile != null && coverArtFile.exists()) {
+ String coverArt = proxy.getPublicAddress(coverArtFile.getPath());
+ meta.addImage(new WebImage(Uri.parse(coverArt)));
+ }
}
}
}
diff --git a/app/src/main/java/github/daneren2005/dsub/service/DownloadService.java b/app/src/main/java/github/daneren2005/dsub/service/DownloadService.java
index bc465e74..7af21831 100644
--- a/app/src/main/java/github/daneren2005/dsub/service/DownloadService.java
+++ b/app/src/main/java/github/daneren2005/dsub/service/DownloadService.java
@@ -1754,6 +1754,7 @@ public class DownloadService extends Service {
autoPlayStart = false;
} else {
setPlayerState(PAUSED);
+ onSongProgress();
}
}
diff --git a/app/src/main/java/github/daneren2005/dsub/service/DownloadServiceLifecycleSupport.java b/app/src/main/java/github/daneren2005/dsub/service/DownloadServiceLifecycleSupport.java
index 442d3dc1..4c8ac586 100644
--- a/app/src/main/java/github/daneren2005/dsub/service/DownloadServiceLifecycleSupport.java
+++ b/app/src/main/java/github/daneren2005/dsub/service/DownloadServiceLifecycleSupport.java
@@ -18,7 +18,6 @@
*/
package github.daneren2005.dsub.service;
-import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -41,7 +40,6 @@ import github.daneren2005.dsub.domain.MusicDirectory;
import github.daneren2005.dsub.domain.PlayerQueue;
import github.daneren2005.dsub.domain.PlayerState;
import github.daneren2005.dsub.domain.ServerInfo;
-import github.daneren2005.dsub.util.BackgroundTask;
import github.daneren2005.dsub.util.CacheCleaner;
import github.daneren2005.dsub.util.Constants;
import github.daneren2005.dsub.util.FileUtil;
@@ -323,11 +321,19 @@ public class DownloadServiceLifecycleSupport {
position = 0;
}
+ MusicDirectory.Entry currentPlaying = state.songs.get(index);
+ List<MusicDirectory.Entry> songs = new ArrayList<>();
+ for(MusicDirectory.Entry song: state.songs) {
+ if(song.isOnlineId(downloadService)) {
+ songs.add(song);
+ }
+ }
+
MusicService musicService = MusicServiceFactory.getMusicService(downloadService);
- musicService.savePlayQueue(state.songs, state.songs.get(index), position, downloadService, null);
- currentSavePlayQueueTask = null;
+ musicService.savePlayQueue(songs, currentPlaying, position, downloadService, null);
} catch (Exception e) {
Log.e(TAG, "Failed to save playing queue to server", e);
+ } finally {
currentSavePlayQueueTask = null;
}
diff --git a/app/src/main/java/github/daneren2005/dsub/service/OfflineMusicService.java b/app/src/main/java/github/daneren2005/dsub/service/OfflineMusicService.java
index 2146cd15..17aaf804 100644
--- a/app/src/main/java/github/daneren2005/dsub/service/OfflineMusicService.java
+++ b/app/src/main/java/github/daneren2005/dsub/service/OfflineMusicService.java
@@ -394,8 +394,8 @@ public class OfflineMusicService implements MusicService {
Reader reader = null;
BufferedReader buffer = null;
+ int songCount = 0;
try {
- int songCount = 0;
reader = new FileReader(file);
buffer = new BufferedReader(reader);
@@ -427,7 +427,9 @@ public class OfflineMusicService implements MusicService {
Util.close(reader);
}
- playlists.add(playlist);
+ if(songCount > 0) {
+ playlists.add(playlist);
+ }
}
}
diff --git a/app/src/main/java/github/daneren2005/dsub/service/RESTMusicService.java b/app/src/main/java/github/daneren2005/dsub/service/RESTMusicService.java
index 97899529..b405211d 100644
--- a/app/src/main/java/github/daneren2005/dsub/service/RESTMusicService.java
+++ b/app/src/main/java/github/daneren2005/dsub/service/RESTMusicService.java
@@ -41,7 +41,9 @@ import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.conn.params.ConnManagerParams;
import org.apache.http.conn.params.ConnPerRouteBean;
@@ -730,6 +732,22 @@ public class RESTMusicService implements MusicService {
values.add(genre);
}
if(startYear != null && !"".equals(startYear)) {
+ // Check to make sure user isn't doing 2015 -> 2010 since Subsonic will return no results
+ if(endYear != null && !"".equals(endYear)) {
+ try {
+ int startYearInt = Integer.parseInt(startYear);
+ int endYearInt = Integer.parseInt(endYear);
+
+ if(startYearInt > endYearInt) {
+ String tmp = startYear;
+ startYear = endYear;
+ endYear = tmp;
+ }
+ } catch(Exception e) {
+ Log.w(TAG, "Failed to convert start/end year into ints", e);
+ }
+ }
+
names.add("fromYear");
values.add(startYear);
}
@@ -1886,7 +1904,7 @@ public class RESTMusicService implements MusicService {
while (true) {
attempts++;
HttpContext httpContext = new BasicHttpContext();
- final HttpPost request = new HttpPost(url);
+ final HttpRequestBase request = (url.indexOf("rest") == -1) ? new HttpGet(url) : new HttpPost(url);
if (task != null) {
// Attempt to abort the HTTP request if the task is cancelled.
@@ -1913,12 +1931,12 @@ public class RESTMusicService implements MusicService {
});
}
- if (parameterNames != null) {
+ if (parameterNames != null && request instanceof HttpPost) {
List<NameValuePair> params = new ArrayList<NameValuePair>();
for (int i = 0; i < parameterNames.size(); i++) {
params.add(new BasicNameValuePair(parameterNames.get(i), String.valueOf(parameterValues.get(i))));
}
- request.setEntity(new UrlEncodedFormEntity(params, Constants.UTF_8));
+ ((HttpPost) request).setEntity(new UrlEncodedFormEntity(params, Constants.UTF_8));
}
if (requestParams != null) {
diff --git a/app/src/main/java/github/daneren2005/dsub/service/parser/AbstractParser.java b/app/src/main/java/github/daneren2005/dsub/service/parser/AbstractParser.java
index 9ecbba52..664adcfb 100644
--- a/app/src/main/java/github/daneren2005/dsub/service/parser/AbstractParser.java
+++ b/app/src/main/java/github/daneren2005/dsub/service/parser/AbstractParser.java
@@ -23,6 +23,7 @@ import java.io.Reader;
import org.xmlpull.v1.XmlPullParser;
import android.content.Context;
+import android.util.Log;
import android.util.Xml;
import github.daneren2005.dsub.R;
import github.daneren2005.dsub.domain.ServerInfo;
@@ -34,7 +35,7 @@ import github.daneren2005.dsub.util.Util;
* @author Sindre Mehus
*/
public abstract class AbstractParser {
-
+ private static final String TAG = AbstractParser.class.getSimpleName();
protected final Context context;
protected final int instance;
private XmlPullParser parser;
@@ -101,7 +102,12 @@ public abstract class AbstractParser {
protected Integer getInteger(String name) {
String s = get(name);
- return s == null ? null : Integer.valueOf(s);
+ try {
+ return (s == null || "".equals(s)) ? null : Integer.valueOf(s);
+ } catch(Exception e) {
+ Log.w(TAG, "Failed to parse " + s + " into integer");
+ return null;
+ }
}
protected Long getLong(String name) {