Sha256: 749b66028effab60c3a2afd3f99e0e28c4960d8d9ba99d2daaa68caf966793fd

Contents?: true

Size: 1.17 KB

Versions: 3

Compression:

Stored size: 1.17 KB

Contents

module MBidle
  class Sync
    class << self
      def queue
        @queue ||= begin
                     queue = UniqueQueue.new
                     queue.pop(&method(:run))
                     queue
                   end
      end

      def run(account_name)
        command = "#{MBSYNC_COMMAND} #{account_name}"
        Log.debug "Run #{command}"
        EM::SystemCommand.execute(command) do |on|
          on.failure(&method(:failed))
          on.success(&method(:succeeded))
        end
      end

      def failed(process)
        Log.warn "#{process.command} failed with status #{process.status.exitstatus}"
        Log.warn process.stderr.output
        @queue.pop(&method(:run))
      end

      def succeeded(process)
        Log.debug "#{process.command} finished."
        @queue.pop(&method(:run))
        after_sync_callbacks.each(&:call)
      end

      def schedule(*accounts)
        names = accounts.compact.map(&:name).uniq
        return if names.empty?

        queue.push(*names)
      end

      def after_sync_callbacks
        @aftersync_callbacks ||= []
      end

      def after_sync(&block)
        after_sync_callbacks << block
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
mbidle-1.1.1 lib/mbidle/sync.rb
mbidle-1.1.0 lib/mbidle/sync.rb
mbidle-1.0.1 lib/mbidle/sync.rb