joplin 0.1.4 → 0.3.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: a00bb3fcafc4b1e31a2248b00e5a94bf68385b2b98d3b41d0119b3b451e14916
4
- data.tar.gz: e58b2a8e7ce244728258de458da08174c9b36852bcbf58a7d2f11f41946a7a2d
3
+ metadata.gz: 7fada7c3ac2927ba5715b67437eac2fa1df0a33a24596e7a8619beadcabe27d2
4
+ data.tar.gz: 694472244aad50df5c84395b647b40840e8aff6eafe76903ccd667806aeed50e
5
5
  SHA512:
6
- metadata.gz: 13b659f736facbeeea76548a0b83a7060d24f8f7ae8ceb1e7f7c56305d0a62ec0476709ac5d623248f98fc0f8896572d908af5bbff9244145d93f005d2790d28
7
- data.tar.gz: 9cd4f0bfd7eace341b36e3909d5a1b5eea48d57e21e1d1c85a50722801447b49bb03f83f894704fba7d1e5aea79d12a41233f01e9c9b1e1c05e5892f42be507a
6
+ metadata.gz: 5d006b40cf72590d3c193cd71bf918044f06d4c379447d492c869b3c6533aaa0835196e7219d5ca9e483707206e7c739849d39a925d06542b2ced1dfdb742d77
7
+ data.tar.gz: ffd27223a512c4538bb5e9156ad1ef1825a5f0123afc45907c2eeba4be719cd7ae0a596b2c638147cec3e76fe1a7cba0390321bcaeb93e5da3b07bade3bdf2a3
data/Gemfile CHANGED
@@ -8,3 +8,5 @@ gemspec
8
8
  gem "faraday", "~> 1.0"
9
9
 
10
10
  gem "thor", "~> 1.0"
11
+
12
+ gem "sqlite3", "~> 1.4"
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- joplin (0.1.3)
4
+ joplin (0.2.2)
5
5
  faraday (~> 1.0)
6
6
 
7
7
  GEM
@@ -25,6 +25,7 @@ GEM
25
25
  diff-lcs (>= 1.2.0, < 2.0)
26
26
  rspec-support (~> 3.9.0)
27
27
  rspec-support (3.9.3)
28
+ sqlite3 (1.4.2)
28
29
  thor (1.0.1)
29
30
 
30
31
  PLATFORMS
@@ -36,6 +37,7 @@ DEPENDENCIES
36
37
  joplin!
37
38
  rake (~> 13.0)
38
39
  rspec (~> 3.0)
40
+ sqlite3 (~> 1.4)
39
41
  thor (~> 1.0)
40
42
 
41
43
  BUNDLED WITH
data/Makefile CHANGED
@@ -1,2 +1,11 @@
1
1
  all:
2
2
  gem build joplin.gemspec
3
+
4
+ push: clean all
5
+ gem push *gem
6
+
7
+ clean:
8
+ rm -f *gem
9
+
10
+ install: clean all
11
+ gem install --local *gem
data/README.md CHANGED
@@ -22,5 +22,24 @@ updating a note
22
22
  note = Joplin::Notes.new "6e3811c7a73148a" # note id can be found in the information of any note
23
23
  note.title = "a new note title"
24
24
  note.save!
