@@ -283,55 +283,81 @@ public static async Task<bool> SyncPlaylistOutputNode(PlaylistOutputNode playlis
283
283
if ( playlistOutputNode . GeneratedPlaylistId == null )
284
284
{
285
285
// create playlist
286
- var request = new PlaylistCreateRequest ( playlistOutputNode . PlaylistName )
286
+ try
287
287
{
288
- Description = "Automatically generated playlist by \" Song Tagger for Spotify\" (https://github.com/BenediktAlkin/SpotifySongTagger)"
289
- } ;
290
- var createdPlaylist = await Spotify . Playlists . Create ( DataContainer . Instance . User . Id , request ) ;
288
+ var request = new PlaylistCreateRequest ( playlistOutputNode . PlaylistName )
289
+ {
290
+ Description = "Automatically generated playlist by \" Song Tagger for Spotify\" (https://github.com/BenediktAlkin/SpotifySongTagger)"
291
+ } ;
292
+ var createdPlaylist = await Spotify . Playlists . Create ( DataContainer . Instance . User . Id , request ) ;
291
293
292
- if ( DatabaseOperations . EditPlaylistOutputNodeGeneratedPlaylistId ( playlistOutputNode , createdPlaylist . Id ) )
293
- playlistOutputNode . GeneratedPlaylistId = createdPlaylist . Id ;
294
+ if ( DatabaseOperations . EditPlaylistOutputNodeGeneratedPlaylistId ( playlistOutputNode , createdPlaylist . Id ) )
295
+ playlistOutputNode . GeneratedPlaylistId = createdPlaylist . Id ;
296
+ }
297
+ catch ( Exception e )
298
+ {
299
+ Logger . Error ( $ "Failed to create playlist{ Environment . NewLine } { e . Message } ") ;
300
+ return false ;
301
+ }
302
+
294
303
}
295
304
else
296
305
{
297
- var playlistDetails = await Spotify . Playlists . Get ( playlistOutputNode . GeneratedPlaylistId ) ;
298
- // like playlist if it was unliked
299
- var followCheckReq = new FollowCheckPlaylistRequest ( new List < string > { DataContainer . Instance . User . Id } ) ;
300
- if ( ! ( await Spotify . Follow . CheckPlaylist ( playlistOutputNode . GeneratedPlaylistId , followCheckReq ) ) . First ( ) )
301
- await Spotify . Follow . FollowPlaylist ( playlistOutputNode . GeneratedPlaylistId ) ;
302
-
303
- // rename spotify playlist if name changed
304
- if ( playlistDetails . Name != playlistOutputNode . PlaylistName )
306
+ try
305
307
{
306
- var changeNameReq = new PlaylistChangeDetailsRequest { Name = playlistOutputNode . PlaylistName } ;
307
- await Spotify . Playlists . ChangeDetails ( playlistOutputNode . GeneratedPlaylistId , changeNameReq ) ;
308
- }
308
+ var playlistDetails = await Spotify . Playlists . Get ( playlistOutputNode . GeneratedPlaylistId ) ;
309
+ // like playlist if it was unliked
310
+ var followCheckReq = new FollowCheckPlaylistRequest ( new List < string > { DataContainer . Instance . User . Id } ) ;
311
+ if ( ! ( await Spotify . Follow . CheckPlaylist ( playlistOutputNode . GeneratedPlaylistId , followCheckReq ) ) . First ( ) )
312
+ await Spotify . Follow . FollowPlaylist ( playlistOutputNode . GeneratedPlaylistId ) ;
309
313
314
+ // rename spotify playlist if name changed
315
+ if ( playlistDetails . Name != playlistOutputNode . PlaylistName )
316
+ {
317
+ var changeNameReq = new PlaylistChangeDetailsRequest { Name = playlistOutputNode . PlaylistName } ;
318
+ await Spotify . Playlists . ChangeDetails ( playlistOutputNode . GeneratedPlaylistId , changeNameReq ) ;
319
+ }
310
320
311
- // remove everything
312
- if ( playlistDetails . Tracks . Total . Value > 0 )
313
- {
314
- var request = new PlaylistRemoveItemsRequest
321
+
322
+ // remove everything
323
+ if ( playlistDetails . Tracks . Total . Value > 0 )
315
324
{
316
- Positions = Enumerable . Range ( 0 , playlistDetails . Tracks . Total . Value ) . ToList ( ) ,
317
- SnapshotId = playlistDetails . SnapshotId ,
318
- } ;
319
- await Spotify . Playlists . RemoveItems ( playlistOutputNode . GeneratedPlaylistId , request ) ;
325
+ var request = new PlaylistRemoveItemsRequest
326
+ {
327
+ Positions = Enumerable . Range ( 0 , playlistDetails . Tracks . Total . Value ) . ToList ( ) ,
328
+ SnapshotId = playlistDetails . SnapshotId ,
329
+ } ;
330
+ await Spotify . Playlists . RemoveItems ( playlistOutputNode . GeneratedPlaylistId , request ) ;
331
+ }
332
+ }
333
+ catch ( Exception e )
334
+ {
335
+ Logger . Error ( $ "Failed to like/rename/remove_everything from playlist to generate{ Environment . NewLine } { e . Message } ") ;
336
+ return false ;
320
337
}
321
338
}
322
339
323
340
// sync with spotify
324
341
const int BATCH_SIZE = 100 ;
325
342
playlistOutputNode . CalculateOutputResult ( ) ;
326
343
var tracks = playlistOutputNode . OutputResult ;
327
- for ( var i = 0 ; i < tracks . Count ; i += BATCH_SIZE )
344
+ try
345
+ {
346
+ for ( var i = 0 ; i < tracks . Count ; i += BATCH_SIZE )
347
+ {
348
+ var request = new PlaylistAddItemsRequest (
349
+ Enumerable . Range ( 0 , Math . Min ( tracks . Count - i , BATCH_SIZE ) )
350
+ . Select ( j => $ "spotify:track:{ tracks [ i + j ] . Id } ")
351
+ . ToList ( ) ) ;
352
+ await Spotify . Playlists . AddItems ( playlistOutputNode . GeneratedPlaylistId , request ) ;
353
+ }
354
+ }
355
+ catch ( Exception e )
328
356
{
329
- var request = new PlaylistAddItemsRequest (
330
- Enumerable . Range ( 0 , Math . Min ( tracks . Count - i , BATCH_SIZE ) )
331
- . Select ( j => $ "spotify:track:{ tracks [ i + j ] . Id } ")
332
- . ToList ( ) ) ;
333
- await Spotify . Playlists . AddItems ( playlistOutputNode . GeneratedPlaylistId , request ) ;
357
+ Logger . Error ( $ "Failed to add track to playlist{ Environment . NewLine } { e . Message } ") ;
358
+ return false ;
334
359
}
360
+
335
361
Logger . Information ( $ "synchronized PlaylistOutputNode { playlistOutputNode . PlaylistName } to spotify") ;
336
362
return true ;
337
363
}
0 commit comments