ankirb 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|