Sha256: ba287eacb7ecec849c7b18e0d298695de66c7a59b625b8bb743b53874d04a0ba

Contents?: true

Size: 1.57 KB

Versions: 1

Compression:

Stored size: 1.57 KB

Contents

module Memot
  class Client
    def initialize(dropbox, evernote, logger)
      @dropbox = dropbox
      @evernote = evernote
      @logger = logger
    end

    def update(notes)
      logger.info("Updating...")

      need_update = []

      notes.each_pair do |notebook, dropbox_path|
        need_update << { notebook: notebook, updates: dropbox.parse_dir_tree!(dropbox_path) }
      end

      need_update.each do |update|
        notebook = update[:notebook].to_s
        update[:updates].each { |u| save_to_evernote(u[:dropbox_path], notebook, u[:revision]) }
      end

      logger.info("Finish")
    end

    def save_to_evernote(dropbox_path, notebook, revision)
      note_body = Memot::Markdown.parse_markdown(dropbox.file_body_of(dropbox_path))
      note_title = File.basename(dropbox_path)

      begin
        if (note_guid = evernote.get_note_guid(note_title, notebook)) == ""
          evernote.create_note(note_title, note_body, notebook)
          logger.info "Created: #{notebook}/#{note_title} (rev. #{revision})"
        else
          evernote.update_note(note_title, note_body, notebook, note_guid)
          logger.info "Updated: #{notebook}/#{note_title} (rev. #{revision})"
        end

      rescue Memot::EvernoteRateLimitReachedError => e
        sleep_interval = e.message.to_i + 60
        logger.warn "Evernote rate limit exceeded, retry after #{sleep_interval} seconds."
        sleep sleep_interval
        retry
      end
    end

    private

    def dropbox
      @dropbox
    end

    def evernote
      @evernote
    end

    def logger
      @logger
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
memot-0.1.0 lib/memot/client.rb