// This is generated file. Do not modify directly.
// Path to the code generator:
// tools/generate_library_loader/generate_library_loader.py .

#include "brightray/browser/linux/libnotify_loader.h"

#include <dlfcn.h>

LibNotifyLoader::LibNotifyLoader() : loaded_(false) {}

LibNotifyLoader::~LibNotifyLoader() {
  CleanUp(loaded_);
}

bool LibNotifyLoader::Load(const std::string& library_name) {
  if (loaded_)
    return false;

  library_ = dlopen(library_name.c_str(), RTLD_LAZY);
  if (!library_)
    return false;

  notify_is_initted = reinterpret_cast<decltype(this->notify_is_initted)>(
      dlsym(library_, "notify_is_initted"));
  if (!notify_is_initted) {
    CleanUp(true);
    return false;
  }

  notify_init = reinterpret_cast<decltype(this->notify_init)>(
      dlsym(library_, "notify_init"));
  if (!notify_init) {
    CleanUp(true);
    return false;
  }

  notify_get_server_info =
      reinterpret_cast<decltype(this->notify_get_server_info)>(
          dlsym(library_, "notify_get_server_info"));
  if (!notify_get_server_info) {
    CleanUp(true);
    return false;
  }

  notify_get_server_caps =
      reinterpret_cast<decltype(this->notify_get_server_caps)>(
          dlsym(library_, "notify_get_server_caps"));
  if (!notify_get_server_caps) {
    CleanUp(true);
    return false;
  }

  notify_notification_new =
      reinterpret_cast<decltype(this->notify_notification_new)>(
          dlsym(library_, "notify_notification_new"));
  if (!notify_notification_new) {
    CleanUp(true);
    return false;
  }

  notify_notification_add_action =
      reinterpret_cast<decltype(this->notify_notification_add_action)>(
          dlsym(library_, "notify_notification_add_action"));
  if (!notify_notification_add_action) {
    CleanUp(true);
    return false;
  }

  notify_notification_set_image_from_pixbuf = reinterpret_cast<decltype(
      this->notify_notification_set_image_from_pixbuf)>(
      dlsym(library_, "notify_notification_set_image_from_pixbuf"));
  if (!notify_notification_set_image_from_pixbuf) {
    CleanUp(true);
    return false;
  }

  notify_notification_set_timeout =
      reinterpret_cast<decltype(this->notify_notification_set_timeout)>(
          dlsym(library_, "notify_notification_set_timeout"));
  if (!notify_notification_set_timeout) {
    CleanUp(true);
    return false;
  }

  notify_notification_set_hint_string =
      reinterpret_cast<decltype(this->notify_notification_set_hint_string)>(
          dlsym(library_, "notify_notification_set_hint_string"));
  if (!notify_notification_set_hint_string) {
    CleanUp(true);
    return false;
  }

  notify_notification_show =
      reinterpret_cast<decltype(this->notify_notification_show)>(
          dlsym(library_, "notify_notification_show"));
  if (!notify_notification_show) {
    CleanUp(true);
    return false;
  }

  notify_notification_close =
      reinterpret_cast<decltype(this->notify_notification_close)>(
          dlsym(library_, "notify_notification_close"));
  if (!notify_notification_close) {
    CleanUp(true);
    return false;
  }

  loaded_ = true;
  return true;
}

void LibNotifyLoader::CleanUp(bool unload) {
  if (unload) {
    dlclose(library_);
    library_ = NULL;
  }
  loaded_ = false;
  notify_is_initted = NULL;
  notify_init = NULL;
  notify_get_server_info = NULL;
  notify_get_server_caps = NULL;
  notify_notification_new = NULL;
  notify_notification_add_action = NULL;
  notify_notification_set_image_from_pixbuf = NULL;
  notify_notification_set_timeout = NULL;
  notify_notification_set_hint_string = NULL;
  notify_notification_show = NULL;
  notify_notification_close = NULL;
}
