A tool for adding anime to your anidb list.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

274 lignes
11KB

  1. #ifndef _API_H
  2. #define _API_H
  3. #include <stdint.h>
  4. #include <time.h>
  5. #include "error.h"
  6. #define API_VERSION "3"
  7. /* Maximum length of one response/request */
  8. #define API_BUFSIZE 1400
  9. /* Session key maximum size, including '\0' */
  10. #define API_SMAXSIZE 16
  11. /* Encryption salt maximum size, including '\0' */
  12. #define API_SALTMAXSIZE 16
  13. /* The session timeout in miliseconds */
  14. #define API_TIMEOUT 30 * 60 * 1000
  15. /* How many miliseconds to wait between sends */
  16. #define API_SENDWAIT 2 * 1000
  17. /* The number of packets that are exccempt from the ratelimit */
  18. #define API_FREESEND 5
  19. /* Long term wait between sends */
  20. #define API_SENDWAIT_LONG 4 * 1000
  21. /* After this many packets has been sent, use the longterm ratelimit */
  22. #define API_LONGTERM_PACKETS 100
  23. /* How much to wait between try agains? in ms */
  24. #define API_TRYAGAIN_TIME 60 * 1000
  25. #define API_MAX_TRYAGAIN 5
  26. enum api_code {
  27. APICODE_LOGIN_ACCEPTED = 200,
  28. APICODE_LOGIN_ACCEPTED_NEW_VERSION = 201,
  29. APICODE_LOGGED_OUT = 203,
  30. APICODE_RESOURCE = 205,
  31. APICODE_STATS = 206,
  32. APICODE_TOP = 207,
  33. APICODE_UPTIME = 208,
  34. APICODE_ENCRYPTION_ENABLED = 209,
  35. APICODE_MYLIST_ENTRY_ADDED = 210,
  36. APICODE_MYLIST_ENTRY_DELETED = 211,
  37. APICODE_ADDED_FILE = 214,
  38. APICODE_ADDED_STREAM = 215,
  39. APICODE_EXPORT_QUEUED = 217,
  40. APICODE_EXPORT_CANCELLED = 218,
  41. APICODE_ENCODING_CHANGED = 219,
  42. APICODE_FILE = 220,
  43. APICODE_MYLIST = 221,
  44. APICODE_MYLIST_STATS = 222,
  45. APICODE_WISHLIST = 223,
  46. APICODE_NOTIFICATION = 224,
  47. APICODE_GROUP_STATUS = 225,
  48. APICODE_WISHLIST_ENTRY_ADDED = 226,
  49. APICODE_WISHLIST_ENTRY_DELETED = 227,
  50. APICODE_WISHLIST_ENTRY_UPDATED = 228,
  51. APICODE_MULTIPLE_WISHLIST = 229,
  52. APICODE_ANIME = 230,
  53. APICODE_ANIME_BEST_MATCH = 231,
  54. APICODE_RANDOM_ANIME = 232,
  55. APICODE_ANIME_DESCRIPTION = 233,
  56. APICODE_REVIEW = 234,
  57. APICODE_CHARACTER = 235,
  58. APICODE_SONG = 236,
  59. APICODE_ANIMETAG = 237,
  60. APICODE_CHARACTERTAG = 238,
  61. APICODE_EPISODE = 240,
  62. APICODE_UPDATED = 243,
  63. APICODE_TITLE = 244,
  64. APICODE_CREATOR = 245,
  65. APICODE_NOTIFICATION_ENTRY_ADDED = 246,
  66. APICODE_NOTIFICATION_ENTRY_DELETED = 247,
  67. APICODE_NOTIFICATION_ENTRY_UPDATE = 248,
  68. APICODE_MULTIPLE_NOTIFICATION = 249,
  69. APICODE_GROUP = 250,
  70. APICODE_CATEGORY = 251,
  71. APICODE_BUDDY_LIST = 253,
  72. APICODE_BUDDY_STATE = 254,
  73. APICODE_BUDDY_ADDED = 255,
  74. APICODE_BUDDY_DELETED = 256,
  75. APICODE_BUDDY_ACCEPTED = 257,
  76. APICODE_BUDDY_DENIED = 258,
  77. APICODE_VOTED = 260,
  78. APICODE_VOTE_FOUND = 261,
  79. APICODE_VOTE_UPDATED = 262,
  80. APICODE_VOTE_REVOKED = 263,
  81. APICODE_HOT_ANIME = 265,
  82. APICODE_RANDOM_RECOMMENDATION = 266,
  83. APICODE_RANDOM_SIMILAR = 267,
  84. APICODE_NOTIFICATION_ENABLED = 270,
  85. APICODE_NOTIFYACK_SUCCESSFUL_MESSAGE = 281,
  86. APICODE_NOTIFYACK_SUCCESSFUL_NOTIFICATION = 282,
  87. APICODE_NOTIFICATION_STATE = 290,
  88. APICODE_NOTIFYLIST = 291,
  89. APICODE_NOTIFYGET_MESSAGE = 292,
  90. APICODE_NOTIFYGET_NOTIFY = 293,
  91. APICODE_SENDMESSAGE_SUCCESSFUL = 294,
  92. APICODE_USER_ID = 295,
  93. APICODE_CALENDAR = 297,
  94. APICODE_PONG = 300,
  95. APICODE_AUTHPONG = 301,
  96. APICODE_NO_SUCH_RESOURCE = 305,
  97. APICODE_API_PASSWORD_NOT_DEFINED = 309,
  98. APICODE_FILE_ALREADY_IN_MYLIST = 310,
  99. APICODE_MYLIST_ENTRY_EDITED = 311,
  100. APICODE_MULTIPLE_MYLIST_ENTRIES = 312,
  101. APICODE_WATCHED = 313,
  102. APICODE_SIZE_HASH_EXISTS = 314,
  103. APICODE_INVALID_DATA = 315,
  104. APICODE_STREAMNOID_USED = 316,
  105. APICODE_EXPORT_NO_SUCH_TEMPLATE = 317,
  106. APICODE_EXPORT_ALREADY_IN_QUEUE = 318,
  107. APICODE_EXPORT_NO_EXPORT_QUEUED_OR_IS_PROCESSING = 319,
  108. APICODE_NO_SUCH_FILE = 320,
  109. APICODE_NO_SUCH_ENTRY = 321,
  110. APICODE_MULTIPLE_FILES_FOUND = 322,
  111. APICODE_NO_SUCH_WISHLIST = 323,
  112. APICODE_NO_SUCH_NOTIFICATION = 324,
  113. APICODE_NO_GROUPS_FOUND = 325,
  114. APICODE_NO_SUCH_ANIME = 330,
  115. APICODE_NO_SUCH_DESCRIPTION = 333,
  116. APICODE_NO_SUCH_REVIEW = 334,
  117. APICODE_NO_SUCH_CHARACTER = 335,
  118. APICODE_NO_SUCH_SONG = 336,
  119. APICODE_NO_SUCH_ANIMETAG = 337,
  120. APICODE_NO_SUCH_CHARACTERTAG = 338,
  121. APICODE_NO_SUCH_EPISODE = 340,
  122. APICODE_NO_SUCH_UPDATES = 343,
  123. APICODE_NO_SUCH_TITLES = 344,
  124. APICODE_NO_SUCH_CREATOR = 345,
  125. APICODE_NO_SUCH_GROUP = 350,
  126. APICODE_NO_SUCH_CATEGORY = 351,
  127. APICODE_BUDDY_ALREADY_ADDED = 355,
  128. APICODE_NO_SUCH_BUDDY = 356,
  129. APICODE_BUDDY_ALREADY_ACCEPTED = 357,
  130. APICODE_BUDDY_ALREADY_DENIED = 358,
  131. APICODE_NO_SUCH_VOTE = 360,
  132. APICODE_INVALID_VOTE_TYPE = 361,
  133. APICODE_INVALID_VOTE_VALUE = 362,
  134. APICODE_PERMVOTE_NOT_ALLOWED = 363,
  135. APICODE_ALREADY_PERMVOTED = 364,
  136. APICODE_HOT_ANIME_EMPTY = 365,
  137. APICODE_RANDOM_RECOMMENDATION_EMPTY = 366,
  138. APICODE_RANDOM_SIMILAR_EMPTY = 367,
  139. APICODE_NOTIFICATION_DISABLED = 370,
  140. APICODE_NO_SUCH_ENTRY_MESSAGE = 381,
  141. APICODE_NO_SUCH_ENTRY_NOTIFICATION = 382,
  142. APICODE_NO_SUCH_MESSAGE = 392,
  143. APICODE_NO_SUCH_NOTIFY = 393,
  144. APICODE_NO_SUCH_USER = 394,
  145. APICODE_CALENDAR_EMPTY = 397,
  146. APICODE_NO_CHANGES = 399,
  147. APICODE_NOT_LOGGED_IN = 403,
  148. APICODE_NO_SUCH_MYLIST_FILE = 410,
  149. APICODE_NO_SUCH_MYLIST_ENTRY = 411,
  150. APICODE_MYLIST_UNAVAILABLE = 412,
  151. APICODE_LOGIN_FAILED = 500,
  152. APICODE_LOGIN_FIRST = 501,
  153. APICODE_ACCESS_DENIED = 502,
  154. APICODE_CLIENT_VERSION_OUTDATED = 503,
  155. APICODE_CLIENT_BANNED = 504,
  156. APICODE_ILLEGAL_INPUT_OR_ACCESS_DENIED = 505,
  157. APICODE_INVALID_SESSION = 506,
  158. APICODE_NO_SUCH_ENCRYPTION_TYPE = 509,
  159. APICODE_ENCODING_NOT_SUPPORTED = 519,
  160. APICODE_BANNED = 555,
  161. APICODE_UNKNOWN_COMMAND = 598,
  162. APICODE_INTERNAL_SERVER_ERROR = 600,
  163. APICODE_ANIDB_OUT_OF_SERVICE = 601,
  164. APICODE_SERVER_BUSY = 602,
  165. APICODE_NO_DATA = 603,
  166. APICODE_TIMEOUT = 604,
  167. APICODE_API_VIOLATION = 666,
  168. APICODE_PUSHACK_CONFIRMED = 701,
  169. APICODE_NO_SUCH_PACKET_PENDING = 702,
  170. APICODE_VERSION = 998,
  171. };
  172. enum mylist_state {
  173. MYLIST_STATE_UNKNOWN = 0,
  174. MYLIST_STATE_INTERNAL,
  175. MYLIST_STATE_EXTERNAL,
  176. MYLIST_STATE_DELETED,
  177. MYLIST_STATE_REMOTE,
  178. };
  179. enum file_state {
  180. FILE_STATE_NORMAL = 0,
  181. FILE_STATE_CORRUPT,
  182. FILE_STATE_SELF_EDIT,
  183. FILE_STATE_SELF_RIP = 10,
  184. FILE_STATE_ON_DVD,
  185. FILE_STATE_ON_VHS,
  186. FILE_STATE_ON_TV,
  187. FILE_STATE_IN_THEATERS,
  188. FILE_STATE_STREAMED,
  189. FILE_STATE_OTHER = 100,
  190. };
  191. struct api_mylistadd_opts {
  192. enum mylist_state state;
  193. bool watched;
  194. uint64_t wdate;
  195. struct {
  196. bool state_set : 1;
  197. bool watched_set : 1;
  198. bool wdate_set : 1;
  199. };
  200. };
  201. struct api_version_result {
  202. char version_str[40];
  203. };
  204. struct api_auth_result {
  205. union {
  206. char session_key[API_SMAXSIZE];
  207. /* free() */
  208. char *banned_reason;
  209. };
  210. };
  211. struct api_encrypt_result {
  212. char salt[API_SALTMAXSIZE];
  213. };
  214. struct api_uptime_result {
  215. int32_t ms;
  216. };
  217. struct api_mylistadd_result {
  218. union {
  219. uint64_t new_id;
  220. struct {
  221. uint64_t lid, fid, eid, aid, gid, date, viewdate;
  222. /* free() if != NULL ofc */
  223. char *storage, *source, *other;
  224. enum mylist_state state;
  225. enum file_state filestate;
  226. };
  227. };
  228. };
  229. struct api_mylistmod_result {
  230. uint32_t n_edits;
  231. };
  232. #define e(n) struct api_##n##_result n
  233. struct api_result {
  234. uint16_t code;
  235. union {
  236. struct api_version_result version;
  237. struct api_auth_result auth;
  238. struct api_uptime_result uptime;
  239. e(mylistadd);
  240. e(encrypt);
  241. e(mylistmod);
  242. };
  243. };
  244. #undef e
  245. enum error api_init(bool auth);
  246. void api_free();
  247. enum error api_cmd_version(struct api_result *res);
  248. enum error api_cmd_uptime(struct api_result *res);
  249. enum error api_cmd_mylistadd(int64_t size, const uint8_t *hash,
  250. struct api_mylistadd_opts *opts, struct api_result *res);
  251. enum error api_cmd_mylistmod(uint64_t lid, struct api_mylistadd_opts *opts,
  252. struct api_result *res);
  253. #endif /* _API_H */