26
26
27
27
import java .util .ArrayList ;
28
28
import java .util .Arrays ;
29
+ import java .util .HashMap ;
29
30
import java .util .List ;
31
+ import java .util .Map ;
30
32
import java .util .concurrent .ConcurrentHashMap ;
31
33
import java .util .regex .Matcher ;
32
34
import java .util .regex .Pattern ;
@@ -42,10 +44,11 @@ public class PlexSearchService extends Service {
42
44
private Gson gson = new Gson ();
43
45
44
46
private ConcurrentHashMap <String , PlexServer > plexmediaServers = new ConcurrentHashMap <String , PlexServer >();
45
- private int serversScanned = 0 ;
47
+ private Map <String , PlexClient > clients ;
48
+
46
49
private BroadcastReceiver gdmReceiver = new GDMReceiver ();
47
50
private Intent mServiceIntent ;
48
- private List < PlexClient > clients ;
51
+
49
52
private PlexClient client = null ;
50
53
private PlexServer specifiedServer = null ;
51
54
private int serversSearched = 0 ;
@@ -99,7 +102,7 @@ public int onStartCommand(Intent intent, int flags, int startId) {
99
102
client = null ;
100
103
101
104
queries = new ArrayList <String >();
102
-
105
+ clients = ( HashMap ) VoiceControlForPlexApplication . clients ;
103
106
resumePlayback = false ;
104
107
105
108
specifiedServer = gson .fromJson (intent .getStringExtra (VoiceControlForPlexApplication .Intent .EXTRA_SERVER ), PlexServer .class );
@@ -117,7 +120,8 @@ public int onStartCommand(Intent intent, int flags, int startId) {
117
120
ArrayList <String > voiceResults = intent .getExtras ().getStringArrayList (RecognizerIntent .EXTRA_RESULTS );
118
121
for (String q : voiceResults ) {
119
122
if (q .matches (getString (R .string .pattern_recognition ))) {
120
- queries .add (q );
123
+ if (!queries .contains (q .toLowerCase ()))
124
+ queries .add (q .toLowerCase ());
121
125
}
122
126
}
123
127
if (queries .size () == 0 ) {
@@ -178,6 +182,7 @@ public IBinder onBind(Intent intent) {
178
182
179
183
private void startup () {
180
184
queryText = queries .remove (0 );
185
+
181
186
Logger .d ("Starting up with query string: %s" , queryText );
182
187
tracks = new ArrayList <PlexTrack >();
183
188
videos = new ArrayList <PlexVideo >();
@@ -232,49 +237,11 @@ private void startup() {
232
237
}
233
238
234
239
private void setClient () {
235
- Pattern p = Pattern .compile (getString (R .string .pattern_on_client ), Pattern .DOTALL );
236
- Matcher matcher = p .matcher (queryText );
237
- if (!matcher .find ()) {
238
- // Client not specified, so use default
239
- Logger .d ("Using default client since none specified in query: %s" , client .name );
240
- actionToDo = handleVoiceSearch ();
241
- if (actionToDo == null ) {
242
- startup ();
243
- } else
244
- actionToDo .run ();
245
- } else {
246
- // Get available clients
247
- Logger .d ("getting all available clients" );
248
- serversScanned = 0 ;
249
- clients = new ArrayList <PlexClient >();
250
- for (PlexServer server : plexmediaServers .values ()) {
251
- Logger .d ("ip: %s" , server .activeConnection .address );
252
- Logger .d ("port: %s" , server .activeConnection .port );
253
-
254
- PlexHttpClient .get (server , "/clients" , new PlexHttpMediaContainerHandler () {
255
- @ Override
256
- public void onSuccess (MediaContainer mc ) {
257
- serversScanned ++;
258
- Logger .d ("Clients: %d" , mc .clients .size ());
259
- for (int i = 0 ; i < mc .clients .size (); i ++) {
260
- clients .add (mc .clients .get (i ));
261
- }
262
- if (serversScanned == plexmediaServers .size ()) {
263
- actionToDo = handleVoiceSearch ();
264
- if (actionToDo == null ) {
265
- startup ();
266
- } else
267
- actionToDo .run ();
268
- }
269
- }
270
-
271
- @ Override
272
- public void onFailure (Throwable error ) {
273
- feedback .e (getResources ().getString (R .string .got_error ), error .getMessage ());
274
- }
275
- });
276
- }
277
- }
240
+ actionToDo = handleVoiceSearch ();
241
+ if (actionToDo == null ) {
242
+ startup ();
243
+ } else
244
+ actionToDo .run ();
278
245
}
279
246
280
247
private myRunnable handleVoiceSearch () {
@@ -298,9 +265,10 @@ private myRunnable handleVoiceSearch(boolean noChange) {
298
265
299
266
Logger .d ("Clients: %d" , clients .size ());
300
267
Logger .d ("Specified client: %s" , specifiedClient );
301
- for (int i = 0 ; i < clients .size (); i ++) {
302
- if (clients .get (i ).name .toLowerCase ().equals (specifiedClient )) {
303
- client = clients .get (i );
268
+ //for (int i = 0; i < clients.size(); i++) {
269
+ for (PlexClient c : clients .values ()) {
270
+ if (c .name .toLowerCase ().equals (specifiedClient )) {
271
+ client = c ;
304
272
queryText = queryText .replaceAll (getString (R .string .pattern_on_client ), "$1" );
305
273
Logger .d ("query text now %s" , queryText );
306
274
break ;
@@ -650,7 +618,7 @@ private void doMovieSearch(final String queryTerm) {
650
618
@ Override
651
619
public void onSuccess () {
652
620
server .movieSectionsSearched = 0 ;
653
- Logger .d ("Searching server: %s, %d sections" , server .name , server .movieSections .size ());
621
+ Logger .d ("Searching server (for movies) : %s, %d sections" , server .name , server .movieSections .size ());
654
622
if (server .movieSections .size () == 0 ) {
655
623
serversSearched ++;
656
624
if (serversSearched == plexmediaServers .size ()) {
@@ -686,14 +654,15 @@ public void onSuccess(MediaContainer mc)
686
654
687
655
@ Override
688
656
public void onFailure (Throwable error ) {
657
+ error .printStackTrace ();
689
658
feedback .e (getResources ().getString (R .string .got_error ), error .getMessage ());
690
659
}
691
660
});
692
661
}
693
662
}
694
663
695
664
@ Override
696
- public void onFailure () {
665
+ public void onFailure (int statusCode ) {
697
666
serversSearched ++;
698
667
if (serversSearched == plexmediaServers .size ()) {
699
668
onMovieSearchFinished (queryTerm );
@@ -899,7 +868,7 @@ public void onFailure(Throwable error) {
899
868
}
900
869
901
870
@ Override
902
- public void onFailure () {
871
+ public void onFailure (int statusCode ) {
903
872
serversSearched ++;
904
873
if (serversSearched == plexmediaServers .size ()) {
905
874
onFinishedNextEpisodeSearch (queryTerm , fallback );
@@ -984,14 +953,15 @@ public void onSuccess(MediaContainer mc) {
984
953
985
954
@ Override
986
955
public void onFailure (Throwable error ) {
956
+ error .printStackTrace ();
987
957
feedback .e (getResources ().getString (R .string .got_error ), error .getMessage ());
988
958
}
989
959
});
990
960
}
991
961
}
992
962
993
963
@ Override
994
- public void onFailure () {
964
+ public void onFailure (int statusCode ) {
995
965
serversSearched ++;
996
966
if (serversSearched == plexmediaServers .size ()) {
997
967
doLatestEpisode (queryTerm );
@@ -1114,7 +1084,7 @@ public void onFailure(Throwable error) {
1114
1084
}
1115
1085
1116
1086
@ Override
1117
- public void onFailure () {
1087
+ public void onFailure (int statusCode ) {
1118
1088
serversSearched ++;
1119
1089
if (serversSearched == plexmediaServers .size ()) {
1120
1090
playSpecificEpisode (showSpecified );
@@ -1198,7 +1168,7 @@ public void onFailure(Throwable error) {
1198
1168
}
1199
1169
1200
1170
@ Override
1201
- public void onFailure () {
1171
+ public void onFailure (int statusCode ) {
1202
1172
serversSearched ++;
1203
1173
if (serversSearched == plexmediaServers .size ()) {
1204
1174
doEpisodeSearch (queryTerm , season , episode );
@@ -1373,7 +1343,7 @@ public void onFailure(Throwable error) {
1373
1343
}
1374
1344
1375
1345
@ Override
1376
- public void onFailure () {
1346
+ public void onFailure (int statusCode ) {
1377
1347
serversSearched ++;
1378
1348
if (serversSearched == plexmediaServers .size ()) {
1379
1349
if (albums .size () == 1 ) {
@@ -1469,7 +1439,7 @@ public void onFailure(Throwable error) {
1469
1439
}
1470
1440
1471
1441
@ Override
1472
- public void onFailure () {
1442
+ public void onFailure (int statusCode ) {
1473
1443
serversSearched ++;
1474
1444
if (serversSearched == plexmediaServers .size ()) {
1475
1445
if (tracks .size () > 0 ) {
0 commit comments