Commit 94240569fc6ec0b9b319c8fda7636853182bd11b
1 parent
d3f3ab85
Currele con le parser, aun no está terminado, sigo en ello. Faltan dos polladas.…
… Necesito la funcion de descargar fichero de Marc,
Showing
3 changed files
with
199 additions
and
108 deletions
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=0x7f080009; | |
20 | - public static final int ImageView01=0x7f08000b; | |
21 | - public static final int ImageView1=0x7f08000a; | |
22 | - public static final int LinearLayout1=0x7f080000; | |
23 | - public static final int button=0x7f08000e; | |
24 | - public static final int button1=0x7f080002; | |
25 | - public static final int button2=0x7f080003; | |
26 | - public static final int button3=0x7f080004; | |
27 | - public static final int button4=0x7f080005; | |
28 | - public static final int button5=0x7f080006; | |
29 | - public static final int itemhelp=0x7f080011; | |
30 | - public static final int itemprefs=0x7f080010; | |
31 | - public static final int menu_settings=0x7f08000f; | |
32 | - public static final int textView1=0x7f080007; | |
33 | - public static final int textView2=0x7f080008; | |
34 | - public static final int textViewRoute=0x7f08000c; | |
35 | - public static final int textViewTitle=0x7f080001; | |
36 | - public static final int textViewXml=0x7f08000d; | |
37 | - } | |
38 | - public static final class layout { | |
39 | - public static final int dirs=0x7f030000; | |
40 | - public static final int help=0x7f030001; | |
41 | - public static final int main_activity=0x7f030002; | |
42 | - } | |
43 | - public static final class menu { | |
44 | - public static final int activity_main=0x7f070000; | |
45 | - public static final int menu=0x7f070001; | |
46 | - } | |
47 | - public static final class string { | |
48 | - public static final int app_name=0x7f050000; | |
49 | - public static final int button=0x7f05000c; | |
50 | - public static final int button1=0x7f05000d; | |
51 | - public static final int desc=0x7f050009; | |
52 | - public static final int descarregar=0x7f050003; | |
53 | - public static final int dir=0x7f05000a; | |
54 | - public static final int directoris=0x7f05000b; | |
55 | - public static final int help=0x7f050008; | |
56 | - public static final int hint=0x7f050004; | |
57 | - public static final int logodescription=0x7f05000f; | |
58 | - public static final int menu_settings=0x7f050001; | |
59 | - public static final int prefs=0x7f050007; | |
60 | - public static final int title=0x7f05000e; | |
61 | - public static final int title_activity_main=0x7f050002; | |
62 | - public static final int url=0x7f050005; | |
63 | - public static final int urlhint=0x7f050006; | |
64 | - } | |
65 | - public static final class style { | |
66 | - public static final int AppTheme=0x7f060000; | |
67 | - } | |
68 | - public static final class xml { | |
69 | - public static final int prefs=0x7f040000; | |
70 | - } | |
71 | -} | |
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=0x7f080009; | |
20 | + public static final int ImageView01=0x7f08000b; | |
21 | + public static final int ImageView1=0x7f08000a; | |
22 | + public static final int LinearLayout1=0x7f080000; | |
23 | + public static final int button=0x7f08000e; | |
24 | + public static final int button1=0x7f080002; | |
25 | + public static final int button2=0x7f080003; | |
26 | + public static final int button3=0x7f080004; | |
27 | + public static final int button4=0x7f080005; | |
28 | + public static final int button5=0x7f080006; | |
29 | + public static final int itemhelp=0x7f080011; | |
30 | + public static final int itemprefs=0x7f080010; | |
31 | + public static final int menu_settings=0x7f08000f; | |
32 | + public static final int textView1=0x7f080007; | |
33 | + public static final int textView2=0x7f080008; | |
34 | + public static final int textViewRoute=0x7f08000c; | |
35 | + public static final int textViewTitle=0x7f080001; | |
36 | + public static final int textViewXml=0x7f08000d; | |
37 | + } | |
38 | + public static final class layout { | |
39 | + public static final int dirs=0x7f030000; | |
40 | + public static final int help=0x7f030001; | |
41 | + public static final int main_activity=0x7f030002; | |
42 | + } | |
43 | + public static final class menu { | |
44 | + public static final int activity_main=0x7f070000; | |
45 | + public static final int menu=0x7f070001; | |
46 | + } | |
47 | + public static final class string { | |
48 | + public static final int app_name=0x7f050000; | |
49 | + public static final int button=0x7f05000c; | |
50 | + public static final int button1=0x7f05000d; | |
51 | + public static final int desc=0x7f050009; | |
52 | + public static final int descarregar=0x7f050003; | |
53 | + public static final int dir=0x7f05000a; | |
54 | + public static final int directoris=0x7f05000b; | |
55 | + public static final int help=0x7f050008; | |
56 | + public static final int hint=0x7f050004; | |
57 | + public static final int logodescription=0x7f05000f; | |
58 | + public static final int menu_settings=0x7f050001; | |
59 | + public static final int prefs=0x7f050007; | |
60 | + public static final int title=0x7f05000e; | |
61 | + public static final int title_activity_main=0x7f050002; | |
62 | + public static final int url=0x7f050005; | |
63 | + public static final int urlhint=0x7f050006; | |
64 | + } | |
65 | + public static final class style { | |
66 | + public static final int AppTheme=0x7f060000; | |
67 | + } | |
68 | + public static final class xml { | |
69 | + public static final int prefs=0x7f040000; | |
70 | + } | |
71 | +} | ... | ... |
src/com/upc/pbe/upcnews/ParentList.java
... | ... | @@ -4,18 +4,29 @@ import java.util.ArrayList; |
4 | 4 | |
5 | 5 | public class ParentList |
6 | 6 | { |
7 | - int currentID; | |
8 | - ArrayList<List> lists; //per cada qualitat | |
7 | + private String ID; | |
8 | + private int currentQuality; | |
9 | + private ArrayList<List> lists; //per cada qualitat | |
9 | 10 | |
10 | - public ParentList() | |
11 | + public ParentList(String ID) | |
11 | 12 | { |
12 | - currentID = 0; | |
13 | + this.ID = ID; | |
14 | + currentQuality = 0; | |
13 | 15 | lists = new ArrayList<List>(); |
14 | 16 | } |
15 | 17 | |
16 | - public int getCurrent() | |
18 | + public String getID() | |
17 | 19 | { |
18 | - return currentID; | |
20 | + return ID; | |
21 | + } | |
22 | + | |
23 | + public int getQuality() | |
24 | + { | |
25 | + return currentQuality; | |
26 | + } | |
27 | + public void setQuality(int q) | |
28 | + { | |
29 | + currentQuality = q; | |
19 | 30 | } |
20 | 31 | |
21 | 32 | public ArrayList<List> getLists() | ... | ... |
src/com/upc/pbe/upcnews/Parser.java
... | ... | @@ -5,36 +5,63 @@ import java.util.ArrayList; |
5 | 5 | public class Parser |
6 | 6 | { |
7 | 7 | private static final String STARTWORD = "#EXTM3U"; |
8 | - | |
8 | + private int fileType; //indicates if segment list or media list | |
9 | 9 | private int currentLine; |
10 | - private int currentSegment; | |
11 | - private int currentList; | |
10 | + private int currentSegment; //Cada segmento de cada calidad distinta | |
11 | + private int currentList; //Indice de cada recurso distinto | |
12 | + private boolean expectSegment = false; | |
13 | + private boolean expectList = false; | |
12 | 14 | |
13 | 15 | public Parser() |
14 | 16 | { |
15 | 17 | currentLine = 0; |
16 | 18 | currentSegment = 0; |
17 | - currentList = 0; | |
19 | + currentList = 0; | |
20 | + fileType = -1; | |
21 | + /* | |
22 | + * -1 indicates UNDETERMINED | |
23 | + * 0 indicates SEGMENTS | |
24 | + * 1 indicates MEDIA | |
25 | + */ | |
18 | 26 | } |
19 | 27 | |
20 | 28 | public ArrayList<ParentList> parseFile(String file) throws ErrorException, WarningException, InfoException |
21 | 29 | { |
22 | 30 | ArrayList<ParentList> lists = new ArrayList<ParentList>(); |
23 | - lists.add(new ParentList()); | |
31 | + lists.add(new ParentList("")); | |
24 | 32 | lists.get(0).getLists().add(new List()); |
25 | 33 | String[] lines = file.split("\n"); |
26 | 34 | for(int i = 0; i < lines.length; i++) |
27 | 35 | { |
28 | 36 | parseLine(lines[i],lists); |
29 | 37 | } |
30 | - return lists; | |
38 | + /* Esto contiene una lista de RECURSOS, | |
39 | + * que a su vez contiene una lista de CALIDADES. | |
40 | + * Si no te gusta mis VERSOS, | |
41 | + * te mando a la mierda sin SUTILIDADES. | |
42 | + * | |
43 | + * -- Imanol, hasta las cejas de cafeína. | |
44 | + * | |
45 | + * PD: En el último nivel de profundidad hay una lista de segmentos (debajo de calidades). | |
46 | + * Allí está el auténtico tesoro de Narnia. | |
47 | + */ | |
48 | + return lists; | |
49 | + } | |
50 | + | |
51 | + private int searchID(String ID, ArrayList<ParentList> lists) | |
52 | + { | |
53 | + for(int i = 0; i < lists.size(); i++) | |
54 | + { | |
55 | + if(lists.get(i).getID().equals(ID)) | |
56 | + { | |
57 | + return i; | |
58 | + } | |
59 | + } | |
60 | + return -1; | |
31 | 61 | } |
32 | 62 | |
33 | 63 | public void parseLine(String line, ArrayList<ParentList> lists) throws ErrorException, WarningException, InfoException |
34 | 64 | { |
35 | - boolean expectSegment = false; | |
36 | - boolean expectList = false; | |
37 | - | |
38 | 65 | if(line.isEmpty()) |
39 | 66 | { |
40 | 67 | currentLine++; |
... | ... | @@ -42,7 +69,8 @@ public class Parser |
42 | 69 | } |
43 | 70 | else |
44 | 71 | { |
45 | - List pls = lists.get(currentList).getLists().get(lists.get(currentList).currentID); | |
72 | + ParentList ppls = lists.get(currentList); //VIVA HONDURAS!!! | |
73 | + List pls = ppls.getLists().get(ppls.getQuality()); | |
46 | 74 | if(!pls.getValidated()) |
47 | 75 | { |
48 | 76 | if(line.equals(STARTWORD)) |
... | ... | @@ -72,6 +100,15 @@ public class Parser |
72 | 100 | |
73 | 101 | else if(extTag[0].equals("#EXTINF")) |
74 | 102 | { |
103 | + if(fileType == -1) | |
104 | + { | |
105 | + fileType = 0; | |
106 | + } | |
107 | + else if(fileType == 1) | |
108 | + { | |
109 | + throw new ErrorException("Invalid file, should contain Lists, " + | |
110 | + "but segments were found."); | |
111 | + } | |
75 | 112 | String[] args = extTag[1].split(","); |
76 | 113 | int duration = Integer.parseInt(args[0]); |
77 | 114 | if (duration > pls.getMaxDuration()) |
... | ... | @@ -82,32 +119,67 @@ public class Parser |
82 | 119 | Segment s = new Segment(duration); |
83 | 120 | s.setName(args[1]); |
84 | 121 | pls.getSegments().add(s); |
85 | - currentSegment++; | |
86 | 122 | expectSegment = true; |
87 | 123 | } |
88 | 124 | |
89 | 125 | else if(extTag[0].equals("#EXT-X-STREAM-INF")) |
90 | 126 | { |
127 | + if(fileType == -1) | |
128 | + { | |
129 | + fileType = 1; | |
130 | + } | |
131 | + else if(fileType == 0) | |
132 | + { | |
133 | + throw new ErrorException("Invalid file, should contain Segments, " + | |
134 | + "but lists were found."); | |
135 | + } | |
91 | 136 | expectList = true; |
92 | - /*PROGRAMID="" | |
93 | - CODECS="" | |
94 | - RESOLUTION="" | |
95 | - ARGUMENTS=`echo $line | cut -d':' -f 2` | |
96 | - i=1 | |
97 | - while [[ `echo $ARGUMENTS | cut -d',' -f $i` != "" ]]; do | |
98 | - PARAMETER=`echo $ARGUMENTS | cut -d',' -f $i | cut -d'=' -f 2` | |
99 | - case `echo $ARGUMENTS | cut -d',' -f $i | cut -d'=' -f 1` in | |
100 | - "PROGRAM-ID") | |
101 | - PROGRAMID=$PARAMETER;; | |
102 | - "BANDWIDTH") | |
103 | - BANDWIDTH=$PARAMETER;; | |
104 | - "RESOLUTION") | |
105 | - RESOLUTION=$PARAMETER;; | |
106 | - "CODECS") | |
107 | - CODECS=$PARAMETER;; | |
108 | - esac | |
109 | - ((i++)) | |
110 | - done;;*/ | |
137 | + String programID = ""; | |
138 | + int bandwidth = -1; | |
139 | + String[] arguments = extTag[1].split(","); | |
140 | + for(int i = 0; i < arguments.length; i++) | |
141 | + { | |
142 | + if(arguments[i].equals("PROGRAM-ID")) | |
143 | + { | |
144 | + programID = arguments[i]; | |
145 | + } | |
146 | + else if(arguments[i].equals("BANDWIDTH")) | |
147 | + { | |
148 | + bandwidth = Integer.parseInt(arguments[i]); | |
149 | + } | |
150 | + } | |
151 | + if(programID.equals("")|| bandwidth == -1) | |
152 | + { | |
153 | + throw new ErrorException("Playlist on line " + currentLine + | |
154 | + " has missing arguments"); | |
155 | + } | |
156 | + if(!programID.equals(ppls.getID())) | |
157 | + { | |
158 | + if(ppls.getID().equals("")) | |
159 | + { | |
160 | + /* | |
161 | + * Este caso se da cuando no se ha creado ninguna lista. | |
162 | + * Hay que sustituir la por defecto por una lista real. | |
163 | + */ | |
164 | + lists.add(0,new ParentList(programID)); | |
165 | + } | |
166 | + else | |
167 | + { | |
168 | + currentList = searchID(ppls.getID(), lists); | |
169 | + if(currentList == -1) | |
170 | + { | |
171 | + lists.add(new ParentList(programID)); | |
172 | + currentList = lists.size()+1; | |
173 | + /* | |
174 | + * ppls y pls se actualizan en la siguiente linea procesada | |
175 | + */ | |
176 | + } | |
177 | + } | |
178 | + } | |
179 | + } | |
180 | + else if(extTag[0].equals("#EXT-X-MEDIA")) | |
181 | + { | |
182 | + //TO-DO | |
111 | 183 | } |
112 | 184 | |
113 | 185 | else if(extTag[0].equals("#EXT-X-ENDLIST")) |
... | ... | @@ -118,7 +190,7 @@ public class Parser |
118 | 190 | else |
119 | 191 | { |
120 | 192 | currentLine++; |
121 | - throw new WarningException("Tag not implemented"); | |
193 | + throw new WarningException("Tag not implemented: " + extTag[0]); | |
122 | 194 | } |
123 | 195 | } |
124 | 196 | else |
... | ... | @@ -129,6 +201,14 @@ public class Parser |
129 | 201 | } |
130 | 202 | else |
131 | 203 | { |
204 | + if(expectSegment) | |
205 | + { | |
206 | + | |
207 | + } | |
208 | + else if(expectList) | |
209 | + { | |
210 | + | |
211 | + } | |
132 | 212 | |
133 | 213 | /*if [[ $EXTINF -eq 1 ]]; then |
134 | 214 | echo -n "SEGMENT $CURRENT_SEGMENT: \"$NAME\" - $DURATION seconds ($line)" | ... | ... |