module Granify
module Controller
class New < Controller::Base
attr_accessor :title, :file, :notebook
def pre_exec
begin
# interface with the Evernote API so we can use it later
@model = Granify::Helper.load('evernote')
# all methods require internet to make API calls
@methods_require_internet.push(:daily, :weekly, :monthly)
@title = "Evertils - Custom Note"
# command flag parser
OptionParser.new do |opt|
opt.banner = "#{Granify::PACKAGE_NAME} new note [...-flags]"
opt.on("-t", "--title=TITLE", "Set a custom title") do |title|
@title = title
end
opt.on("-f", "--file=PATH", "Attach a file to your custom note") do |file|
@file = file
end
opt.on("-n", "--notebook=PBOOK", "Choose the notebook to add your note to") do |notebook|
@notebook = notebook
end
opt.on("-b", "--body=BODY", "Note body") do |body|
@body = body
end
opt.on("-t", "--tags=list", "Assign tags to the new note") do |tags|
@tags = tags
end
opt.on("-c", "--created_on=DATE", "Set note created date") do |created_on|
# Evernote cuts the last 3 values off of your timestamp because
# it "accurate to milliseconds", so we have to add them back or
# else the date is all messed up
parsed = Date.parse(created_on)
@created_on = (parsed.to_time.to_i.to_s + "000").to_i
end
end.parse!
# user = @model.user
# Notify.success("Welcome, #{user.name} (#{user.username})")
rescue ::Evernote::EDAM::Error::EDAMSystemException => e
Notify.error("Evernote.authenticate error\n#{e.message} (#{e.errorCode})")
rescue ::Evernote::EDAM::Error::EDAMUserException => e
Notify.error("Evernote.authenticate error\n#{e.parameter} (#{e.errorCode})")
end
super
end
# Create a new Evernote note from data or terminal output
def note
if @body.nil?
message = JSON.parse(STDIN.gets.to_s).join
message = message.gsub!("\n", '
')
else
message = @body
end
note = @model.create_note(@title, message, @notebook, @file, false, @created_on)
if note[:note]
Notify.success("Note created")
else
Notify.error("Unable to create note, are you authenticated?")
end
end
# Create a new note and automatically share it
def share_note
if @body.nil?
message = JSON.parse(STDIN.gets).join
message = message.gsub!("\n", '
')
else
message = @body
end
# Prefix title to indicate it's shared status
@title = "[SHARED] #{@title}"
note = @model.create_note(@title, message, @notebook, @file, true, @created_on)
if note[:share_url]
Notify.success("Note created and shared:\n#{note[:share_url]}")
else
Notify.error("Something dreadful happened!")
end
end
end
end
end