lib/datapimp/sync/dropbox_folder.rb in datapimp-1.0.5 vs lib/datapimp/sync/dropbox_folder.rb in datapimp-1.0.6

- old
+ new

@@ -1,37 +1,71 @@ module Datapimp class Sync::DropboxFolder < Hashie::Mash + # Provides easy access to the Dropbox client def dropbox @dropbox ||= Datapimp::Sync.dropbox end + # Provides access to the Dropbox API Delta which will tell us + # how to modify the state of `local_path` to match what exists + # on Dropbox. def delta @delta ||= dropbox.delta(cursor, remote_path) end + # A Pointer to the local path we will be syncing with the Dropbox remote def local_path Pathname(local) end - def remote_path - Datapimp::Sync.dropbox.ls(remote) - end - + # The Dropbox Delta API uses a cursor to keep track of the last state + # the local filesystem has synced with. We store this in the syncable folder + # itself def cursor cursor_path.exist? && cursor_path.read end def cursor_path local_path.join('.dropbox-cursor') end - def run(action) + def remote_path + dropbox.ls(remote) + rescue(Dropbox::API::Error::NotFound) + nil + end + + def remote_path_parent + parent, _ = File.split(remote) + dropbox.ls(parent) + rescue(Dropbox::API::Error::NotFound) + nil + end + + def remote_path_missing? + remote_path.nil? + end + + def run(action, options={}) action = action.to_sym if action == :push + if remote_path_missing? + dropbox.mkdir(remote) + end - elsif action == :pull + Dir[local_path.join("**/*")].each do |f| + # Upload the file + binding.pry + end + elsif action == :pull + # TODO + # Implement the Delta call end end + + def ensure_remote_folder_exists + end end end +