diff --git a/app/src/main/java/com/fongmi/android/tv/server/Nano.java b/app/src/main/java/com/fongmi/android/tv/server/Nano.java index 94a077102..63f4a003d 100644 --- a/app/src/main/java/com/fongmi/android/tv/server/Nano.java +++ b/app/src/main/java/com/fongmi/android/tv/server/Nano.java @@ -6,6 +6,7 @@ import com.fongmi.android.tv.bean.Device; import com.fongmi.android.tv.server.process.Action; import com.fongmi.android.tv.server.process.Cache; import com.fongmi.android.tv.server.process.Local; +import com.fongmi.android.tv.server.process.Media; import com.fongmi.android.tv.server.process.Process; import com.github.catvod.utils.Asset; import com.github.catvod.utils.Util; @@ -34,6 +35,7 @@ public class Nano extends NanoHTTPD { process.add(new Action()); process.add(new Cache()); process.add(new Local()); + process.add(new Media()); } public static Response success() { diff --git a/app/src/main/java/com/fongmi/android/tv/server/process/Media.java b/app/src/main/java/com/fongmi/android/tv/server/process/Media.java new file mode 100644 index 000000000..9d93a05cd --- /dev/null +++ b/app/src/main/java/com/fongmi/android/tv/server/process/Media.java @@ -0,0 +1,86 @@ +package com.fongmi.android.tv.server.process; + +import android.support.v4.media.MediaMetadataCompat; +import android.support.v4.media.session.PlaybackStateCompat; +import android.text.TextUtils; + +import com.fongmi.android.tv.player.Players; +import com.fongmi.android.tv.server.Nano; +import com.fongmi.android.tv.server.Server; +import com.google.gson.JsonObject; + +import java.util.Map; +import java.util.Objects; + +import fi.iki.elonen.NanoHTTPD; + +public class Media implements Process { + + @Override + public boolean isRequest(NanoHTTPD.IHTTPSession session, String path) { + return "/media".equals(path); + } + + @Override + public NanoHTTPD.Response doResponse(NanoHTTPD.IHTTPSession session, String path, Map files) { + if (isNull()) return Nano.success("{}"); + JsonObject result = new JsonObject(); + result.addProperty("url", getUrl()); + result.addProperty("title", getTitle()); + result.addProperty("artist", getArtist()); + result.addProperty("artwork", getArtUri()); + result.addProperty("duration", getDuration()); + result.addProperty("position", getPosition()); + result.addProperty("speed", getSpeed()); + result.addProperty("state", getState()); + return Nano.success(result.toString()); + } + + private Players getPlayer() { + return Server.get().getPlayer(); + } + + private boolean isNull() { + return Objects.isNull(getPlayer()) || Objects.isNull(getPlayer().getSession()); + } + + private PlaybackStateCompat getPlaybackState() { + return getPlayer().getSession().getController().getPlaybackState(); + } + + private MediaMetadataCompat getMetadata() { + return getPlayer().getSession().getController().getMetadata(); + } + + private String getUrl() { + return TextUtils.isEmpty(getPlayer().getUrl()) ? "" : getPlayer().getUrl(); + } + + private String getTitle() { + return getMetadata() == null || getMetadata().getString(MediaMetadataCompat.METADATA_KEY_TITLE).isEmpty() ? "" : getMetadata().getString(MediaMetadataCompat.METADATA_KEY_TITLE); + } + + private String getArtist() { + return getMetadata() == null || getMetadata().getString(MediaMetadataCompat.METADATA_KEY_ARTIST).isEmpty() ? "" : getMetadata().getString(MediaMetadataCompat.METADATA_KEY_ARTIST); + } + + private String getArtUri() { + return getMetadata() == null ? "" : getMetadata().getString(MediaMetadataCompat.METADATA_KEY_ART_URI); + } + + private long getDuration() { + return getMetadata() == null ? -1 : getMetadata().getLong(MediaMetadataCompat.METADATA_KEY_DURATION); + } + + private int getState() { + return getPlaybackState() == null ? -1 : getPlaybackState().getState(); + } + + private long getPosition() { + return getPlaybackState() == null ? -1 : getPlaybackState().getPosition(); + } + + private float getSpeed() { + return getPlaybackState() == null ? 1 : getPlaybackState().getPlaybackSpeed(); + } +} \ No newline at end of file