krasnoukhov/gospotify

View on GitHub
app/workers/syncer.rb

Summary

Maintainability
A
0 mins
Test Coverage
class Syncer
  include Sidekiq::Worker
  include Sidekiq::Status::Worker

  sidekiq_options retry: 10

  def perform(playlist_id)
    playlist = PlaylistRepository.find(playlist_id)
    client = playlist.auth.client
    spotify = playlist.user.auth_for(:spotify).client
    tracks = client.tracks(playlist)

    spotify_playlist = spotify.ensure_playlist(playlist)
    playlist.spotify_id = spotify_playlist["id"]
    PlaylistRepository.update(playlist)

    total(tracks.count)
    tracks.reverse.each_with_index do |track, idx|
      at(idx)
      spotify.ensure_track(spotify_playlist, track)
    end

    playlist.job_id = nil
    playlist.synced_at = Time.new
    PlaylistRepository.update(playlist)
  ensure
    spotify.cleanup if defined?(spotify)
  end
end