ankirb 0.2.0 → 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 +4 -4
- data/README.md +16 -0
- data/lib/ankirb.rb +8 -0
- data/lib/ankirb/anki/card.rb +1 -2
- data/lib/ankirb/anki/deck.rb +9 -2
- data/lib/ankirb/export/apkg.rb +33 -45
- data/lib/ankirb/util/id_helper.rb +9 -0
- data/lib/ankirb/version.rb +1 -1
- metadata +4 -4
- data/lib/ankirb/anki/media.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f5fd158d642c85607da73896038b549d78a066f6
|
4
|
+
data.tar.gz: 9b1e498c0c24d382d57c6357ac42a98a1cbdcb65
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bdbc517586d56262689682ae58ec1dfd6b6fedd5f575f78b360e4855540d900eefca8709285b2de1644c1abc9eda0fb54bb4de09fffeca47ce0db4839cb341e5
|
7
|
+
data.tar.gz: 78dbac9226d9bd2b1280952c845f0d68174fa20c4f949bcb819ea930baaa537b9cedd1bbb44e9cea9a8ee6a55ddcb58e99f7c499b4f0f51d4b37888f0dfe8400
|
data/README.md
CHANGED
@@ -41,6 +41,22 @@ deck.add_card card
|
|
41
41
|
Anki::apkg.export deck, "~/Anki/Decks"
|
42
42
|
```
|
43
43
|
|
44
|
+
### Media types
|
45
|
+
|
46
|
+
Media can be added to a card face via the `<<` operator, just pass a string that points to a valid media file and the lib will convert + package the file.
|
47
|
+
|
48
|
+
For images, the position of the image in the card can be set by using a placeholder `{{img}}`.
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
card = Anki::Card.new :front => "{{img}} text after image", :back => "text before image {{img}}"
|
52
|
+
card.front << "front_img.jpg"
|
53
|
+
card.back << "back_img.jpg"
|
54
|
+
```
|
55
|
+
|
56
|
+
If no placeholder is present the image will just be added at the end. If multiple placeholders are present, they'll be replaced sequentially with the image files added to the card.
|
57
|
+
|
58
|
+
As with anki, html tags can be used for more styling in the card content. Card model / css template support may be added in future.
|
59
|
+
|
44
60
|
## Contributing
|
45
61
|
|
46
62
|
Bug reports and pull requests are welcome on GitHub at https://github.com/rkachowski/ankirb.
|
data/lib/ankirb.rb
CHANGED
@@ -1,8 +1,16 @@
|
|
1
|
+
require 'logger'
|
1
2
|
|
2
3
|
module Anki
|
3
4
|
Gem.find_files("ankirb/**/*.rb").each { |path| require path }
|
4
5
|
|
6
|
+
@@logger = Logger.new(STDOUT)
|
7
|
+
@@logger.level = ENV["DEBUG"] ? Logger::DEBUG : Logger::WARN
|
8
|
+
|
5
9
|
def self.apkg
|
6
10
|
APKGExporter
|
7
11
|
end
|
12
|
+
|
13
|
+
def self.logger
|
14
|
+
@@logger
|
15
|
+
end
|
8
16
|
end
|
data/lib/ankirb/anki/card.rb
CHANGED
@@ -3,13 +3,12 @@ module Anki
|
|
3
3
|
attr_accessor :tags, :deck
|
4
4
|
attr_reader :id
|
5
5
|
|
6
|
-
|
7
6
|
def initialize options={}
|
8
7
|
@front = CardFace.new(options[:front] || '')
|
9
8
|
@back = CardFace.new(options[:back] || '')
|
10
9
|
@tags = options[:tags] || []
|
11
10
|
|
12
|
-
@id =
|
11
|
+
@id = Anki::Helper.get_id
|
13
12
|
end
|
14
13
|
|
15
14
|
def front
|
data/lib/ankirb/anki/deck.rb
CHANGED
@@ -5,9 +5,16 @@ module Anki
|
|
5
5
|
|
6
6
|
def initialize name
|
7
7
|
@name = name
|
8
|
-
@id =
|
8
|
+
@id = Anki::Helper.get_id
|
9
9
|
@cards = {}
|
10
|
-
|
10
|
+
|
11
|
+
#change @cards#to_s to prevent recursive output via parent / child relationship
|
12
|
+
class << @cards
|
13
|
+
def to_s
|
14
|
+
"#< #{self.keys.count} cards>"
|
15
|
+
end
|
16
|
+
alias_method :inspect, :to_s
|
17
|
+
end
|
11
18
|
end
|
12
19
|
|
13
20
|
def add_card card
|
data/lib/ankirb/export/apkg.rb
CHANGED
@@ -11,21 +11,21 @@ module Anki
|
|
11
11
|
|
12
12
|
def self.export deck, path
|
13
13
|
Dir.mktmpdir do |dir|
|
14
|
-
|
14
|
+
db = DB.create File.join(dir,'collection.anki2')
|
15
15
|
|
16
|
-
|
17
|
-
|
16
|
+
export_media deck, dir
|
17
|
+
export_deck deck, db
|
18
18
|
|
19
|
-
|
20
|
-
|
19
|
+
filename = deck.name + '.apkg'
|
20
|
+
archive = Zip::File.open(File.join(dir,filename), Zip::File::CREATE)
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
22
|
+
Dir.glob(File.join(dir,'*')).each do |file|
|
23
|
+
archive.add( File.basename(file),file)
|
24
|
+
end
|
25
25
|
|
26
|
-
|
26
|
+
archive.close()
|
27
27
|
|
28
|
-
|
28
|
+
FileUtils.move(File.join(dir,filename), path)
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -55,7 +55,7 @@ module Anki
|
|
55
55
|
|
56
56
|
model = Defaults.model(deck.id)
|
57
57
|
|
58
|
-
|
58
|
+
cmd = "insert into col values(
|
59
59
|
#{deck.id},
|
60
60
|
#{Time.now.to_i},
|
61
61
|
#{Time.now.to_i},
|
@@ -71,13 +71,15 @@ module Anki
|
|
71
71
|
'#{Defaults.tags}'
|
72
72
|
)"
|
73
73
|
|
74
|
+
Anki.logger.debug cmd
|
75
|
+
db.execute cmd
|
74
76
|
deck.cards.each do |card|
|
75
77
|
#flds is front and back of card separated by \x1f
|
76
78
|
flds_bytes = [card.front.content, card.back.content].map{|f|f.bytes}.insert(1, '1f'.hex)
|
77
79
|
flds = flds_bytes.flatten.pack('U*')
|
78
80
|
|
79
81
|
note = {
|
80
|
-
:id =>
|
82
|
+
:id => Anki::Helper.get_id,
|
81
83
|
:guid => Base91.encode(Random.new.rand(2**63).to_s),
|
82
84
|
:mid => Defaults.model_id,
|
83
85
|
:mod => Time.now.to_i,
|
@@ -91,46 +93,32 @@ module Anki
|
|
91
93
|
}
|
92
94
|
|
93
95
|
add_note_to_db note, db
|
94
|
-
add_card_to_db note, deck, db
|
96
|
+
add_card_to_db card.id, note, deck, db
|
95
97
|
end
|
96
98
|
|
97
99
|
end
|
98
100
|
|
99
|
-
def self.add_card_to_db(note, deck, db)
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
#{Queue.new_queue},
|
109
|
-
#{Random.new.rand(2**10)},
|
110
|
-
0,
|
111
|
-
0,
|
112
|
-
0,
|
113
|
-
0,
|
114
|
-
0,
|
115
|
-
0,
|
116
|
-
0,
|
117
|
-
0,
|
118
|
-
'')"
|
101
|
+
def self.add_card_to_db(id, note, deck, db)
|
102
|
+
args = [id, note[:id],deck.id, 0, Time.now.to_i, -1, Type.new_type, Queue.new_queue,Random.new.rand(2**10),
|
103
|
+
0, 0, 0, 0, 0, 0, 0, 0, '']
|
104
|
+
cmd = "insert into
|
105
|
+
cards( id, nid, did, ord, mod, usn, type, queue, due, ivl, factor, reps, lapses, left, odue, odid, flags, data)
|
106
|
+
values(#{args.map{ '?' }.join(',')})"
|
107
|
+
|
108
|
+
Anki.logger.debug cmd
|
109
|
+
db.execute cmd, args
|
119
110
|
end
|
120
111
|
|
121
112
|
def self.add_note_to_db note, db
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
#{note[:csum]},
|
132
|
-
#{note[:flags]},
|
133
|
-
'#{note[:data]}')"
|
113
|
+
args = [note[:id],note[:guid].to_s, note[:mid], note[:mod],note[:usn], note[:tags].to_s,
|
114
|
+
note[:flds].to_s,note[:sfld].to_s,note[:csum],note[:flags], note[:data].to_s]
|
115
|
+
|
116
|
+
cmd = "insert into
|
117
|
+
notes( id, guid, mid, mod, usn, tags, flds, sfld, csum, flags, data)
|
118
|
+
values(?,?,?,?,?,?,?,?,?,?,?)"
|
119
|
+
|
120
|
+
Anki.logger.debug cmd + ' - ' + args.join(', ')
|
121
|
+
db.execute(cmd, args)
|
134
122
|
end
|
135
123
|
|
136
124
|
def self.deck_to_json deck
|
data/lib/ankirb/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ankirb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Donald Hutchison
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-12-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -140,10 +140,10 @@ files:
|
|
140
140
|
- lib/ankirb.rb
|
141
141
|
- lib/ankirb/anki/card.rb
|
142
142
|
- lib/ankirb/anki/deck.rb
|
143
|
-
- lib/ankirb/anki/media.rb
|
144
143
|
- lib/ankirb/export/apkg.rb
|
145
144
|
- lib/ankirb/export/db.rb
|
146
145
|
- lib/ankirb/export/defaults.rb
|
146
|
+
- lib/ankirb/util/id_helper.rb
|
147
147
|
- lib/ankirb/util/media.rb
|
148
148
|
- lib/ankirb/version.rb
|
149
149
|
homepage: https://github.com/rkachowski/anki-rb
|
@@ -166,7 +166,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
166
166
|
version: '0'
|
167
167
|
requirements: []
|
168
168
|
rubyforge_project:
|
169
|
-
rubygems_version: 2.
|
169
|
+
rubygems_version: 2.6.13
|
170
170
|
signing_key:
|
171
171
|
specification_version: 4
|
172
172
|
summary: A gem to create Anki decks for loading in an Anki flashcard application
|