25
- end
26
25
  ```
26
+
27
+ ### A note on the token
28
+
29
+ If you've got joplin installed, you can do:
30
+
31
+ ``` ruby
32
+ require "joplin/token"
33
+ token = Joplin::Token.get
34
+ ```
35
+
36
+ to get the token programatically. It reads from the sqlite database located in `~/.config/joplin-desktop`
37
+
38
+
39
+ ## CLI
40
+
41
+ ### joplin nb2n --token <yourtoken> 'notebook name'
42
+
43
+ Will take a notebook and concatenate all notes into one for easy export to PDF
44
+
45
+ The token argument is optional and if you have it installed locally it will find the token
data/bin/joplin CHANGED
@@ -1,7 +1,21 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "./lib/joplin.rb"
3
+ $:.unshift File.expand_path("../../lib", __FILE__)
4
+
5
+ require "joplin"
4
6
  require 'thor'
7
+ require "joplin/token"
8
+
9
+ DIVIDER = %Q(
10
+
11
+ <svg height="50" width="460">
12
+ <style> .line { stroke-width: 1px; fill: black; stroke: black; } </style>
13
+ <g id="triangle"><path d="M0 30 L200 30 Q 220 25 200 35 Z" class="line" /></g>
14
+ <use xlink:href="#triangle" transform="scale(-1 1) translate(-450 0)"/>
15
+ <circle cx="225" cy="32" r="7" class="line"/>
16
+ </svg>
17
+
18
+ )
5
19
 
6
20
 
7
21
  class MyCLI < Thor
@@ -10,14 +24,16 @@ class MyCLI < Thor
10
24
  class_option :version, :type => :boolean
11
25
  map ["-v", "--version"] => :version
12
26
  map ["-h", "--help"] => :help
13
- option :token, :required => true
27
+ option :token
14
28
  option :'dry-run', desc: "dry-run", aliases: '-n'
15
29
  desc :clean, "clean unused resources"
16
30
  def clean
17
- Joplin::token = options[:token]
31
+ Joplin::token = options[:token] || Joplin::Token.get
32
+ puts "Please wait, this can take while."
18
33
  Joplin::Resource.orphaned.map { |r|
19
34
  r.delete if not options['dry-run']
20
- puts "Deleted #{r.id}"
35
+ would = "would have " if options['dry-run']
36
+ puts "#{would}deleted #{r.id}"
21
37
  }
22
38
  end
23
39
 
@@ -26,6 +42,57 @@ class MyCLI < Thor
26
42
  def version
27
43
  puts Joplin::VERSION
28
44
  end
45
+
46
+ desc :nb2n, "concate all notes in a notebook to one note. Possible PDF export"
47
+ 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."
48
+ option :token
49
+ option :type, :type => :string
50
+ def nb2n(query)
51
+ Joplin::token = options[:token] || Joplin::Token.get
52
+ results = Joplin.search(query, { type: 'folder' })
53
+ nb = results[0];
54
+ if not (nb and nb['title'] == query)
55
+ abort "notebook #{query} not found"
56
+ end
57
+
58
+ notebook = Joplin::Notebook.new nb['id']
59
+ notes = notebook.notes
60
+ new_note = Joplin::Note.new
61
+ new_note.title = query
62
+ new_note.body = notes.map { |n| "\# #{n.title}\n\n#{n.body}" }.join(DIVIDER)
63
+ new_note.save!
64
+ puts "Saved: #{new_note.title} with id: #{new_note.id}"
65
+ end
66
+
67
+ desc :build, "build a note from a note containing references"
68
+
69
+ long_desc %Q(Takes a note and looks up all the referenced notes and makes a new
70
+ note from those. The notes are concatenated with a separator.\n\nIf you have a
71
+ line with 'title: a title' then it will be used for the title of the built
72
+ email.)
73
+
74
+ def build(id)
75
+ token
76
+ note = Joplin::Note.new id
77
+ notes = []
78
+ title = nil
79
+ note.body.each_line { |line|
80
+ title = $1 if line =~ /title: (.*)$/
81
+ line =~ /\(:\/([^)]+)\)/
82
+ notes.push Joplin::Note.new $1 if $1
83
+ }
84
+ new_note = Joplin::Note.new
85
+ new_note.title = title || "built: #{note.title}"
86
+ new_note.body = notes.map { |n| "\# #{n.title}\n\n#{n.body}" }.join(DIVIDER)
87
+ new_note.save!
88
+ puts "Saved: #{new_note.title} with id: #{new_note.id}"
89
+ end
90
+
91
+ private
92
+ def token()
93
+ Joplin::token = options[:token] || Joplin::Token.get
94
+ raise "Couldn't find token in local database and it wasn't passed as an option. You better check yourself!" if not Joplin::token
95
+ end
29
96
  end
30
97
 
31
98
  MyCLI.start(ARGV)
@@ -10,6 +10,13 @@ module Joplin
10
10
  @@token = token
11
11
  end
12
12
 
13
+ def self.search(query, opts = {})
14
+ url = "#{Joplin::uri}/search/?query=#{query}&token=#{Joplin::token}&type=#{opts[:type]}"
15
+ res = Faraday.get url
16
+ parsed = JSON.parse res.body
17
+ return parsed
18
+ end
19
+
13
20
  def self.token
14
21
  @@token
15
22
  end
@@ -126,7 +133,9 @@ body: #{self.body}"""
126
133
 
127
134
  private
128
135
  def parse response
129
- return if not response.body
136
+ if response.body.empty?
137
+ raise "No note found with id #{@id}"
138
+ end
130
139
  note = JSON.parse response.body
131
140
  if response.status != 200
132
141
  raise Error.new note["error"]
@@ -136,4 +145,23 @@ body: #{self.body}"""
136
145
  @id = note["id"]
137
146
  end
138
147
  end
148
+
149
+ class Notebook
150
+ def initialize(id=nil)
151
+
152
+ @id = id
153
+ if id
154
+ url = "#{Joplin::uri}/folders/#{id}?token=#{Joplin::token}"
155
+ res = Faraday.get url
156
+ parsed = JSON.parse res.body
157
+ end
158
+ end
159
+
160
+ def notes
161
+ url = "#{Joplin::uri}/folders/#{@id}/notes?token=#{Joplin::token}"
162
+ res = Faraday.get url
163
+ notes = JSON.parse res.body
164
+ notes.map! { |n| Joplin::Note.new n['id'] }
165
+ end
166
+ end
139
167
  end
@@ -0,0 +1,14 @@
1
+ require "sqlite3"
2
+ module Joplin
3
+ module Token
4
+ def self.get
5
+ begin
6
+ db = SQLite3::Database.new "#{ENV['HOME']}/.config/joplin-desktop/database.sqlite"
7
+ rows = db.execute("select value from settings where key='api.token';")
8
+ return rows.flatten.first
9
+ rescue
10
+ return nil
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,3 +1,3 @@
1
1
  module Joplin
2
- VERSION = "0.1.4"
2
+ VERSION = "0.3.0"
3
3
  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: 0.1.4
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Bretoi
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-04 00:00:00.000000000 Z
11
+ date: 2020-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -102,6 +102,7 @@ files:
102
102
  - bin/setup
103
103
  - joplin.gemspec
104
104
  - lib/joplin.rb
105
+ - lib/joplin/token.rb
105
106
  - lib/joplin/version.rb
106
107
  homepage: http://github.com/danielb2/joplin
107
108
  licenses:
@@ -110,7 +111,7 @@ metadata:
110
111
  homepage_uri: http://github.com/danielb2/joplin
111
112
  source_code_uri: http://github.com/danielb2/joplin
112
113
  changelog_uri: http://github.com/danielb2/joplin
113
- post_install_message:
114
+ post_install_message:
114
115
  rdoc_options: []
115
116
  require_paths:
116
117
  - lib
@@ -126,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
126
127
  version: '0'
127
128
  requirements: []
128
129
  rubygems_version: 3.0.3
129
- signing_key:
130
+ signing_key:
130
131
  specification_version: 4
131
132
  summary: joplin API
132
133
  test_files: []