コード例 #1
0
 /**
  * Save new tracks to db.
  */
 private function syncUpdate($request, $service, $all_music)
 {
     foreach ($all_music as $playlist_name => $tracks) {
         // Get playlist.
         $playlist = Playlist::getPlaylist($playlist_name, ucfirst($service->name));
         // If playlist not in DB - add.
         if (empty($playlist)) {
             $playlist = Auth::user()->playlists()->create(['name' => $playlist_name, 'service_id' => $service->id]);
         }
         // Get list of existing songs in db.
         $song_identifier_in_db = $this->extractPlaylistSongIds($playlist);
         foreach ($tracks as $track) {
             // If song already in db, skip and remove from array of existing ids.
             if (isset($song_identifier_in_db[$track->id])) {
                 unset($song_identifier_in_db[$track->id]);
                 continue;
             }
             // Create new song.
             $playlist->songs()->firstOrCreate(['title' => $track->title, 'song_identifier' => $track->id, 'image' => $track->artwork_url, 'url' => $track->permalink_url, 'song_created' => $track->created_at, 'service_id' => $service->id]);
         }
         // Check if any songs left in songs list from db. If so, remove thos songs from db.
         if (!empty($song_identifier_in_db)) {
             $song_identifier_in_db = collect($song_identifier_in_db);
             $ids = $song_identifier_in_db->keyBy('id')->keys();
             Song::destroy($ids);
         }
     }
     // Delete deleted playlists including songs.
     Playlist::deletePlaylist(array_keys($all_music), $service->id);
 }