mirror of
https://github.com/michaeldv/pit.git
synced 2025-12-10 08:25:34 +00:00
Some refactoring in tasks
This commit is contained in:
@@ -33,7 +33,8 @@ ulong pit_arg_number(char **arg, char *required)
|
|||||||
|
|
||||||
if (required && (!*arg || pit_arg_is_option(arg))) {
|
if (required && (!*arg || pit_arg_is_option(arg))) {
|
||||||
die("missing %s", required);
|
die("missing %s", required);
|
||||||
} else if (*arg) {
|
}
|
||||||
|
if (*arg) {
|
||||||
number = atol(*arg);
|
number = atol(*arg);
|
||||||
if (number == 0 && **arg != '0' && required) {
|
if (number == 0 && **arg != '0' && required) {
|
||||||
die("invalid %s value: %s", required, *arg);
|
die("invalid %s value: %s", required, *arg);
|
||||||
|
|||||||
80
src/task.c
80
src/task.c
@@ -13,13 +13,14 @@
|
|||||||
** DELETING TASKS:
|
** DELETING TASKS:
|
||||||
** pit task -d [number]
|
** pit task -d [number]
|
||||||
**
|
**
|
||||||
** SHOWING TASK:
|
** VIEWING TASK:
|
||||||
** pit task [-s number]
|
** pit task [[-v] number]
|
||||||
**
|
**
|
||||||
** LISTING TASKS:
|
** LISTING TASKS:
|
||||||
** pit task -s [all|open|closed] [-s status] [-d deadline] [-p priority]
|
** pit task -v [-s status] [-d deadline] [-p priority]
|
||||||
*/
|
*/
|
||||||
static void list_tasks(char *mode, char *status, char *deadline, ulong priority)
|
|
||||||
|
static void list_tasks(char *name, char *status, char *priority, time_t deadline)
|
||||||
{
|
{
|
||||||
pit_db_load();
|
pit_db_load();
|
||||||
|
|
||||||
@@ -86,22 +87,11 @@ static void delete_task(ulong number)
|
|||||||
|
|
||||||
static void update_task(ulong number, char *name, char *status, char *priority, time_t deadline)
|
static void update_task(ulong number, char *name, char *status, char *priority, time_t deadline)
|
||||||
{
|
{
|
||||||
printf("update task: #%lu, name: %s, status: %s, priority: %s, deadline: %s", number, name, status, priority, ctime(&deadline));
|
printf("update_task: #%lu, name: %s, status: %s, priority: %s, deadline: %s", number, name, status, priority, ctime(&deadline));
|
||||||
}
|
}
|
||||||
|
|
||||||
int pit_task(char *argv[])
|
static void get_status_priority_and_deadline(char **arg, char *status, char *priority, time_t *deadline)
|
||||||
{
|
{
|
||||||
char **arg = &argv[1];
|
|
||||||
char *name = NULL, *status = NULL, *priority = NULL;
|
|
||||||
time_t deadline = (time_t)0;
|
|
||||||
ulong number = 0;
|
|
||||||
|
|
||||||
if (!*arg) {
|
|
||||||
list_tasks(NULL, NULL, NULL, 0); /* ...with default paramaters. */
|
|
||||||
} else {
|
|
||||||
switch(pit_arg_option(arg)) {
|
|
||||||
case 'c': /* pit task -c name [-s status] [-p priority] [-d deadline] */
|
|
||||||
name = pit_arg_string(++arg, "task name");
|
|
||||||
while(*++arg) {
|
while(*++arg) {
|
||||||
switch(pit_arg_option(arg)) {
|
switch(pit_arg_option(arg)) {
|
||||||
case 's':
|
case 's':
|
||||||
@@ -111,17 +101,16 @@ int pit_task(char *argv[])
|
|||||||
priority = pit_arg_string(++arg, "task priority");
|
priority = pit_arg_string(++arg, "task priority");
|
||||||
break;
|
break;
|
||||||
case 'd':
|
case 'd':
|
||||||
deadline = pit_arg_time(++arg, "task deadline");
|
*deadline = pit_arg_time(++arg, "task deadline");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
die("invalid task option: %s", *arg);
|
die("invalid task option: %s", *arg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
create_task(name, status, priority, deadline);
|
}
|
||||||
break;
|
|
||||||
case 'u': /* pit task -u [number] [-n name] [-s status] [-d deadline] [-p priority] */
|
static void get_name_status_priority_and_deadline(char **arg, char *name, char *status, char *priority, time_t *deadline)
|
||||||
number = pit_arg_number(++arg, NULL);
|
{
|
||||||
if (!number) --arg;
|
|
||||||
while(*++arg) {
|
while(*++arg) {
|
||||||
switch(pit_arg_option(arg)) {
|
switch(pit_arg_option(arg)) {
|
||||||
case 'n':
|
case 'n':
|
||||||
@@ -134,12 +123,38 @@ int pit_task(char *argv[])
|
|||||||
priority = pit_arg_string(++arg, "task priority");
|
priority = pit_arg_string(++arg, "task priority");
|
||||||
break;
|
break;
|
||||||
case 'd':
|
case 'd':
|
||||||
deadline = pit_arg_time(++arg, "task deadline");
|
*deadline = pit_arg_time(++arg, "task deadline");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
die("invalid task option: %s", *arg);
|
die("invalid task option: %s", *arg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int pit_task(char *argv[])
|
||||||
|
{
|
||||||
|
char **arg = &argv[1];
|
||||||
|
char *name = NULL, *status = NULL, *priority = NULL;
|
||||||
|
time_t deadline = (time_t)0;
|
||||||
|
ulong number = 0L;
|
||||||
|
|
||||||
|
if (!*arg) {
|
||||||
|
list_tasks(NULL, NULL, NULL, 0); /* List all tasks (with default paramaters). */
|
||||||
|
} else { /* pit task [number] */
|
||||||
|
number = pit_arg_number(arg, NULL);
|
||||||
|
if (number) {
|
||||||
|
show_task(number);
|
||||||
|
} else {
|
||||||
|
switch(pit_arg_option(arg)) {
|
||||||
|
case 'c': /* pit task -c name [-s status] [-p priority] [-d deadline] */
|
||||||
|
name = pit_arg_string(++arg, "task name");
|
||||||
|
get_status_priority_and_deadline(arg, status, priority, &deadline);
|
||||||
|
create_task(name, status, priority, deadline);
|
||||||
|
break;
|
||||||
|
case 'u': /* pit task -u [number] [-n name] [-s status] [-d deadline] [-p priority] */
|
||||||
|
number = pit_arg_number(++arg, NULL);
|
||||||
|
if (!number) --arg;
|
||||||
|
get_name_status_priority_and_deadline(arg, name, status, priority, &deadline);
|
||||||
if (!name && !status && !priority && !deadline) {
|
if (!name && !status && !priority && !deadline) {
|
||||||
die("nothing to update");
|
die("nothing to update");
|
||||||
} else {
|
} else {
|
||||||
@@ -150,11 +165,22 @@ int pit_task(char *argv[])
|
|||||||
number = pit_arg_number(++arg, NULL);
|
number = pit_arg_number(++arg, NULL);
|
||||||
delete_task(number);
|
delete_task(number);
|
||||||
break;
|
break;
|
||||||
case 's': /* pit task -s [all|open|closed] [-s status] [-d deadline] [-p priority] */
|
case 'v': /* pit task -v [number | [-n name] [-s status] [-d deadline] [-p priority]] */
|
||||||
break;
|
|
||||||
default: /* pit task [number] */
|
|
||||||
number = pit_arg_number(++arg, NULL);
|
number = pit_arg_number(++arg, NULL);
|
||||||
|
if (number) {
|
||||||
show_task(number);
|
show_task(number);
|
||||||
|
} else {
|
||||||
|
get_name_status_priority_and_deadline(--arg, name, status, priority, &deadline);
|
||||||
|
if (!name && !status && !priority && !deadline) {
|
||||||
|
show_task(0);
|
||||||
|
} else {
|
||||||
|
list_tasks(name, status, priority, deadline);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
die("invalid task option: %s", *arg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user