joplin 1.0.2 → 1.1.0

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: '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