|
3 | 3 | * Zookeeper Online
|
4 | 4 | *
|
5 | 5 | * @author Jim Mason <jmason@ibinx.com>
|
6 |
| - * @copyright Copyright (C) 1997-2024 Jim Mason <jmason@ibinx.com> |
| 6 | + * @copyright Copyright (C) 1997-2025 Jim Mason <jmason@ibinx.com> |
7 | 7 | * @link https://zookeeper.ibinx.com/
|
8 | 8 | * @license GPL-3.0
|
9 | 9 | *
|
@@ -200,6 +200,8 @@ public function insertPlaylist($user, $date, $time, $description, $airname, $aut
|
200 | 200 | }
|
201 | 201 |
|
202 | 202 | public function updatePlaylist($playlist, $date, $time, $description, $airname, $deleteTracksPastEnd=0) {
|
| 203 | + $this->adviseLock($playlist); |
| 204 | + |
203 | 205 | $query = "SELECT showdate, showtime FROM lists WHERE id = ?";
|
204 | 206 | $stmt = $this->prepare($query);
|
205 | 207 | $stmt->bindValue(1, $playlist);
|
@@ -275,6 +277,28 @@ public function updatePlaylist($playlist, $date, $time, $description, $airname,
|
275 | 277 | $stmt->bindValue(2, $seq);
|
276 | 278 | $stmt->execute();
|
277 | 279 | }
|
| 280 | + |
| 281 | + // delete tracks that preceed new time range |
| 282 | + $query = "SELECT id FROM tracks " . |
| 283 | + "WHERE list = ? AND created < ? " . |
| 284 | + "ORDER BY seq DESC, id DESC LIMIT 1"; |
| 285 | + $stmt = $this->prepare($query); |
| 286 | + $stmt->bindValue(1, $playlist); |
| 287 | + $stmt->bindValue(2, $fromStamp->format(self::TIME_FORMAT_SQL)); |
| 288 | + $start = $stmt->executeAndFetch(); |
| 289 | + if($start && ($seq = $this->getSeq($playlist, $start['id']))) { |
| 290 | + $query = "DELETE FROM tracks WHERE list = ? AND seq <= ?"; |
| 291 | + $stmt = $this->prepare($query); |
| 292 | + $stmt->bindValue(1, $playlist); |
| 293 | + $stmt->bindValue(2, $seq); |
| 294 | + $stmt->execute(); |
| 295 | + |
| 296 | + $query = "UPDATE tracks SET seq = seq - ? WHERE list = ?"; |
| 297 | + $stmt = $this->prepare($query); |
| 298 | + $stmt->bindValue(1, $seq); |
| 299 | + $stmt->bindValue(2, $playlist); |
| 300 | + $stmt->execute(); |
| 301 | + } |
278 | 302 | } else {
|
279 | 303 | // allow spin timestamps within the grace period
|
280 | 304 | $fromStamp->modify(self::GRACE_START);
|
@@ -308,7 +332,10 @@ public function updatePlaylist($playlist, $date, $time, $description, $airname,
|
308 | 332 | $stmt->bindValue(5, $playlist);
|
309 | 333 | } else
|
310 | 334 | $stmt->bindValue(4, $playlist);
|
311 |
| - return $stmt->execute(); |
| 335 | + $result = $stmt->execute(); |
| 336 | + |
| 337 | + $this->adviseUnlock($playlist); |
| 338 | + return $result; |
312 | 339 | }
|
313 | 340 |
|
314 | 341 | protected function slicePlaylist($playlist, $time) {
|
|
0 commit comments