Skip to content

Commit 3cd1daf

Browse files
author
Chris Bellew
committed
Fixed control of Plex clients through Wear and Notifications.
1 parent f37d730 commit 3cd1daf

File tree

7 files changed

+48
-78
lines changed

7 files changed

+48
-78
lines changed

mobile/src/main/java/com/atomjack/vcfp/PlexSubscription.java

Lines changed: 13 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,10 @@
77
import com.atomjack.shared.PlayerState;
88
import com.atomjack.shared.model.Timeline;
99
import com.atomjack.vcfp.activities.VCFPActivity;
10-
import com.atomjack.vcfp.interfaces.PlayerStateHandler;
1110
import com.atomjack.vcfp.model.MediaContainer;
1211
import com.atomjack.vcfp.model.PlexClient;
1312
import com.atomjack.vcfp.model.PlexResponse;
1413
import com.atomjack.vcfp.net.PlexHttpClient;
15-
import com.atomjack.vcfp.net.PlexHttpMediaContainerHandler;
1614
import com.atomjack.vcfp.net.PlexHttpResponseHandler;
1715

1816
import org.apache.http.Header;
@@ -72,6 +70,9 @@ public class PlexSubscription {
7270

7371
private Handler mHandler;
7472

73+
private PlayerState currentState;
74+
private Timeline currentTimeline;
75+
7576
public PlexSubscription() {
7677
mHandler = new Handler();
7778
uuid = VoiceControlForPlexApplication.getInstance().prefs.getUUID();
@@ -188,6 +189,11 @@ public void run() {
188189
e.printStackTrace();
189190
}
190191

192+
currentTimeline = mediaContainer.getActiveTimeline();
193+
if(currentTimeline != null) {
194+
currentState = PlayerState.getState(currentTimeline);
195+
}
196+
191197
onMessage(mediaContainer);
192198

193199

@@ -434,31 +440,11 @@ public PlexClient getClient() {
434440
return mClient;
435441
}
436442

437-
public Timeline getCurrentTimeline() {
438-
Header[] headers = {
439-
new BasicHeader(PlexHeaders.XPlexClientIdentifier, VoiceControlForPlexApplication.getInstance().prefs.getUUID())
440-
};
441-
MediaContainer mc = PlexHttpClient.getSync(String.format("http://%s:%s/player/timeline/poll?commandID=0", mClient.address, mClient.port), headers);
442-
Timeline t = mc.getActiveTimeline();
443-
return t;
444-
// PlayerState currentState = PlayerState.getState(t);
445-
446-
447-
/*
448-
PlexHttpClient.get(String.format("http://%s:%s/player/timeline/poll?commandID=%d", mClient.address, mClient.port, commandId), headers, new PlexHttpMediaContainerHandler() {
449-
@Override
450-
public void onSuccess(MediaContainer mediaContainer) {
451-
Timeline t = mediaContainer.getActiveTimeline();
452-
if(playerStateHandler != null)
453-
playerStateHandler.onSuccess(PlayerState.getState(t));
454-
commandId++;
455-
}
443+
public PlayerState getCurrentState() {
444+
return currentState;
445+
}
456446

457-
@Override
458-
public void onFailure(Throwable error) {
459-
commandId++;
460-
}
461-
});
462-
*/
447+
public Timeline getCurrentTimeline() {
448+
return currentTimeline;
463449
}
464450
}

mobile/src/main/java/com/atomjack/vcfp/activities/NowPlayingActivity.java

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import com.atomjack.shared.Logger;
1515
import com.atomjack.vcfp.R;
1616
import com.atomjack.vcfp.VoiceControlForPlexApplication;
17-
import com.atomjack.vcfp.interfaces.PlayerStateHandler;
1817
import com.atomjack.vcfp.model.PlexClient;
1918
import com.atomjack.vcfp.model.PlexResponse;
2019
import com.atomjack.shared.model.Timeline;
@@ -24,20 +23,13 @@
2423

2524
import org.codechimp.apprater.AppRater;
2625

27-
import java.util.Hashtable;
28-
2926
public class NowPlayingActivity extends PlayerActivity {
3027
private boolean subscribed = false;
3128

3229
PlayerState state = PlayerState.STOPPED;
33-
// enum PlayerState {
34-
// PLAYING,
35-
// STOPPED,
36-
// PAUSED
37-
// };
3830

3931
protected void onCreate(Bundle savedInstanceState) {
40-
Logger.d("on create NowPlayingActivity");
32+
Logger.d("[NowPlayingActivity] onCreate");
4133
super.onCreate(savedInstanceState);
4234

4335
plexSubscription.setListener(this);
@@ -63,19 +55,27 @@ protected void onCreate(Bundle savedInstanceState) {
6355
if(mClient == null || nowPlayingMedia == null)
6456
finish();
6557

66-
67-
Logger.d("mClient: %s", mClient);
68-
Logger.d("nowPlayingMedia: %s", nowPlayingMedia);
69-
state = PlayerState.PLAYING;
70-
showNowPlaying();
71-
seekBar = (SeekBar)findViewById(R.id.seekBar);
72-
seekBar.setOnSeekBarChangeListener(this);
73-
seekBar.setMax(nowPlayingMedia.duration);
74-
seekBar.setProgress(Integer.parseInt(nowPlayingMedia.viewOffset));
75-
76-
setCurrentTimeDisplay(getOffset(nowPlayingMedia));
77-
durationDisplay.setText(VoiceControlForPlexApplication.secondsToTimecode(nowPlayingMedia.duration / 1000));
78-
58+
if(plexSubscription.isSubscribed()) {
59+
state = plexSubscription.getCurrentState();
60+
if(state == PlayerState.STOPPED) {
61+
VoiceControlForPlexApplication.getInstance().cancelNotification();
62+
finish();
63+
} else {
64+
Logger.d("mClient: %s", mClient);
65+
Logger.d("nowPlayingMedia: %s", nowPlayingMedia);
66+
showNowPlaying();
67+
seekBar = (SeekBar) findViewById(R.id.seekBar);
68+
seekBar.setOnSeekBarChangeListener(NowPlayingActivity.this);
69+
seekBar.setMax(nowPlayingMedia.duration);
70+
seekBar.setProgress(Integer.parseInt(nowPlayingMedia.viewOffset));
71+
72+
setCurrentTimeDisplay(getOffset(nowPlayingMedia));
73+
durationDisplay.setText(VoiceControlForPlexApplication.secondsToTimecode(nowPlayingMedia.duration / 1000));
74+
}
75+
} else {
76+
VoiceControlForPlexApplication.getInstance().cancelNotification();
77+
finish();
78+
}
7979

8080
}
8181

mobile/src/main/java/com/atomjack/vcfp/activities/VCFPActivity.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
import com.atomjack.shared.Preferences;
4141
import com.atomjack.vcfp.R;
4242
import com.atomjack.vcfp.interfaces.BitmapHandler;
43-
import com.atomjack.vcfp.interfaces.PlayerStateHandler;
4443
import com.atomjack.vcfp.interfaces.ScanHandler;
4544
import com.atomjack.vcfp.interfaces.ServerFindHandler;
4645
import com.atomjack.shared.UriDeserializer;
@@ -58,7 +57,6 @@
5857
import com.atomjack.vcfp.net.PlexHttpClient;
5958
import com.atomjack.vcfp.net.PlexHttpMediaContainerHandler;
6059
import com.atomjack.vcfp.services.PlexScannerService;
61-
import com.atomjack.vcfp.services.WearListenerService;
6260
import com.bugsense.trace.BugSenseHandler;
6361
import com.google.android.gms.wearable.DataMap;
6462
import com.google.gson.Gson;

mobile/src/main/java/com/atomjack/vcfp/interfaces/PlayerStateHandler.java

Lines changed: 0 additions & 8 deletions
This file was deleted.

mobile/src/main/java/com/atomjack/vcfp/model/PlexClient.java

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,16 @@ private void adjustPlayback(String which, PlexHttpResponseHandler responseHandle
107107
}
108108
}
109109

110+
private PlexResponse adjustPlayback(String which) {
111+
try {
112+
String url = String.format("http://%s:%s/player/playback/%s", address, port, which);
113+
return PlexHttpClient.getSync(url);
114+
} catch (Exception e) {
115+
e.printStackTrace();
116+
}
117+
return null;
118+
}
119+
110120
public PlexResponse pause() {
111121
return adjustPlayback("pause");
112122
}
@@ -124,17 +134,6 @@ public PlexResponse seekTo(int offset) {
124134
return PlexHttpClient.getSync(url);
125135
}
126136

127-
private PlexResponse adjustPlayback(String which) {
128-
try {
129-
String url = String.format("http://%s:%s/player/playback/%s", address, port, which);
130-
PlexResponse r = PlexHttpClient.getSync(url);
131-
return r;
132-
} catch (Exception e) {
133-
e.printStackTrace();
134-
}
135-
return null;
136-
}
137-
138137
public boolean isLocalDevice() {
139138
String localip = Utils.getIPAddress(true);
140139
return localip.equals(address);

mobile/src/main/java/com/atomjack/vcfp/services/PlexControlService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,14 @@ public void onHandleIntent(final Intent intent) {
5050
if(intent.getAction() != null) {
5151
client = intent.getParcelableExtra(CLIENT);
5252
PlexMedia playingMedia = intent.getParcelableExtra(MEDIA);
53-
PlayerState currentState = PlayerState.STOPPED;
53+
PlayerState currentState;
5454
Timeline t = null;
5555

5656
if(client.isCastClient) {
5757
currentState = castPlayerManager.getCurrentState();
5858
} else {
5959
t = plexSubscription.getCurrentTimeline();
60-
currentState = PlayerState.getState(t);
60+
currentState = plexSubscription.getCurrentState();
6161
}
6262

6363
PlexResponse response;

mobile/src/main/java/com/atomjack/vcfp/services/WearListenerService.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -135,12 +135,7 @@ public void onMessageReceived(MessageEvent messageEvent) {
135135
if (plexSubscription.isSubscribed()) {
136136
// PlexClient client = plexSubscription.mClient;
137137

138-
Header[] headers = {
139-
new BasicHeader(PlexHeaders.XPlexClientIdentifier, VoiceControlForPlexApplication.getInstance().prefs.getUUID())
140-
};
141-
MediaContainer mc = PlexHttpClient.getSync(String.format("http://%s:%s/player/timeline/poll?commandID=0", client.address, client.port), headers);
142-
Timeline t = mc.getActiveTimeline();
143-
PlayerState currentState = PlayerState.getState(t);
138+
PlayerState currentState = plexSubscription.getCurrentState();
144139
Logger.d("[WearListenerService] current State: %s", currentState);
145140

146141

0 commit comments

Comments
 (0)