joplin 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 74c549d0f51425533265897cf2432dc52bfa866ef89f91bfaeb8565939b6c0ff
4
- data.tar.gz: 46b1ee7c947603256778c0df08ba027d964d5451594374323a9a5dd2059f4afa
3
+ metadata.gz: 709555c1917e195e956c526a75979ea74deb8f3da829afe0f6d34ab7d074fad5
4
+ data.tar.gz: a09ac659f62def224a04adf7766d90231d8034335190dc99402d7b3715a763f3
5
5
  SHA512:
6
- metadata.gz: b1c2eefbb3fa1405d54395ab787c9bd69fda22d8f6f84cba0f7efe792f93b70c6a557d09b7059a525e301ef26233cd5dc2d0c0fa4835f400d5b809e06101da95
7
- data.tar.gz: 5367467b053246881bc9a4d539641765141984b77de421c7efa31d01509ffe6d7b30c94e2d9d5eabd8962cb5a4ef794dd7433674e20dd9fca4e5c142bf70804b
6
+ metadata.gz: a53a2aae8f8a7c073cbef92668097171a5038357ad8c16c045e01b4336b16b4369abef498ecb0961dfa14b8592be1b34c0998a4da37e3470e602e314d7f01f91
7
+ data.tar.gz: 50f3207ad27c7eaa968fa031b4bd3b052c8d58014701f2d64166b8594a753fa9422e03e7ecedb758bdce9f9e11a188e19e8a2046ee493ec0f57e08ee79618bc3
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- joplin (0.5.2)
4
+ joplin (1.0.1)
5
5
  http (~> 5.1.1)
6
6
  sqlite3 (~> 1.6.3)
7
7
  thor (~> 1.2.2)
data/bin/joplin CHANGED
@@ -4,6 +4,7 @@ $:.unshift File.expand_path('../lib', __dir__)
4
4
 
5
5
  require 'joplin'
6
6
  require 'thor'
7
+ require 'yaml'
7
8
 
8
9
  DIVIDER = %(
9
10
 
@@ -70,14 +71,34 @@ class MyCLI < Thor
70
71
  desc :epub,
71
72
  'build a note from a note (help build), write the note, and create an epub from the result. needs pandoc installed'
72
73
 
74
+ long_desc <<-DESC
75
+ If the building note has a yaml descriptor https://pandoc.org/MANUAL.html#epubs
76
+ then the epub will end up having the meta data.
77
+
78
+ Below is an example note. The for the referenced note are a result from using Joplin's webclipper on https://fiachetti.gitlab.io/mastering-roda/
79
+
80
+ ---\n
81
+ title: Mastering Roda\n
82
+ author: Federico Iachetti\n
83
+ rights: Creative Commons Attribution 4.0 International License\n
84
+ language: en-US\n
85
+ ...
86
+
87
+ [Mastering Roda](:/ca267a317fa544f99f559040696f1cae)
88
+ DESC
89
+
73
90
  def epub(id)
91
+ abort 'You need to install pandoc and have it in your path' unless has_exec? 'pandoc'
92
+ build_note = Joplin::Note.new(id:)
74
93
  note = build(id)
75
- write(note.id)
94
+ note.write
95
+ build_note.write note.title
76
96
  FileUtils.cd note.title
77
97
  `pandoc '#{note.title}.md' -o '../#{note.title}.epub' -t epub3 -f markdown+smart --title '#{note.title}' --toc --toc-depth=3 --metadata title='#{note.title}'`
78
98
  note.delete!
79
99
  FileUtils.cd '..'
80
100
  FileUtils.rm_rf note.title
101
+ abort 'Omg. pandoc failed!' if $?.exitstatus != 0
81
102
  puts "OK. Done. Your book is #{note.title}.epub"
82
103
  end
83
104
 
@@ -92,25 +113,39 @@ class MyCLI < Thor
92
113
  token
93
114
  note = Joplin::Note.new(id:)
94
115
  notes = []
95
- title = nil
96
116
  note.body.each_line do |line|
97
- title = ::Regexp.last_match(1) if line =~ /title: (.*)$/
98
- line =~ %r{\(:/(\w+)\)}
117
+ match = line.match %r{!?\[(.*)?\]\(:/(\w+)\)}
118
+ next unless match
119
+ next if match[0][0] == '!'
120
+
99
121
  begin
100
- notes.push Joplin::Note.new id: ::Regexp.last_match(1) if ::Regexp.last_match(1) && ::Regexp.last_match(1)
122
+ notes.push Joplin::Note.new id: match[2]
101
123
  rescue Joplin::Note::NotFound
102
- puts "Couldn't find note with id #{id} so we skip it"
124
+ puts "Couldn't find note with id #{id} so we skip it. Maybe an image"
103
125
  end
104
126
  end
127
+ yml = extract_yaml_header_for_epub(note)
105
128
  new_note = Joplin::Note.new parent_id: note.parent_id
106
- new_note.title = title || "built: #{note.title}"
107
- new_note.body = notes.map { |n| "\# #{n.title}\n\n#{n.body}" }.join
129
+ new_note.title = yml ? yml['title'] : "built: #{note.title}"
130
+ new_note.body = "#{Psych.dump yml}...\n" if yml
131
+ new_note.body += notes.map { |n| "\# #{n.title}\n\n#{n.body}" }.join
108
132
  new_note.save!
109
133
  new_note
110
134
  end
111
135
 
112
136
  private
113
137
 
138
+ def extract_yaml_header_for_epub(note)
139
+ yml = Psych.load note.body
140
+ return nil unless yml.is_a? Hash
141
+
142
+ yml
143
+ end
144
+
145
+ def has_exec?(command)
146
+ !`which #{command}`.empty?
147
+ end
148
+
114
149
  def token
115
150
  Joplin.token = Joplin.get_token || options[:token]
116
151
  return if Joplin.token
@@ -1,3 +1,3 @@
1
1
  module Joplin
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
data/lib/joplin.rb CHANGED
@@ -129,15 +129,15 @@ module Joplin
129
129
  end
130
130
  end
131
131
 
132
- def write
133
- Dir.mkdir title
134
- Dir.mkdir "#{title}/resources"
132
+ def write(path = nil)
133
+ dir = path || title
134
+ FileUtils.mkdir_p "#{dir}/resources"
135
135
  body_to_write = String(body) # make a copy
136
136
  resources.each do |resource|
137
- resource.write "#{title}/resources/#{resource.id}"
137
+ resource.write "#{dir}/resources/#{resource.id}"
138
138
  body_to_write.gsub!(%r{:/#{resource.id}}, "./resources/#{resource.id}")
139
139
  end
140
- IO.write "#{title}/#{title}.md", body_to_write
140
+ IO.write "#{dir}/#{title}.md", body_to_write
141
141
  end
142
142
 
143
143
  def to_json(*_args)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: joplin
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Bretoi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-01 00:00:00.000000000 Z
11
+ date: 2023-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http