Completed
Push — playlist-again ( 961e0e...eca75f )
by Pauli
11:05
created

PlaylistBusinessLayer::moveTrack()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 9
rs 9.6666
cc 1
eloc 8
nc 1
nop 4
1
<?php
2
3
/**
4
 * ownCloud - Music app
5
 *
6
 * This file is licensed under the Affero General Public License version 3 or
7
 * later. See the COPYING file.
8
 *
9
 * @author Pauli Järvinen <[email protected]>
10
 * @copyright Pauli Järvinen 2016
11
 */
12
13
namespace OCA\Music\BusinessLayer;
14
15
use \OCA\Music\AppFramework\BusinessLayer\BusinessLayer;
16
use \OCA\Music\AppFramework\BusinessLayer\BusinessLayerException;
17
use \OCA\Music\AppFramework\Core\Logger;
18
use \OCP\AppFramework\Db\DoesNotExistException;
19
use \OCP\AppFramework\Db\MultipleObjectsReturnedException;
20
21
22
use \OCA\Music\Db\PlaylistMapper;
23
use \OCA\Music\Db\Playlist;
24
25
class PlaylistBusinessLayer extends BusinessLayer {
26
27
	private $logger;
28
29
	public function __construct(PlaylistMapper $playlistMapper, Logger $logger) {
30
		parent::__construct($playlistMapper);
31
		$this->logger = $logger;
32
	}
33
34
	/**
35
	 * Return a playlist
36
	 * @param int $playlistId the id of the playlist
37
	 * @param string $userId the name of the user
38
	 * @return Playlist playlist
39
	 */
40
	public function find($playlistId, $userId) {
41
		return $this->mapper->find($playlistId, $userId);
42
	}
43
44
	/**
45
	 * Returns all playlists
46
	 * @param string $userId the name of the user
47
	 * @return Playlist[] playlists
48
	 */
49
	public function findAll($userId) {
50
		return $this->mapper->findAll($userId);
51
	}
52
53
	public function addTracks($trackIds, $playlistId, $userId) {
54
		$playlist = $this->find($playlistId, $userId);
55
		$prevTrackIds = $playlist->getTrackIdsAsArray();
56
		$playlist->setTrackIdsFromArray(array_merge($prevTrackIds, $trackIds));
57
		$this->mapper->update($playlist);
58
		return $playlist;
59
	}
60
61
	public function removeTracks($trackIndices, $playlistId, $userId) {
62
		$playlist = $this->find($playlistId, $userId);
63
		$trackIds = $playlist->getTrackIdsAsArray();
64
		$trackIds = array_diff_key($trackIds, array_flip($trackIndices));
65
		$playlist->setTrackIdsFromArray($trackIds);
66
		$this->mapper->update($playlist);
67
		return $playlist;
68
	}
69
70
	public function moveTrack($fromIndex, $toIndex, $playlistId, $userId) {
71
		$playlist = $this->find($playlistId, $userId);
72
		$trackIds = $playlist->getTrackIdsAsArray();
73
		$movedTrack = array_splice($trackIds, $fromIndex, 1);
74
		array_splice($trackIds, $toIndex, 0, $movedTrack);
75
		$playlist->setTrackIdsFromArray($trackIds);
76
		$this->mapper->update($playlist);
77
		return $playlist;
78
	}
79
80
	public function create($name, $userId) {
81
		$playlist = new Playlist();
82
		$playlist->setName($name);
83
		$playlist->setUserId($userId);
84
85
		return $this->mapper->insert($playlist);
86
	}
87
88
	public function rename($name, $playlistId, $userId) {
89
		$playlist = $this->find($playlistId, $userId);
90
		$playlist->setName($name);
91
		$this->mapper->update($playlist);
92
		return $playlist;
93
	}
94
95
	/**
96
	 * removes tracks from all available playlists
97
	 * @param int[] $trackIds array of all track IDs to remove
98
	 */
99
	public function removeTracksFromAllLists($trackIds) {
100
		foreach ($trackIds as $trackId) {
101
			$affectedLists = $this->mapper->findListsContainingTrack($trackId);
102
103
			foreach ($affectedLists as $playlist) {
104
				$prevTrackIds = $playlist->getTrackIdsAsArray();
105
				$playlist->setTrackIdsFromArray(array_diff($prevTrackIds, [$trackId]));
106
				$this->mapper->update($playlist);
107
			}
108
		}
109
	}
110
}
111