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