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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 87d7373f7c03a2d839df64d8c6e6f50532be6f4d
4
- data.tar.gz: 11220833871161919fa564250e1a4b954fc49f2e
3
+ metadata.gz: f5fd158d642c85607da73896038b549d78a066f6
4
+ data.tar.gz: 9b1e498c0c24d382d57c6357ac42a98a1cbdcb65
5
5
  SHA512:
6
- metadata.gz: 3a701edd015461c1b8992eba94226f4d5424bcc64be149b2170a232d6ce492f80d4e3e5f1d7537114fb6a5a3a0da532087deb22530bde68ede8fde2c2f26092d
7
- data.tar.gz: 30c7c63f0fe9978fdd098a587579081223a80776a79920f985ee8ec2a25a9399af651d203471065a1697b563eedaceadf29eb66f049fdb0267b021299db19be4
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.
@@ -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
@@ -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 = Time.now.to_i
11
+ @id = Anki::Helper.get_id
13
12
  end
14
13
 
15
14
  def front
@@ -5,9 +5,16 @@ module Anki
5
5
 
6
6
  def initialize name
7
7
  @name = name
8
- @id = Time.now.to_i
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
@@ -11,21 +11,21 @@ module Anki
11
11
 
12
12
  def self.export deck, path
13
13
  Dir.mktmpdir do |dir|
14
- db = DB.create File.join(dir,'collection.anki2')
14
+ db = DB.create File.join(dir,'collection.anki2')
15
15
 
16
- export_media deck, dir
17
- export_deck deck, db
16
+ export_media deck, dir
17
+ export_deck deck, db
18
18
 
19
- filename = deck.name + '.apkg'
20
- archive = Zip::File.open(File.join(dir,filename), Zip::File::CREATE)
19
+ filename = deck.name + '.apkg'
20
+ archive = Zip::File.open(File.join(dir,filename), Zip::File::CREATE)
21
21
 
22
- Dir.glob(File.join(dir,'*')).each do |file|
23
- archive.add( File.basename(file),file)
24
- end
22
+ Dir.glob(File.join(dir,'*')).each do |file|
23
+ archive.add( File.basename(file),file)
24
+ end
25
25
 
26
- archive.close()
26
+ archive.close()
27
27
 
28
- FileUtils.move(File.join(dir,filename), path)
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
- db.execute "insert into col values(
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 => Time.now.to_i,
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
- db.execute "insert into cards values(
101
- #{Time.now.to_i},
102
- #{note[:id]},
103
- #{deck.id},
104
- 0,
105
- #{Time.now.to_i},
106
- -1,
107
- #{Type.new_type},
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
- db.execute "insert into notes values(
123
- #{note[:id]},
124
- '#{note[:guid]}',
125
- #{note[:mid]},
126
- #{note[:mod]},
127
- #{note[:usn]},
128
- '#{note[:tags]}',
129
- '#{note[:flds]}',
130
- '#{note[:sfld]}',
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
@@ -0,0 +1,9 @@
1
+ module Anki
2
+ class Helper
3
+ @@count = 1000
4
+ def self.get_id
5
+ @@count += 1
6
+ @@count
7
+ end
8
+ end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module Anki
2
- VERSION = '0.2.0' unless const_defined?(:VERSION)
2
+ VERSION = '0.3.0' unless const_defined?(:VERSION)
3
3
  end
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.2.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: 2016-02-20 00:00:00.000000000 Z
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.5.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
@@ -1,15 +0,0 @@
1
- module Anki
2
- class Media
3
- def self.audio
4
-
5
- end
6
-
7
- def self.image
8
-
9
- end
10
-
11
- def self.video
12
-
13
- end
14
- end
15
- end