Mercurial > mplayer.hg
annotate gui/util/list.c @ 34680:f49f6501eb8b
Add a default clause to listMgr()'s switch statement.
author | ib |
---|---|
date | Thu, 23 Feb 2012 13:15:47 +0000 |
parents | 6378e3a2ffb8 |
children | 42fa91951bd2 |
rev | line source |
---|---|
33741 | 1 /* |
2 * This file is part of MPlayer. | |
3 * | |
4 * MPlayer is free software; you can redistribute it and/or modify | |
5 * it under the terms of the GNU General Public License as published by | |
6 * the Free Software Foundation; either version 2 of the License, or | |
7 * (at your option) any later version. | |
8 * | |
9 * MPlayer is distributed in the hope that it will be useful, | |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 * GNU General Public License for more details. | |
13 * | |
14 * You should have received a copy of the GNU General Public License along | |
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., | |
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |
17 */ | |
18 | |
19 #include <stdlib.h> | |
20 #include <string.h> | |
21 | |
22 #include "list.h" | |
23 #include "string.h" | |
24 | |
34667 | 25 static plItem *plList; |
34664
4df4d842d5fb
Remove global variable pointing to current playlist item.
ib
parents:
34663
diff
changeset
|
26 static plItem *plCurrent; |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
27 |
34668 | 28 static urlItem *urlList; |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
29 |
34610 | 30 void *listMgr(int cmd, void *data) |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
31 { |
34673 | 32 plItem *pdat = (plItem *)data; |
33 urlItem *udat = (urlItem *)data; | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
34 |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
35 switch (cmd) { |
34670
9b1849ac4ef7
Cosmetic: Remove unnecessary comments and commented code.
ib
parents:
34669
diff
changeset
|
36 // playlist |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
37 |
34667 | 38 case PLAYLIST_GET: |
39 | |
40 return plList; | |
41 | |
34663 | 42 case PLAYLIST_ITEM_ADD: |
34674 | 43 |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
44 if (plList) { |
34673 | 45 plItem *item = plList; |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
46 |
34673 | 47 while (item->next) |
48 item = item->next; | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
49 |
34673 | 50 item->next = pdat; |
51 pdat->prev = item; | |
52 pdat->next = NULL; | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
53 } else { |
34674 | 54 pdat->next = pdat->prev = NULL; |
34673 | 55 plCurrent = plList = pdat; |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
56 } |
34674 | 57 |
58 return plCurrent; | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
59 |
34663 | 60 case PLAYLIST_ITEM_INSERT: |
34675 | 61 |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
62 if (plCurrent) { |
34675 | 63 pdat->next = plCurrent->next; |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
64 |
34673 | 65 if (pdat->next) |
66 pdat->next->prev = pdat; | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
67 |
34675 | 68 pdat->prev = plCurrent; |
69 plCurrent->next = pdat; | |
70 | |
71 plCurrent = pdat; | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
72 |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
73 return plCurrent; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
74 } else |
34673 | 75 return listMgr(PLAYLIST_ITEM_ADD, pdat); |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
76 |
34663 | 77 case PLAYLIST_ITEM_GET_NEXT: |
34676
207272df4aef
Cosmetic: Insert some blank lines and remove commented code.
ib
parents:
34675
diff
changeset
|
78 |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
79 if (plCurrent && plCurrent->next) { |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
80 plCurrent = plCurrent->next; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
81 return plCurrent; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
82 } |
34676
207272df4aef
Cosmetic: Insert some blank lines and remove commented code.
ib
parents:
34675
diff
changeset
|
83 |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
84 return NULL; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
85 |
34663 | 86 case PLAYLIST_ITEM_GET_PREV: |
34676
207272df4aef
Cosmetic: Insert some blank lines and remove commented code.
ib
parents:
34675
diff
changeset
|
87 |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
88 if (plCurrent && plCurrent->prev) { |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
89 plCurrent = plCurrent->prev; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
90 return plCurrent; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
91 } |
34676
207272df4aef
Cosmetic: Insert some blank lines and remove commented code.
ib
parents:
34675
diff
changeset
|
92 |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
93 return NULL; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
94 |
34663 | 95 case PLAYLIST_ITEM_SET_CURR: |
34676
207272df4aef
Cosmetic: Insert some blank lines and remove commented code.
ib
parents:
34675
diff
changeset
|
96 |
34673 | 97 plCurrent = pdat; |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
98 return plCurrent; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
99 |
34663 | 100 case PLAYLIST_ITEM_GET_CURR: |
34676
207272df4aef
Cosmetic: Insert some blank lines and remove commented code.
ib
parents:
34675
diff
changeset
|
101 |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
102 return plCurrent; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
103 |
34663 | 104 case PLAYLIST_ITEM_DEL_CURR: |
34677 | 105 |
106 if (plCurrent) { | |
34678 | 107 plItem *curr = plCurrent; |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
108 |
34678 | 109 if (curr->prev) |
110 curr->prev->next = curr->next; | |
111 if (curr->next) | |
112 curr->next->prev = curr->prev; | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
113 |
34678 | 114 plCurrent = curr->next; |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
115 |
34678 | 116 if (curr == plList) |
117 plList = plCurrent; | |
34677 | 118 |
34678 | 119 free(curr->path); |
120 free(curr->name); | |
121 free(curr); | |
122 } | |
34677 | 123 |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
124 return plCurrent; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
125 |
34663 | 126 case PLAYLIST_DELETE: |
34676
207272df4aef
Cosmetic: Insert some blank lines and remove commented code.
ib
parents:
34675
diff
changeset
|
127 |
34602 | 128 while (plList) { |
34673 | 129 plItem *item = plList->next; |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
130 |
34602 | 131 free(plList->path); |
132 free(plList->name); | |
133 free(plList); | |
134 | |
34673 | 135 plList = item; |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
136 } |
34676
207272df4aef
Cosmetic: Insert some blank lines and remove commented code.
ib
parents:
34675
diff
changeset
|
137 |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
138 plCurrent = NULL; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
139 return NULL; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
140 |
34670
9b1849ac4ef7
Cosmetic: Remove unnecessary comments and commented code.
ib
parents:
34669
diff
changeset
|
141 // url list |
34668 | 142 |
143 case URLLIST_GET: | |
144 | |
145 return urlList; | |
146 | |
34663 | 147 case URLLIST_ITEM_ADD: |
34679 | 148 |
33748 | 149 if (urlList) { |
34673 | 150 urlItem *item = urlList; |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
151 |
34679 | 152 while (item) { |
153 if (strcmp(udat->url, item->url) == 0) { | |
154 free(udat->url); | |
155 free(udat); | |
156 return NULL; | |
157 } | |
158 | |
159 if (item->next) | |
160 item = item->next; | |
161 else { | |
162 item->next = udat; | |
163 udat->next = NULL; | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
164 break; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
165 } |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
166 } |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
167 } else { |
34673 | 168 udat->next = NULL; |
169 urlList = udat; | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
170 } |
34679 | 171 |
172 return udat; | |
34599 | 173 |
34663 | 174 case URLLIST_DELETE: |
34676
207272df4aef
Cosmetic: Insert some blank lines and remove commented code.
ib
parents:
34675
diff
changeset
|
175 |
34599 | 176 while (urlList) { |
34673 | 177 urlItem *item = urlList->next; |
34601 | 178 |
34599 | 179 free(urlList->url); |
34601 | 180 free(urlList); |
181 | |
34673 | 182 urlList = item; |
34599 | 183 } |
34676
207272df4aef
Cosmetic: Insert some blank lines and remove commented code.
ib
parents:
34675
diff
changeset
|
184 |
34599 | 185 return NULL; |
34680 | 186 |
187 default: | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
188 |
34680 | 189 return NULL; |
190 } | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
191 } |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
192 |
33741 | 193 /** |
34622 | 194 * @brief Set list to @a entry. |
195 * | |
196 * @param list pointer to the char pointer list | |
197 * @param entry the new (and only) element of the list | |
198 * | |
199 * @note Actually, a new list will be created and the old list will be freed. | |
33741 | 200 */ |
34610 | 201 void listSet(char ***list, const char *entry) |
33741 | 202 { |
34622 | 203 if (*list) { |
204 char **l = *list; | |
33741 | 205 |
34622 | 206 while (*l) { |
207 free(*l); | |
208 l++; | |
209 } | |
33741 | 210 |
211 free(*list); | |
212 } | |
213 | |
34623 | 214 *list = malloc(2 * sizeof(char *)); |
34622 | 215 |
216 if (*list) { | |
34623 | 217 (*list)[0] = gstrdup(entry); |
218 (*list)[1] = NULL; | |
34622 | 219 } |
33741 | 220 } |
221 | |
222 /** | |
34627 | 223 * @brief Replace the first element in list that starts with @a search. |
224 * | |
225 * @note If no such element is found, @a replace will be appended. | |
226 * | |
227 * @param list pointer to the char pointer list | |
228 * @param search element to search | |
229 * @param replace replacement element | |
33741 | 230 */ |
34610 | 231 void listRepl(char ***list, const char *search, const char *replace) |
33741 | 232 { |
34627 | 233 int i = 0; |
234 char **org = *list; | |
235 | |
236 if (!replace) | |
237 return; | |
33741 | 238 |
239 if (*list) { | |
34627 | 240 size_t len = (search ? strlen(search) : 0); |
241 | |
33741 | 242 for (i = 0; (*list)[i]; i++) { |
34627 | 243 if (gstrncmp((*list)[i], search, len) == 0) { |
33741 | 244 free((*list)[i]); |
34627 | 245 (*list)[i] = strdup(replace); |
33741 | 246 return; |
247 } | |
248 } | |
249 | |
250 *list = realloc(*list, (i + 2) * sizeof(char *)); | |
251 } else | |
252 *list = malloc(2 * sizeof(char *)); | |
253 | |
34627 | 254 if (!*list) { |
255 *list = org; | |
256 return; | |
257 } | |
258 | |
259 (*list)[i] = strdup(replace); | |
33741 | 260 (*list)[i + 1] = NULL; |
261 } |