Commit 9f55b1dac7c7c8cf56ec35e32a009022203b4d45

Authored by Imanol-Mikel Barba Sabariego
1 parent 22367466

PARSER WORKINGsvn up :DDD

gen/com/upc/pbe/upcnews/R.java
1 -/* AUTO-GENERATED FILE. DO NOT MODIFY.  
2 - *  
3 - * This class was automatically generated by the  
4 - * aapt tool from the resource data it found. It  
5 - * should not be modified by hand.  
6 - */  
7 -  
8 -package com.upc.pbe.upcnews;  
9 -  
10 -public final class R {  
11 - public static final class attr {  
12 - }  
13 - public static final class drawable {  
14 - public static final int ic_action_search=0x7f020000;  
15 - public static final int ic_launcher=0x7f020001;  
16 - public static final int ic_menu_name=0x7f020002;  
17 - }  
18 - public static final class id {  
19 - public static final int AbsoluteLayout1=0x7f08000a;  
20 - public static final int ImageView01=0x7f08000c;  
21 - public static final int ImageView1=0x7f08000b;  
22 - public static final int LinearLayout1=0x7f080001;  
23 - public static final int button=0x7f08000f;  
24 - public static final int button1=0x7f080003;  
25 - public static final int button2=0x7f080004;  
26 - public static final int button3=0x7f080005;  
27 - public static final int button4=0x7f080006;  
28 - public static final int button5=0x7f080007;  
29 - public static final int itemhelp=0x7f080012;  
30 - public static final int itemprefs=0x7f080011;  
31 - public static final int menu_settings=0x7f080010;  
32 - public static final int textView1=0x7f080008;  
33 - public static final int textView2=0x7f080009;  
34 - public static final int textViewRoute=0x7f08000d;  
35 - public static final int textViewTitle=0x7f080002;  
36 - public static final int textViewXml=0x7f08000e;  
37 - public static final int videoView1=0x7f080000;  
38 - }  
39 - public static final class layout {  
40 - public static final int activity_video=0x7f030000;  
41 - public static final int dirs=0x7f030001;  
42 - public static final int help=0x7f030002;  
43 - public static final int main_activity=0x7f030003;  
44 - }  
45 - public static final class menu {  
46 - public static final int activity_main=0x7f070000;  
47 - public static final int activity_video=0x7f070001;  
48 - public static final int menu=0x7f070002;  
49 - }  
50 - public static final class string {  
51 - public static final int app_name=0x7f050000;  
52 - public static final int button=0x7f05000c;  
53 - public static final int button1=0x7f05000d;  
54 - public static final int desc=0x7f050009;  
55 - public static final int descarregar=0x7f050003;  
56 - public static final int dir=0x7f05000a;  
57 - public static final int directoris=0x7f05000b;  
58 - public static final int hello_world=0x7f050010;  
59 - public static final int help=0x7f050008;  
60 - public static final int hint=0x7f050004;  
61 - public static final int logodescription=0x7f05000f;  
62 - public static final int menu_settings=0x7f050001;  
63 - public static final int prefs=0x7f050007;  
64 - public static final int title=0x7f05000e;  
65 - public static final int title_activity_main=0x7f050002;  
66 - public static final int title_activity_video=0x7f050011;  
67 - public static final int url=0x7f050005;  
68 - public static final int urlhint=0x7f050006;  
69 - }  
70 - public static final class style {  
71 - public static final int AppTheme=0x7f060000;  
72 - }  
73 - public static final class xml {  
74 - public static final int prefs=0x7f040000;  
75 - }  
76 -} 1 +/* AUTO-GENERATED FILE. DO NOT MODIFY.
  2 + *
  3 + * This class was automatically generated by the
  4 + * aapt tool from the resource data it found. It
  5 + * should not be modified by hand.
  6 + */
  7 +
  8 +package com.upc.pbe.upcnews;
  9 +
  10 +public final class R {
  11 + public static final class attr {
  12 + }
  13 + public static final class drawable {
  14 + public static final int ic_action_search=0x7f020000;
  15 + public static final int ic_launcher=0x7f020001;
  16 + public static final int ic_menu_name=0x7f020002;
  17 + }
  18 + public static final class id {
  19 + public static final int AbsoluteLayout1=0x7f08000a;
  20 + public static final int ImageView01=0x7f08000c;
  21 + public static final int ImageView1=0x7f08000b;
  22 + public static final int LinearLayout1=0x7f080001;
  23 + public static final int button=0x7f08000f;
  24 + public static final int button1=0x7f080003;
  25 + public static final int button2=0x7f080004;
  26 + public static final int button3=0x7f080005;
  27 + public static final int button4=0x7f080006;
  28 + public static final int button5=0x7f080007;
  29 + public static final int itemhelp=0x7f080012;
  30 + public static final int itemprefs=0x7f080011;
  31 + public static final int menu_settings=0x7f080010;
  32 + public static final int textView1=0x7f080008;
  33 + public static final int textView2=0x7f080009;
  34 + public static final int textViewRoute=0x7f08000d;
  35 + public static final int textViewTitle=0x7f080002;
  36 + public static final int textViewXml=0x7f08000e;
  37 + public static final int videoView1=0x7f080000;
  38 + }
  39 + public static final class layout {
  40 + public static final int activity_video=0x7f030000;
  41 + public static final int dirs=0x7f030001;
  42 + public static final int help=0x7f030002;
  43 + public static final int main_activity=0x7f030003;
  44 + }
  45 + public static final class menu {
  46 + public static final int activity_main=0x7f070000;
  47 + public static final int activity_video=0x7f070001;
  48 + public static final int menu=0x7f070002;
  49 + }
  50 + public static final class string {
  51 + public static final int app_name=0x7f050000;
  52 + public static final int button=0x7f05000c;
  53 + public static final int button1=0x7f05000d;
  54 + public static final int desc=0x7f050009;
  55 + public static final int descarregar=0x7f050003;
  56 + public static final int dir=0x7f05000a;
  57 + public static final int directoris=0x7f05000b;
  58 + public static final int hello_world=0x7f050010;
  59 + public static final int help=0x7f050008;
  60 + public static final int hint=0x7f050004;
  61 + public static final int logodescription=0x7f05000f;
  62 + public static final int menu_settings=0x7f050001;
  63 + public static final int prefs=0x7f050007;
  64 + public static final int title=0x7f05000e;
  65 + public static final int title_activity_main=0x7f050002;
  66 + public static final int title_activity_video=0x7f050011;
  67 + public static final int url=0x7f050005;
  68 + public static final int urlhint=0x7f050006;
  69 + }
  70 + public static final class style {
  71 + public static final int AppTheme=0x7f060000;
  72 + }
  73 + public static final class xml {
  74 + public static final int prefs=0x7f040000;
  75 + }
  76 +}
