lib/rubyfocus/fetchers/local_fetcher.rb in rubyfocus-0.5.15 vs lib/rubyfocus/fetchers/local_fetcher.rb in rubyfocus-0.5.16

- old
+ new

@@ -63,21 +63,74 @@ end #--------------------------------------- # Location file setters and getters - # Default (non app-store) file location + # Where do we expect OS X to store containers? + def container_location + @container_location ||= File.join(ENV["HOME"], "Library/Containers/") + end + + attr_writer :container_location + + # Default (non app-store) file location. Will look for "com.omnigroup.Omnifocus###" + # (where ### is a number) and pick the most recent. + # + # If it cannot find any directories matching this pattern, will return "" + # (empty string). Note that File.exists?("") returns `false`. def default_location - @default_location ||= File.join(ENV["HOME"], - "/Library/Containers/com.omnigroup.OmniFocus2", - "Data/Library/Application Support/OmniFocus/OmniFocus.ofocus") + if @default_location.nil? + omnifocus_directories = Dir[File.join(container_location, "com.omnigroup.OmniFocus*")] + + default_omnifocus_directories = omnifocus_directories.select{ |path| + File.basename(path) =~ /com\.omnigroup\.OmniFocus\d+$/ + } + + if (default_omnifocus_directories.size == 0) + # If none match the regexp, we return "" + @default_location = "" + else + # Otherwise, match highest + last_omnifocus_directory = default_omnifocus_directories.sort().last() + + @default_location = File.join( + last_omnifocus_directory, + "Data/Library/Application Support/OmniFocus/OmniFocus.ofocus" + ) + end + end + + return @default_location end - # Default app-store file location + # App store file location. Will look for "com.omnigroup.Omnifocus###.MacAppStore" + # (where ### is a number) and pick the most recent. + # + # If it cannot find any directories matching this pattern, will return "" + # (empty string). Note that File.exists?("") returns `false`. def appstore_location - @appstore_location ||= File.join(ENV["HOME"], - "/Library/Containers/com.omnigroup.OmniFocus2.MacAppStore", - "Data/Library/Application Support/OmniFocus/OmniFocus.ofocus") + if @appstore_location.nil? + omnifocus_directories = Dir[File.join(container_location, "com.omnigroup.OmniFocus*")] + + appstore_omnifocus_directories = omnifocus_directories.select{ |path| + File.basename(path) =~ /com\.omnigroup\.OmniFocus\d+\.MacAppStore$/ + } + + if (appstore_omnifocus_directories.size == 0) + # If none match the regexp, we return "" + @appstore_location = "" + else + # Otherwise, match highest + last_omnifocus_directory = appstore_omnifocus_directories.sort().last() + + @appstore_location = File.join( + last_omnifocus_directory, + "Data/Library/Application Support/OmniFocus/OmniFocus.ofocus" + ) + end + end + + return @appstore_location end # Determine location based on assigned and default values. Returns +nil+ # if no assigned location and default locations don't exist. def location \ No newline at end of file