bkmrq 0.0.6 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
-
" \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
|