Mercurial > mplayer.hg
annotate gui/util/list.c @ 34678:23f4f2104774
Cosmetic: Adjust indent.
author | ib |
---|---|
date | Thu, 23 Feb 2012 12:59:28 +0000 |
parents | d3f65dd58eb9 |
children | 6378e3a2ffb8 |
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; | |
34 int is_added = 1; | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
35 |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
36 switch (cmd) { |
34670
9b1849ac4ef7
Cosmetic: Remove unnecessary comments and commented code.
ib
parents:
34669
diff
changeset
|
37 // playlist |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
38 |
34667 | 39 case PLAYLIST_GET: |
40 | |
41 return plList; | |
42 | |
34663 | 43 case PLAYLIST_ITEM_ADD: |
34674 | 44 |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
45 if (plList) { |
34673 | 46 plItem *item = plList; |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
47 |
34673 | 48 while (item->next) |
49 item = item->next; | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
50 |
34673 | 51 item->next = pdat; |
52 pdat->prev = item; | |
53 pdat->next = NULL; | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
54 } else { |
34674 | 55 pdat->next = pdat->prev = NULL; |
34673 | 56 plCurrent = plList = pdat; |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
57 } |
34674 | 58 |
59 return plCurrent; | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
60 |
34663 | 61 case PLAYLIST_ITEM_INSERT: |
34675 | 62 |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
63 if (plCurrent) { |
34675 | 64 pdat->next = plCurrent->next; |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
65 |
34673 | 66 if (pdat->next) |
67 pdat->next->prev = pdat; | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
68 |
34675 | 69 pdat->prev = plCurrent; |
70 plCurrent->next = pdat; | |
71 | |
72 plCurrent = pdat; | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
73 |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
74 return plCurrent; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
75 } else |
34673 | 76 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
|
77 |
34663 | 78 case PLAYLIST_ITEM_GET_NEXT: |
34676
207272df4aef
Cosmetic: Insert some blank lines and remove commented code.
ib
parents:
34675
diff
changeset
|
79 |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
80 if (plCurrent && plCurrent->next) { |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
81 plCurrent = plCurrent->next; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
82 return plCurrent; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
83 } |
34676
207272df4aef
Cosmetic: Insert some blank lines and remove commented code.
ib
parents:
34675
diff
changeset
|
84 |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
85 return NULL; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
86 |
34663 | 87 case PLAYLIST_ITEM_GET_PREV: |
34676
207272df4aef
Cosmetic: Insert some blank lines and remove commented code.
ib
parents:
34675
diff
changeset
|
88 |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
89 if (plCurrent && plCurrent->prev) { |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
90 plCurrent = plCurrent->prev; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
91 return plCurrent; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
92 } |
34676
207272df4aef
Cosmetic: Insert some blank lines and remove commented code.
ib
parents:
34675
diff
changeset
|
93 |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
94 return NULL; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
95 |
34663 | 96 case PLAYLIST_ITEM_SET_CURR: |
34676
207272df4aef
Cosmetic: Insert some blank lines and remove commented code.
ib
parents:
34675
diff
changeset
|
97 |
34673 | 98 plCurrent = pdat; |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
99 return plCurrent; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
100 |
34663 | 101 case PLAYLIST_ITEM_GET_CURR: |
34676
207272df4aef
Cosmetic: Insert some blank lines and remove commented code.
ib
parents:
34675
diff
changeset
|
102 |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
103 return plCurrent; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
104 |
34663 | 105 case PLAYLIST_ITEM_DEL_CURR: |
34677 | 106 |
107 if (plCurrent) { | |
34678 | 108 plItem *curr = plCurrent; |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
109 |
34678 | 110 if (curr->prev) |
111 curr->prev->next = curr->next; | |
112 if (curr->next) | |
113 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
|
114 |
34678 | 115 plCurrent = curr->next; |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
116 |
34678 | 117 if (curr == plList) |
118 plList = plCurrent; | |
34677 | 119 |
34678 | 120 free(curr->path); |
121 free(curr->name); | |
122 free(curr); | |
123 } | |
34677 | 124 |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
125 return plCurrent; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
126 |
34663 | 127 case PLAYLIST_DELETE: |
34676
207272df4aef
Cosmetic: Insert some blank lines and remove commented code.
ib
parents:
34675
diff
changeset
|
128 |
34602 | 129 while (plList) { |
34673 | 130 plItem *item = plList->next; |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
131 |
34602 | 132 free(plList->path); |
133 free(plList->name); | |
134 free(plList); | |
135 | |
34673 | 136 plList = item; |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
137 } |
34676
207272df4aef
Cosmetic: Insert some blank lines and remove commented code.
ib
parents:
34675
diff
changeset
|
138 |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
139 plCurrent = NULL; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
140 return NULL; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
141 |
34670
9b1849ac4ef7
Cosmetic: Remove unnecessary comments and commented code.
ib
parents:
34669
diff
changeset
|
142 // url list |
34668 | 143 |
144 case URLLIST_GET: | |
145 | |
146 return urlList; | |
147 | |
34663 | 148 case URLLIST_ITEM_ADD: |
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 is_added = 0; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
152 |
34673 | 153 while (item->next) { |
154 if (!gstrcmp(item->url, udat->url)) { | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
155 is_added = 1; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
156 break; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
157 } |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
158 |
34673 | 159 item = item->next; |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
160 } |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
161 |
34673 | 162 if (!is_added && gstrcmp(item->url, udat->url)) |
163 item->next = udat; | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
164 } else { |
34673 | 165 udat->next = NULL; |
166 urlList = udat; | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
167 } |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
168 return NULL; |
34599 | 169 |
34663 | 170 case URLLIST_DELETE: |
34676
207272df4aef
Cosmetic: Insert some blank lines and remove commented code.
ib
parents:
34675
diff
changeset
|
171 |
34599 | 172 while (urlList) { |
34673 | 173 urlItem *item = urlList->next; |
34601 | 174 |
34599 | 175 free(urlList->url); |
34601 | 176 free(urlList); |
177 | |
34673 | 178 urlList = item; |
34599 | 179 } |
34676
207272df4aef
Cosmetic: Insert some blank lines and remove commented code.
ib
parents:
34675
diff
changeset
|
180 |
34599 | 181 return NULL; |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
182 } |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
183 |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
184 return NULL; |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
185 } |
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33741
diff
changeset
|
186 |
33741 | 187 /** |
34622 | 188 * @brief Set list to @a entry. |
189 * | |
190 * @param list pointer to the char pointer list | |
191 * @param entry the new (and only) element of the list | |
192 * | |
193 * @note Actually, a new list will be created and the old list will be freed. | |
33741 | 194 */ |
34610 | 195 void listSet(char ***list, const char *entry) |
33741 | 196 { |
34622 | 197 if (*list) { |
198 char **l = *list; | |
33741 | 199 |
34622 | 200 while (*l) { |
201 free(*l); | |
202 l++; | |
203 } | |
33741 | 204 |
205 free(*list); | |
206 } | |
207 | |
34623 | 208 *list = malloc(2 * sizeof(char *)); |
34622 | 209 |
210 if (*list) { | |
34623 | 211 (*list)[0] = gstrdup(entry); |
212 (*list)[1] = NULL; | |
34622 | 213 } |
33741 | 214 } |
215 | |
216 /** | |
34627 | 217 * @brief Replace the first element in list that starts with @a search. |
218 * | |
219 * @note If no such element is found, @a replace will be appended. | |
220 * | |
221 * @param list pointer to the char pointer list | |
222 * @param search element to search | |
223 * @param replace replacement element | |
33741 | 224 */ |
34610 | 225 void listRepl(char ***list, const char *search, const char *replace) |
33741 | 226 { |
34627 | 227 int i = 0; |
228 char **org = *list; | |
229 | |
230 if (!replace) | |
231 return; | |
33741 | 232 |
233 if (*list) { | |
34627 | 234 size_t len = (search ? strlen(search) : 0); |
235 | |
33741 | 236 for (i = 0; (*list)[i]; i++) { |
34627 | 237 if (gstrncmp((*list)[i], search, len) == 0) { |
33741 | 238 free((*list)[i]); |
34627 | 239 (*list)[i] = strdup(replace); |
33741 | 240 return; |
241 } | |
242 } | |
243 | |
244 *list = realloc(*list, (i + 2) * sizeof(char *)); | |
245 } else | |
246 *list = malloc(2 * sizeof(char *)); | |
247 | |
34627 | 248 if (!*list) { |
249 *list = org; | |
250 return; | |
251 } | |
252 | |
253 (*list)[i] = strdup(replace); | |
33741 | 254 (*list)[i + 1] = NULL; |
255 } |