joplin 1.0.2 → 1.1.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '09242aa0b4f46f7d69424cb3267766eff3178e5a1ab3bc229c2e47b496427db3'
4
- data.tar.gz: bea1752fa435abab2cb0477bc4565795343cdd50f962128439dee822ac5c29a2
3
+ metadata.gz: 894bad22eddabf7759d835d3a2c2f94ef60bf0c0e7767bb902d8bfb107e70a19
4
+ data.tar.gz: 1a29dc5fe553d92a7e84c5e9292d542247111de8b1098bf01b98a54270b05608
5
5
  SHA512:
6
- metadata.gz: 72044c7c29a87bb27257c2cfcb4b04e5f9c06ed6679475b0e305bdba635176535fefcbdf3f27151c3d1498f7762700f0e8e9a3a1263731868963db1879047721
7
- data.tar.gz: e127bfaf4d7ffc2fb5c20a2d085a5d9eb21921f678976a853f9fcdb3e408696c3f4f29c0cc4db3427720d1d1f5b79d8fdb6be6667db4338fb150c12344d30c90
6
+ metadata.gz: 74047ff08fb61576bc9689dea85829cc58920436d410d3604a93e769c6314d2000adc244abfdbb6dea40ac38d0ad97ec0f82a8ccf5ae392aa12532dfe1c2b5f4
7
+ data.tar.gz: e390de0be3ff25e34d59dde77a84068bb62f7179aecd192c8afe2e0f00ec2df9dd681e4e0d44d8ba1414419f8738998b4e4aecafd0f5a6d02344c24d9e416db4
data/bin/joplin CHANGED
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ # REF: https://joplinapp.org/help/api/references/rest_api/
4
+
3
5
  $:.unshift File.expand_path('../lib', __dir__)
4
6
 
5
7
  require 'joplin'
@@ -49,6 +51,23 @@ class MyCLI < Thor
49
51
  note.write
50
52
  end
51
53
 
54
+ desc :stats, 'statistics on joplin data'
55
+ long_desc 'Get some statistics on the joplin instance, the number of notebooks, notes'
56
+ option :token
57
+ def stats
58
+ notes_total = 0
59
+ notebooks = Joplin::Notebook.all
60
+ notebooks.each do |notebook|
61
+ notes_count = notebook.notes.size # Get the count of notes in the notebook
62
+ notes_total += notebook.notes.size
63
+ end
64
+ puts <<~HEREDOC
65
+ Token: #{token}
66
+ Notebooks: #{notebooks.size}
67
+ Notes: #{notes_total}
68
+ HEREDOC
69
+ end
70
+
52
71
  desc :nb2n, 'concate all notes in a notebook to one note. Possible PDF export'
53
72
  long_desc 'The idea is to make a big note from all the notes in a notebook. PDF export or whatever export can happen from that. The notes are concatenated with a separator.'
54
73
  option :token
@@ -96,7 +115,7 @@ class MyCLI < Thor
96
115
  `pandoc '#{note.title}.md' -o '../#{note.title}.epub' -t epub3 -f markdown+smart --title '#{note.title}' --toc --toc-depth=3 --metadata title='#{note.title}'`
97
116
  note.delete!
98
117
  FileUtils.cd '..'
99
- FileUtils.rm_rf note.title
118
+ # FileUtils.rm_rf note.title
100
119
  abort 'Omg. pandoc failed!' if $?.exitstatus != 0
101
120
  puts "OK. Done. Your book is #{note.title}.epub"
102
121
  end
@@ -125,7 +144,7 @@ class MyCLI < Thor
125
144
  end
126
145
  yml = extract_yaml_header_for_epub(note)
127
146
  new_note = Joplin::Note.new parent_id: note.parent_id
128
- new_note.title = yml ? yml['title'] : "built: #{note.title}"
147
+ new_note.title = yml ? title_from_yml(yml) : "built: #{note.title}"
129
148
  new_note.body = "#{Psych.dump yml}...\n" if yml
130
149
  new_note.body += notes.map { |n| "\# #{n.title}\n\n#{n.body}" }.join
131
150
  new_note.save!
@@ -134,6 +153,18 @@ class MyCLI < Thor
134
153
 
135
154
  private
136
155
 
156
+ # if using subtitle with pandoc it has a different format
157
+ # https://pandoc.org/MANUAL.html#epubs
158
+ def title_from_yml(yml)
159
+ if yml['title'].is_a? Array
160
+ yml['title'].each do |title|
161
+ return title['text'] if title['type'] == 'main'
162
+ end
163
+ end
164
+
165
+ yml['title']
166
+ end
167
+
137
168
  def extract_yaml_header_for_epub(note)
138
169
  yml = Psych.load note.body
139
170
  return nil unless yml.is_a? Hash
@@ -143,7 +174,7 @@ class MyCLI < Thor
143
174
 
144
175
  def token
145
176
  Joplin.token = Joplin.get_token || options[:token]
146
- return if Joplin.token
177
+ return Joplin.token if Joplin.token
147
178
 
148
179
  raise "Couldn't find token in local database and it wasn't passed as an option. You better check yourself!"
149
180
  end
@@ -1,3 +1,3 @@
1
1
  module Joplin
2
- VERSION = "1.0.2"
2
+ VERSION = "1.1.0"
3
3
  end
data/lib/joplin.rb CHANGED
@@ -205,10 +205,50 @@ module Joplin
205
205
  end
206
206
 
207
207
  def notes
208
- url = "#{Joplin.uri}/folders/#{@id}/notes?token=#{Joplin.token}"
209
- res = HTTP.get url
210
- notes = JSON.parse res.body
211
- notes.map! { |n| Joplin::Note.new n['id'] }
208
+ notes = []
209
+ page = 1
210
+
211
+ loop do
212
+ url = "#{Joplin.uri}/folders/#{@id}/notes?token=#{Joplin.token}&page=#{page}"
213
+ response = HTTP.get(url)
214
+
215
+ raise Error, "Failed to fetch notes: #{response}" if response.status != 200
216
+
217
+ data = JSON.parse(response.body)
218
+
219
+ items = data['items']
220
+ items.each { |note_data| notes << Joplin::Note.new(id: note_data['id']) }
221
+
222
+ break unless data['has_more']
223
+
224
+ page += 1
225
+ end
226
+
227
+ notes
228
+ end
229
+
230
+ def self.all
231
+ notebooks = []
232
+ page = 1
233
+
234
+ loop do
235
+ url = "#{Joplin.uri}/folders?token=#{Joplin.token}&page=#{page}"
236
+ response = HTTP.get(url)
237
+
238
+ raise Error, "Failed to fetch notebooks: #{response}" if response.status != 200
239
+
240
+ data = JSON.parse(response.body)
241
+ items = data['items']
242
+
243
+ break if items.empty?
244
+
245
+ # Collect Notebook instances
246
+ items.each { |notebook_data| notebooks << Notebook.new(notebook_data['id']) }
247
+
248
+ page += 1
249
+ end
250
+
251
+ notebooks
212
252
  end
213
253
  end
214
254
  end
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.2
4
+ version: 1.1.0
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-03 00:00:00.000000000 Z
11
+ date: 2024-11-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
@@ -139,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
139
139
  - !ruby/object:Gem::Version
140
140
  version: '0'
141
141
  requirements: []
142
- rubygems_version: 3.4.10
142
+ rubygems_version: 3.5.11
143
143
  signing_key:
144
144
  specification_version: 4
145
145
  summary: joplin API