task/helper.js

  1. 'use strict';
  2. const RTMTask = require('./index.js');
  3. const taskIds = require('../utils/taskIds.js');
  4. /**
  5. * API Call: rtm.tasks.getList
  6. * @param user RTMUser
  7. * @param [filter] Task Filter
  8. * @param callback Callback function(err, tasks)
  9. * @private
  10. */
  11. function get(user, filter, callback) {
  12. let params = {};
  13. if ( callback === undefined && typeof filter === 'function' ) {
  14. callback = filter;
  15. }
  16. else if ( filter !== '' ) {
  17. params.filter = filter;
  18. }
  19. user.get('rtm.tasks.getList', params, function(err, resp) {
  20. if ( err ) {
  21. return callback(err);
  22. }
  23. // List of task to return
  24. let rtn = [];
  25. // Parse each List
  26. let lists = resp.tasks.list;
  27. if ( lists !== undefined ) {
  28. for ( let i = 0; i < lists.length; i++ ) {
  29. let list = lists[i];
  30. // Parse the List's TaskSeries
  31. if ( list.taskseries ) {
  32. if ( !Array.isArray(list.taskseries) ) {
  33. list.taskseries = [list.taskseries];
  34. }
  35. for ( let j = 0; j < list.taskseries.length; j++ ) {
  36. let series = list.taskseries[j];
  37. if ( series.name === "Add Support for Sub Tasks" ) {
  38. console.log(series);
  39. }
  40. // Parse the TaskSeries' Tasks
  41. if ( !Array.isArray(series.task) ) {
  42. series.task = [series.task];
  43. }
  44. for ( let k = 0; k < series.task.length; k++ ) {
  45. let task = series.task[k];
  46. rtn.push(new RTMTask(user.id, list.id, series, task));
  47. }
  48. }
  49. }
  50. }
  51. }
  52. // Save the task indices
  53. taskIds.save();
  54. // Return with the callback
  55. return callback(null, rtn);
  56. });
  57. }
  58. /**
  59. * API Call rtm.tasks.add
  60. * Note: this uses RTM's 'smart add'
  61. * @param {string} name Task Name (or smart add syntax)
  62. * @param {{due: *, priority: *, list: *, tags: *, location: *, start: *, repeat: *, estimate: *, to: *, url: *, note: *}} props Additional task properties
  63. * @param user RTM User
  64. * @param callback Callback function(err)
  65. * @private
  66. */
  67. function add(name, props, user, callback) {
  68. // Parse the props keys
  69. if ( props.due ) {
  70. name = name + " ^" + props.due;
  71. }
  72. if ( props.priority ) {
  73. name = name + " !" + props.priority
  74. }
  75. if ( props.list ) {
  76. name = name + " #" + props.list;
  77. }
  78. if ( props.tags ) {
  79. if ( !Array.isArray(props.tags) ) {
  80. props.tags = [props.tags];
  81. }
  82. for ( let i = 0; i < props.tags.length; i++ ) {
  83. name = name + " #" + props.tags[i];
  84. }
  85. }
  86. if ( props.location ) {
  87. name = name + " @" + props.location;
  88. }
  89. if ( props.start ) {
  90. name = name + " ~" + props.start;
  91. }
  92. if ( props.repeat ) {
  93. name = name + " *" + props.repeat;
  94. }
  95. if ( props.estimate ) {
  96. name = name + " =" + props.estimate;
  97. }
  98. if ( props.to ) {
  99. name = name + " +" + props.to;
  100. }
  101. if ( props.url ) {
  102. name = name + " " + props.url;
  103. }
  104. if ( props.note ) {
  105. name = name + " //" + props.note;
  106. }
  107. // Set the request params
  108. let params = {
  109. timeline: user.timeline,
  110. name: name,
  111. parse: '1'
  112. };
  113. // Make the API Request
  114. user.get('rtm.tasks.add', params, function(err) {
  115. return callback(err);
  116. });
  117. }
  118. /**
  119. * API Call: rtm.tasks.complete
  120. * @param {number} listId RTM List ID
  121. * @param {number} taskSeriesId RTM Task Series ID
  122. * @param {number} taskId RTM Task ID
  123. * @param {RTMUser} user RTM User
  124. * @param {function} callback function(err)
  125. * @private
  126. */
  127. function complete(listId, taskSeriesId, taskId, user, callback) {
  128. let params = {
  129. timeline: user.timeline,
  130. list_id: listId,
  131. taskseries_id: taskSeriesId,
  132. task_id: taskId
  133. };
  134. user.get('rtm.tasks.complete', params, function(err) {
  135. return callback(err);
  136. });
  137. }
  138. /**
  139. * API Call: rtm.tasks.uncomplete
  140. * @param {number} listId RTM List ID
  141. * @param {number} taskSeriesId RTM Task Series ID
  142. * @param {number} taskId RTM Task ID
  143. * @param {RTMUser} user RTM User
  144. * @param {function} callback function(err)
  145. * @private
  146. */
  147. function uncomplete(listId, taskSeriesId, taskId, user, callback) {
  148. let params = {
  149. timeline: user.timeline,
  150. list_id: listId,
  151. taskseries_id: taskSeriesId,
  152. task_id: taskId
  153. };
  154. user.get('rtm.tasks.uncomplete', params, function(err) {
  155. return callback(err);
  156. });
  157. }
  158. /**
  159. * API Call: rtm.tasks.setPriority
  160. * @param {number} listId RTM List ID
  161. * @param {number} taskSeriesId RTM Task Series ID
  162. * @param {number} taskId RTM Task ID
  163. * @param {int} priority Task Priority
  164. * @param {RTMUser} user RTM User
  165. * @param {function} callback function(err)
  166. * @private
  167. */
  168. function priority(listId, taskSeriesId, taskId, priority, user, callback) {
  169. let params = {
  170. timeline: user.timeline,
  171. list_id: listId,
  172. taskseries_id: taskSeriesId,
  173. task_id: taskId,
  174. priority: priority
  175. };
  176. user.get('rtm.tasks.setPriority', params, function(err) {
  177. return callback(err);
  178. });
  179. }
  180. /**
  181. * API Call: rtm.tasks.addTags
  182. * @param {number} listId RTM List ID
  183. * @param {number} taskSeriesId RTM Task Series ID
  184. * @param {number} taskId RTM Task ID
  185. * @param {string[]} tags Tags to Add
  186. * @param {RTMUser} user RTM User
  187. * @param {function} callback function(err)
  188. * @private
  189. */
  190. function addTags(listId, taskSeriesId, taskId, tags, user, callback) {
  191. let params = {
  192. timeline: user.timeline,
  193. list_id: listId,
  194. taskseries_id: taskSeriesId,
  195. task_id: taskId,
  196. tags: tags.join(',')
  197. };
  198. user.get('rtm.tasks.addTags', params, function(err) {
  199. return callback(err);
  200. });
  201. }
  202. /**
  203. * API Call: rtm.tasks.notes.add
  204. * @param {number} listId RTM List ID
  205. * @param {number} taskSeriesId RTM Task Series ID
  206. * @param {number} taskId RTM Task ID
  207. * @param {string} title Title of Note
  208. * @param {string|string[]} notes Note(s) to add to the Task
  209. * @param {RTMUser} user RTM User
  210. * @param {function} callback function(err)
  211. * @private
  212. */
  213. function addNotes(listId, taskSeriesId, taskId, title, notes, user, callback) {
  214. let params = {
  215. timeline: user.timeline,
  216. list_id: listId,
  217. taskseries_id: taskSeriesId,
  218. task_id: taskId,
  219. note_title: title,
  220. note_text: notes
  221. };
  222. user.get('rtm.tasks.notes.add', params, function(err) {
  223. return callback(err);
  224. });
  225. }
  226. /**
  227. * API Call: rtm.tasks.delete
  228. * @param {number} listId RTM List ID
  229. * @param {number} taskSeriesId RTM Task Series ID
  230. * @param {number} taskId RTM Task ID
  231. * @param {RTMUser} user RTM User
  232. * @param {function} callback function(err)
  233. * @private
  234. */
  235. function remove(listId, taskSeriesId, taskId, user, callback) {
  236. let params = {
  237. timeline: user.timeline,
  238. list_id: listId,
  239. taskseries_id: taskSeriesId,
  240. task_id: taskId,
  241. };
  242. user.get('rtm.tasks.delete', params, function(err) {
  243. return callback(err);
  244. });
  245. }
  246. /**
  247. * API Call: rtm.tasks.movePriority
  248. * @param {number} listId RTM List ID
  249. * @param {number} taskSeriesId RTM Task Series ID
  250. * @param {number} taskId RTM Task ID
  251. * @param {string} direction Direction to move 'up' or 'down'
  252. * @param {RTMUser} user RTM User
  253. * @param {function} callback function(err)
  254. * @private
  255. */
  256. function movePriority(listId, taskSeriesId, taskId, direction, user, callback) {
  257. if ( direction.toLowerCase() !== 'up' && direction.toLowerCase() !== 'down' ) {
  258. throw "Incorrect priority direction. Must be either 'up' or 'down'";
  259. }
  260. let params = {
  261. timeline: user.timeline,
  262. list_id: listId,
  263. taskseries_id: taskSeriesId,
  264. task_id: taskId,
  265. direction: direction.toLowerCase()
  266. };
  267. user.get('rtm.tasks.movePriority', params, function(err) {
  268. return callback(err);
  269. });
  270. }
  271. /**
  272. * API Call: rtm.tasks.moveTo
  273. * @param {number} listId RTM List ID (original)
  274. * @param {number} taskSeriesId RTM Task Series ID
  275. * @param {number} taskId RTM Task ID
  276. * @param {number} toListId RTM List ID (new)
  277. * @param {RTMUser} user RTM User
  278. * @param {function} callback function(err)
  279. * @private
  280. */
  281. function move(listId, taskSeriesId, taskId, toListId, user, callback) {
  282. let params = {
  283. timeline: user.timeline,
  284. from_list_id: listId,
  285. taskseries_id: taskSeriesId,
  286. task_id: taskId,
  287. to_list_id: toListId
  288. };
  289. user.get('rtm.tasks.moveTo', params, function(err) {
  290. return callback(err);
  291. });
  292. }
  293. /**
  294. * API Call: rtm.tasks.postpone
  295. * @param {number} listId RTM List ID
  296. * @param {number} taskSeriesId RTM Task Series ID
  297. * @param {number} taskId RTM Task ID
  298. * @param {RTMUser} user RTM User
  299. * @param {function} callback function(err)
  300. * @private
  301. */
  302. function postpone(listId, taskSeriesId, taskId, user, callback) {
  303. let params = {
  304. timeline: user.timeline,
  305. list_id: listId,
  306. taskseries_id: taskSeriesId,
  307. task_id: taskId
  308. };
  309. user.get('rtm.tasks.postpone', params, function(err) {
  310. return callback(err);
  311. });
  312. }
  313. /**
  314. * API Call: rtm.tasks.removeTags
  315. * @param {number} listId RTM List ID
  316. * @param {number} taskSeriesId RTM Task Series ID
  317. * @param {number} taskId RTM Task ID
  318. * @param {string[]} tags Tags to Remove
  319. * @param {RTMUser} user RTM User
  320. * @param {function} callback function(err)
  321. * @private
  322. */
  323. function removeTags(listId, taskSeriesId, taskId, tags, user, callback) {
  324. let params = {
  325. timeline: user.timeline,
  326. list_id: listId,
  327. taskseries_id: taskSeriesId,
  328. task_id: taskId,
  329. tags: tags.join(',')
  330. };
  331. user.get('rtm.tasks.removeTags', params, function(err) {
  332. return callback(err);
  333. });
  334. }
  335. /**
  336. * API Call: rtm.tasks.setDueDate
  337. * @param {number} listId RTM List ID
  338. * @param {number} taskSeriesId RTM Task Series ID
  339. * @param {number} taskId RTM Task ID
  340. * @param {string} due Task Due Date (will be parsed by RTM)
  341. * @param {RTMUser} user RTM User
  342. * @param {function} callback function(err)
  343. * @private
  344. */
  345. function setDueDate(listId, taskSeriesId, taskId, due, user, callback) {
  346. let params = {
  347. timeline: user.timeline,
  348. list_id: listId,
  349. taskseries_id: taskSeriesId,
  350. task_id: taskId,
  351. due: due,
  352. parse: 1
  353. };
  354. user.get('rtm.tasks.setDueDate', params, function(err) {
  355. return callback(err);
  356. });
  357. }
  358. /**
  359. * API Call: rtm.tasks.setStartDate
  360. * @param {number} listId RTM List ID
  361. * @param {number} taskSeriesId RTM Task Series ID
  362. * @param {number} taskId RTM Task ID
  363. * @param {string} start Task Start Date/Time (will be parsed by RTM)
  364. * @param {RTMUser} user RTM User
  365. * @param {Function} callback Callback function(err)
  366. */
  367. function setStartDate(listId, taskSeriesId, taskId, start, user, callback) {
  368. let params = {
  369. timeline: user.timeline,
  370. list_id: listId,
  371. taskseries_id: taskSeriesId,
  372. task_id: taskId,
  373. start: start,
  374. parse: 1
  375. };
  376. user.get('rtm.tasks.setStartDate', params, function(err) {
  377. return callback(err);
  378. });
  379. }
  380. /**
  381. * API Call: rtm.tasks.setName
  382. * @param {number} listId RTM List ID
  383. * @param {number} taskSeriesId RTM Task Series ID
  384. * @param {number} taskId RTM Task ID
  385. * @param {string} name New Task Name
  386. * @param {RTMUser} user RTM User
  387. * @param {function} callback function(err)
  388. * @private
  389. */
  390. function setName(listId, taskSeriesId, taskId, name, user, callback) {
  391. let params = {
  392. timeline: user.timeline,
  393. list_id: listId,
  394. taskseries_id: taskSeriesId,
  395. task_id: taskId,
  396. name: name
  397. };
  398. user.get('rtm.tasks.setName', params, function(err) {
  399. return callback(err);
  400. });
  401. }
  402. /**
  403. * API Call: rtm.tasks.setURL
  404. * @param {number} listId RTM List ID
  405. * @param {number} taskSeriesId RTM Task Series ID
  406. * @param {number} taskId RTM Task ID
  407. * @param {string} url New Task URL
  408. * @param {RTMUser} user RTM User
  409. * @param {function} callback function(err)
  410. * @private
  411. */
  412. function setURL(listId, taskSeriesId, taskId, url, user, callback) {
  413. let params = {
  414. timeline: user.timeline,
  415. list_id: listId,
  416. taskseries_id: taskSeriesId,
  417. task_id: taskId,
  418. url: url
  419. };
  420. user.get('rtm.tasks.setURL', params, function(err) {
  421. return callback(err);
  422. });
  423. }
  424. module.exports = {
  425. get: get,
  426. add: add,
  427. complete: complete,
  428. uncomplete: uncomplete,
  429. priority: priority,
  430. addNotes: addNotes,
  431. addTags: addTags,
  432. remove: remove,
  433. movePriority: movePriority,
  434. move: move,
  435. postpone: postpone,
  436. removeTags: removeTags,
  437. setDueDate: setDueDate,
  438. setStartDate: setStartDate,
  439. setName: setName,
  440. setURL: setURL
  441. };