Class: AnkiConnect::Client

Inherits:
Object
  • Object
show all
Includes:
Cards, Decks, Graphical, Media, Miscellaneous, NoteTypes, Notes, Params, Statistics
Defined in:
lib/anki_connect/client.rb,
lib/anki_connect/cards.rb,
lib/anki_connect/decks.rb,
lib/anki_connect/media.rb,
lib/anki_connect/notes.rb,
lib/anki_connect/params.rb,
lib/anki_connect/graphical.rb,
lib/anki_connect/note_types.rb,
lib/anki_connect/statistics.rb,
lib/anki_connect/miscellaneous.rb

Overview

Main client class that includes all API modules and provides the core request mechanism.

Defined Under Namespace

Modules: Cards, Decks, Graphical, Media, Miscellaneous, NoteTypes, Notes, Params, Statistics

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Miscellaneous

#active_profile, #api_capabilities, #api_version, #batch, #export_deck, #import_package, #load_profile, #profiles, #reload_collection, #request_permission, #sync

Methods included from Statistics

#cards_reviewed_by_day, #cards_reviewed_today, #collection_stats_html, #insert_reviews, #latest_review_id, #reviews, #reviews_for_cards

Methods included from Graphical

#gui_add_cards, #gui_add_note_set_data, #gui_answer_card, #gui_browse, #gui_check_database, #gui_current_card, #gui_deck_browser, #gui_deck_overview, #gui_deck_review, #gui_edit_note, #gui_exit_anki, #gui_import_file, #gui_play_audio, #gui_review_active?, #gui_select_card, #gui_selected_notes, #gui_show_answer, #gui_show_question, #gui_start_card_timer, #gui_undo

Methods included from Media

#delete_media, #media_directory, #media_files, #retrieve_media, #store_media

Methods included from Notes

#add_note, #add_notes, #add_tags, #change_note_type, #clear_unused_tags, #delete_notes, #note_addability, #note_addability_details, #note_addability_statuses, #note_addable?, #note_modification_times, #note_tags, #notes, #remove_tags, #remove_unused_note_types, #replace_tag, #search_notes, #tags, #update_note, #update_note_fields, #update_note_tags

Methods included from NoteTypes

#add_note_type_field, #add_note_type_template, #create_note_type, #find_and_replace_in_note_type, #note_type_field_descriptions, #note_type_field_fonts, #note_type_field_names, #note_type_fields_on_templates, #note_type_name_from_id, #note_type_names, #note_type_names_and_ids, #note_type_styling, #note_type_templates, #note_types_by_id, #note_types_by_name, #remove_note_type_field, #remove_note_type_template, #rename_note_type_field, #rename_note_type_template, #reposition_note_type_field, #reposition_note_type_template, #set_note_type_field_description, #set_note_type_field_font, #set_note_type_field_font_size, #update_note_type_styling, #update_note_type_templates

Methods included from Decks

#clone_deck_config, #create_deck, #deck_config, #deck_name_from_id, #deck_names, #deck_names_and_ids, #deck_stats, #decks_for_cards, #delete_decks, #move_cards, #remove_deck_config, #save_deck_config, #set_deck_config

Methods included from Cards

#answer_cards, #card_due?, #card_due_statuses, #card_intervals, #card_modification_times, #card_suspended?, #card_suspension_statuses, #cards, #ease_factors, #forget_cards, #note_ids_for_cards, #relearn_cards, #search_cards, #set_card_values, #set_due_date, #set_ease_factors, #suspend_cards, #unsuspend_cards

Constructor Details

#initialize(host: '127.0.0.1', port: 8765, endpoint: nil, api_key: nil, open_timeout: 5, read_timeout: 60, write_timeout: 60) ⇒ Client

Creates a new AnkiConnect client.

Parameters:

  • host (String) (defaults to: '127.0.0.1') —

    AnkiConnect server host (default: "127.0.0.1")

  • port (Integer) (defaults to: 8765) —

    AnkiConnect server port (default: 8765)

  • endpoint (String, URI, nil) (defaults to: nil) —

    Complete HTTP or HTTPS endpoint; overrides host and port

  • api_key (String, nil) (defaults to: nil) —

    Optional API key for authentication

  • open_timeout (Numeric) (defaults to: 5) —

    Connection timeout in seconds

  • read_timeout (Numeric) (defaults to: 60) —

    Response timeout in seconds

  • write_timeout (Numeric) (defaults to: 60) —

    Request write timeout in seconds



54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/anki_connect/client.rb', line 54

def initialize(
  host: '127.0.0.1', port: 8765, endpoint: nil, api_key: nil,
  open_timeout: 5, read_timeout: 60, write_timeout: 60
)
  @endpoint = parse_endpoint(endpoint ? endpoint.to_s : "http://#{host}:#{port}")
  validate_endpoint!
  validate_api_key_transport!(api_key)
  @host = @endpoint.hostname
  @port = @endpoint.port
  @api_key = api_key
  @open_timeout = open_timeout
  @read_timeout = read_timeout
  @write_timeout = write_timeout
end

Instance Attribute Details

#endpoint ⇒ URI::HTTP, URI::HTTPS (readonly)

Returns AnkiConnect endpoint.

Returns:

  • (URI::HTTP, URI::HTTPS) —

    AnkiConnect endpoint



37
38
39
# File 'lib/anki_connect/client.rb', line 37

def endpoint
  @endpoint
end

#host ⇒ String (readonly)

Returns AnkiConnect server host.

Returns:

  • (String) —

    AnkiConnect server host



33
34
35
# File 'lib/anki_connect/client.rb', line 33

def host
  @host
end

#open_timeout ⇒ Numeric (readonly)

Returns Connection timeout in seconds.

Returns:

  • (Numeric) —

    Connection timeout in seconds



39
40
41
# File 'lib/anki_connect/client.rb', line 39

def open_timeout
  @open_timeout
end

#port ⇒ Integer (readonly)

Returns AnkiConnect server port.

Returns:

  • (Integer) —

    AnkiConnect server port



35
36
37
# File 'lib/anki_connect/client.rb', line 35

def port
  @port
end

#read_timeout ⇒ Numeric (readonly)

Returns Response timeout in seconds.

Returns:

  • (Numeric) —

    Response timeout in seconds



41
42
43
# File 'lib/anki_connect/client.rb', line 41

def read_timeout
  @read_timeout
end

#write_timeout ⇒ Numeric (readonly)

Returns Request write timeout in seconds.

Returns:

  • (Numeric) —

    Request write timeout in seconds



43
44
45
# File 'lib/anki_connect/client.rb', line 43

def write_timeout
  @write_timeout
end

Instance Method Details

#request(action, **params) ⇒ Object

Makes a request to the AnkiConnect API. This is the core method used by all API operations.

Parameters:

  • action (Symbol) —

    The API action to perform

  • params (Hash) —

    Parameters to send with the request

Returns:

  • (Object) —

    The result from the API

Raises:

  • (Error) —

    If the API returns an error



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/anki_connect/client.rb', line 76

def request(action, **params)
  body = {
    action: action,
    version: API_VERSION,
    params: params
  }
  body[:key] = @api_key if @api_key

  response = perform_request(body.to_json, action)
  unless response.code.to_i.between?(200, 299)
    raise HTTPError.new(
      "AnkiConnect returned HTTP #{response.code}",
      action: action,
      status: response.code.to_i,
      body: response.body
    )
  end

  result = parse_response(response.body, action)

  raise APIError.new(result['error'].to_s, action: action) unless result['error'].nil?

  result['result']
end