1
1
package com .atomjack .vcfp ;
2
2
3
- import java .util .ArrayList ;
4
- import java .util .List ;
3
+ import java .util .HashMap ;
4
+ import java .util .Map ;
5
5
import java .util .concurrent .ConcurrentHashMap ;
6
6
7
7
import org .simpleframework .xml .Serializer ;
33
33
import com .atomjack .vcfp .model .MediaContainer ;
34
34
import com .atomjack .vcfp .model .PlexClient ;
35
35
import com .atomjack .vcfp .model .PlexServer ;
36
+ import com .atomjack .vcfp .net .PlexHttpClient ;
37
+ import com .atomjack .vcfp .net .PlexHttpMediaContainerHandler ;
36
38
import com .google .gson .Gson ;
37
- import com .loopj .android .http .AsyncHttpClient ;
38
- import com .loopj .android .http .AsyncHttpResponseHandler ;
39
39
import com .bugsense .trace .BugSenseHandler ;
40
40
41
41
public class MainActivity extends Activity {
@@ -54,8 +54,10 @@ public class MainActivity extends Activity {
54
54
55
55
private PlexServer server = null ;
56
56
private PlexClient client = null ;
57
-
58
- private Serializer serial = new Persister ();
57
+
58
+ private Map <String , PlexClient > m_clients = new HashMap <String , PlexClient >();
59
+
60
+ private static Serializer serial = new Persister ();
59
61
60
62
private SharedPreferences mPrefs ;
61
63
private SharedPreferences .Editor mPrefsEditor ;
@@ -67,7 +69,7 @@ public class MainActivity extends Activity {
67
69
protected void onCreate (Bundle savedInstanceState ) {
68
70
super .onCreate (savedInstanceState );
69
71
70
- BugSenseHandler .initAndStartSession (MainActivity .this , BUGSENSE_APIKEY );
72
+ // BugSenseHandler.initAndStartSession(MainActivity.this, BUGSENSE_APIKEY);
71
73
72
74
73
75
mPrefs = getSharedPreferences (PREFS , MODE_PRIVATE );
@@ -256,55 +258,46 @@ private void scanServersForClients() {
256
258
serversScanned = 0 ;
257
259
for (PlexServer thisServer : servers .values ()) {
258
260
Logger .d ("ScanServersForClients server: %s" , thisServer .getName ());
259
- try {
260
- AsyncHttpClient httpClient = new AsyncHttpClient ();
261
- httpClient .get (thisServer .getClientsURL (), new AsyncHttpResponseHandler () {
262
- @ Override
263
- public void onSuccess (String response ) {
264
- serversScanned ++;
265
- MediaContainer clientMC = new MediaContainer ();
266
-
267
- try {
268
- clientMC = serial .read (MediaContainer .class , response );
269
- } catch (NotFoundException e ) {
270
- e .printStackTrace ();
271
- } catch (Exception e ) {
272
- e .printStackTrace ();
273
- }
274
- // Exclude non-Plex Home Theater clients (pre 1.0.7)
275
- List <PlexClient > clients = new ArrayList <PlexClient >();
276
- for (int i =0 ;i <clientMC .clients .size ();i ++) {
277
- float version = clientMC .clients .get (i ).getNumericVersion ();
278
- Logger .d ("Version: %f" , version );
279
- if (version >= 1.07 || !clientMC .clients .get (i ).getProduct ().equals ("Plex Home Theater" )) {
280
- clients .add (clientMC .clients .get (i ));
281
- }
282
- }
283
-
284
- searchDialog .dismiss ();
285
- if (clients .size () == 0 ) {
286
- AlertDialog .Builder builder = new AlertDialog .Builder (MainActivity .this );
287
- builder .setTitle ("No Plex Clients Found" );
288
- builder .setCancelable (false )
289
- .setNeutralButton (R .string .ok , new DialogInterface .OnClickListener () {
290
- public void onClick (DialogInterface dialog , int id ) {
291
- dialog .cancel ();
292
- }
293
- });
294
- AlertDialog d = builder .create ();
295
- d .show ();
296
- } else {
297
- Logger .d ("Clients: " + clients .size ());
298
- if (serversScanned == VoiceControlForPlexApplication .getPlexMediaServers ().size ()) {
299
- showPlexClients (clients );
300
- }
301
- }
302
- }
303
- });
304
-
305
- } catch (Exception e ) {
306
- Logger .e ("Exception getting clients: " + e .toString ());
307
- }
261
+ PlexHttpClient .get (thisServer .getClientsURL (), null , new PlexHttpMediaContainerHandler ()
262
+ {
263
+ @ Override
264
+ public void onSuccess (MediaContainer clientMC )
265
+ {
266
+ serversScanned ++;
267
+ // Exclude non-Plex Home Theater clients (pre 1.0.7)
268
+ // List<PlexClient> clients = new ArrayList<PlexClient>();
269
+ Logger .d ("clientMC size: %d" , clientMC .clients .size ());
270
+ for (int i =0 ;i <clientMC .clients .size ();i ++) {
271
+ float version = clientMC .clients .get (i ).getNumericVersion ();
272
+ Logger .d ("Version: %f" , version );
273
+ if ((version >= 1.07 || !clientMC .clients .get (i ).getProduct ().equals ("Plex Home Theater" )) && !m_clients .containsKey (clientMC .clients .get (i ).getName ())) {
274
+ // m_clients.add(clientMC.clients.get(i));
275
+ m_clients .put (clientMC .clients .get (i ).getName (), clientMC .clients .get (i ));
276
+ }
277
+ }
278
+
279
+ if (serversScanned == VoiceControlForPlexApplication .getPlexMediaServers ().size ()) {
280
+ searchDialog .dismiss ();
281
+ if (m_clients .size () == 0 ) {
282
+ AlertDialog .Builder builder = new AlertDialog .Builder (MainActivity .this );
283
+ builder .setTitle ("No Plex Clients Found" );
284
+ builder .setCancelable (false )
285
+ .setNeutralButton (R .string .ok , new DialogInterface .OnClickListener ()
286
+ {
287
+ public void onClick (DialogInterface dialog , int id )
288
+ {
289
+ dialog .cancel ();
290
+ }
291
+ });
292
+ AlertDialog d = builder .create ();
293
+ d .show ();
294
+ } else {
295
+ Logger .d ("Clients: " + m_clients .size ());
296
+ showPlexClients (m_clients );
297
+ }
298
+ }
299
+ }
300
+ });
308
301
}
309
302
}
310
303
@@ -320,27 +313,25 @@ private void showPlexServers() {
320
313
321
314
final ListView serverListView = (ListView )serverSelectDialog .findViewById (R .id .serverListView );
322
315
ConcurrentHashMap <String , PlexServer > servers = new ConcurrentHashMap <String , PlexServer >(VoiceControlForPlexApplication .getPlexMediaServers ());
323
- servers .put ("Scan All" , new PlexServer ());
324
316
final PlexListAdapter adapter = new PlexListAdapter (this , PlexListAdapter .TYPE_SERVER );
325
317
adapter .setServers (servers );
326
318
serverListView .setAdapter (adapter );
327
319
serverListView .setOnItemClickListener (new ListView .OnItemClickListener () {
328
320
329
321
@ Override
330
- public void onItemClick (AdapterView <?> parentAdapter , View view , int position ,
331
- long id ) {
322
+ public void onItemClick (AdapterView <?> parentAdapter , View view , int position , long id ) {
332
323
Logger .d ("Clicked position %d" , position );
333
324
PlexServer s = (PlexServer )parentAdapter .getItemAtPosition (position );
334
325
serverSelectDialog .dismiss ();
335
326
setServer (s );
336
327
}
337
-
328
+
338
329
});
339
330
}
340
331
341
332
private void setServer (PlexServer server ) {
342
333
Logger .d ("Setting Server %s" , server .getName ());
343
- if (server .getAddress ().equals ("" )) {
334
+ if (server .getName ().equals ("" )) {
344
335
this .server = null ;
345
336
saveSettings ();
346
337
initMainWithServer ();
@@ -349,28 +340,15 @@ private void setServer(PlexServer server) {
349
340
this .server = server ;
350
341
351
342
if (this .client == null ) {
352
- try {
353
- AsyncHttpClient httpClient = new AsyncHttpClient ();
354
- httpClient .get (server .getBaseURL (), new AsyncHttpResponseHandler () {
355
- @ Override
356
- public void onSuccess (String response ) {
357
- Logger .d ("HTTP REQUEST: %s" , response );
358
- MediaContainer mc = new MediaContainer ();
359
- try {
360
- mc = serial .read (MediaContainer .class , response );
361
- } catch (NotFoundException e ) {
362
- e .printStackTrace ();
363
- } catch (Exception e ) {
364
- e .printStackTrace ();
365
- }
366
- Logger .d ("Machine id: " + mc .getMachineIdentifier ());
367
- getClients (mc );
368
- }
369
- });
370
-
371
- } catch (Exception e ) {
372
- Logger .e ("Exception getting clients: " + e .toString ());
373
- }
343
+ PlexHttpClient .get (server .getBaseURL (), null , new PlexHttpMediaContainerHandler ()
344
+ {
345
+ @ Override
346
+ public void onSuccess (MediaContainer mediaContainer )
347
+ {
348
+ Logger .d ("Machine id: " + mediaContainer .getMachineIdentifier ());
349
+ getClients (mediaContainer );
350
+ }
351
+ });
374
352
} else {
375
353
this .server = server ;
376
354
this .saveSettings ();
@@ -401,6 +379,19 @@ private void scanForClients() {
401
379
startService (mServiceIntent );
402
380
}
403
381
382
+ private static MediaContainer getMediaContainer (String response ) {
383
+ MediaContainer mediaContainer = new MediaContainer ();
384
+
385
+ try {
386
+ mediaContainer = serial .read (MediaContainer .class , response );
387
+ } catch (NotFoundException e ) {
388
+ e .printStackTrace ();
389
+ } catch (Exception e ) {
390
+ e .printStackTrace ();
391
+ }
392
+ return mediaContainer ;
393
+ }
394
+
404
395
private void getClients (MediaContainer mc ) {
405
396
if (mc != null ) {
406
397
this .server .setMachineIdentifier (mc .getMachineIdentifier ());
@@ -414,57 +405,49 @@ private void getClients(MediaContainer mc) {
414
405
searchDialog .setTitle ("Searching for Plex Clients" );
415
406
416
407
searchDialog .show ();
417
- try {
418
- AsyncHttpClient httpClient = new AsyncHttpClient ();
419
- httpClient .get (server .getClientsURL (), new AsyncHttpResponseHandler () {
420
- @ Override
421
- public void onSuccess (String response ) {
422
- // Logger.d("HTTP REQUEST: %s", response);
423
- MediaContainer clientMC = new MediaContainer ();
424
-
425
- try {
426
- clientMC = serial .read (MediaContainer .class , response );
427
- } catch (NotFoundException e ) {
428
- e .printStackTrace ();
429
- } catch (Exception e ) {
430
- e .printStackTrace ();
431
- }
432
- // Exclude non-Plex Home Theater clients (pre 1.0.7)
433
- List <PlexClient > clients = new ArrayList <PlexClient >();
434
- for (int i =0 ;i <clientMC .clients .size ();i ++) {
435
- float version = clientMC .clients .get (i ).getNumericVersion ();
436
- Logger .d ("Version: %f" , version );
437
- if (version >= 1.07 ) {
438
- clients .add (clientMC .clients .get (i ));
439
- }
440
- }
441
-
442
- searchDialog .dismiss ();
443
- if (clients .size () == 0 ) {
444
- AlertDialog .Builder builder = new AlertDialog .Builder (MainActivity .this );
445
- builder .setTitle ("No Plex Clients Found" );
446
- builder .setCancelable (false )
447
- .setNeutralButton (R .string .ok , new DialogInterface .OnClickListener () {
448
- public void onClick (DialogInterface dialog , int id ) {
449
- dialog .cancel ();
450
- }
451
- });
452
- AlertDialog d = builder .create ();
453
- d .show ();
454
- } else {
455
- Logger .d ("Clients: " + clients .size ());
456
-
457
- showPlexClients (clients );
458
- }
459
- }
460
- });
408
+ PlexHttpClient .get (server .getClientsURL (), null , new PlexHttpMediaContainerHandler ()
409
+ {
410
+ @ Override
411
+ public void onSuccess (MediaContainer clientMC )
412
+ {
413
+ // Exclude non-Plex Home Theater clients (pre 1.0.7)
414
+ Map <String , PlexClient > clients = new HashMap <String , PlexClient >();
415
+ for (int i = 0 ; i < clientMC .clients .size (); i ++)
416
+ {
417
+ float version = clientMC .clients .get (i ).getNumericVersion ();
418
+ Logger .d ("Version: %f" , version );
419
+ if (version >= 1.07 )
420
+ {
421
+ clients .put (clientMC .clients .get (i ).getName (), clientMC .clients .get (i ));
422
+ }
423
+ }
461
424
462
- } catch (Exception e ) {
463
- Logger .e ("Exception getting clients: " + e .toString ());
464
- }
425
+ searchDialog .dismiss ();
426
+ if (clients .size () == 0 )
427
+ {
428
+ AlertDialog .Builder builder = new AlertDialog .Builder (MainActivity .this );
429
+ builder .setTitle ("No Plex Clients Found" );
430
+ builder .setCancelable (false )
431
+ .setNeutralButton (R .string .ok , new DialogInterface .OnClickListener ()
432
+ {
433
+ public void onClick (DialogInterface dialog , int id )
434
+ {
435
+ dialog .cancel ();
436
+ }
437
+ });
438
+ AlertDialog d = builder .create ();
439
+ d .show ();
440
+ } else
441
+ {
442
+ Logger .d ("Clients: " + clients .size ());
443
+
444
+ showPlexClients (clients );
445
+ }
446
+ }
447
+ });
465
448
}
466
449
467
- private void showPlexClients (List < PlexClient > clients ) {
450
+ private void showPlexClients (Map < String , PlexClient > clients ) {
468
451
if (serverSelectDialog == null ) {
469
452
serverSelectDialog = new Dialog (this );
470
453
}
0 commit comments