commit - 796e6d93de00cbe420af4ece0a56a2003e8f6704
commit + cab59c0fbb25e07921a546b510782a3496c84ced
blob - 561ec7ad23f9c59cdba8c65fb9173c2c0c4b7928 (mode 644)
blob + /dev/null
--- src/common/template.c
+++ /dev/null
-/*
- * Claws Mail templates subsystem
- * Copyright (C) 2001 Alexander Barinov
- * Copyright (C) 2001-2021 The Claws Mail team
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "defs.h"
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <stdio.h>
-#include <sys/stat.h>
-#include <ctype.h>
-
-#include "utils.h"
-#include "template.h"
-#include "codeconv.h"
-#include "file-utils.h"
-
-static GSList *template_list;
-
-static Template *template_load(gchar *filename)
-{
- Template *tmpl;
- FILE *fp;
- gchar buf[BUFFSIZE];
- gint bytes_read;
-
- if ((fp = g_fopen(filename, "rb")) == NULL) {
- FILE_OP_ERROR(filename, "g_fopen");
- return NULL;
- }
-
- tmpl = g_new(Template, 1);
- tmpl->load_filename = g_strdup(filename);
- tmpl->name = NULL;
- tmpl->subject = NULL;
- tmpl->from = NULL;
- tmpl->to = NULL;
- tmpl->cc = NULL;
- tmpl->bcc = NULL;
- tmpl->replyto = NULL;
- tmpl->value = NULL;
-
- while (fgets(buf, sizeof(buf), fp) != NULL) {
- if (buf[0] == '\n')
- break;
- else if (!g_ascii_strncasecmp(buf, "Name:", 5))
- tmpl->name = g_strdup(g_strstrip(buf + 5));
- else if (!g_ascii_strncasecmp(buf, "From:", 5))
- tmpl->from = g_strdup(g_strstrip(buf + 5));
- else if (!g_ascii_strncasecmp(buf, "To:", 3))
- tmpl->to = g_strdup(g_strstrip(buf + 3));
- else if (!g_ascii_strncasecmp(buf, "Cc:", 3))
- tmpl->cc = g_strdup(g_strstrip(buf + 3));
- else if (!g_ascii_strncasecmp(buf, "Bcc:", 4))
- tmpl->bcc = g_strdup(g_strstrip(buf + 4));
- else if (!g_ascii_strncasecmp(buf, "Reply-To:", 9))
- tmpl->replyto = g_strdup(g_strstrip(buf + 9));
- else if (!g_ascii_strncasecmp(buf, "Subject:", 8))
- tmpl->subject = g_strdup(g_strstrip(buf + 8));
- }
-
- if (!tmpl->name) {
- g_warning("wrong template format");
- template_free(tmpl);
- fclose(fp);
- return NULL;
- }
-
- if ((bytes_read = fread(buf, 1, sizeof(buf), fp)) == 0) {
- if (ferror(fp)) {
- FILE_OP_ERROR(filename, "fread");
- template_free(tmpl);
- fclose(fp);
- return NULL;
- }
- }
- fclose(fp);
- tmpl->value = g_strndup(buf, bytes_read);
-
- return tmpl;
-}
-
-void template_free(Template *tmpl)
-{
- g_free(tmpl->load_filename);
- g_free(tmpl->name);
- g_free(tmpl->subject);
- g_free(tmpl->from);
- g_free(tmpl->to);
- g_free(tmpl->cc);
- g_free(tmpl->bcc);
- g_free(tmpl->replyto);
- g_free(tmpl->value);
- g_free(tmpl);
-}
-
-static void template_clear_config(GSList *tmpl_list)
-{
- GSList *cur;
- Template *tmpl;
-
- for (cur = tmpl_list; cur != NULL; cur = cur->next) {
- tmpl = (Template *)cur->data;
- template_free(tmpl);
- }
- g_slist_free(tmpl_list);
-}
-
-static gint tmpl_compare(gconstpointer tmpl1, gconstpointer tmpl2)
-{
- gchar *basename1, *basename2;
- long filenum1, filenum2;
- gint ret = 0;
-
- if ((Template *)tmpl1 == NULL || (Template *)tmpl2 == NULL)
- return 0;
-
- if (((Template *)tmpl1)->load_filename == NULL || ((Template *)tmpl2)->load_filename == NULL)
- return 0;
-
- basename1 = g_path_get_basename(((Template *)tmpl1)->load_filename);
- basename2 = g_path_get_basename(((Template *)tmpl2)->load_filename);
- filenum1 = atol(basename1);
- filenum2 = atol(basename2);
- g_free(basename1);
- g_free(basename2);
-
- if (filenum1 == 0 || filenum2 == 0)
- return 0;
-
- if (filenum1 < filenum2)
- ret = -1;
- else
- if (filenum1 > filenum2)
- ret = 1;
-
- return ret;
-}
-
-GSList *template_read_config(void)
-{
- const gchar *path;
- GDir *dir;
- const gchar *dir_name;
- GSList *tmpl_list = NULL;
-
- path = get_template_dir();
- debug_print("%s:%d reading templates dir %s\n",
- __FILE__, __LINE__, path);
-
- if (!is_dir_exist(path)) {
- if (make_dir(path) < 0)
- return NULL;
- }
-
- if ((dir = g_dir_open(path, 0, NULL)) == NULL) {
- g_warning("failed to open directory: '%s'", path);
- return NULL;
- }
-
- while ((dir_name = g_dir_read_name(dir)) != NULL) {
- Template *tmpl;
- GStatBuf s;
- gchar *filename = g_strconcat(path, G_DIR_SEPARATOR_S,
- dir_name, NULL);
-
- if (g_stat(filename, &s) != 0 || !S_ISREG(s.st_mode) ) {
- debug_print("%s:%d %s is not an ordinary file\n",
- __FILE__, __LINE__, filename);
- g_free(filename);
- continue;
- }
-
- tmpl = template_load(filename);
- if (tmpl)
- tmpl_list = g_slist_insert_sorted(tmpl_list, tmpl, tmpl_compare);
-
- g_free(filename);
- }
-
- g_dir_close(dir);
-
- return tmpl_list;
-}
-
-#define TRY(func) { \
-if (!(func)) \
-{ \
- g_warning("failed to write template to file"); \
- if (fp) fclose(fp); \
- if (new) unlink(new); \
- g_free(new); \
- g_free(filename); \
- return; \
-} \
-}
-
-#define TRY_NO_CLOSE(func) { \
-if (!(func)) \
-{ \
- g_warning("failed to write template to file"); \
- if (new) unlink(new); \
- g_free(new); \
- g_free(filename); \
- return; \
-} \
-}
-
-static void template_write_config(GSList *tmpl_list)
-{
- const gchar *path;
- GSList *cur;
- Template *tmpl;
- FILE *fp;
- gint tmpl_num;
-
- debug_print("%s:%d writing templates\n", __FILE__, __LINE__);
-
- path = get_template_dir();
-
- if (!is_dir_exist(path)) {
- if (is_file_exist(path)) {
- g_warning("file '%s' already exists", path);
- return;
- }
- if (make_dir(path) < 0)
- return;
- }
-
- for (cur = tmpl_list, tmpl_num = 1; cur != NULL;
- cur = cur->next, tmpl_num++) {
- gchar *filename, *new = NULL;
-
- tmpl = cur->data;
-
- filename = g_strconcat(path, G_DIR_SEPARATOR_S,
- itos(tmpl_num), NULL);
-
- if (is_file_exist(filename)) {
- new = g_strconcat(filename, ".new", NULL);
- }
-
- if ((fp = g_fopen(new?new:filename, "wb")) == NULL) {
- FILE_OP_ERROR(new?new:filename, "g_fopen");
- g_free(new);
- g_free(filename);
- return;
- }
-
- TRY(fprintf(fp, "Name: %s\n", tmpl->name) > 0);
- if (tmpl->subject && *tmpl->subject != '\0')
- TRY(fprintf(fp, "Subject: %s\n", tmpl->subject) > 0);
- if (tmpl->from && *tmpl->from != '\0')
- TRY(fprintf(fp, "From: %s\n", tmpl->from) > 0);
- if (tmpl->to && *tmpl->to != '\0')
- TRY(fprintf(fp, "To: %s\n", tmpl->to) > 0);
- if (tmpl->cc && *tmpl->cc != '\0')
- TRY(fprintf(fp, "Cc: %s\n", tmpl->cc) > 0);
- if (tmpl->bcc && *tmpl->bcc != '\0')
- TRY(fprintf(fp, "Bcc: %s\n", tmpl->bcc) > 0);
- if (tmpl->replyto && *tmpl->replyto != '\0')
- TRY(fprintf(fp, "Reply-To: %s\n", tmpl->replyto) > 0);
-
- TRY(fputs("\n", fp) != EOF);
-
- if (tmpl->value && *tmpl->value != '\0') {
- TRY(fwrite(tmpl->value, sizeof(gchar), strlen(tmpl->value), fp) == strlen(tmpl->value));
- } else {
- TRY(fwrite("", sizeof(gchar), 1, fp) == 1);
- }
- TRY_NO_CLOSE(safe_fclose(fp) != EOF);
-
- if (new) {
- if (rename_force(new, filename) < 0) {
- FILE_OP_ERROR(new, "rename");
- }
- }
- g_free(new);
- g_free(filename);
- }
-
- /* remove other templates */
- while (TRUE) {
- gchar *filename = g_strconcat(path, G_DIR_SEPARATOR_S,
- itos(tmpl_num), NULL);
- if (is_file_exist(filename)) {
- debug_print("removing old template %d\n", tmpl_num);
- unlink(filename);
- g_free(filename);
- } else {
- g_free(filename);
- break;
- }
- tmpl_num++;
- }
-}
-
-GSList *template_get_config(void)
-{
- if (!template_list)
- template_list = template_read_config();
-
- return template_list;
-}
-
-void template_set_config(GSList *tmpl_list)
-{
- template_clear_config(template_list);
- template_write_config(tmpl_list);
- template_list = tmpl_list;
-}
blob - d7cf4227ad590e5e840e89acb629f9ffadae8036 (mode 644)
blob + /dev/null
--- src/common/template.h
+++ /dev/null
-/*
- * Claws Mail templates subsystem
- * Copyright (C) 2001 Alexander Barinov
- * Copyright (C) 2001-2018 The Claws Mail team
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#ifndef __TEMPLATE_H__
-#define __TEMPLATE_H__
-
-#include <glib.h>
-
-typedef struct _Template Template;
-
-struct _Template {
- gchar *load_filename;
- gchar *name;
- gchar *subject;
- gchar *from;
- gchar *to;
- gchar *cc;
- gchar *bcc;
- gchar *replyto;
- gchar *value;
-};
-
-void template_free (Template *tmpl);
-
-GSList *template_read_config (void);
-
-GSList *template_get_config (void);
-void template_set_config (GSList *tmpl_list);
-
-#endif /* __TEMPLATE_H__ */
blob - 12472e9b4e51bb68d782c7cb31bb31403b9cbe87 (mode 644)
blob + /dev/null
--- src/common/uuencode.c
+++ /dev/null
-/*
- * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2024 Hiroyuki Yamamoto and the Claws Mail Team
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <ctype.h>
-
-#define UUDECODE(c) (c=='`' ? 0 : c - ' ')
-#define N64(i) (i & ~63)
-
-const char uudigit[64] =
-{
- '`', '!', '"', '#', '$', '%', '&', '\'',
- '(', ')', '*', '+', ',', '-', '.', '/',
- '0', '1', '2', '3', '4', '5', '6', '7',
- '8', '9', ':', ';', '<', '=', '>', '?',
- '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
- 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
- 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
- 'X', 'Y', 'Z', '[', '\\', ']', '^', '_'
-};
-
-int fromuutobits(char *out, const char *in)
-{
- int len, outlen, inlen;
- register unsigned char digit1, digit2;
-
- outlen = UUDECODE(in[0]);
- in += 1;
- if(outlen < 0 || outlen > 45)
- return -2;
- if(outlen == 0)
- return 0;
- inlen = (outlen * 4 + 2) / 3;
- len = 0;
-
- for( ; inlen>0; inlen-=4) {
- digit1 = UUDECODE(in[0]);
- if (N64(digit1)) return -1;
- digit2 = UUDECODE(in[1]);
- if (N64(digit2)) return -1;
- out[len++] = (digit1 << 2) | (digit2 >> 4);
- if (inlen > 2) {
- digit1 = UUDECODE(in[2]);
- if (N64(digit1)) return -1;
- out[len++] = (digit2 << 4) | (digit1 >> 2);
- if (inlen > 3) {
- digit2 = UUDECODE(in[3]);
- if (N64(digit2)) return -1;
- out[len++] = (digit1 << 6) | digit2;
- }
- }
- in += 4;
- }
-
- return len == outlen ? len : -3;
-}
blob - 670196c536f29b7172220cd1dc13d25acf0b1523 (mode 644)
blob + /dev/null
--- src/common/uuencode.h
+++ /dev/null
-/*
- * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2024 Hiroyuki Yamamoto and the Claws Mail Team
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef __UUENCODE_H__
-#define __UUENCODE_H__
-
-int fromuutobits(char *, const char *);
-
-#endif /* __UUENCODE_H__ */
blob - 826e0c7f12354d7b7f7c0e92cb517652de83c803
blob + 1848373d50d8955767d43358a4eb1199d971e91e
--- src/compose.h
+++ src/compose.h
#include "undo.h"
#include "toolbar.h"
#include "codeconv.h"
-#include "template.h"
#include "viewtypes.h"
#include "folder.h"