bkmrq 0.0.6 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +13 -0
- data/Gemfile.lock +70 -0
- data/LICENSE +21 -0
- data/README.md +74 -0
- data/bin/bkmrq +4 -3
- data/bkmrq.gemspec +28 -0
- data/lib/bkmrq/application.rb +27 -0
- data/lib/bkmrq/bookmark.rb +35 -0
- data/lib/bkmrq/cli/app.rb +17 -0
- data/lib/bkmrq/cli/arg_parser.rb +90 -0
- data/lib/bkmrq/codegen/html_generator.rb +26 -0
- data/lib/bkmrq/codegen/markdown_generator.rb +78 -0
- data/lib/bkmrq/error.rb +8 -0
- data/lib/bkmrq/extractors/brave.rb +29 -0
- data/lib/bkmrq/extractors/chrome.rb +29 -0
- data/lib/bkmrq/extractors/chromium.rb +30 -0
- data/lib/bkmrq/extractors/error.rb +13 -0
- data/lib/bkmrq/extractors/extractors.rb +21 -0
- data/lib/bkmrq/extractors/firefox.rb +29 -0
- data/lib/bkmrq/extractors/opera.rb +29 -0
- data/lib/bkmrq/extractors/safari.rb +24 -0
- data/lib/bkmrq/filter.rb +14 -0
- data/lib/bkmrq/formatters/assets.rb +11 -0
- data/lib/bkmrq/formatters/csv.rb +12 -0
- data/lib/bkmrq/formatters/formatters.rb +18 -0
- data/lib/bkmrq/formatters/html.rb +43 -0
- data/lib/bkmrq/formatters/json.rb +28 -0
- data/lib/bkmrq/formatters/markdown.rb +50 -0
- data/lib/bkmrq/parsers/brave.rb +52 -0
- data/lib/bkmrq/parsers/chrome.rb +52 -0
- data/lib/bkmrq/parsers/chromium.rb +52 -0
- data/lib/bkmrq/parsers/error.rb +13 -0
- data/lib/bkmrq/parsers/firefox.rb +19 -0
- data/lib/bkmrq/parsers/opera.rb +19 -0
- data/lib/bkmrq/parsers/parsers.rb +22 -0
- data/lib/bkmrq/parsers/safari.rb +19 -0
- data/lib/bkmrq/ui.rb +39 -0
- data/lib/bkmrq/writer.rb +12 -0
- data/lib/bkmrq.rb +7 -5
- metadata +76 -13
- data/lib/bkmrq/app.rb +0 -83
- data/lib/bkmrq/browser_config.rb +0 -24
- data/lib/bkmrq/cli.rb +0 -52
- data/lib/bkmrq/docs_template.rb +0 -31
- data/lib/bkmrq/manual.rb +0 -65
data/lib/bkmrq/app.rb
DELETED
@@ -1,83 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'json'
|
4
|
-
require 'fileutils'
|
5
|
-
require 'bkmrq/docs_template'
|
6
|
-
require 'bkmrq/browser_config'
|
7
|
-
|
8
|
-
module Bkmrq
|
9
|
-
# Bookmarks Document Generator
|
10
|
-
class App
|
11
|
-
BLOCKLIST = ENV.fetch('BKMRQ_BLOCKLIST', '(pdf|google|file:)').split(',').map(&:strip)
|
12
|
-
|
13
|
-
def initialize(browser: nil, input_file: nil, output_path: nil, edit: false)
|
14
|
-
@bookmarks_input = input_file || Bkmrq::BROWSER_CONFIG.dig(browser, :bookmark_file_path)
|
15
|
-
@output_path = output_path || FileUtils.pwd
|
16
|
-
end
|
17
|
-
|
18
|
-
def export!
|
19
|
-
write_template
|
20
|
-
export(bookmarks['bookmark_bar'])
|
21
|
-
export(bookmarks['other'])
|
22
|
-
export(bookmarks['synced'])
|
23
|
-
output_file.close
|
24
|
-
end
|
25
|
-
|
26
|
-
private
|
27
|
-
|
28
|
-
def output_file
|
29
|
-
@output_file ||= ::File.open(
|
30
|
-
File.join(@output_path, "bkmrq_export_#{String(Integer(Time.now))[0..-2]}.md"),
|
31
|
-
'w+'
|
32
|
-
)
|
33
|
-
end
|
34
|
-
|
35
|
-
def bookmarks
|
36
|
-
@bookmarks ||= ::File.open(@bookmarks_input, 'r') do |file|
|
37
|
-
JSON.parse(file.read)['roots']
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def write_template
|
42
|
-
%i[title subtitle header_image description]
|
43
|
-
.map(&Bkmrq::DocsTemplate.method(:public_send))
|
44
|
-
.map(&output_file.method(:write))
|
45
|
-
end
|
46
|
-
|
47
|
-
def export(marqs = bookmarks, level = 1)
|
48
|
-
return if skip_export?(marqs)
|
49
|
-
|
50
|
-
output_file.write(generate_formatted_entity(marqs, level))
|
51
|
-
marqs.fetch('children', []).empty? ||
|
52
|
-
marqs['children'].map { |child| export(child, level + 1) }
|
53
|
-
end
|
54
|
-
|
55
|
-
def skip_export?(bookmark_section)
|
56
|
-
[bookmark_section['name'], bookmark_section['name']].any? do |meta|
|
57
|
-
BLOCKLIST.any? { |pattern| !meta&.match(pattern).nil? }
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def generate_formatted_entity(bookmark, level)
|
62
|
-
if bookmark['url'].nil?
|
63
|
-
generate_bookmark_title(bookmark, level)
|
64
|
-
else
|
65
|
-
generate_bookmark_link(bookmark, level)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
def generate_bookmark_title(bookmark, level)
|
70
|
-
[
|
71
|
-
'#' * level,
|
72
|
-
"#{bookmark['name']}\n"
|
73
|
-
].join(' ')
|
74
|
-
end
|
75
|
-
|
76
|
-
def generate_bookmark_link(bookmark, level)
|
77
|
-
[
|
78
|
-
' ' * (level % 2),
|
79
|
-
"[#{bookmark['name']}](#{bookmark['url']}) \n"
|
80
|
-
].join(' ')
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
data/lib/bkmrq/browser_config.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# Bkmrq
|
4
|
-
module Bkmrq
|
5
|
-
USER_HOME = ENV.fetch('HOME', ::File.join('home', ENV['USER']))
|
6
|
-
|
7
|
-
BRAVE_BROWSER_CONFIG = {
|
8
|
-
bookmark_file_path: File.join(
|
9
|
-
USER_HOME, '.config', 'BraveSoftware', 'Brave-Browser', 'Default', 'Bookmarks'
|
10
|
-
),
|
11
|
-
root: 'roots'
|
12
|
-
}.freeze
|
13
|
-
|
14
|
-
CHROME_BROWSER_CONFIG = {
|
15
|
-
bookmark_file_path: File.join(USER_HOME, '.config', 'chromium', 'Default', 'Bookmarks'),
|
16
|
-
root: 'roots'
|
17
|
-
}.freeze
|
18
|
-
|
19
|
-
BROWSER_CONFIG = {
|
20
|
-
'brave' => BRAVE_BROWSER_CONFIG,
|
21
|
-
'chrome' => CHROME_BROWSER_CONFIG,
|
22
|
-
'chromium' => CHROME_BROWSER_CONFIG
|
23
|
-
}.freeze
|
24
|
-
end
|
data/lib/bkmrq/cli.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
# frozen_string_literal: true
|
4
|
-
|
5
|
-
require 'optparse'
|
6
|
-
require 'bkmrq/app'
|
7
|
-
require 'bkmrq/manual'
|
8
|
-
|
9
|
-
module Bkmrq
|
10
|
-
# Cli
|
11
|
-
class Cli
|
12
|
-
def initialize(args)
|
13
|
-
@opts = {}
|
14
|
-
option_parser.parse!(default_args(sanitize_args(args)), into: @opts)
|
15
|
-
init_app if opts_valid?
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
|
20
|
-
def init_app
|
21
|
-
Bkmrq::App.new(
|
22
|
-
**@opts.slice(*Bkmrq::Manual.options_specs.map(&:last))
|
23
|
-
).export!
|
24
|
-
end
|
25
|
-
|
26
|
-
def option_parser
|
27
|
-
@option_parser ||= OptionParser.new do |args|
|
28
|
-
# Option Parsing
|
29
|
-
Bkmrq::Manual.options_specs.map do |option_spec|
|
30
|
-
option_key = option_spec.pop
|
31
|
-
args.on(*option_spec) { |input| @opts[option_key] = input }
|
32
|
-
end
|
33
|
-
|
34
|
-
# Manual Printing
|
35
|
-
args.banner = Bkmrq::Manual::BANNER
|
36
|
-
args.on_tail('-H', '--help', 'Bkmrq Manual') { puts args }
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def sanitize_args(args)
|
41
|
-
args.reject(&:empty?).map(&:scrub).map(&:split).flatten
|
42
|
-
end
|
43
|
-
|
44
|
-
def default_args(args)
|
45
|
-
args.empty? ? ['-H'] : args
|
46
|
-
end
|
47
|
-
|
48
|
-
def opts_valid?
|
49
|
-
!@opts.key?(:help)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
data/lib/bkmrq/docs_template.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Bkmrq
|
4
|
-
# document output template
|
5
|
-
class DocsTemplate
|
6
|
-
FORMAT = {
|
7
|
-
title: "#{ENV['USER']}'s Web Browser Bookmarks",
|
8
|
-
subtitle: 'Bookmarks Exported Using Bkmrq',
|
9
|
-
header_image: 'https://user-images.githubusercontent.com/36154121/137836028-8dfe3001-4626-47a0-880f-d3dc7b719e27.jpeg',
|
10
|
-
description: <<-MD
|
11
|
-
This file was auto generated using the [bkmrq](https://github.com/sreedevk/bkmrq) gem.
|
12
|
-
MD
|
13
|
-
}.freeze
|
14
|
-
|
15
|
-
def self.title
|
16
|
-
"# #{FORMAT[:title]} \n"
|
17
|
-
end
|
18
|
-
|
19
|
-
def self.subtitle
|
20
|
-
"## #{FORMAT[:subtitle]} \n"
|
21
|
-
end
|
22
|
-
|
23
|
-
def self.header_image
|
24
|
-
"![](#{FORMAT[:header_image]}) \n"
|
25
|
-
end
|
26
|
-
|
27
|
-
def self.description
|
28
|
-
FORMAT[:description]
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
data/lib/bkmrq/manual.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# Bookmarks Manual
|
4
|
-
module Bkmrq
|
5
|
-
# Package Manual
|
6
|
-
class Manual
|
7
|
-
BANNER = <<-MAN
|
8
|
-
Bkmrq - Export your bookmarks to markdown
|
9
|
-
|
10
|
-
# Supported Browsers
|
11
|
-
- brave
|
12
|
-
- chromium
|
13
|
-
MAN
|
14
|
-
|
15
|
-
def self.options_specs
|
16
|
-
[
|
17
|
-
browser_opt_specs,
|
18
|
-
input_file_opt_specs,
|
19
|
-
output_file_opt_specs,
|
20
|
-
edit_opt_specs
|
21
|
-
]
|
22
|
-
end
|
23
|
-
|
24
|
-
def self.browser_opt_specs
|
25
|
-
[
|
26
|
-
'-B BROWSER',
|
27
|
-
'--browser BROWSER',
|
28
|
-
String,
|
29
|
-
'Browser (Loads Default Configs)',
|
30
|
-
:browser
|
31
|
-
]
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.input_file_opt_specs
|
35
|
-
[
|
36
|
-
'-F FILE',
|
37
|
-
'--input-file FILE',
|
38
|
-
String,
|
39
|
-
'Bookmarks file generated by your browser. (JSON FORMAT ONLY)',
|
40
|
-
:input_file
|
41
|
-
]
|
42
|
-
end
|
43
|
-
|
44
|
-
def self.output_file_opt_specs
|
45
|
-
[
|
46
|
-
'-O FILE',
|
47
|
-
'--output-file FILE',
|
48
|
-
String,
|
49
|
-
'Filepath for markdown generated by Bkmrq',
|
50
|
-
:output_path
|
51
|
-
]
|
52
|
-
end
|
53
|
-
|
54
|
-
def self.edit_opt_specs
|
55
|
-
[
|
56
|
-
'-E',
|
57
|
-
'--edit',
|
58
|
-
'Load Generated Markdown in $EDITOR (will not persist generated output)',
|
59
|
-
:edit
|
60
|
-
]
|
61
|
-
end
|
62
|
-
|
63
|
-
private_class_method :browser_opt_specs, :input_file_opt_specs, :output_file_opt_specs, :edit_opt_specs
|
64
|
-
end
|
65
|
-
end
|