-rw-r--r-- | bin/kdepim/WhatsNew.txt | 4 | ||||
-rw-r--r-- | kmicromail/libetpan/mh/mailmh.c | 3 |
2 files changed, 5 insertions, 2 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt index 42b36f1..5864ce4 100644 --- a/bin/kdepim/WhatsNew.txt +++ b/bin/kdepim/WhatsNew.txt | |||
@@ -1,221 +1,221 @@ | |||
1 | Info about the changes in new versions of KDE-Pim/Pi | 1 | Info about the changes in new versions of KDE-Pim/Pi |
2 | 2 | ||
3 | ********** VERSION 1.9.20 ************ | 3 | ********** VERSION 1.9.20 ************ |
4 | 4 | ||
5 | KO/Pi: | 5 | KO/Pi: |
6 | Added for the "dislplay one day" agenda mode | 6 | Added for the "dislplay one day" agenda mode |
7 | info in the caption and in the day lables: | 7 | info in the caption and in the day lables: |
8 | Now it is displayed, if the selected day is from "day before yesterday" | 8 | Now it is displayed, if the selected day is from "day before yesterday" |
9 | to "day after tomorrow". | 9 | to "day after tomorrow". |
10 | Made it possible to delete a Todo, which has sub-todos. | 10 | Made it possible to delete a Todo, which has sub-todos. |
11 | Fixed two small problems in the todo view. | 11 | Fixed two small problems in the todo view. |
12 | Added missing German translation for filter edit and print dialog. | 12 | Added missing German translation for filter edit and print dialog. |
13 | Made search dialog closeable by cancel key. | 13 | Made search dialog closeable by cancel key. |
14 | 14 | ||
15 | Made it possible to select in the date picker the (ligt grey ) | 15 | Made it possible to select in the date picker the (ligt grey ) |
16 | dates of the prev./next month with the mouse. | 16 | dates of the prev./next month with the mouse. |
17 | 17 | ||
18 | OM/Pi: | 18 | OM/Pi: |
19 | "Delete mail" icon in main window now deletes all selected mails. | 19 | "Delete mail" icon in main window now deletes all selected mails. |
20 | Fixed the problem, that the state flag of imap mails was ignored. | 20 | Fixed the problem, that the state flag of imap mails was ignored. |
21 | Now mails with "FLAG_SEEN" on the imap server get no icon in the list view | 21 | Now mails with "FLAG_SEEN" on the imap server get no icon in the list view |
22 | to indecate that they are already seen. | 22 | to indecate that they are already seen. |
23 | Fixed the problem that the body of some mails was not displayed in the | 23 | Fixed the problem that the body of some mails was not displayed in the |
24 | mail viewer when fetching them from the imap server directly to read them. | 24 | mail viewer when fetching them from the imap server directly to read them. |
25 | Made it (configurable) possible to show the "To:" field in the list view. | 25 | Made it (configurable) possible to show the "To:" field in the list view. |
26 | Added to the mail viewer the option "View Source" to make it possible to see the raw mail data. | 26 | Added to the mail viewer the option "View Source" to make it possible to see the raw mail data. |
27 | Added a "Download Mail" button to the mail viewer to quickly download the viewed mail to the | 27 | Added a "Download Mail" button to the mail viewer to quickly download the viewed mail to the |
28 | local storage folder (specified in account setiings) of the account of the mail. | 28 | local storage folder (specified in account settings) of the account of the mail. |
29 | 29 | Removed some memory leaks in OM/Pi. | |
30 | 30 | ||
31 | 31 | ||
32 | ********** VERSION 1.9.19 ************ | 32 | ********** VERSION 1.9.19 ************ |
33 | 33 | ||
34 | Added a lot of missing translations to KA/Pi, | 34 | Added a lot of missing translations to KA/Pi, |
35 | Added some missing translations to KO/Pi and OM/Pi. | 35 | Added some missing translations to KO/Pi and OM/Pi. |
36 | 36 | ||
37 | Fixed some minor problems in KA/Pi + KO/Pi. | 37 | Fixed some minor problems in KA/Pi + KO/Pi. |
38 | 38 | ||
39 | Fixed a crash when closing PwM/Pi. | 39 | Fixed a crash when closing PwM/Pi. |
40 | Added German translation for PwM/Pi. | 40 | Added German translation for PwM/Pi. |
41 | 41 | ||
42 | Made view change and Month View update faster in KO/Pi. | 42 | Made view change and Month View update faster in KO/Pi. |
43 | 43 | ||
44 | 44 | ||
45 | ********** VERSION 1.9.18 ************ | 45 | ********** VERSION 1.9.18 ************ |
46 | 46 | ||
47 | FYI: The VERSION 1.9.17 was a testing release only. | 47 | FYI: The VERSION 1.9.17 was a testing release only. |
48 | Please read the changelog of VERSION 1.9.17 as well. | 48 | Please read the changelog of VERSION 1.9.17 as well. |
49 | 49 | ||
50 | Cleaned up the syncing config dialog. | 50 | Cleaned up the syncing config dialog. |
51 | Added sync config options for date range for events. | 51 | Added sync config options for date range for events. |
52 | Added sync config options for filters on incoming data. | 52 | Added sync config options for filters on incoming data. |
53 | Added sync config options for filters on outgoing data. | 53 | Added sync config options for filters on outgoing data. |
54 | Please read the updated SyncHowTo about the new filter settings. | 54 | Please read the updated SyncHowTo about the new filter settings. |
55 | These filter settings make it now possible to sync with shared | 55 | These filter settings make it now possible to sync with shared |
56 | calendars without writing back private or confidential data | 56 | calendars without writing back private or confidential data |
57 | (via the outgoing filters). | 57 | (via the outgoing filters). |
58 | To sync only with particular parts of a shared calendar, | 58 | To sync only with particular parts of a shared calendar, |
59 | the incoming filter settings can be used. | 59 | the incoming filter settings can be used. |
60 | An example can be found in the SyncHowTo. | 60 | An example can be found in the SyncHowTo. |
61 | Same for shared addressbooks. | 61 | Same for shared addressbooks. |
62 | 62 | ||
63 | Added a setting for the global kdepim data storage. | 63 | Added a setting for the global kdepim data storage. |
64 | Usually the data is stored in (yourhomedir/kdepim). | 64 | Usually the data is stored in (yourhomedir/kdepim). |
65 | Now you can set in the Global config dialog TAB, subTAB "Data storage path" | 65 | Now you can set in the Global config dialog TAB, subTAB "Data storage path" |
66 | a directory where all the kdepim data is stored. | 66 | a directory where all the kdepim data is stored. |
67 | That makes it easy to save all kdepim data on a SD card on the Z, for example. | 67 | That makes it easy to save all kdepim data on a SD card on the Z, for example. |
68 | 68 | ||
69 | KO/Pi: | 69 | KO/Pi: |
70 | The timeedit input has a pulldown list for times. | 70 | The timeedit input has a pulldown list for times. |
71 | If opened, this pulldown list should now has the right time highlighted. | 71 | If opened, this pulldown list should now has the right time highlighted. |
72 | Added the possibility to exclude events/todos/journals in a filter. | 72 | Added the possibility to exclude events/todos/journals in a filter. |
73 | You should exclude journals, if you do not want them to sync with a public calendar. | 73 | You should exclude journals, if you do not want them to sync with a public calendar. |
74 | 74 | ||
75 | KA/Pi: | 75 | KA/Pi: |
76 | Added the possibility to in/exclude public/private/confidential contacts to a filter. | 76 | Added the possibility to in/exclude public/private/confidential contacts to a filter. |
77 | If you have already defined filterrules in KA/Pi you have to adjust them all by setting the "include public/private/confidential" property manually. Sorry for that ... | 77 | If you have already defined filterrules in KA/Pi you have to adjust them all by setting the "include public/private/confidential" property manually. Sorry for that ... |
78 | Added printing of card view and details view on desktop. | 78 | Added printing of card view and details view on desktop. |
79 | Printing of list view is not working... | 79 | Printing of list view is not working... |
80 | Added button for removing pictures in contact editor. | 80 | Added button for removing pictures in contact editor. |
81 | Parsing data fix of KA/Pi version 1.9.17. | 81 | Parsing data fix of KA/Pi version 1.9.17. |
82 | Fixed the "parse name automatically" problem of KA/Pi version 1.9.17. | 82 | Fixed the "parse name automatically" problem of KA/Pi version 1.9.17. |
83 | Fixed some syncing merging problems. | 83 | Fixed some syncing merging problems. |
84 | 84 | ||
85 | 85 | ||
86 | ********** VERSION 1.9.17 ************ | 86 | ********** VERSION 1.9.17 ************ |
87 | 87 | ||
88 | KO/Pi: | 88 | KO/Pi: |
89 | Fixed that tooltips were not updated after moving an item in agenda view. | 89 | Fixed that tooltips were not updated after moving an item in agenda view. |
90 | Fixed a bug in sorting start date for recurring events in list view. | 90 | Fixed a bug in sorting start date for recurring events in list view. |
91 | Changed the left button in todo viewer from "Agenda" to "Set completed". | 91 | Changed the left button in todo viewer from "Agenda" to "Set completed". |
92 | This makes it possible to change a todo in the What's Next View quickly to the completed state without leaving the What's Next View. | 92 | This makes it possible to change a todo in the What's Next View quickly to the completed state without leaving the What's Next View. |
93 | Added more info in the todo viewer: Startdate, parent/sub todos. | 93 | Added more info in the todo viewer: Startdate, parent/sub todos. |
94 | 94 | ||
95 | 95 | ||
96 | KA/Pi: | 96 | KA/Pi: |
97 | All fields search does now actually search all the (possible) fields, | 97 | All fields search does now actually search all the (possible) fields, |
98 | not only those listed in the contact list. | 98 | not only those listed in the contact list. |
99 | Made is possible to inline a picture in a vcard on the Z. | 99 | Made is possible to inline a picture in a vcard on the Z. |
100 | This was only possible on the desktop, now is it possible on the Z as well. | 100 | This was only possible on the desktop, now is it possible on the Z as well. |
101 | Fixed of missing save settings after filter configuration. | 101 | Fixed of missing save settings after filter configuration. |
102 | Made saving of addressbook much faster. | 102 | Made saving of addressbook much faster. |
103 | Fixed extension widget layout problem. | 103 | Fixed extension widget layout problem. |
104 | Fixed saving of default formatted name settings. | 104 | Fixed saving of default formatted name settings. |
105 | Fixed formatted name handling in edit dialog. | 105 | Fixed formatted name handling in edit dialog. |
106 | Added an option for changing formatted names of many contacts | 106 | Added an option for changing formatted names of many contacts |
107 | (menu: File - Change - Set formatted name). | 107 | (menu: File - Change - Set formatted name). |
108 | 108 | ||
109 | QWhatsThis was not working on the Z ( only black rectangle was shown). | 109 | QWhatsThis was not working on the Z ( only black rectangle was shown). |
110 | This is Fixed. | 110 | This is Fixed. |
111 | 111 | ||
112 | KDE-Sync: | 112 | KDE-Sync: |
113 | Now readonly KDE resources are synced as well. | 113 | Now readonly KDE resources are synced as well. |
114 | (They are not changed in KDE itself, of course). | 114 | (They are not changed in KDE itself, of course). |
115 | 115 | ||
116 | 116 | ||
117 | 117 | ||
118 | ********** VERSION 1.9.16 ************ | 118 | ********** VERSION 1.9.16 ************ |
119 | 119 | ||
120 | KO/Pi: | 120 | KO/Pi: |
121 | Fixed search dialog size on Z 6000 (480x640 display). | 121 | Fixed search dialog size on Z 6000 (480x640 display). |
122 | Added setting to hide/show time in agenda items. | 122 | Added setting to hide/show time in agenda items. |
123 | Added setting to hide not running todos in todo view. | 123 | Added setting to hide not running todos in todo view. |
124 | Added columns for start date/time in todo view. | 124 | Added columns for start date/time in todo view. |
125 | Replaced the solid half-hour lines in agenda view by dot lines. | 125 | Replaced the solid half-hour lines in agenda view by dot lines. |
126 | Added possibility of printing the What's Next View on the desktop | 126 | Added possibility of printing the What's Next View on the desktop |
127 | (i.e. Windows and Linux). | 127 | (i.e. Windows and Linux). |
128 | Fixed a crash in KO/Pi when starting KO/Pi with What's Next view. | 128 | Fixed a crash in KO/Pi when starting KO/Pi with What's Next view. |
129 | Added tooltips in month view.(Tooltips only available on desktop) | 129 | Added tooltips in month view.(Tooltips only available on desktop) |
130 | 130 | ||
131 | Fixed a strange problem in KO/Pi alarm applet. | 131 | Fixed a strange problem in KO/Pi alarm applet. |
132 | Did not find the actual problem, | 132 | Did not find the actual problem, |
133 | such that now Qtopia reboots again if deinstalling the alarm applet. | 133 | such that now Qtopia reboots again if deinstalling the alarm applet. |
134 | But the alarm applet should work again. | 134 | But the alarm applet should work again. |
135 | 135 | ||
136 | KA/Pi: | 136 | KA/Pi: |
137 | Fixed the problem, that internal pictures were not saved. | 137 | Fixed the problem, that internal pictures were not saved. |
138 | 138 | ||
139 | Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes. | 139 | Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes. |
140 | 140 | ||
141 | Fixed some minor problems. (Like word wrap in help text windows). | 141 | Fixed some minor problems. (Like word wrap in help text windows). |
142 | 142 | ||
143 | Fixed a compiling problem in microkde/kresources. | 143 | Fixed a compiling problem in microkde/kresources. |
144 | 144 | ||
145 | KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM. | 145 | KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM. |
146 | This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9) | 146 | This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9) |
147 | such that now syncing KO/Pi with Sharp DTM should work on the | 147 | such that now syncing KO/Pi with Sharp DTM should work on the |
148 | Zaurus C 3000 model. | 148 | Zaurus C 3000 model. |
149 | 149 | ||
150 | ********** VERSION 1.9.15 ************ | 150 | ********** VERSION 1.9.15 ************ |
151 | 151 | ||
152 | Usebilty enhancements in KO/Pi: | 152 | Usebilty enhancements in KO/Pi: |
153 | When clicking on the date in a month view cell, the day view is shown. | 153 | When clicking on the date in a month view cell, the day view is shown. |
154 | Old behaviour was, that the "new event" dialog popped up. | 154 | Old behaviour was, that the "new event" dialog popped up. |
155 | 155 | ||
156 | Added a one step "undo delete" in KO/Pi (Accessable in the "Action" menu). | 156 | Added a one step "undo delete" in KO/Pi (Accessable in the "Action" menu). |
157 | That means, you can restore the latest | 157 | That means, you can restore the latest |
158 | event/todo/journal you have deleted. | 158 | event/todo/journal you have deleted. |
159 | A journal is deleted, if you clear all the text of the journal. | 159 | A journal is deleted, if you clear all the text of the journal. |
160 | 160 | ||
161 | Fixed the bug of the editor dialogs in KO/Pi of version 1.9.14. | 161 | Fixed the bug of the editor dialogs in KO/Pi of version 1.9.14. |
162 | 162 | ||
163 | KA/Pi starting in 480x640 resolution: | 163 | KA/Pi starting in 480x640 resolution: |
164 | Hide the filter action in toolbar | 164 | Hide the filter action in toolbar |
165 | and added icons for undo/delete/redo in toolbar. | 165 | and added icons for undo/delete/redo in toolbar. |
166 | 166 | ||
167 | Change in OM/Pi ViewMail dialog: | 167 | Change in OM/Pi ViewMail dialog: |
168 | When clicking on the "delete" icon the mail is deleted after confirmation as usual. | 168 | When clicking on the "delete" icon the mail is deleted after confirmation as usual. |
169 | But the edit dialog is not closed as before, now the next mail in the folder is shown automatically (if there is any). | 169 | But the edit dialog is not closed as before, now the next mail in the folder is shown automatically (if there is any). |
170 | 170 | ||
171 | Fixed a crash when deleting mail-accounts in OM/Pi. | 171 | Fixed a crash when deleting mail-accounts in OM/Pi. |
172 | 172 | ||
173 | 173 | ||
174 | ********** VERSION 1.9.14 ************ | 174 | ********** VERSION 1.9.14 ************ |
175 | 175 | ||
176 | Fixed some problems with the dialog sizes when switching | 176 | Fixed some problems with the dialog sizes when switching |
177 | portrait/landscape mode on 640x480 PDA display. | 177 | portrait/landscape mode on 640x480 PDA display. |
178 | 178 | ||
179 | Fixed some other small bugs in KA/Pi KO/Pi and OM/Pi and PwM/Pi. | 179 | Fixed some other small bugs in KA/Pi KO/Pi and OM/Pi and PwM/Pi. |
180 | 180 | ||
181 | Fixed an ugly bug in KOpieMail: | 181 | Fixed an ugly bug in KOpieMail: |
182 | KOpieMail was not able to write files (mails) to MSDOS file system, | 182 | KOpieMail was not able to write files (mails) to MSDOS file system, |
183 | like on an usual preformatted SD card. That should work now. | 183 | like on an usual preformatted SD card. That should work now. |
184 | To save your mail data on the Sd card do the following: | 184 | To save your mail data on the Sd card do the following: |
185 | Create a dir on the SD card: | 185 | Create a dir on the SD card: |
186 | mkdir /mnt/card/localmail | 186 | mkdir /mnt/card/localmail |
187 | Go to your home dir: | 187 | Go to your home dir: |
188 | cd | 188 | cd |
189 | Go to kopiemail data storage dir: | 189 | Go to kopiemail data storage dir: |
190 | cd kdepim/apps/kopiemail | 190 | cd kdepim/apps/kopiemail |
191 | Create a symlink to the SD card: | 191 | Create a symlink to the SD card: |
192 | ls -s /mnt/card/localmail | 192 | ls -s /mnt/card/localmail |
193 | Now KOpieMail will store all mails on the SD card. | 193 | Now KOpieMail will store all mails on the SD card. |
194 | 194 | ||
195 | KO/Pi Monthview: | 195 | KO/Pi Monthview: |
196 | Now "Go to Today" selects the current month from day 1-end, | 196 | Now "Go to Today" selects the current month from day 1-end, |
197 | not the current date + some days. | 197 | not the current date + some days. |
198 | I.e. "Go to Today" shows now always | 198 | I.e. "Go to Today" shows now always |
199 | the current month with first day of month in the first row. | 199 | the current month with first day of month in the first row. |
200 | 200 | ||
201 | Added missing German translation. | 201 | Added missing German translation. |
202 | 202 | ||
203 | Fixed icons of executeable on Wintendo. | 203 | Fixed icons of executeable on Wintendo. |
204 | 204 | ||
205 | Added a "Show next Mail" button to the OM/Pi | 205 | Added a "Show next Mail" button to the OM/Pi |
206 | mail viewer such that the mail below the current mail | 206 | mail viewer such that the mail below the current mail |
207 | in the mail list view of the current folder | 207 | in the mail list view of the current folder |
208 | can be read with a single click. | 208 | can be read with a single click. |
209 | 209 | ||
210 | 210 | ||
211 | ********** VERSION 1.9.13 ************ | 211 | ********** VERSION 1.9.13 ************ |
212 | 212 | ||
213 | Fixed nasty PwM/Pi file reading bug, when | 213 | Fixed nasty PwM/Pi file reading bug, when |
214 | the used hash algo of file is different then the global | 214 | the used hash algo of file is different then the global |
215 | hash algo. | 215 | hash algo. |
216 | 216 | ||
217 | Added KA/Pi support for opie mailit mailapplication. | 217 | Added KA/Pi support for opie mailit mailapplication. |
218 | 218 | ||
219 | Fixed some bugs in OM/Pi. | 219 | Fixed some bugs in OM/Pi. |
220 | Now character conversion tables are available for the Zaurus | 220 | Now character conversion tables are available for the Zaurus |
221 | to make OM/Pi working properly. | 221 | to make OM/Pi working properly. |
diff --git a/kmicromail/libetpan/mh/mailmh.c b/kmicromail/libetpan/mh/mailmh.c index 1087ce1..2d1f26d 100644 --- a/kmicromail/libetpan/mh/mailmh.c +++ b/kmicromail/libetpan/mh/mailmh.c | |||
@@ -732,259 +732,262 @@ int mailmh_folder_get_message_size(struct mailmh_folder * folder, | |||
732 | return MAILMH_NO_ERROR; | 732 | return MAILMH_NO_ERROR; |
733 | } | 733 | } |
734 | 734 | ||
735 | int mailmh_folder_add_message_uid(struct mailmh_folder * folder, | 735 | int mailmh_folder_add_message_uid(struct mailmh_folder * folder, |
736 | const char * message, size_t size, | 736 | const char * message, size_t size, |
737 | uint32_t * pindex) | 737 | uint32_t * pindex) |
738 | { | 738 | { |
739 | char * tmpname; | 739 | char * tmpname; |
740 | int fd; | 740 | int fd; |
741 | size_t namesize; | 741 | size_t namesize; |
742 | size_t left; | 742 | size_t left; |
743 | ssize_t res; | 743 | ssize_t res; |
744 | struct mailmh_msg_info * msg_info; | 744 | struct mailmh_msg_info * msg_info; |
745 | uint32_t index; | 745 | uint32_t index; |
746 | int error; | 746 | int error; |
747 | int r; | 747 | int r; |
748 | unsigned int array_index; | 748 | unsigned int array_index; |
749 | struct stat buf; | 749 | struct stat buf; |
750 | chashdatum key; | 750 | chashdatum key; |
751 | chashdatum data; | 751 | chashdatum data; |
752 | 752 | ||
753 | #if 0 | 753 | #if 0 |
754 | r = mailmh_folder_update(folder); | 754 | r = mailmh_folder_update(folder); |
755 | if (r != MAILMH_NO_ERROR) { | 755 | if (r != MAILMH_NO_ERROR) { |
756 | error = r; | 756 | error = r; |
757 | goto err; | 757 | goto err; |
758 | } | 758 | } |
759 | #endif | 759 | #endif |
760 | 760 | ||
761 | namesize = strlen(folder->fl_filename) + 20; | 761 | namesize = strlen(folder->fl_filename) + 20; |
762 | tmpname = malloc(namesize); | 762 | tmpname = malloc(namesize); |
763 | snprintf(tmpname, namesize, "%s%ctmpXXXXXX", | 763 | snprintf(tmpname, namesize, "%s%ctmpXXXXXX", |
764 | folder->fl_filename, MAIL_DIR_SEPARATOR); | 764 | folder->fl_filename, MAIL_DIR_SEPARATOR); |
765 | fd = mkstemp(tmpname); | 765 | fd = mkstemp(tmpname); |
766 | if (fd < 0) { | 766 | if (fd < 0) { |
767 | error = MAILMH_ERROR_FILE; | 767 | error = MAILMH_ERROR_FILE; |
768 | goto free; | 768 | goto free; |
769 | } | 769 | } |
770 | 770 | ||
771 | left = size; | 771 | left = size; |
772 | while (left > 0) { | 772 | while (left > 0) { |
773 | res = write(fd, message, left); | 773 | res = write(fd, message, left); |
774 | if (res == -1) { | 774 | if (res == -1) { |
775 | close(fd); | 775 | close(fd); |
776 | error = MAILMH_ERROR_FILE; | 776 | error = MAILMH_ERROR_FILE; |
777 | goto free; | 777 | goto free; |
778 | } | 778 | } |
779 | 779 | ||
780 | left -= res; | 780 | left -= res; |
781 | } | 781 | } |
782 | close(fd); | 782 | close(fd); |
783 | 783 | ||
784 | r = stat(tmpname, &buf); | 784 | r = stat(tmpname, &buf); |
785 | if (r < 0) { | 785 | if (r < 0) { |
786 | error = MAILMH_ERROR_FILE; | 786 | error = MAILMH_ERROR_FILE; |
787 | goto free; | 787 | goto free; |
788 | } | 788 | } |
789 | 789 | ||
790 | r = mailmh_folder_alloc_msg(folder, tmpname, &index); | 790 | r = mailmh_folder_alloc_msg(folder, tmpname, &index); |
791 | if (r != MAILMH_NO_ERROR) { | 791 | if (r != MAILMH_NO_ERROR) { |
792 | unlink(tmpname); | 792 | unlink(tmpname); |
793 | error = MAILMH_ERROR_COULD_NOT_ALLOC_MSG; | 793 | error = MAILMH_ERROR_COULD_NOT_ALLOC_MSG; |
794 | goto free; | 794 | goto free; |
795 | } | 795 | } |
796 | free(tmpname); | 796 | free(tmpname); |
797 | 797 | ||
798 | msg_info = mailmh_msg_info_new(index, size, buf.st_mtime); | 798 | msg_info = mailmh_msg_info_new(index, size, buf.st_mtime); |
799 | if (msg_info == NULL) { | 799 | if (msg_info == NULL) { |
800 | mailmh_folder_remove_message(folder, index); | 800 | mailmh_folder_remove_message(folder, index); |
801 | error = MAILMH_ERROR_MEMORY; | 801 | error = MAILMH_ERROR_MEMORY; |
802 | goto err; | 802 | goto err; |
803 | } | 803 | } |
804 | 804 | ||
805 | r = carray_add(folder->fl_msgs_tab, msg_info, &array_index); | 805 | r = carray_add(folder->fl_msgs_tab, msg_info, &array_index); |
806 | if (r < 0) { | 806 | if (r < 0) { |
807 | mailmh_folder_remove_message(folder, index); | 807 | mailmh_folder_remove_message(folder, index); |
808 | mailmh_msg_info_free(msg_info); | 808 | mailmh_msg_info_free(msg_info); |
809 | error = MAILMH_ERROR_MEMORY; | 809 | error = MAILMH_ERROR_MEMORY; |
810 | goto err; | 810 | goto err; |
811 | } | 811 | } |
812 | msg_info->msg_array_index = array_index; | 812 | msg_info->msg_array_index = array_index; |
813 | 813 | ||
814 | #if 0 | 814 | #if 0 |
815 | r = cinthash_add(folder->fl_msgs_hash, index, msg_info); | 815 | r = cinthash_add(folder->fl_msgs_hash, index, msg_info); |
816 | #endif | 816 | #endif |
817 | key.data = &index; | 817 | key.data = &index; |
818 | key.len = sizeof(index); | 818 | key.len = sizeof(index); |
819 | data.data = msg_info; | 819 | data.data = msg_info; |
820 | data.len = 0; | 820 | data.len = 0; |
821 | 821 | ||
822 | if (pindex != NULL) | 822 | if (pindex != NULL) |
823 | * pindex = index; | 823 | * pindex = index; |
824 | 824 | ||
825 | r = chash_set(folder->fl_msgs_hash, &key, &data, NULL); | 825 | r = chash_set(folder->fl_msgs_hash, &key, &data, NULL); |
826 | if (r < 0) { | 826 | if (r < 0) { |
827 | carray_delete_fast(folder->fl_msgs_tab, msg_info->msg_array_index); | 827 | carray_delete_fast(folder->fl_msgs_tab, msg_info->msg_array_index); |
828 | mailmh_msg_info_free(msg_info); | 828 | mailmh_msg_info_free(msg_info); |
829 | error = MAILMH_ERROR_MEMORY; | 829 | error = MAILMH_ERROR_MEMORY; |
830 | goto err; | 830 | goto err; |
831 | } | 831 | } |
832 | 832 | ||
833 | return MAILMH_NO_ERROR; | 833 | return MAILMH_NO_ERROR; |
834 | 834 | ||
835 | free: | 835 | free: |
836 | free(tmpname); | 836 | free(tmpname); |
837 | err: | 837 | err: |
838 | return error; | 838 | return error; |
839 | } | 839 | } |
840 | 840 | ||
841 | int mailmh_folder_add_message(struct mailmh_folder * folder, | 841 | int mailmh_folder_add_message(struct mailmh_folder * folder, |
842 | const char * message, size_t size) | 842 | const char * message, size_t size) |
843 | { | 843 | { |
844 | return mailmh_folder_add_message_uid(folder, message, size, NULL); | 844 | return mailmh_folder_add_message_uid(folder, message, size, NULL); |
845 | } | 845 | } |
846 | 846 | ||
847 | int mailmh_folder_add_message_file_uid(struct mailmh_folder * folder, | 847 | int mailmh_folder_add_message_file_uid(struct mailmh_folder * folder, |
848 | int fd, uint32_t * pindex) | 848 | int fd, uint32_t * pindex) |
849 | { | 849 | { |
850 | char * message; | 850 | char * message; |
851 | struct stat buf; | 851 | struct stat buf; |
852 | int r; | 852 | int r; |
853 | 853 | ||
854 | #if 0 | 854 | #if 0 |
855 | r = mailmh_folder_update(folder); | 855 | r = mailmh_folder_update(folder); |
856 | if (r != MAILMH_NO_ERROR) | 856 | if (r != MAILMH_NO_ERROR) |
857 | return r; | 857 | return r; |
858 | #endif | 858 | #endif |
859 | 859 | ||
860 | if (fstat(fd, &buf) == -1) | 860 | if (fstat(fd, &buf) == -1) |
861 | return MAILMH_ERROR_FILE; | 861 | return MAILMH_ERROR_FILE; |
862 | 862 | ||
863 | message = mmap(NULL, buf.st_size, PROT_READ, MAP_PRIVATE, fd, 0); | 863 | message = mmap(NULL, buf.st_size, PROT_READ, MAP_PRIVATE, fd, 0); |
864 | if (message == MAP_FAILED) | 864 | if (message == MAP_FAILED) |
865 | return MAILMH_ERROR_FILE; | 865 | return MAILMH_ERROR_FILE; |
866 | 866 | ||
867 | r = mailmh_folder_add_message_uid(folder, message, buf.st_size, pindex); | 867 | r = mailmh_folder_add_message_uid(folder, message, buf.st_size, pindex); |
868 | 868 | ||
869 | munmap(message, buf.st_size); | 869 | munmap(message, buf.st_size); |
870 | 870 | ||
871 | return r; | 871 | return r; |
872 | } | 872 | } |
873 | 873 | ||
874 | int mailmh_folder_add_message_file(struct mailmh_folder * folder, | 874 | int mailmh_folder_add_message_file(struct mailmh_folder * folder, |
875 | int fd) | 875 | int fd) |
876 | { | 876 | { |
877 | return mailmh_folder_add_message_file_uid(folder, fd, NULL); | 877 | return mailmh_folder_add_message_file_uid(folder, fd, NULL); |
878 | } | 878 | } |
879 | 879 | ||
880 | int mailmh_folder_remove_message(struct mailmh_folder * folder, | 880 | int mailmh_folder_remove_message(struct mailmh_folder * folder, |
881 | uint32_t index) | 881 | uint32_t index) |
882 | { | 882 | { |
883 | char * filename; | 883 | char * filename; |
884 | struct mailmh_msg_info * msg_info; | 884 | struct mailmh_msg_info * msg_info; |
885 | int res; | 885 | int res; |
886 | int r; | 886 | int r; |
887 | chashdatum key; | 887 | chashdatum key; |
888 | chashdatum data; | 888 | chashdatum data; |
889 | 889 | ||
890 | #if 0 | 890 | #if 0 |
891 | r = mailmh_folder_update(folder); | 891 | r = mailmh_folder_update(folder); |
892 | if (r != MAILMH_NO_ERROR) { | 892 | if (r != MAILMH_NO_ERROR) { |
893 | res = r; | 893 | res = r; |
894 | goto err; | 894 | goto err; |
895 | } | 895 | } |
896 | #endif | 896 | #endif |
897 | 897 | ||
898 | r = mailmh_folder_get_message_filename(folder, index, &filename); | 898 | r = mailmh_folder_get_message_filename(folder, index, &filename); |
899 | if (filename == NULL) { | 899 | if (filename == NULL) { |
900 | res = r; | 900 | res = r; |
901 | goto err; | 901 | goto err; |
902 | } | 902 | } |
903 | 903 | ||
904 | if (unlink(filename) == -1) { | 904 | if (unlink(filename) == -1) { |
905 | res = MAILMH_ERROR_FILE; | 905 | res = MAILMH_ERROR_FILE; |
906 | goto free; | 906 | goto free; |
907 | } | 907 | } |
908 | 908 | ||
909 | key.data = &index; | 909 | key.data = &index; |
910 | key.len = sizeof(index); | 910 | key.len = sizeof(index); |
911 | r = chash_get(folder->fl_msgs_hash, &key, &data); | 911 | r = chash_get(folder->fl_msgs_hash, &key, &data); |
912 | #if 0 | 912 | #if 0 |
913 | msg_info = cinthash_find(folder->fl_msgs_hash, index); | 913 | msg_info = cinthash_find(folder->fl_msgs_hash, index); |
914 | #endif | 914 | #endif |
915 | if (r == 0) { | 915 | if (r == 0) { |
916 | msg_info = data.data; | 916 | msg_info = data.data; |
917 | 917 | ||
918 | carray_delete_fast(folder->fl_msgs_tab, msg_info->msg_array_index); | 918 | carray_delete_fast(folder->fl_msgs_tab, msg_info->msg_array_index); |
919 | #if 0 | 919 | #if 0 |
920 | cinthash_remove(folder->fl_msgs_hash, index); | 920 | cinthash_remove(folder->fl_msgs_hash, index); |
921 | #endif | 921 | #endif |
922 | chash_delete(folder->fl_msgs_hash, &key, NULL); | 922 | chash_delete(folder->fl_msgs_hash, &key, NULL); |
923 | } | 923 | } |
924 | // LR | ||
925 | mailmh_msg_info_free( msg_info ); | ||
926 | free(filename); | ||
924 | 927 | ||
925 | return MAILMH_NO_ERROR; | 928 | return MAILMH_NO_ERROR; |
926 | 929 | ||
927 | free: | 930 | free: |
928 | free(filename); | 931 | free(filename); |
929 | err: | 932 | err: |
930 | return res; | 933 | return res; |
931 | } | 934 | } |
932 | 935 | ||
933 | 936 | ||
934 | int mailmh_folder_move_message(struct mailmh_folder * dest_folder, | 937 | int mailmh_folder_move_message(struct mailmh_folder * dest_folder, |
935 | struct mailmh_folder * src_folder, | 938 | struct mailmh_folder * src_folder, |
936 | uint32_t index) | 939 | uint32_t index) |
937 | { | 940 | { |
938 | int fd; | 941 | int fd; |
939 | char * filename; | 942 | char * filename; |
940 | int r; | 943 | int r; |
941 | 944 | ||
942 | #if 0 | 945 | #if 0 |
943 | r = mailmh_folder_update(dest_folder); | 946 | r = mailmh_folder_update(dest_folder); |
944 | if (r != MAILMH_NO_ERROR) | 947 | if (r != MAILMH_NO_ERROR) |
945 | return r; | 948 | return r; |
946 | r = mailmh_folder_update(src_folder); | 949 | r = mailmh_folder_update(src_folder); |
947 | if (r != MAILMH_NO_ERROR) | 950 | if (r != MAILMH_NO_ERROR) |
948 | return r; | 951 | return r; |
949 | #endif | 952 | #endif |
950 | 953 | ||
951 | /* move on the same filesystem */ | 954 | /* move on the same filesystem */ |
952 | r = mailmh_folder_get_message_filename(src_folder, index, &filename); | 955 | r = mailmh_folder_get_message_filename(src_folder, index, &filename); |
953 | if (r != MAILMH_NO_ERROR) | 956 | if (r != MAILMH_NO_ERROR) |
954 | return r; | 957 | return r; |
955 | 958 | ||
956 | r = mailmh_folder_alloc_msg(dest_folder, filename, &index); | 959 | r = mailmh_folder_alloc_msg(dest_folder, filename, &index); |
957 | free(filename); | 960 | free(filename); |
958 | if (r == MAILMH_NO_ERROR) | 961 | if (r == MAILMH_NO_ERROR) |
959 | return MAILMH_NO_ERROR; | 962 | return MAILMH_NO_ERROR; |
960 | 963 | ||
961 | /* move on the different filesystems */ | 964 | /* move on the different filesystems */ |
962 | r = mailmh_folder_get_message_fd(src_folder, index, O_RDONLY, &fd); | 965 | r = mailmh_folder_get_message_fd(src_folder, index, O_RDONLY, &fd); |
963 | if (r != MAILMH_NO_ERROR) | 966 | if (r != MAILMH_NO_ERROR) |
964 | return r; | 967 | return r; |
965 | 968 | ||
966 | r = mailmh_folder_add_message_file(dest_folder, fd); | 969 | r = mailmh_folder_add_message_file(dest_folder, fd); |
967 | if (r != MAILMH_NO_ERROR) { | 970 | if (r != MAILMH_NO_ERROR) { |
968 | close(fd); | 971 | close(fd); |
969 | return r; | 972 | return r; |
970 | } | 973 | } |
971 | 974 | ||
972 | close(fd); | 975 | close(fd); |
973 | 976 | ||
974 | r = mailmh_folder_remove_message(src_folder, index); | 977 | r = mailmh_folder_remove_message(src_folder, index); |
975 | 978 | ||
976 | return MAILMH_NO_ERROR; | 979 | return MAILMH_NO_ERROR; |
977 | } | 980 | } |
978 | 981 | ||
979 | unsigned int mailmh_folder_get_message_number(struct mailmh_folder * folder) | 982 | unsigned int mailmh_folder_get_message_number(struct mailmh_folder * folder) |
980 | { | 983 | { |
981 | unsigned int i; | 984 | unsigned int i; |
982 | unsigned int count; | 985 | unsigned int count; |
983 | 986 | ||
984 | count = 0; | 987 | count = 0; |
985 | for(i = 0 ; i < carray_count(folder->fl_msgs_tab) ; i ++) | 988 | for(i = 0 ; i < carray_count(folder->fl_msgs_tab) ; i ++) |
986 | if (carray_get(folder->fl_msgs_tab, i) != NULL) | 989 | if (carray_get(folder->fl_msgs_tab, i) != NULL) |
987 | count ++; | 990 | count ++; |
988 | 991 | ||
989 | return count; | 992 | return count; |
990 | } | 993 | } |