-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,157 +1,157 @@ | |||
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 |
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 | |||
@@ -796,195 +796,198 @@ int mailmh_folder_add_message_uid(struct mailmh_folder * folder, | |||
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 | } |