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>
7 * This file is part of MPlayer.
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.
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.
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
30 /* TODO: implement sort_playlist */
32 BOOL
adddirtoplaylist(playlist_t
*playlist
, const char *path
, BOOL recursive
)
34 HANDLE findHandle
= INVALID_HANDLE_VALUE
;
35 WIN32_FIND_DATA finddata
;
36 char findpath
[MAX_PATH
], filename
[MAX_PATH
];
39 sprintf(findpath
, "%s\\*.*", path
);
41 findHandle
= FindFirstFile(findpath
, &finddata
);
43 if (findHandle
== INVALID_HANDLE_VALUE
) return FALSE
;
46 if (finddata
.cFileName
[0] == '.' || strstr(finddata
.cFileName
, "Thumbs.db")) continue;
47 sprintf(findpath
, "%s\\%s", path
, finddata
.cFileName
);
49 if (GetFileAttributes(findpath
) & FILE_ATTRIBUTE_DIRECTORY
)
52 adddirtoplaylist(playlist
, findpath
, recursive
);
56 if (GetFullPathName(findpath
, MAX_PATH
, filename
, &filepart
))
57 playlist
->add_track(playlist
, filename
, NULL
, filepart
, 0);
59 } while (FindNextFile(findHandle
, &finddata
));
60 FindClose(findHandle
);
64 static void add_track(playlist_t
*playlist
, const char *filename
, const char *artist
, const char *title
, int duration
)
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
;
75 static void remove_track(playlist_t
*playlist
, int number
)
77 pl_track_t
**tmp
= calloc(1, playlist
->trackcount
* sizeof(pl_track_t
*));
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
++)
86 playlist
->tracks
[p
] = tmp
[i
];
91 if(tmp
[i
]->filename
) free(tmp
[i
]->filename
);
92 if(tmp
[i
]->artist
) free(tmp
[i
]->artist
);
93 if(tmp
[i
]->title
) free(tmp
[i
]->title
);
100 static void moveup_track(playlist_t
*playlist
, int number
)
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
;
109 static void movedown_track(playlist_t
*playlist
, int number
)
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
;
118 static void sort_playlist(playlist_t
*playlist
, int opt
) {}
120 static void clear_playlist(playlist_t
*playlist
)
122 while(playlist
->trackcount
) playlist
->remove_track(playlist
, 1);
123 playlist
->tracks
= NULL
;
124 playlist
->current
= 0;
127 static void free_playlist(playlist_t
*playlist
)
129 if(playlist
->tracks
) playlist
->clear_playlist(playlist
);
133 static void dump_playlist(playlist_t
*playlist
)
136 for (i
=0; i
<playlist
->trackcount
; i
++)
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");
146 playlist_t
*create_playlist(void)
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
;