io_export_data() and io_get_export_stream() created
io_export_header(), io_export_footer(), io_export_todo() and io_export_apoints() created
This commit is contained in:
parent
f9e1143c0a
commit
151f4996c2
130
src/io.c
130
src/io.c
@ -1,4 +1,4 @@
|
|||||||
/* $calcurse: io.c,v 1.10 2007/03/10 15:56:32 culot Exp $ */
|
/* $calcurse: io.c,v 1.11 2007/03/11 15:22:39 culot Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calcurse - text-based organizer
|
* Calcurse - text-based organizer
|
||||||
@ -46,6 +46,99 @@
|
|||||||
#include "io.h"
|
#include "io.h"
|
||||||
#include "vars.h"
|
#include "vars.h"
|
||||||
|
|
||||||
|
static FILE *io_get_export_stream(void);
|
||||||
|
static void io_export_header(FILE *stream);
|
||||||
|
static void io_export_footer(FILE *stream);
|
||||||
|
static void io_export_apoints(FILE *stream);
|
||||||
|
static void io_export_todo(FILE *stream);
|
||||||
|
|
||||||
|
/* Ask user for a file name to export data to. */
|
||||||
|
FILE *
|
||||||
|
io_get_export_stream(void)
|
||||||
|
{
|
||||||
|
FILE *stream;
|
||||||
|
char *home, *stream_name;
|
||||||
|
char *question =
|
||||||
|
_("Choose the file used to export calcurse data:");
|
||||||
|
char *wrong_name =
|
||||||
|
_("The file cannot be accessed, please enter another file name.");
|
||||||
|
char *press_enter =
|
||||||
|
_("Press [ENTER] to continue.");
|
||||||
|
|
||||||
|
stream = NULL;
|
||||||
|
stream_name = (char *)malloc(MAX_LENGTH);
|
||||||
|
home = getenv("HOME");
|
||||||
|
if (home == NULL)
|
||||||
|
home = ".";
|
||||||
|
snprintf(stream_name, MAX_LENGTH, "%s/calcurse.ics", home);
|
||||||
|
|
||||||
|
while (stream == NULL) {
|
||||||
|
status_mesg(question, "");
|
||||||
|
updatestring(swin, &stream_name, 0, 1);
|
||||||
|
stream = fopen(stream_name, "w");
|
||||||
|
if (stream == NULL) {
|
||||||
|
status_mesg(wrong_name, press_enter);
|
||||||
|
wgetch(swin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(stream_name);
|
||||||
|
|
||||||
|
return (stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Export header. */
|
||||||
|
void
|
||||||
|
io_export_header(FILE *stream)
|
||||||
|
{
|
||||||
|
fprintf(stream, "BEGIN:VCALENDAR\n");
|
||||||
|
fprintf(stream, "PROID:-//calcurse/ical//NONSGML 1.0//EN\n");
|
||||||
|
fprintf(stream, "VERSION:2.0\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Export footer. */
|
||||||
|
void
|
||||||
|
io_export_footer(FILE *stream)
|
||||||
|
{
|
||||||
|
fprintf(stream, "END:VCALENDAR\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Export appointments. */
|
||||||
|
void
|
||||||
|
io_export_apoints(FILE *stream)
|
||||||
|
{
|
||||||
|
apoint_llist_node_t *i;
|
||||||
|
struct tm *lt;
|
||||||
|
time_t t;
|
||||||
|
|
||||||
|
pthread_mutex_lock(&(alist_p->mutex));
|
||||||
|
for (i = alist_p->root; i != 0; i = i->next) {
|
||||||
|
t = i->start;
|
||||||
|
lt = localtime(&t);
|
||||||
|
fprintf(stream, "BEGIN:VEVENT\n");
|
||||||
|
fprintf(stream, "DTSTART:%04d%02d%02dT%02d%02d%02d\n",
|
||||||
|
lt->tm_year + 1900, lt->tm_mon + 1, lt->tm_mday,
|
||||||
|
lt->tm_hour, lt->tm_min, lt->tm_sec);
|
||||||
|
fprintf(stream, "DURATION:P%ldS\n", i->dur);
|
||||||
|
fprintf(stream, "SUMMARY:%s\n", i->mesg);
|
||||||
|
fprintf(stream, "END:VEVENT\n");
|
||||||
|
}
|
||||||
|
pthread_mutex_unlock(&(alist_p->mutex));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Export todo items. */
|
||||||
|
void
|
||||||
|
io_export_todo(FILE *stream)
|
||||||
|
{
|
||||||
|
struct todo_s *i;
|
||||||
|
|
||||||
|
for (i = todolist; i != 0; i = i->next) {
|
||||||
|
fprintf(stream, "BEGIN:VTODO\n");
|
||||||
|
fprintf(stream, "PRIORITY:%d\n", i->id);
|
||||||
|
fprintf(stream, "SUMMARY:%s\n", i->mesg);
|
||||||
|
fprintf(stream, "END:VTODO\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialization of data paths. The argument cfile is the variable
|
* Initialization of data paths. The argument cfile is the variable
|
||||||
* which contains the calendar file. If none is given, then the default
|
* which contains the calendar file. If none is given, then the default
|
||||||
@ -556,3 +649,38 @@ progress_bar(bool save, int progress)
|
|||||||
wrefresh(swin);
|
wrefresh(swin);
|
||||||
usleep(sleep_time);
|
usleep(sleep_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Export calcurse data. */
|
||||||
|
void
|
||||||
|
io_export_data(export_mode_t mode)
|
||||||
|
{
|
||||||
|
FILE *stream;
|
||||||
|
char *wrong_mode =
|
||||||
|
_("FATAL ERROR in io_export_data: wrong export mode\n");
|
||||||
|
|
||||||
|
switch (mode) {
|
||||||
|
case IO_EXPORT_NONINTERACTIVE:
|
||||||
|
stream = stdout;
|
||||||
|
break;
|
||||||
|
case IO_EXPORT_INTERACTIVE:
|
||||||
|
stream = io_get_export_stream();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fputs(wrong_mode, stderr);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
/* NOTREACHED */
|
||||||
|
}
|
||||||
|
|
||||||
|
io_export_header(stream);
|
||||||
|
/*
|
||||||
|
io_export_recur_event(stream);
|
||||||
|
io_export_events(stream);
|
||||||
|
io_export_recur_apoints(stream);
|
||||||
|
*/
|
||||||
|
io_export_apoints(stream);
|
||||||
|
io_export_todo(stream);
|
||||||
|
io_export_footer(stream);
|
||||||
|
|
||||||
|
if (stream != stdout)
|
||||||
|
fclose(stream);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user