* Parse a string in the form "START:END", both being (optional) * fractional non-negative time offsets in seconds. Returns both in * integer milliseconds. Omitted values are zero. */
| 150 | * integer milliseconds. Omitted values are zero. |
| 151 | */ |
| 152 | static bool |
| 153 | parse_time_range(const char *p, SongTime &start_r, SongTime &end_r) |
| 154 | { |
| 155 | char *endptr; |
| 156 | |
| 157 | const float start = ParseFloat(p, &endptr); |
| 158 | if (*endptr != ':' || start < 0) |
| 159 | return false; |
| 160 | |
| 161 | start_r = endptr > p |
| 162 | ? SongTime::FromS(start) |
| 163 | : SongTime::zero(); |
| 164 | |
| 165 | p = endptr + 1; |
| 166 | |
| 167 | const float end = ParseFloat(p, &endptr); |
| 168 | if (*endptr != 0 || end < 0) |
| 169 | return false; |
| 170 | |
| 171 | end_r = endptr > p |
| 172 | ? SongTime::FromS(end) |
| 173 | : SongTime::zero(); |
| 174 | |
| 175 | return end_r.IsZero() || end_r > start_r; |
| 176 | } |
| 177 | |
| 178 | CommandResult |
| 179 | handle_rangeid(Client &client, Request args, Response &r) |