lib/anki_connect.ex

defmodule AnkiConnect do
  @moduledoc """
  This module delegates all functions to `AnkiConnect.Actions.*` and `AnkiConnect.Services.*` modules.

  Functions can be called from your Elixir application as follows:

  ```elixir
  AnkiConnect.add_note(%{
    note: %{
      deck_name: "TEST DECK",
      model_name: "Basic",
      fields: %{
        Front: "front content",
        Back: "back content"
      }
    }
  })
  ```

  or from the command line using `mix anki_connect` task:

  ```bash
  > mix anki_connect add_note --note='{"deck_name": "TEST DECK", "model_name": "Basic", "fields": {"Front": "front content", "Back": "back content"}}'
  1684946786121
  ```

  another example:

  ```bash
  > mix anki_connect add_notes_from_file --file="words.md" --deck="TEST DECK"
  [1684955655336, 1684955655337, ...]
  ```
  """

  alias AnkiConnect.Actions.{Deck, Graphical, Media, Miscellaneous, Model, Note, Statistic}
  alias AnkiConnect.Services.AddNotesFromFile

  defdelegate deck_names, to: Deck
  defdelegate deck_names_and_ids, to: Deck
  defdelegate get_decks(param), to: Deck
  defdelegate create_deck(param), to: Deck
  defdelegate change_deck(param), to: Deck
  defdelegate delete_decks(param), to: Deck
  defdelegate get_deck_config(param), to: Deck
  defdelegate save_deck_config(param), to: Deck
  defdelegate set_deck_config_id(param), to: Deck
  defdelegate clone_deck_config_id(param), to: Deck
  defdelegate remove_deck_config_id(param), to: Deck
  defdelegate get_deck_stats(param), to: Deck

  defdelegate gui_browse(param), to: Graphical
  defdelegate gui_selected_notes, to: Graphical
  defdelegate gui_add_cards(param), to: Graphical
  defdelegate gui_edit_note(param), to: Graphical
  defdelegate gui_current_card, to: Graphical
  defdelegate gui_start_card_timer, to: Graphical
  defdelegate gui_show_question, to: Graphical
  defdelegate gui_show_answer, to: Graphical
  defdelegate gui_answer_card(param), to: Graphical
  defdelegate gui_deck_overview(param), to: Graphical
  defdelegate gui_deck_browser, to: Graphical
  defdelegate gui_deck_review(param), to: Graphical
  defdelegate gui_exit_anki, to: Graphical
  defdelegate gui_check_database, to: Graphical

  defdelegate store_media_file(param), to: Media
  defdelegate retrieve_media_file(param), to: Media
  defdelegate get_media_files_names(param), to: Media
  defdelegate get_media_dir_path, to: Media
  defdelegate delete_media_file(param), to: Media

  defdelegate request_permission, to: Miscellaneous
  defdelegate version, to: Miscellaneous
  defdelegate api_reflect(param), to: Miscellaneous
  defdelegate sync, to: Miscellaneous
  defdelegate get_profiles, to: Miscellaneous
  defdelegate load_profile(param), to: Miscellaneous
  defdelegate multi(param), to: Miscellaneous
  defdelegate import_package(param), to: Miscellaneous
  defdelegate export_package(param), to: Miscellaneous
  defdelegate reload_collection, to: Miscellaneous

  defdelegate model_names, to: Model
  defdelegate model_names_and_ids, to: Model
  defdelegate model_field_names(param), to: Model
  defdelegate model_field_descriptions(param), to: Model
  defdelegate model_field_fonts(param), to: Model
  defdelegate model_fields_on_templates(param), to: Model
  defdelegate create_model(param), to: Model
  defdelegate model_templates(param), to: Model
  defdelegate model_styling(param), to: Model
  defdelegate update_model_templates(param), to: Model
  defdelegate update_model_styling(param), to: Model
  defdelegate find_and_replace_in_models(param), to: Model
  defdelegate model_template_rename(param), to: Model
  defdelegate model_template_reposition(param), to: Model
  defdelegate model_template_add(param), to: Model

  defdelegate add_note(param), to: Note
  defdelegate add_notes(param), to: Note
  defdelegate can_add_notes(param), to: Note
  defdelegate update_note_fields(param), to: Note
  defdelegate update_note(param), to: Note
  defdelegate update_note_tags(param), to: Note
  defdelegate get_note_tags(param), to: Note
  defdelegate add_tags(param), to: Note
  defdelegate remove_tags(param), to: Note
  defdelegate get_tags, to: Note
  defdelegate clear_unused_tags, to: Note
  defdelegate replace_tags(param), to: Note
  defdelegate replace_tags_in_all_notes(param), to: Note
  defdelegate find_notes(param), to: Note
  defdelegate notes_info(param), to: Note
  defdelegate delete_notes(param), to: Note
  defdelegate remove_empty_notes(param), to: Note

  defdelegate get_num_cards_reviewed_today, to: Statistic
  defdelegate get_num_cards_reviewed_by_day, to: Statistic
  defdelegate get_collection_stats_html(param), to: Statistic
  defdelegate card_reviews(param), to: Statistic
  defdelegate get_reviews_of_cards(param), to: Statistic
  defdelegate get_latest_review_id(param), to: Statistic
  defdelegate insert_reviews(param), to: Statistic

  defdelegate add_notes_from_file(param), to: AddNotesFromFile
end