class YtDownloader::Parser::Chrome

Constants

LINUX_OS
MAC_OSX

Public Class Methods

call(bookmark_tabs, bookmark_path) click to toggle source

@param [Array] bookmark_tabs @param [String] bookmark_path

# File lib/yt_downloader/parser/chrome.rb, line 15
def self.call(bookmark_tabs, bookmark_path)
  bookmark_path ||= bookmark_json_path
  bookmark_json = JSON.parse(File.read(bookmark_path), { symbolize_names: true })
  bookmarks = bookmark_json.dig(:roots, :bookmark_bar, :children)

  extract_urls(bookmarks, bookmark_tabs)
end

Private Class Methods

aggregate_bookmarks(bookmark) click to toggle source

@param [Hash] bookmark @return [Array]

# File lib/yt_downloader/parser/chrome.rb, line 55
def self.aggregate_bookmarks(bookmark)
  return [] if bookmark[:children].nil?

  bookmark[:children].map { |b| Bookmark.new(*(b.values_at(:url, :name) << bookmark[:name])) }
end
bookmark_json_path() click to toggle source

@return [String]

# File lib/yt_downloader/parser/chrome.rb, line 42
def self.bookmark_json_path
  case os
  when LINUX_OS
    "/home/#{whoami}/.config/google-chrome/Default/Bookmarks"
  when MAC_OSX
    "/Users/#{whoami}/Library/Application Support/Google/Chrome/Default/Bookmarks"
  else
    raise "Unsupported #{os} os!"
  end
end
extract_urls(bookmarks, tabs) click to toggle source

@param [Array] bookmarks @param [Array] tabs

# File lib/yt_downloader/parser/chrome.rb, line 27
def self.extract_urls(bookmarks, tabs)
  bookmarks.inject([]) do |acc, bookmark|
    if tabs.empty?
      acc.concat(aggregate_bookmarks(bookmark))
    else
      tabs.each do |tab|
        acc.concat(aggregate_bookmarks(bookmark)) if bookmark[:name] == tab
      end
    end

    acc
  end
end
os() click to toggle source

NOTE: Stub methods for testing

@return [String]

# File lib/yt_downloader/parser/chrome.rb, line 65
def self.os
  `echo $(uname -s)`.strip
end
whoami() click to toggle source

@return [String]

# File lib/yt_downloader/parser/chrome.rb, line 70
def self.whoami
  `whoami`.strip
end