diff --git a/AndroidManifest.xml b/AndroidManifest.xml index d52356d..3528364 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -36,14 +36,7 @@ - - - - - - + diff --git a/src/com/upc/pbe/upcnews/Directoris.java b/src/com/upc/pbe/upcnews/Directoris.java index 3c4c424..c8a83fd 100644 --- a/src/com/upc/pbe/upcnews/Directoris.java +++ b/src/com/upc/pbe/upcnews/Directoris.java @@ -118,7 +118,7 @@ public class Directoris extends Activity implements OnClickListener { String m3u8 = d.doInBackground(urlvideo); Log.d(TAG, m3u8); Parser p = new Parser(); - /* + try { ArrayList m3u8parsed = p.parseFile(m3u8); @@ -132,13 +132,14 @@ public class Directoris extends Activity implements OnClickListener { } catch (InfoException e) { Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show(); Log.d(TAG, e.getMessage()); - }*/ + } } //VideoPlayer + /* String urlvid = null; ((UpcApp) getApplication()).setDesc(urlvid); - startActivity(new Intent(this, VideoActivity.class)); + startActivity(new Intent(this, VideoActivity.class));*/ } } \ No newline at end of file diff --git a/src/com/upc/pbe/upcnews/Parser.java b/src/com/upc/pbe/upcnews/Parser.java index ddfe3fc..2ebb404 100644 --- a/src/com/upc/pbe/upcnews/Parser.java +++ b/src/com/upc/pbe/upcnews/Parser.java @@ -5,272 +5,216 @@ import java.util.ArrayList; import android.util.Log; -public class Parser -{ +public class Parser { private static final String STARTWORD = "#EXTM3U"; private static String TAG = "Parser"; - private int fileType; //indicates if segment list or media list + private int fileType; // indicates if segment list or media list private int currentLine; - private int currentSegment; //Cada segmento de cada calidad distinta - private int currentList; //Indice de cada recurso distinto + private int currentSegment; // Cada segmento de cada calidad distinta + private int currentList; // Indice de cada recurso distinto private boolean expectSegment = false; private boolean expectList = false; private Descarrega download; - - public Parser() - { + + public Parser() { currentLine = 0; currentSegment = 0; currentList = 0; fileType = -1; /* - * -1 indicates UNDETERMINED - * 0 indicates SEGMENTS - * 1 indicates MEDIA + * -1 indicates UNDETERMINED 0 indicates SEGMENTS 1 indicates MEDIA */ download = new Descarrega(); } - - public ArrayList parseFile(String file) throws ErrorException, WarningException, InfoException - { + + public ArrayList parseFile(String file) throws ErrorException, + WarningException, InfoException { ArrayList lists = new ArrayList(); lists.add(new ParentList("")); lists.get(0).getLists().add(new List(-1)); String[] lines = file.split("\n"); - Log.d(TAG, "" + lines.length); - for(int i = 0; i < lines.length; i++) //la primera linea = null + + for (int i = 0; i < lines.length; i++) // la primera linea = null { - if(lines[i].endsWith("\\")) - { - lines[i] = lines[i].substring(0, lines[i].indexOf("\\")) + lines[++i]; + if (lines[i].endsWith("\\")) { + lines[i] = lines[i].substring(0, lines[i].indexOf("\\")) + + lines[++i]; } - try - { - + try { + Log.d(TAG, lines[i]); - parseLine(lines[i],lists); - } - catch(InfoException iE) - { - //Toast.makeText(this, iE.getMessage(), Toast.LENGTH_SHORT).show(); - } - catch(WarningException wE) - { - + parseLine(lines[i], lists); + } catch (InfoException iE) { + // Toast.makeText(this, iE.getMessage(), + // Toast.LENGTH_SHORT).show(); + } catch (WarningException wE) { + } } - /* - * Esto contiene una lista de RECURSOS, - * que a su vez contiene una lista de CALIDADES. - * Si no te gusta mis VERSOS, - * te mando a la mierda sin SUTILIDADES. + /* + * Esto contiene una lista de RECURSOS, que a su vez contiene una lista + * de CALIDADES. Si no te gusta mis VERSOS, te mando a la mierda sin + * SUTILIDADES. * * -- Imanol, hasta las cejas de cafeína. * - * PD: En el último nivel de profundidad hay una lista de segmentos (debajo de calidades). - * Allí está el auténtico tesoro de Narnia. + * PD: En el último nivel de profundidad hay una lista de segmentos + * (debajo de calidades). Allí está el auténtico tesoro de Narnia. */ - for(int i = 0; i < lists.size(); i++) - { + for (int i = 0; i < lists.size(); i++) { sortQuality(lists.get(i)); } - return lists; + return lists; } - - private int searchID(String ID, ArrayList lists) - { - for(int i = 0; i < lists.size(); i++) - { - if(lists.get(i).getID().equals(ID)) - { + + private int searchID(String ID, ArrayList lists) { + for (int i = 0; i < lists.size(); i++) { + if (lists.get(i).getID().equals(ID)) { return i; } } return -1; } - - private void sortQuality(ParentList ppls) - { + + private void sortQuality(ParentList ppls) { ArrayList lists = ppls.getLists(); - if(lists.get(0).getQuality() == -1) - { + if (lists.get(0).getQuality() == -1) { /* * Se trata de ext-x-media's y estos no van por calidad */ return; } - //BUBBLE-SORT!! (Me da un poco de verguenza, pero no quiero ponerme con quicksort... - while(true) - { + // BUBBLE-SORT!! (Me da un poco de verguenza, pero no quiero ponerme con + // quicksort... + while (true) { boolean sorted = true; int i = 0; - do - { - if(lists.get(i).getQuality() < lists.get(i+1).getQuality()) - { + do { + if (lists.get(i).getQuality() < lists.get(i + 1).getQuality()) { sorted = false; List aux = lists.get(i); - lists.set(i, lists.get(i+1)); - lists.set(i+1, aux); + lists.set(i, lists.get(i + 1)); + lists.set(i + 1, aux); } - - }while(++i != lists.size()); - if(sorted) - { + + } while (++i != lists.size()); + if (sorted) { break; } } } - - public void parseLine(String line, ArrayList lists) throws ErrorException, WarningException, InfoException - { - if(line.isEmpty()) - { + + public void parseLine(String line, ArrayList lists) + throws ErrorException, WarningException, InfoException { + if (line.isEmpty()) { currentLine++; return; - } - else - { - ParentList ppls = lists.get(currentList); //VIVA HONDURAS!!! + } else { + ParentList ppls = lists.get(currentList); // VIVA HONDURAS!!! List pls = ppls.getLists().get(ppls.getCurrentQuality()); - if(!pls.getValidated()) - { - if(line.equals(STARTWORD)) - { + if (!pls.getValidated()) { + if (line.equals(STARTWORD)) { pls.setValidated(true); - } - else - { + } else { throw new ErrorException("Playlist is not valid"); } - } - else - { - if(line.charAt(0) == '#') - { - if(line.substring(0,4).equals("#EXT")) - { + } else { + if (line.charAt(0) == '#') { + if (line.substring(0, 4).equals("#EXT")) { String[] extTag = line.split(":"); - if(extTag[0].equals("#EXT-X-MEDIA-SEQUENCE")) - { + if (extTag[0].equals("#EXT-X-MEDIA-SEQUENCE")) { pls.setSequence(Integer.parseInt(extTag[1])); - } - else if(extTag[0].equals("#EXT-X-TARGETDURATION")) - { + } else if (extTag[0].equals("#EXT-X-TARGETDURATION")) { pls.setMaxDuration(Integer.parseInt(extTag[1])); - } - else if(extTag[0].equals("#EXTINF")) - { - if(fileType == -1) - { + } else if (extTag[0].equals("#EXTINF")) { + if (fileType == -1) { fileType = 0; + } else if (fileType == 1) { + throw new ErrorException( + "Invalid file, should contain Lists, " + + "but segments were found."); } - else if(fileType == 1) - { - throw new ErrorException("Invalid file, should contain Lists, " + - "but segments were found."); - } - if(expectSegment) - { - throw new ErrorException("Expected segment URI, got a different" + - "segment declaration"); + if (expectSegment) { + throw new ErrorException( + "Expected segment URI, got a different" + + "segment declaration"); } String[] args = extTag[1].split(","); int duration = Integer.parseInt(args[0]); - if (duration > pls.getMaxDuration()) - { - throw new ErrorException("Segment " + currentSegment + " on line " + currentLine - +" exceeds max duration"); + if (duration > pls.getMaxDuration()) { + throw new ErrorException("Segment " + + currentSegment + " on line " + + currentLine + " exceeds max duration"); } Segment s = new Segment(duration); - if(args.length == 1) - { + if (args.length == 1) { s.setName(""); - } - else - { + } else { s.setName(args[1]); } pls.getSegments().add(s); expectSegment = true; } - - else if(extTag[0].equals("#EXT-X-STREAM-INF")) - { - if(fileType == -1) - { + + else if (extTag[0].equals("#EXT-X-STREAM-INF")) { + if (fileType == -1) { fileType = 1; - } - else if(fileType == 0) - { - throw new ErrorException("Invalid file, should contain Segments, " + - "but lists were found."); + } else if (fileType == 0) { + throw new ErrorException( + "Invalid file, should contain Segments, " + + "but lists were found."); } expectList = true; String programID = ""; int bandwidth = -1; String[] arguments = extTag[1].split(","); - for(int i = 0; i < arguments.length; i++) - { + for (int i = 0; i < arguments.length; i++) { String[] argument = arguments[i].split("="); - if(argument[0].equals("PROGRAM-ID")) - { + if (argument[0].equals("PROGRAM-ID")) { programID = argument[1]; - } - else if(argument[0].equals("BANDWIDTH")) - { + } else if (argument[0].equals("BANDWIDTH")) { bandwidth = Integer.parseInt(argument[1]); } } - if(programID.equals("")|| bandwidth == -1) - { - throw new ErrorException("Playlist on line " + currentLine + - " has missing arguments"); + if (programID.equals("") || bandwidth == -1) { + throw new ErrorException("Playlist on line " + + currentLine + + " has missing arguments"); } - if(!programID.equals(ppls.getID())) - { - if(ppls.getID().equals("")) - { + if (!programID.equals(ppls.getID())) { + if (ppls.getID().equals("")) { /* - * Este caso se da cuando no se ha creado ninguna lista. - * Hay que sustituir la por defecto por una lista real. + * Este caso se da cuando no se ha creado + * ninguna lista. Hay que sustituir la por + * defecto por una lista real. */ - lists.add(0,new ParentList(programID)); - } - else - { + lists.add(0, new ParentList(programID)); + } else { currentList = searchID(ppls.getID(), lists); - if(currentList == -1) - { + if (currentList == -1) { lists.add(new ParentList(programID)); - currentList = lists.size()+1; + currentList = lists.size() + 1; /* - * ppls y pls se actualizan en la siguiente linea procesada + * ppls y pls se actualizan en la + * siguiente linea procesada */ - } - else - { + } else { ppls = lists.get(currentList); - ppls.getLists().add(new List(bandwidth)); + ppls.getLists() + .add(new List(bandwidth)); } } - } - else - { + } else { ppls.getLists().add(new List(bandwidth)); } - } - else if(extTag[0].equals("#EXT-X-MEDIA")) - { - if(fileType == -1) - { + } else if (extTag[0].equals("#EXT-X-MEDIA")) { + if (fileType == -1) { fileType = 1; - } - else if(fileType == 0) - { - throw new ErrorException("Invalid file, should contain Segments, " + - "but lists were found."); + } else if (fileType == 0) { + throw new ErrorException( + "Invalid file, should contain Segments, " + + "but lists were found."); } String Type = ""; String Name = ""; @@ -278,46 +222,33 @@ public class Parser String URI = ""; boolean Default = false; String[] arguments = extTag[1].split(","); - for(int i = 0; i < arguments.length; i++) - { + for (int i = 0; i < arguments.length; i++) { String[] argument = arguments[i].split("="); - if(argument[0].equals("NAME")) - { + if (argument[0].equals("NAME")) { Name = argument[1]; - } - else if(argument[0].equals("TYPE")) - { + } else if (argument[0].equals("TYPE")) { Type = argument[1]; - } - else if(argument[0].equals("GROUP-ID")) - { + } else if (argument[0].equals("GROUP-ID")) { GroupID = argument[1]; - } - else if(argument[0].equals("DEFAULT")) - { - if(argument[1].equals("YES")) - { + } else if (argument[0].equals("DEFAULT")) { + if (argument[1].equals("YES")) { Default = true; - } - else if(argument[1].equals("NO")) - { + } else if (argument[1].equals("NO")) { Default = true; + } else { + throw new ErrorException( + "Invalid value for argument DEFAULT on line " + + currentLine); } - else - { - throw new ErrorException("Invalid value for argument DEFAULT on line " + - currentLine); - } - } - else if(argument[0].equals("URI")) - { + } else if (argument[0].equals("URI")) { URI = argument[1]; } } - if(Type.equals("") || Name.equals("") || URI.equals("") || GroupID.equals("")) - { - throw new ErrorException("Playlist on line " + currentLine + - " has missing arguments"); + if (Type.equals("") || Name.equals("") + || URI.equals("") || GroupID.equals("")) { + throw new ErrorException("Playlist on line " + + currentLine + + " has missing arguments"); } ParentList pl = new ParentList(GroupID); pl.setDefault(Default); @@ -326,92 +257,74 @@ public class Parser Parser p = new Parser(); p.parseFile(download.doInBackground(URI)); /* - * Procesar URI y descargar listas recursivamente y añadir a la lista actual. + * Procesar URI y descargar listas recursivamente y + * añadir a la lista actual. * * TO-DO: Necesito la funcion de Marc */ List l = new List(-1); - if(!GroupID.equals(ppls.getID())) - { - if(ppls.getID().equals("")) - { + if (!GroupID.equals(ppls.getID())) { + if (ppls.getID().equals("")) { /* - * Este caso se da cuando no se ha creado ninguna lista. - * Hay que sustituir la por defecto por una lista real. + * Este caso se da cuando no se ha creado + * ninguna lista. Hay que sustituir la por + * defecto por una lista real. */ - lists.add(0,pl); - } - else - { + lists.add(0, pl); + } else { currentList = searchID(ppls.getID(), lists); - if(currentList == -1) - { + if (currentList == -1) { lists.add(pl); - currentList = lists.size()+1; - } - else - { + currentList = lists.size() + 1; + } else { ppls = lists.get(currentList); ppls.getLists().add(l); } } - } - else - { + } else { ppls.getLists().add(l); } } - - else if(extTag[0].equals("#EXT-X-ENDLIST")) - { - if(expectSegment || expectList) - { - throw new ErrorException("Unexpected end of list!"); + + else if (extTag[0].equals("#EXT-X-ENDLIST")) { + if (expectSegment || expectList) { + throw new ErrorException( + "Unexpected end of list!"); } - //END REACHED, IGNORE AND LET THE FILE REACH EOF + // END REACHED, IGNORE AND LET THE FILE REACH EOF } - - else - { + + else { currentLine++; - throw new WarningException("Tag not implemented: " + extTag[0]); + throw new WarningException("Tag not implemented: " + + extTag[0]); } - } - else - { + } else { String comment = line.substring(1); - throw new InfoException("Comment on line " + currentLine++ + " " + comment); + throw new InfoException("Comment on line " + + currentLine++ + " " + comment); } - } - else - { - if(expectSegment) - { + } else { + if (expectSegment) { expectSegment = false; - try - { + try { pls.getSegments().get(currentSegment).setURL(line); - } - catch (MalformedURLException e) - { + } catch (MalformedURLException e) { throw new ErrorException(e.getMessage()); } currentSegment++; - } - else if(expectList) - { + } else if (expectList) { expectList = false; Parser p = new Parser(); p.parseFile(download.doInBackground(line)); - } - else - { - throw new ErrorException("ERROR: Unexpected string " + line); + } else { + throw new ErrorException("ERROR: Unexpected string " + + line); } } } currentLine++; - } + } } } \ No newline at end of file