Mercurial > mplayer.hg
annotate gui/win32/playlist.c @ 32676:db882cd69776
Do not #define _WIN32 on the command line for Cygwin.
Newer Cygwin versions no longer do this and hopefully we should be able
to survive without this hack as well. This change necessitates adapting
two #ifdefs in the MPlayer codebase. It is committed untested as I do
not have access to a Cygwin system.
author | diego |
---|---|
date | Thu, 06 Jan 2011 12:42:59 +0000 |
parents | 8fa2f43cb760 |
children | 844786b8f768 |
rev | line source |
---|---|
23077 | 1 /* |
23079 | 2 * MPlayer GUI for Win32 |
3 * Copyright (C) 2003 Sascha Sommer <saschasommer@freenet.de> | |
4 * Copyright (C) 2006 Erik Augustson <erik_27can@yahoo.com> | |
5 * Copyright (C) 2006 Gianluigi Tiesi <sherpya@netfarm.it> | |
6 * | |
7 * This file is part of MPlayer. | |
8 * | |
9 * MPlayer is free software; you can redistribute it and/or modify | |
10 * it under the terms of the GNU General Public License as published by | |
11 * the Free Software Foundation; either version 2 of the License, or | |
12 * (at your option) any later version. | |
13 * | |
14 * MPlayer is distributed in the hope that it will be useful, | |
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 * GNU General Public License for more details. | |
18 * | |
26457 | 19 * You should have received a copy of the GNU General Public License along |
20 * with MPlayer; if not, write to the Free Software Foundation, Inc., | |
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
23079 | 22 */ |
23077 | 23 |
24 #include <windows.h> | |
26193
609236ad27f4
more header / declaration cleanups; fixes a lot of warnings as well as a preempt to removal of redundant wincfg.h.
vayne
parents:
23091
diff
changeset
|
25 #include <stdio.h> |
27469
c889ecd297c9
Add necessary #include <stdlib.h> for realloc/calloc/free.
diego
parents:
26457
diff
changeset
|
26 #include <stdlib.h> |
23091
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
27 #include "mp_msg.h" |
23077 | 28 #include "playlist.h" |
29 | |
30 /* TODO: implement sort_playlist */ | |
31 | |
32 BOOL adddirtoplaylist(playlist_t *playlist, const char *path, BOOL recursive) | |
33 { | |
34 HANDLE findHandle = INVALID_HANDLE_VALUE; | |
35 WIN32_FIND_DATA finddata; | |
36 char findpath[MAX_PATH], filename[MAX_PATH]; | |
37 char *filepart; | |
38 | |
39 sprintf(findpath, "%s\\*.*", path); | |
40 | |
41 findHandle = FindFirstFile(findpath, &finddata); | |
42 | |
43 if (findHandle == INVALID_HANDLE_VALUE) return FALSE; | |
44 do | |
45 { | |
46 if (finddata.cFileName[0] == '.' || strstr(finddata.cFileName, "Thumbs.db")) continue; | |
47 sprintf(findpath, "%s\\%s", path, finddata.cFileName); | |
48 | |
49 if (GetFileAttributes(findpath) & FILE_ATTRIBUTE_DIRECTORY) | |
50 { | |
51 if(recursive) | |
52 adddirtoplaylist(playlist, findpath, recursive); | |
53 } | |
54 else | |
55 { | |
56 if (GetFullPathName(findpath, MAX_PATH, filename, &filepart)) | |
57 playlist->add_track(playlist, filename, NULL, filepart, 0); | |
58 } | |
59 } while (FindNextFile(findHandle, &finddata)); | |
60 FindClose(findHandle); | |
61 return TRUE; | |
62 } | |
63 | |
64 static void add_track(playlist_t *playlist, const char *filename, const char *artist, const char *title, int duration) | |
65 { | |
66 (playlist->trackcount)++; | |
67 playlist->tracks = realloc(playlist->tracks, playlist->trackcount * sizeof(pl_track_t *)); | |
68 playlist->tracks[playlist->trackcount - 1] = calloc(1, sizeof(pl_track_t)); | |
69 if(filename) playlist->tracks[playlist->trackcount - 1]->filename = strdup(filename); | |
70 if(artist) playlist->tracks[playlist->trackcount - 1]->artist = strdup(artist); | |
71 if(title) playlist->tracks[playlist->trackcount - 1]->title = strdup(title); | |
72 if(duration) playlist->tracks[playlist->trackcount - 1]->duration = duration; | |
73 } | |
74 | |
75 static void remove_track(playlist_t *playlist, int number) | |
76 { | |
77 pl_track_t **tmp = calloc(1, playlist->trackcount * sizeof(pl_track_t *)); | |
78 int i, p = 0; | |
79 memcpy(tmp, playlist->tracks, playlist->trackcount * sizeof(pl_track_t *)); | |
80 (playlist->trackcount)--; | |
81 playlist->tracks = realloc(playlist->tracks, playlist->trackcount * sizeof(pl_track_t *)); | |
82 for(i=0; i<playlist->trackcount + 1; i++) | |
83 { | |
84 if(i != (number - 1)) | |
85 { | |
86 playlist->tracks[p] = tmp[i]; | |
87 p++; | |
88 } | |
89 else | |
90 { | |
32537
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
27469
diff
changeset
|
91 free(tmp[i]->filename); |
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
27469
diff
changeset
|
92 free(tmp[i]->artist); |
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
27469
diff
changeset
|
93 free(tmp[i]->title); |
23077 | 94 free(tmp[i]); |
95 } | |
96 } | |
97 free(tmp); | |
98 } | |
99 | |
100 static void moveup_track(playlist_t *playlist, int number) | |
101 { | |
102 pl_track_t *tmp; | |
103 if(number == 1) return; /* already first */ | |
104 tmp = playlist->tracks[number - 2]; | |
105 playlist->tracks[number - 2] = playlist->tracks[number - 1]; | |
106 playlist->tracks[number - 1] = tmp; | |
107 } | |
108 | |
109 static void movedown_track(playlist_t *playlist, int number) | |
110 { | |
111 pl_track_t *tmp; | |
112 if(number == playlist->trackcount) return; /* already latest */ | |
113 tmp = playlist->tracks[number]; | |
114 playlist->tracks[number] = playlist->tracks[number - 1]; | |
115 playlist->tracks[number - 1] = tmp; | |
116 } | |
117 | |
118 static void sort_playlist(playlist_t *playlist, int opt) {} | |
119 | |
120 static void clear_playlist(playlist_t *playlist) | |
121 { | |
122 while(playlist->trackcount) playlist->remove_track(playlist, 1); | |
123 playlist->tracks = NULL; | |
124 playlist->current = 0; | |
125 } | |
126 | |
127 static void free_playlist(playlist_t *playlist) | |
128 { | |
129 if(playlist->tracks) playlist->clear_playlist(playlist); | |
130 free(playlist); | |
131 } | |
132 | |
133 static void dump_playlist(playlist_t *playlist) | |
134 { | |
135 int i; | |
136 for (i=0; i<playlist->trackcount; i++) | |
137 { | |
138 mp_msg(MSGT_GPLAYER, MSGL_V, "track %i %s ", i + 1, playlist->tracks[i]->filename); | |
139 if(playlist->tracks[i]->artist) mp_msg(MSGT_GPLAYER, MSGL_V, "%s ", playlist->tracks[i]->artist); | |
140 if(playlist->tracks[i]->title) mp_msg(MSGT_GPLAYER, MSGL_V, "- %s ", playlist->tracks[i]->title); | |
141 if(playlist->tracks[i]->duration) mp_msg(MSGT_GPLAYER, MSGL_V, "%i ", playlist->tracks[i]->duration); | |
142 mp_msg(MSGT_GPLAYER, MSGL_V, "\n"); | |
143 } | |
144 } | |
145 | |
146 playlist_t *create_playlist(void) | |
147 { | |
148 playlist_t *playlist = calloc(1, sizeof(playlist_t)); | |
149 playlist->add_track = add_track; | |
150 playlist->remove_track = remove_track; | |
151 playlist->moveup_track = moveup_track; | |
152 playlist->movedown_track = movedown_track; | |
153 playlist->dump_playlist = dump_playlist; | |
154 playlist->sort_playlist = sort_playlist; | |
155 playlist->clear_playlist = clear_playlist; | |
156 playlist->free_playlist = free_playlist; | |
157 return playlist; | |
158 } |