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
|
||||
@ -46,6 +46,99 @@
|
||||
#include "io.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
|
||||
* which contains the calendar file. If none is given, then the default
|
||||
@ -556,3 +649,38 @@ progress_bar(bool save, int progress)
|
||||
wrefresh(swin);
|
||||
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