aboutsummaryrefslogtreecommitdiff
path: root/src/github/daneren2005
diff options
context:
space:
mode:
authorScott Jackson <daneren2005@gmail.com>2013-12-29 13:28:15 -0800
committerScott Jackson <daneren2005@gmail.com>2013-12-29 13:28:15 -0800
commit409376369ce1e66c1e408c8e6f3f7aa051daed62 (patch)
tree27ccfbed7760a383f045680ab3fe40b9b2879f9c /src/github/daneren2005
parent3f27964f47a7aed7afddf4e4d3542ffecb23afc1 (diff)
downloaddsub-409376369ce1e66c1e408c8e6f3f7aa051daed62.tar.gz
dsub-409376369ce1e66c1e408c8e6f3f7aa051daed62.tar.bz2
dsub-409376369ce1e66c1e408c8e6f3f7aa051daed62.zip
#173 Rename url for non-subsonic.org, add ability to create/publish shares
Diffstat (limited to 'src/github/daneren2005')
-rw-r--r--src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java16
-rw-r--r--src/github/daneren2005/dsub/fragments/SelectShareFragment.java3
-rw-r--r--src/github/daneren2005/dsub/fragments/SubsonicFragment.java54
-rw-r--r--src/github/daneren2005/dsub/service/parser/ShareParser.java14
-rw-r--r--src/github/daneren2005/dsub/util/Constants.java1
5 files changed, 86 insertions, 2 deletions
diff --git a/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java b/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java
index f16c197d..23857f91 100644
--- a/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java
+++ b/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java
@@ -940,6 +940,8 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Adapter
titleView.setPadding(0, 6, 4, 8);
} else if(name != null) {
titleView.setText(name);
+ } else if(share != null) {
+ titleView.setVisibility(View.GONE);
}
int songCount = 0;
@@ -983,6 +985,20 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Adapter
}
if(add) {
+ ImageView shareButton = (ImageView) header.findViewById(R.id.select_album_share);
+ if(share != null || podcastId != null || !Util.getPreferences(context).getBoolean(Constants.PREFERENCES_KEY_MENU_SHARED, true)) {
+ shareButton.setVisibility(View.GONE);
+ } else {
+ shareButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ createShare(SelectDirectoryFragment.this.entries);
+ }
+ });
+ }
+ }
+
+ if(add) {
return header;
} else {
return null;
diff --git a/src/github/daneren2005/dsub/fragments/SelectShareFragment.java b/src/github/daneren2005/dsub/fragments/SelectShareFragment.java
index 556fc8da..92d2d4b6 100644
--- a/src/github/daneren2005/dsub/fragments/SelectShareFragment.java
+++ b/src/github/daneren2005/dsub/fragments/SelectShareFragment.java
@@ -55,6 +55,9 @@ public class SelectShareFragment extends SelectListFragment<Share> {
Share share = (Share) listView.getItemAtPosition(info.position);
switch (menuItem.getItemId()) {
+ case R.id.share_menu_share:
+ shareExternal(share);
+ break;
case R.id.share_menu_info:
displayShareInfo(share);
break;
diff --git a/src/github/daneren2005/dsub/fragments/SubsonicFragment.java b/src/github/daneren2005/dsub/fragments/SubsonicFragment.java
index 626d4259..e57f032f 100644
--- a/src/github/daneren2005/dsub/fragments/SubsonicFragment.java
+++ b/src/github/daneren2005/dsub/fragments/SubsonicFragment.java
@@ -214,6 +214,9 @@ public class SubsonicFragment extends Fragment {
if(!prefs.getBoolean(Constants.PREFERENCES_KEY_MENU_STAR, true)) {
menu.setGroupVisible(R.id.hide_star, false);
}
+ if(!prefs.getBoolean(Constants.PREFERENCES_KEY_MENU_SHARED, true)) {
+ menu.setGroupVisible(R.id.hide_share, false);
+ }
}
protected void recreateContextMenu(ContextMenu menu) {
@@ -234,7 +237,7 @@ public class SubsonicFragment extends Fragment {
public boolean onContextItemSelected(MenuItem menuItem, Object selectedItem) {
Artist artist = selectedItem instanceof Artist ? (Artist) selectedItem : null;
MusicDirectory.Entry entry = selectedItem instanceof MusicDirectory.Entry ? (MusicDirectory.Entry) selectedItem : null;
- List<MusicDirectory.Entry> songs = new ArrayList<MusicDirectory.Entry>(10);
+ List<MusicDirectory.Entry> songs = new ArrayList<MusicDirectory.Entry>(1);
songs.add(entry);
switch (menuItem.getItemId()) {
@@ -292,6 +295,9 @@ public class SubsonicFragment extends Fragment {
case R.id.album_menu_show_artist:
showArtist((MusicDirectory.Entry) selectedItem);
break;
+ case R.id.album_menu_share:
+ createShare(songs);
+ break;
case R.id.song_menu_play_now:
getDownloadService().clear();
getDownloadService().download(songs, false, true, true, false);
@@ -327,6 +333,9 @@ public class SubsonicFragment extends Fragment {
case R.id.song_menu_stream_external:
streamExternalPlayer(entry);
break;
+ case R.id.song_menu_share:
+ createShare(songs);
+ break;
default:
return false;
}
@@ -1076,6 +1085,49 @@ public class SubsonicFragment extends Fragment {
replaceFragment(fragment, getRootId(), true);
}
+
+ public void createShare(final List<MusicDirectory.Entry> entries) {
+ new LoadingTask<List<Share>>(context, true) {
+ @Override
+ protected List<Share> doInBackground() throws Throwable {
+ List<String> ids = new ArrayList<String>(entries.size());
+ for(MusicDirectory.Entry entry: entries) {
+ ids.add(entry.getId());
+ }
+
+ MusicService musicService = MusicServiceFactory.getMusicService(context);
+ return musicService.createShare(ids, null, 0L, context, this);
+ }
+
+ @Override
+ protected void done(final List<Share> shares) {
+ if(shares.size() > 0) {
+ Share share = shares.get(0);
+ shareExternal(share);
+ } else {
+ Util.toast(context, context.getResources().getString(R.string.playlist_error), false);
+ }
+ }
+
+ @Override
+ protected void error(Throwable error) {
+ String msg;
+ if (error instanceof OfflineException || error instanceof ServerTooOldException) {
+ msg = getErrorMessage(error);
+ } else {
+ msg = context.getResources().getString(R.string.playlist_error) + " " + getErrorMessage(error);
+ }
+
+ Util.toast(context, msg, false);
+ }
+ }.execute();
+ }
+ public void shareExternal(Share share) {
+ Intent intent = new Intent(Intent.ACTION_SEND);
+ intent.setType("text/plain");
+ intent.putExtra(Intent.EXTRA_TEXT, share.getUrl());
+ context.startActivity(Intent.createChooser(intent, context.getResources().getString(R.string.share_via)));
+ }
public GestureDetector getGestureDetector() {
return gestureScanner;
diff --git a/src/github/daneren2005/dsub/service/parser/ShareParser.java b/src/github/daneren2005/dsub/service/parser/ShareParser.java
index 4688faf8..27a53d66 100644
--- a/src/github/daneren2005/dsub/service/parser/ShareParser.java
+++ b/src/github/daneren2005/dsub/service/parser/ShareParser.java
@@ -19,11 +19,15 @@
package github.daneren2005.dsub.service.parser;
import android.content.Context;
+import android.content.SharedPreferences;
import android.util.Log;
import github.daneren2005.dsub.R;
import github.daneren2005.dsub.domain.Share;
+import github.daneren2005.dsub.util.Constants;
import github.daneren2005.dsub.util.ProgressListener;
+import github.daneren2005.dsub.util.Util;
+
import org.xmlpull.v1.XmlPullParser;
import java.io.Reader;
import java.util.ArrayList;
@@ -47,6 +51,14 @@ public class ShareParser extends MusicDirectoryEntryParser {
List<Share> dir = new ArrayList<Share>();
Share share = null;
int eventType;
+
+ SharedPreferences prefs = Util.getPreferences(context);
+ int instance = prefs.getInt(Constants.PREFERENCES_KEY_SERVER_INSTANCE, 1);
+ String serverUrl = prefs.getString(Constants.PREFERENCES_KEY_SERVER_URL + instance, null);
+ if(serverUrl.charAt(serverUrl.length() - 1) != '/') {
+ serverUrl += '/';
+ }
+ serverUrl += "share/";
do {
eventType = nextParseEvent();
@@ -57,7 +69,7 @@ public class ShareParser extends MusicDirectoryEntryParser {
if ("share".equals(name)) {
share = new Share();
share.setCreated(get("created"));
- share.setUrl(get("url"));
+ share.setUrl(get("url").replaceFirst(".*/([^/?]+).*", serverUrl + "$1"));
share.setDescription(get("description"));
share.setExpires(get("expires"));
share.setId(get("id"));
diff --git a/src/github/daneren2005/dsub/util/Constants.java b/src/github/daneren2005/dsub/util/Constants.java
index c51e1ee1..6eb859a8 100644
--- a/src/github/daneren2005/dsub/util/Constants.java
+++ b/src/github/daneren2005/dsub/util/Constants.java
@@ -135,6 +135,7 @@ public final class Constants {
public static final String PREFERENCES_KEY_MENU_PLAY_NEXT = "showPlayNext";
public static final String PREFERENCES_KEY_MENU_PLAY_LAST = "showPlayLast";
public static final String PREFERENCES_KEY_MENU_STAR = "showStar";
+ public static final String PREFERENCES_KEY_MENU_SHARED = "showShared";
public static final String PREFERENCES_KEY_SHARED_ENABLED = "sharedEnabled";
public static final String OFFLINE_SCROBBLE_COUNT = "scrobbleCount";