Developing for HotdogEd

HotdogEd is pluggable software. It hosts an sqlite3 database and provides methods of accessing it under Android via the content-provider mechanism.

If you would like to create a plugin (i.e. you want a 3-rd party FTN-mailer and tosser), you can access the content by the following URIs:

  • content://com.pushkin.hotdoged.provider/notifications - get a list of notifications
  • content://com.pushkin.hotdoged.provider/templates/# - access the message template by _id
  • content://com.pushkin.hotdoged.provider/filters - get a list of filters
  • content://com.pushkin.hotdoged.provider/filters/# - access the filter by _id
  • content://com.pushkin.hotdoged.provider/scores - get a list of scores
  • content://com.pushkin.hotdoged.provider/scores/# - access the score by _id
  • content://com.pushkin.hotdoged.provider/addresses - get a list of addresses
  • content://com.pushkin.hotdoged.provider/addresses/# - access the address by _id
  • content://com.pushkin.hotdoged.provider/Categories - get a list of categories
  • content://com.pushkin.hotdoged.provider/Categories/# - access the category by _id
  • content://com.pushkin.hotdoged.provider/Categories/* - access the category by name
  • content://com.pushkin.hotdoged.provider/servers, - get a list of servers
  • content://com.pushkin.hotdoged.provider/*/servers, - get a list of servers for category (by category name)
  • content://com.pushkin.hotdoged.provider/servers/# - access the server by _id
  • content://com.pushkin.hotdoged.provider/*/servers/# - access the server by _id (for the category)
  • content://com.pushkin.hotdoged.provider/*/servers/#/groups - get a list of groups (for category name and server _id)
  • content://com.pushkin.hotdoged.provider/groups/# - access the group by _id
  • content://com.pushkin.hotdoged.provider/*/servers/#/groups/# - access the group by _id (for category name and server _id)
  • content://com.pushkin.hotdoged.provider/*/servers/#/groups#/items - get a list of messages (for category name, server _id and group _id)
  • content://com.pushkin.hotdoged.provider/*/servers/#/groups#/items/# - access the message by _id (for category name, server _id and group _id)
  • content://com.pushkin.hotdoged.provider/*/items - get a list of messages (for category name)
  • content://com.pushkin.hotdoged.provider/*/items/# - access the message by _id (for category name)
  • content://com.pushkin.hotdoged.provider/*/servers/#/groups#/filters - get a list of filters (for category name, server _id and group _id)
  • content://com.pushkin.hotdoged.provider/*/servers/#/groups#/filters/# - access the filter by _id (for category name, server _id and group _id)

There are some more URIs that are intended for internal purposes.

Here is a database scheme actual for 2.13.x:

CREATE TABLE grouptypes
  (
     _id    INTEGER PRIMARY KEY
     , code TEXT
  );

CREATE TABLE templates
  (
     _id           INTEGER PRIMARY KEY
     , template    TEXT
     , template_r  TEXT
     , template_f  TEXT
     , template_aa TEXT
  );

CREATE TABLE servers
  (
     _id                         INTEGER PRIMARY KEY
     , category_id               INTEGER
     , template_id               INTEGER
     , server_active             INTEGER
     , server_name               TEXT
     , server_ip                 TEXT
     , server_description        TEXT
     , server_codepage           TEXT
     , server_auth_enable        INTEGER
     , keep_msg_amount_per_group INTEGER
     , keep_msg_days_per_group   INTEGER
     , user_name                 TEXT
     , user_address              TEXT
     , server_quoting            TEXT
     , signature                 TEXT
     , custom_headers            TEXT
     , outputheadersformat       INTEGER
     , origin                    TEXT
     , schedule_time             INT
     , last_sync                 INT
     , add_int_01                INT
     , add_int_02                INT
     , add_info_01               TEXT
     , areasurl                  TEXT
     , domain                    TEXT,
     FOREIGN KEY(category_id) REFERENCES categories(_id) ON DELETE CASCADE
  );

CREATE TABLE groups
  (
     _id                         INTEGER PRIMARY KEY
     , server_id                 INTEGER
     , grouptype_id              INTEGER
     , template_id               INTEGER
     , invisible                 INTEGER
     , NAME                      TEXT
     , description               TEXT
     , filter_id                 INTEGER
     , server_codepage           TEXT
     , keep_msg_amount_per_group INTEGER
     , keep_msg_days_per_group   INTEGER
     , user_name                 TEXT
     , user_address              TEXT
     , server_quoting            TEXT
     , new_msgs                  INTEGER
     , last_read                 INTEGER
     , last_downloaded           INTEGER
     , purge_read                INTEGER
     , signature                 TEXT
     , custom_headers            TEXT
     , purged                    INTEGER
     , notify                    INT
     , include_special           INT
     , last_notified             INT,
     FOREIGN KEY(server_id) REFERENCES servers(_id) ON DELETE CASCADE,
     FOREIGN KEY(template_id) REFERENCES templates(_id),
     FOREIGN KEY(grouptype_id) REFERENCES grouptypes(_id)
  );

CREATE TABLE items_nntp
  (
     _id           INTEGER PRIMARY KEY
     , group_id    INTEGER
     , article_id  INTEGER
     , from_name   TEXT
     , to_name     TEXT
     , subject     TEXT
     , date        INTEGER
     , message_id  TEXT
     , in_reply_to TEXT
     , ref         TEXT
     , article     TEXT
     , READ        INTEGER
     , starred     INTEGER
     , add_info_01 TEXT
     , tree        INTEGER,
     FOREIGN KEY(group_id) REFERENCES groups(_id) ON DELETE CASCADE
  );

CREATE TABLE items_ftn
  (
     _id           INTEGER PRIMARY KEY
     , group_id    INTEGER
     , from_name   TEXT
     , from_addr   TEXT
     , to_name     TEXT
     , to_addr     TEXT
     , subject     TEXT
     , date        INTEGER
     , message_id  TEXT
     , reply_to    TEXT
     , article     TEXT
     , READ        INTEGER
     , starred     INTEGER
     , add_info_01 TEXT
     , tree        INTEGER,
     FOREIGN KEY(group_id) REFERENCES groups(_id) ON DELETE CASCADE
  );

CREATE TABLE filters
  (
     _id                INTEGER PRIMARY KEY
     , group_id         INTEGER
     , NAME             TEXT
     , description      TEXT
     , filter_type      INTEGER
     , parent_filter    INTEGER
     , field            INTEGER
     , filter_relation  INTEGER
     , field_value      TEXT
     , field_value_type INTEGER,
     FOREIGN KEY(group_id) REFERENCES groups(_id) ON DELETE CASCADE,
     FOREIGN KEY(parent_filter) REFERENCES filters(_id) ON DELETE CASCADE
  );

CREATE TABLE scores
  (
     _id         INTEGER PRIMARY KEY
     , NAME      TEXT
     , filter_id INTEGER
     , rate      INTEGER
     , rate_type INTEGER,
     FOREIGN KEY(filter_id) REFERENCES filters(_id) ON DELETE CASCADE
  );

CREATE TABLE address_book
  (
     _id           INTEGER PRIMARY KEY
     , category_id INTEGER
     , address     TEXT
     , NAME        TEXT
     , add_info_01 TEXT,
     FOREIGN KEY(category_id) REFERENCES categories(_id) ON DELETE CASCADE
  ); 


You are free to use this data as you like :) If you have any questions or would like to develop some other provider (and extend category list), please feel free to contact me.