res/values/strings.xml
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 2
3 <string name="app_name">UPC NEWS</string> 3 <string name="app_name">UPC NEWS</string>
4 <string name="menu_settings">Settings</string> 4 <string name="menu_settings">Settings</string>
5 - <string name="title_activity_main">MainActivity</string> 5 + <string name="title_activity_main">UPC NEWS</string>
6 <string name="descarregar">Start Application</string> 6 <string name="descarregar">Start Application</string>
7 <string name="hint">Click to Start or go to Settings for Help</string> 7 <string name="hint">Click to Start or go to Settings for Help</string>
8 <string name="url">URL server</string> 8 <string name="url">URL server</string>
src/com/upc/pbe/upcnews/Directoris.java
@@ -102,7 +102,7 @@ public class Directoris extends Activity implements OnClickListener { @@ -102,7 +102,7 @@ public class Directoris extends Activity implements OnClickListener {
102 102
103 public void buttonClicked(Button b) { 103 public void buttonClicked(Button b) {
104 104
105 - //Descarrega de la pàgina HTML del directori i busqueda d'un .m3u8 en ella 105 + //Descarrega de la p�gina HTML del directori i busqueda d'un .m3u8 en ella
106 Log.d(TAG, "Click on " + b.getText()); 106 Log.d(TAG, "Click on " + b.getText());
107 d = new Descarrega(); 107 d = new Descarrega();
108 String str = d.doInBackground(url + "/" + b.getText() + "/"); 108 String str = d.doInBackground(url + "/" + b.getText() + "/");
@@ -117,8 +117,7 @@ public class Directoris extends Activity implements OnClickListener { @@ -117,8 +117,7 @@ public class Directoris extends Activity implements OnClickListener {
117 d = new Descarrega(); 117 d = new Descarrega();
118 String m3u8 = d.doInBackground(urlvideo); 118 String m3u8 = d.doInBackground(urlvideo);
119 Log.d(TAG, m3u8); 119 Log.d(TAG, m3u8);
120 - Parser p = new Parser();  
121 - 120 + Parser p = new Parser(urlvideo.substring(0,urlvideo.lastIndexOf("/")+1),this);
122 try { 121 try {
123 ArrayList<ParentList> m3u8parsed = p.parseFile(m3u8); 122 ArrayList<ParentList> m3u8parsed = p.parseFile(m3u8);
124 Log.d(TAG, "parsed completed"); 123 Log.d(TAG, "parsed completed");
src/com/upc/pbe/upcnews/Parser.java
@@ -3,12 +3,13 @@ package com.upc.pbe.upcnews; @@ -3,12 +3,13 @@ package com.upc.pbe.upcnews;
3 import java.net.MalformedURLException; 3 import java.net.MalformedURLException;
4 import java.util.ArrayList; 4 import java.util.ArrayList;
5 5
6 -import android.util.Log; 6 +import android.app.Activity;
  7 +import android.widget.Toast;
7 8
8 public class Parser 9 public class Parser
9 { 10 {
10 private static final String STARTWORD = "#EXTM3U"; 11 private static final String STARTWORD = "#EXTM3U";
11 - private static String TAG = "Parser"; 12 + private String path; //CWD, completes implicit paths such as "file.m3u8" appending the CWD in order to download the file
12 private int fileType; //indicates if segment list or media list 13 private int fileType; //indicates if segment list or media list
13 private int currentLine; 14 private int currentLine;
14 private int currentSegment; //Cada segmento de cada calidad distinta 15 private int currentSegment; //Cada segmento de cada calidad distinta
@@ -16,18 +17,12 @@ public class Parser @@ -16,18 +17,12 @@ public class Parser
16 private boolean expectSegment = false; 17 private boolean expectSegment = false;
17 private boolean expectList = false; 18 private boolean expectList = false;
18 private Descarrega download; 19 private Descarrega download;
  20 + private Activity caller; //Where to send notifications and warnings
19 21
20 - /*  
21 - * TO-DO:  
22 - * RECICLAR ZILLONES DE CÓDIGO REPETIDO  
23 - * LIMPIAR Y DOCUMENTAR  
24 - * DOWNLOAD REPEATED  
25 - * MEDIA'S NOT WORKING  
26 - */  
27 -  
28 -  
29 - public Parser() 22 + public Parser(String p,Activity caller)
30 { 23 {
  24 + this.caller = caller;
  25 + path = p;
31 currentLine = 0; 26 currentLine = 0;
32 currentSegment = 0; 27 currentSegment = 0;
33 currentList = 0; 28 currentList = 0;
@@ -46,26 +41,26 @@ public class Parser @@ -46,26 +41,26 @@ public class Parser
46 lists.add(new ParentList("")); 41 lists.add(new ParentList(""));
47 lists.get(0).getLists().add(new List(-1)); 42 lists.get(0).getLists().add(new List(-1));
48 String[] lines = file.split("\n"); 43 String[] lines = file.split("\n");
49 - Log.d(TAG, "" + lines.length);  
50 for(int i = 0; i < lines.length; i++) 44 for(int i = 0; i < lines.length; i++)
51 { 45 {
52 if(lines[i].endsWith("\\")) 46 if(lines[i].endsWith("\\"))
53 { 47 {
54 - lines[++i] = lines[i-1].substring(0, lines[i-1].indexOf("\\")-1) + lines[i]; 48 + /*
  49 + * Merge multiline entries, which are those lines ending with backslash.
  50 + */
  51 + lines[++i] = lines[i-1].substring(0, lines[i-1].indexOf("\\")-1) + lines[i];
55 } 52 }
56 try 53 try
57 { 54 {
58 -  
59 - Log.d(TAG, lines[i]);  
60 parseLine(lines[i],lists); 55 parseLine(lines[i],lists);
61 } 56 }
62 catch(InfoException iE) 57 catch(InfoException iE)
63 { 58 {
64 - //Toast.makeText(this, iE.getMessage(), Toast.LENGTH_SHORT).show(); 59 + Toast.makeText(caller, iE.getMessage(), Toast.LENGTH_SHORT).show();
65 } 60 }
66 catch(WarningException wE) 61 catch(WarningException wE)
67 { 62 {
68 - 63 + Toast.makeText(caller, wE.getMessage(), Toast.LENGTH_SHORT).show();
69 } 64 }
70 } 65 }
71 /* 66 /*
@@ -104,11 +99,11 @@ public class Parser @@ -104,11 +99,11 @@ public class Parser
104 if(lists.get(0).getQuality() == -1) 99 if(lists.get(0).getQuality() == -1)
105 { 100 {
106 /* 101 /*
107 - * Se trata de ext-x-media's y estos no van por calidad 102 + * That's the case of Media lists and Segment lists, they don't have distinct qualities.
108 */ 103 */
109 return; 104 return;
110 } 105 }
111 - //BUBBLE-SORT!! (Me da un poco de verguenza, pero no quiero ponerme con quicksort... 106 + //Bubblesort
112 while(true) 107 while(true)
113 { 108 {
114 boolean sorted = true; 109 boolean sorted = true;
@@ -123,7 +118,7 @@ public class Parser @@ -123,7 +118,7 @@ public class Parser
123 lists.set(i+1, aux); 118 lists.set(i+1, aux);
124 } 119 }
125 120
126 - }while(++i != lists.size()); 121 + }while(++i != lists.size()-1);
127 if(sorted) 122 if(sorted)
128 { 123 {
129 break; 124 break;
@@ -141,8 +136,7 @@ public class Parser @@ -141,8 +136,7 @@ public class Parser
141 } 136 }
142 else 137 else
143 { 138 {
144 - ParentList ppls = lists.get(currentList); //VIVA HONDURAS!!!  
145 - int b = ppls.getLists().size(); 139 + ParentList ppls = lists.get(currentList);
146 List pls = ppls.getLists().get(ppls.getLists().size()-1); 140 List pls = ppls.getLists().get(ppls.getLists().size()-1);
147 if(!ppls.getValidated()) 141 if(!ppls.getValidated())
148 { 142 {
@@ -161,7 +155,15 @@ public class Parser @@ -161,7 +155,15 @@ public class Parser
161 { 155 {
162 if(line.substring(0,4).equals("#EXT")) 156 if(line.substring(0,4).equals("#EXT"))
163 { 157 {
164 - String[] extTag = line.split(":"); 158 + if(expectSegment)
  159 + {
  160 + throw new ErrorException("Expected segment URI, got an EXT-TAG instead");
  161 + }
  162 + if(expectList)
  163 + {
  164 + throw new ErrorException("Expected List, got an EXT-TAG instead");
  165 + }
  166 + String[] extTag = line.split(":", 2);
165 if(extTag[0].equals("#EXT-X-MEDIA-SEQUENCE")) 167 if(extTag[0].equals("#EXT-X-MEDIA-SEQUENCE"))
166 { 168 {
167 pls.setSequence(Integer.parseInt(extTag[1])); 169 pls.setSequence(Integer.parseInt(extTag[1]));
@@ -181,16 +183,11 @@ public class Parser @@ -181,16 +183,11 @@ public class Parser
181 throw new ErrorException("Invalid file, should contain Lists, " + 183 throw new ErrorException("Invalid file, should contain Lists, " +
182 "but segments were found."); 184 "but segments were found.");
183 } 185 }
184 - if(expectSegment)  
185 - {  
186 - throw new ErrorException("Expected segment URI, got a different" +  
187 - "segment declaration");  
188 - }  
189 String[] args = extTag[1].split(","); 186 String[] args = extTag[1].split(",");
190 float duration = Float.parseFloat(args[0]); 187 float duration = Float.parseFloat(args[0]);
191 if (duration > pls.getMaxDuration()) 188 if (duration > pls.getMaxDuration())
192 { 189 {
193 - throw new ErrorException("Segment " + currentSegment + " on line " + currentLine 190 + throw new ErrorException("Segment " + currentSegment+1 + " on line " + currentLine
194 +" exceeds max duration"); 191 +" exceeds max duration");
195 } 192 }
196 Segment s = new Segment(duration); 193 Segment s = new Segment(duration);
@@ -238,36 +235,38 @@ public class Parser @@ -238,36 +235,38 @@ public class Parser
238 throw new ErrorException("Playlist on line " + currentLine + 235 throw new ErrorException("Playlist on line " + currentLine +
239 " has missing arguments"); 236 " has missing arguments");
240 } 237 }
241 - if(!programID.equals(ppls.getID())) //Si el programID no coincide, crea o busca la parentlist que toca 238 + if(!programID.equals(ppls.getID())) //If Program-ID doesn't match, search it or create a new one.
242 { 239 {
243 if(ppls.getID().equals("")) 240 if(ppls.getID().equals(""))
244 { 241 {
245 /* 242 /*
246 - * Este caso se da cuando no se ha creado ninguna lista.  
247 - * Hay que sustituir la por defecto por una lista real. 243 + * If working with the default ParentList, then modify it, don't create a new one.
248 */ 244 */
249 - lists.get(0).setID(programID); 245 + lists.get(0).setID(programID);
250 } 246 }
251 else 247 else
252 { 248 {
253 currentList = searchID(ppls.getID(), lists); 249 currentList = searchID(ppls.getID(), lists);
254 if(currentList == -1) 250 if(currentList == -1)
255 { 251 {
256 - lists.add(new ParentList(programID));  
257 /* 252 /*
258 - * ppls y pls se actualizan en la siguiente linea procesada 253 + * ParentList not found, creating a new one.
259 */ 254 */
  255 + lists.add(new ParentList(programID));
260 currentList = lists.size() + 1; 256 currentList = lists.size() + 1;
261 } 257 }
262 ppls = lists.get(currentList); 258 ppls = lists.get(currentList);
263 pls = ppls.getLists().get(ppls.getLists().size()-1); 259 pls = ppls.getLists().get(ppls.getLists().size()-1);
264 -  
265 } 260 }
266 } 261 }
267 - // Ahora crea la lista adecuada dentro de la parentlist  
268 - int a = ppls.getLists().size(); 262 + /*
  263 + * Now we create a new List inside the correct ParentList.
  264 + */
269 if((ppls.getLists().size() == 1) && (pls.getQuality() == -1) && pls.getSegments().isEmpty()) 265 if((ppls.getLists().size() == 1) && (pls.getQuality() == -1) && pls.getSegments().isEmpty())
270 { 266 {
  267 + /*
  268 + * If working with the default List, then modify it, don't create a new one.
  269 + */
271 pls.setQuality(bandwidth); 270 pls.setQuality(bandwidth);
272 } 271 }
273 else 272 else
@@ -297,7 +296,7 @@ public class Parser @@ -297,7 +296,7 @@ public class Parser
297 String[] argument = arguments[i].split("="); 296 String[] argument = arguments[i].split("=");
298 if(argument[0].equals("NAME")) 297 if(argument[0].equals("NAME"))
299 { 298 {
300 - Name = argument[1]; 299 + Name = argument[1].substring(1,argument[1].length()-1);
301 } 300 }
302 else if(argument[0].equals("TYPE")) 301 else if(argument[0].equals("TYPE"))
303 { 302 {
@@ -305,7 +304,7 @@ public class Parser @@ -305,7 +304,7 @@ public class Parser
305 } 304 }
306 else if(argument[0].equals("GROUP-ID")) 305 else if(argument[0].equals("GROUP-ID"))
307 { 306 {
308 - GroupID = argument[1]; 307 + GroupID = argument[1].substring(1,argument[1].length()-1);
309 } 308 }
310 else if(argument[0].equals("DEFAULT")) 309 else if(argument[0].equals("DEFAULT"))
311 { 310 {
@@ -325,7 +324,17 @@ public class Parser @@ -325,7 +324,17 @@ public class Parser
325 } 324 }
326 else if(argument[0].equals("URI")) 325 else if(argument[0].equals("URI"))
327 { 326 {
328 - URI = argument[1]; 327 + if(!argument[1].contains("http://"))
  328 + {
  329 + /*
  330 + * In case the path read is RELATIVE
  331 + */
  332 + URI = path += argument[1].substring(1,argument[1].length()-1);
  333 + }
  334 + else
  335 + {
  336 + URI = argument[1].substring(1,argument[1].length()-1);
  337 + }
329 } 338 }
330 } 339 }
331 if(Type.equals("") || Name.equals("") || URI.equals("") || GroupID.equals("")) 340 if(Type.equals("") || Name.equals("") || URI.equals("") || GroupID.equals(""))
@@ -333,30 +342,20 @@ public class Parser @@ -333,30 +342,20 @@ public class Parser
333 throw new ErrorException("Playlist on line " + currentLine + 342 throw new ErrorException("Playlist on line " + currentLine +
334 " has missing arguments"); 343 " has missing arguments");
335 } 344 }
336 - ParentList pl = new ParentList(GroupID);  
337 - pl.setDefault(Default);  
338 - pl.setName(Name);  
339 - pl.setType(Type);  
340 - Parser p = new Parser();  
341 - p.parseFile(download.doInBackground(URI));  
342 - /*  
343 - * Procesar URI y descargar listas recursivamente y añadir a la lista actual.  
344 - *  
345 - * TO-DO: Necesito la funcion de Marc  
346 - */  
347 - List l = new List(-1); 345 + Parser p = new Parser(URI.substring(0, URI.lastIndexOf("/")+1),caller);
  346 + List newList = p.parseFile(download.doInBackground(URI)).get(0).getLists().get(0);
348 if(!GroupID.equals(ppls.getID())) 347 if(!GroupID.equals(ppls.getID()))
349 { 348 {
350 if(ppls.getID().equals("")) 349 if(ppls.getID().equals(""))
351 { 350 {
352 /* 351 /*
353 - * Este caso se da cuando no se ha creado ninguna lista.  
354 - * Hay que sustituir la por defecto por una lista real. 352 + * If working with the default ParentList, then modify it, don't create a new one.
355 */ 353 */
356 ppls.setDefault(Default); 354 ppls.setDefault(Default);
357 ppls.setName(Name); 355 ppls.setName(Name);
358 ppls.setType(Type); 356 ppls.setType(Type);
359 - lists.add(0,pl); 357 + ppls.getLists().set(0, newList);
  358 + ppls.setID(GroupID);
360 } 359 }
361 else 360 else
362 { 361 {
@@ -364,19 +363,20 @@ public class Parser @@ -364,19 +363,20 @@ public class Parser
364 currentList = searchID(ppls.getID(), lists); 363 currentList = searchID(ppls.getID(), lists);
365 if(currentList == -1) 364 if(currentList == -1)
366 { 365 {
  366 + ParentList pl = new ParentList(GroupID);
  367 + pl.setDefault(Default);
  368 + pl.setName(Name);
  369 + pl.setType(Type);
367 lists.add(pl); 370 lists.add(pl);
368 currentList = lists.size()+1; 371 currentList = lists.size()+1;
369 } 372 }
370 - else  
371 - {  
372 - ppls = lists.get(currentList);  
373 - ppls.getLists().add(l);  
374 - } 373 + ppls = lists.get(currentList);
  374 + ppls.getLists().add(newList);
375 } 375 }
376 } 376 }
377 else 377 else
378 { 378 {
379 - ppls.getLists().add(l); 379 + ppls.getLists().add(newList);
380 } 380 }
381 } 381 }
382 382
@@ -385,8 +385,7 @@ public class Parser @@ -385,8 +385,7 @@ public class Parser
385 if(expectSegment || expectList) 385 if(expectSegment || expectList)
386 { 386 {
387 throw new ErrorException("Unexpected end of list!"); 387 throw new ErrorException("Unexpected end of list!");
388 - }  
389 - //END REACHED, IGNORE AND LET THE FILE REACH EOF 388 + }
390 } 389 }
391 390
392 else 391 else
@@ -418,12 +417,17 @@ public class Parser @@ -418,12 +417,17 @@ public class Parser
418 } 417 }
419 else if(expectList) 418 else if(expectList)
420 { 419 {
  420 + /*
  421 + * Download list and merge the entries with the current list
  422 + */
421 expectList = false; 423 expectList = false;
422 - Parser p = new Parser();  
423 - ArrayList<ParentList> newLists = p.parseFile(download.doInBackground(line));  
424 - for(int i = 0; i < newLists.get(0).getLists().get(0).getSegments().size(); i++) 424 + Parser p = new Parser(line.substring(0,line.lastIndexOf("/")+1),caller);
  425 + List newList = p.parseFile(download.doInBackground(line)).get(0).getLists().get(0);
  426 + pls.setMaxDuration(newList.getMaxDuration());
  427 + pls.setSequence(newList.getSequence());
  428 + for(int i = 0; i < newList.getSegments().size(); i++)
425 { 429 {
426 - pls.getSegments().add(newLists.get(0).getLists().get(0).getSegments().get(i)); 430 + pls.getSegments().add(newList.getSegments().get(i));
427 } 431 }
428 } 432 }
429 else 433 else