MPD
song.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2003-2010 The Music Player Daemon Project
3  * http://www.musicpd.org
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19 
20 #ifndef MPD_SONG_H
21 #define MPD_SONG_H
22 
23 #include <stddef.h>
24 #include <stdbool.h>
25 #include <sys/time.h>
26 
27 #define SONG_FILE "file: "
28 #define SONG_TIME "Time: "
29 
30 struct song {
31  struct tag *tag;
32  struct directory *parent;
33  time_t mtime;
34 
38  unsigned start_ms;
39 
44  unsigned end_ms;
45 
46  char uri[sizeof(int)];
47 };
48 
50 struct song *
51 song_remote_new(const char *uri);
52 
54 struct song *
55 song_file_new(const char *path, struct directory *parent);
56 
62 struct song *
63 song_file_load(const char *path, struct directory *parent);
64 
65 void
66 song_free(struct song *song);
67 
68 bool
69 song_file_update(struct song *song);
70 
71 bool
73 
81 char *
82 song_get_uri(const struct song *song);
83 
84 double
85 song_get_duration(const struct song *song);
86 
87 static inline bool
88 song_in_database(const struct song *song)
89 {
90  return song->parent != NULL;
91 }
92 
93 static inline bool
94 song_is_file(const struct song *song)
95 {
96  return song_in_database(song) || song->uri[0] == '/';
97 }
98 
99 #endif