* YAM_UT.c: the new CheckboxRequest() function now uses a proper alignment
and returns -1 in case the requester was canceled. In addition, it now
contains a cancel button and also use the phrase "Use" instead which should
be more intuitive than just a plain "Okay" button.
* YAM.cd: the new requester for disabling the Spam filter will now use a
more intuitive message string and also uses an own string for the
"Reset training data". Please try to avoid reusing strings and generate new
ones instead.
50 lines of code changed in 2 files:
* YAM_COs.c: Change all configuration string IDs to use shortcuts so that
the indention of the configuration paramaters in the .config file are
not mixed up. Please try to avoid mixing up the indention of the
used paramaters.
76 lines of code changed in 1 file:
* YAM_COg.c, YAM_COs.c, locale/YAM.cd, locale/deutsch.ct: when disabling the
spam filter the requester to ask for further actions now pops up when either
the "Save" or "Use" button is clicked and no longer immediately.
Additionally one can now choose exactly which data should be reset. The new
CheckboxRequest() function is used for this purpose. Also adapted the
catalog accordingly.
54 lines of code changed in 2 files:
* YAM_UT.c, YAM_utilities.h: added new function CheckboxRequest() which puts
up a requester with customizable checkboxes and labels.
160 lines of code changed in 2 files:
* BayesFilter.c: the training data are now always written to disk upon exit if
there are any tokens and if something has changed since the last flush.
3 lines of code changed in 1 file:
* YAM_FI.c, YAM_TR.c: ApplyFiltersFunc() now does all the work. That means
that we are back to the old state (only one filter function). This single
function is able to detect spam mails and (if desired) move them to the spam
folder. By moving the spam recognition into YAM_FI.c there is no more delay
upon downloading mails and checking each of them for spam contents right
after downloading a single mail. Slow machines should benefit from this,
especially when a mail contains quite large attachments. Future extensions
should accept a list of mails to be checked for spam instead of iterating
through all mails in the inbound folder.
0 lines of code changed in 1 file:
- added new missing APPLY_SPAM enum definition.
1 lines of code changed in 1 file:
* YAM_FI.c, YAM_TR.c: ApplyFiltersFunc() now does all the work. That means
that we are back to the old state (only one filter function). This single
function is able to detect spam mails and (if desired) move them to the spam
folder. By moving the spam recognition into YAM_FI.c there is no more delay
upon downloading mails and checking each of them for spam contents right
after downloading a single mail. Slow machines should benefit from this,
especially when a mail contains quite large attachments. Future extensions
should accept a list of mails to be checked for spam instead of iterating
through all mails in the inbound folder.
85 lines of code changed in 2 files:
* YAM_CO.c, YAM_COs.c, misc: added a new "DisplayAllAltPart" config option
to the [Advanced] section. With this option an advanced users might configure
YAM to also display the normally hided alternative parts of a
"multipart/alternative" mail. However, for an ordinary user this option
shouldn't be changed.
11 lines of code changed in 5 files:
* BayesFilter.c: removed the check for an alternative part when tokenizing
attachments as for a SPAM filter the differentiation between an alternative
part and a normal part shouldn't be made.
12 lines of code changed in 1 file:
* YAM_FI.c: hasStatusNew() is not required as MA_CreateFullList() already
assures that only new mail is selected.
1 lines of code changed in 1 file:
* YAM_FI.c: slightly reworked new ApplySpamFilterHook() by adapting it
to the STYLEGUIDE. Please no plain Cut&Paste on new functions, go the
clean way please :)
30 lines of code changed in 1 file:
* YAM_FI.c, YAM_TR.c: moving automatic recognized new spam mails to the spam
folder after download no longer relies on the existance of user defined
filters but has an own function now.
60 lines of code changed in 3 files:
- minor warning fix
1 lines of code changed in 1 file:
* YAM_RE.c, YAM_FI.c, YAM_ER.c, BayesFilter.c, ReadMailGroup.c: if the SPAM
filter was turned on YAM may have thrown warnings on certain broken mail
content which e.g. stopped the batched mail download. Now a new PM_QUIET
flag is set on those actions where the mail transfer shouldn't be
interrupted at any time.
111 lines of code changed in 6 files:
* YAM_CO.c, YAM_MA.c, MainMailList.c, ReadWindow.c: the spam menu items are
now completely hidden if the spam filter is not activated. If the filter is
enabled they will be created dynamically.
151 lines of code changed in 5 files:
* YAM_UT.c, YAM_utilities.h: added new function isChildOfFamily to check if
a menu item is member of a menu strip.
26 lines of code changed in 2 files:
* ReadWindow.c: increased the window title limit to SIZE_SUBJECT which
should be around 200 chars and way enough now for every need.
* ReadWindow.c: fixed a NULL pointer access when trying to open a virtual
mail due to flags checking for the SPAM folder.
13 lines of code changed in 1 file:
* YAM_TR.c: fixed incorrect usage of Hash entryCount check to skip certain
operations in the FilterDuplicates() function.
3 lines of code changed in 1 file:
* HashTable.c: added a NULL pointer check to StringHashHashKey() to catch
certain misuses.
10 lines of code changed in 3 files:
* YAM_TR.c: fixed another issue with the new UIDL management where not all
orphaned entries in the table were really properly removed.
24 lines of code changed in 1 file:
- minor cometic change
2 lines of code changed in 1 file:
* YAM_TR.c: the new UIDL managment did only try to avoid duplicates if a POP3
server was set to keep mails on the server. However, it also makes sense
to check UIDLs on server where we delete all mails immediatley because it
might have happend that the system crashed during the transfer or if the
user aborted it unexpectly.
11 lines of code changed in 1 file:
* BayesFilter.c: the spam recognition was slightly broken when the filter was
completely untrained due to some changes to make the source conform the the
STYLEGUIDE. Without any good tokens a mail should always be treated as spam.
7 lines of code changed in 1 file:
* misc: addressed bug #1597189 by having totally rewritten the whole UIDL
management from scratch. Now the new POP3-UIDL management for the
"Avoid duplicates" funcationality will use the new HashTable functions
for maintaining/checking the UIDLs of mails kept on the POP3 server.
Previously YAM was very dumb in that manner by just adding the UIDL
of each downloaded mail to the ".uidl" file and checking it via simple
but slow string operations. Now a hash table is used for that purpose
which should make UIDL lookups quite faster. In addition, the UIDL list
will now be automatically cleaned up when saving it. All orphaned UIDLs
which doesn't correspond to any mail found on a POP3 server will be
removed. That also fixes the issue with an endless growing ".uidl" file.
496 lines of code changed in 9 files:
* HashTable.c,h: added new function HashTableEnumerate to walk through a hash
table using a callback function for every single entry. See HashTable.h how
to use this stuff.
135 lines of code changed in 2 files:
* BayesFilter.c: reverted the changes done this morning and defined both
functions again as INLINE. Instead SDI_compiler.h needs to changed for
vbcc.
2 lines of code changed in 1 file:
* BayesFilter.c: changed lngamma_asymp() and lnPQfactor() to be just static
than inlined. vbcc chokes about this, because the definition of INLINE is
different for vbcc and gcc. Somebody with a little bit more compiler
knowledge (vbcc in particular) should take a look at this.
2 lines of code changed in 1 file:
* YAM_UT.c: hopefully fixed the problem that when calling RemoveMailFromList()
and closing open read windows the temporary files in T: never got deleted.
This happend because the window was only visibly closed, but the cleanup
function was never called. Now YAM correctly closes the window and does a
full cleanup.
14 lines of code changed in 1 file:
* YAM_COg.c, locale/YAM.cd, locale/deutsch.ct: when the spam filter is
disabled the spam/not spam flags of *all* mails are also cleared, so that
one can really start re-training the filter from the very beginning.
Pressing the "Reset training data" button leaves the mail flag as they are,
it just resets the training data. Therefore the confirmation question has
also been adapted accordingly.
39 lines of code changed in 1 file:
* Makefile.?: put the 'date' and 'expr' usage for calculating the
various date expressions in separate makefile variables for more easily
specifying own date/expr commands instead.
12 lines of code changed in 4 files:
* MainMaillist.c: the "set to spam/not spam" item in the context menus were
not disabled if the spam filter was deactivated.
3 lines of code changed in 1 file:
- YAM_CO.c: when the spam filter in enabled or disabled the toolbars of
opened read windows are now updated, too.
18 lines of code changed in 1 file:
- removed unwanted empty lines
0 lines of code changed in 1 file:
- minor adaptions
14 lines of code changed in 1 file:
* YAM_UT.c, YAM_utilities.h: transferred ReadUInt32() and WriteUInt32()
functions from BayesFilter.c to here, because these two are no spam filter
specific functions, but for arbitrary use.
* BayesFilter.c,h, HashTable.c,h: introduced operation tables for the hash
tables. This makes it possible to use the hash tables for arbitrary things,
not just for the spam filter. A possible usage could be the management of
the UIDL data to speed up the recognition of duplicate mails. Also threw in
lots of comments to explain how things work.
617 lines of code changed in 6 files:
* BayesFilter.c, HashTable.c: got rid of the "goto" statements in our newly
created code. Please note that "goto" are considered evil, so please try to
avoid them wherever you can.
118 lines of code changed in 2 files:
* HashTable.c,h: got rid of the typedef definitions as they just obfuscate code.
Please no typedef's.
19 lines of code changed in 2 files:
* HashTable.c: adapted sources to comply a bit more to the STYLEGUIDE.
367 lines of code changed in 2 files:
* BayesFilter.c: The ".spamdata" file will now respect the user's own maildir
setting instead of being stored in PROGDIR:
29 lines of code changed in 1 file:
* VMakefile: applied changes supplied by Jools Smith.
16 lines of code changed in 1 file:
* BayesFilter.c,h: strongly adapted new sources to STYLEGUIDE.
1021 lines of code changed in 2 files:
* HashTable.?, BayesFilter.?: added "Id" svn:keywords property to newly added
files.
* HashTable.c: fixed broken AmigaOS3 compilation due to unknown <sys/param.h>
use.
2 lines of code changed in 4 files:
* QuickSearchBar.c: changed recently changed MatchMail() function to be
at least a static function if some broken compilers really don't like the
INLINE statement.
2 lines of code changed in 1 file:
- HashTable.c: fixed a possible uninitialized variable us.
1 lines of code changed in 1 file:
Fixed compilation bug in ANSI C compiler. Declaration variable can be present after any operators.
1 lines of code changed in 1 file:
* HashTable.c: removed a warning because of comparing signed and unsigned
values
1 lines of code changed in 1 file:
* BayesFilter.c: if the spam filter is globally disabled upon startup no
training data will be read. If it is disabled on quit a possibly existing
data file will be deleted.
1 lines of code changed in 1 file:
* ReadWindow.c: the toolbar is updated accordingly if a mail in the spam
folder is reclassified.
14 lines of code changed in 2 files:
* HashTable.c: removed a warning because of comparing signed and unsigned
values
2 lines of code changed in 1 file:
* BayesFilter.c: if the spam filter is globally disabled upon startup no
training data will be read. If it is disabled on quit a possibly existing
data file will be deleted.
15 lines of code changed in 1 file:
* YAM_COg.c, YAM.cd: when the spam filter is disabled the user is now asked if
he/she wants to reset the training data.
25 lines of code changed in 1 file:
* MainFolderListtree.c: added missing new parameter to call to MA_MoveCopy()
1 lines of code changed in 1 file:
* QuickSearchBar.c: changed MatchMail() to a normal function instead of of an
inline function. This fixes a compiling bug with vbcc.
2 lines of code changed in 1 file:
* AttachmentImage.c: only gcc seems to be able to intitalize constants with
variables as sometimes used for TagLists. Changed OM_SETUP method to use
only constants in the definition of iconCtrlTags and assign the variable
parts later.
6 lines of code changed in 1 file:
* HashTable.h: included SDI_compiler.h, because some functions need the UNUSED
definition.
2 lines of code changed in 1 file:
* BayesFilter.c: added definition of M_LN2 for compilers whose math.h doesn't
define this number.
5 lines of code changed in 1 file:
* VMakefile, smakefile: added missing dependency lines for BayesFilter.o and
HashTable.o
2 lines of code changed in 1 file:
* YAM_UT.c: deleted a printf() call for debugging purposes.
0 lines of code changed in 1 file:
* misc: all delete and move functions can be told to close a possibly open
read window when RemoveMailFromList() is called. This should fix the
complaints on the mailing list about an always closing read window when
deleting mails. The behaviour is now consistent in that way, that all
operations invoked from the read window will try to leave the window open
and show another mail after the operation. All operations invoked from the
main window will close an open read window affected by this operation,
because from the main window one can perform this operation one more than
one single mail. I hope this corresponds with most users' expectations. You
should keep in mind that is not always possible to keep the read window open
because of the invalid pointer problem.
35 lines of code changed in 10 files:
* restored old, unmodifed Makefile.os4
2 lines of code changed in 1 file:
* misc: Too many changes to list each of them, but finally YAM got a working
spam filter!!
The supplied images in the nightly builds contain just a trashcan icon for
everything concerning the spam filter, so these *really* need to be replaced
by nicer ones.
While implementing the spam filter two new buttons made it into the toolbars
of the main window and of the read window. That also means you need new
images for these two toolbars. The nightly build should contain updated
standard icons. If not, ask me. At least I can supply nice glow icons, but
still with lots of trashcans :) As long as we are stuck with ToolBar.mcc we
will have to live with this inconvenience.
By default the spam filter is inactive and has to be activated on the
according page in the configuration window. After that it is very likely
that *ALL* of your newly received mails will be marked as spam. That is
absolutely normal, because the filter must be trained to distinguish between
normal wanted mails and spam mails. Just mark these "false negatives" as
normal mails and move them to other mail folders if you like. After a time
YAM will become better and just filter out real spam. The other new items in
then configuration window should be quite self explaining.
Please try to stress the filter as much as possible. Hopefully it will make
it in the 2.5 release if no major bugs make it a show stopper. Especially
the possibility to (de)activate the filter while YAM is running is largely
untested and I suspect it not to work 100%.
2912 lines of code changed in 37 files:
* YAM_UT.c: bug #1460858 was only partly fixed by clearing the mail pointer
in the struct ReadMailData directly after calling RemoveMailFromList(). But
this did not cover the case that a mail was displayed in a read window
while several mails were deleted at once, the one being displayed among
them. In this case the read window was left open. If one switched to the
next/previous mail after that YAM jumped to a random mail. Now a possibly
open read window is also closed and the ReadMailData is cleaned up by the
window itself.
23 lines of code changed in 1 file:
* YAM_RE.c: fixed another issue with "multipart/alternative" mails which
contain an aggregate "multipart/related" part, ending up in not hiding
all non "text/plain" parts.
2 lines of code changed in 1 file:
* YAM_RE.c: fixed bug #1592829 where on some "multipart/alternative" mails
a reply action ended up in an empty reply/edit window.
29 lines of code changed in 1 file:
* YAM_MI.c: fixed bug #1573693 where binary attachments were saved truncated
in case the "autodetect cyrillic charsets" option was enabled.
1 lines of code changed in 1 file:
* YAM_TR.c: reworked/revised some of our raw POP3 data transfer functions to
include some debug output as well as make sure all memory is immediately
freed upon an error.
138 lines of code changed in 1 file:
* YAM_UT.c: the info window after a mail download is opened in inactive state
now to avoid the problem that this window steals the focus of other windows
one is typing in.
1 lines of code changed in 1 file:
* ReadWindow, ReadMailGroup: after a call to either MA_DeleteSingle() or
MA_MoveCopy() the pointer to the current mail in the ReadMailData must
be invalidated, because these two functions call RemoveMailFromList()
which free()s the mail data. Hence the pointer must not be used after
such a call anymore. This should fix bug #1460858.
12 lines of code changed in 2 files:
* YAM_MA.c: minor optimizations and general styleguide fixage of the
MA_DeleteOldHook. Now the statistics for a folder will only be updated
after having scanned through all messages (should be faster) and
without having to save the mail's folder pointer.
43 lines of code changed in 1 file:
* YAM_MA.c: the mail structure must not be accessed after a call to
MA_DeleteSingle(), because it is free()ed in that function.
4 lines of code changed in 1 file:
* YAM_TR.c: after a bad reponse to the PASS command the password is over-
written with 'X' chars to avoid that anybody else can read a password by
accident. This fixes bug #1592268.
26 lines of code changed in 1 file:
* YAM_WR.c, YAM.c: changed write window class to use the new NoStyle Export
hook of TextEditor.mcc 15.19 as well as the ExportBlock method for
more precisly identifying where the soft-style marker should be added.
Now the Bold, Italic, Underline and Colored buttons/menuitems are fully
mutual exclusive and work only wordwise. That means you are not allowed
to set a soft-style only on parts of a word. In addition, only one
soft-style at a time is allowed and setting a softstyle on more than one
word will also not work anymore. This change should now make the whole
non-standarized softstyle management in YAM more consistent and
interoperatable with other non-Amiga mail clients. Please note that
for the change to work the minimum required version of TextEditor.mcc
has been bumped to 15.19.
190 lines of code changed in 2 files:
* YAM_MAf.c: added a minor workaround for some broken Date: header lines
comming from broken mail clients. In fact, some clients seem to encode
the date not totally conform to RFC822. Now YAM will even try harder to
still identify the date of the mail correctly by falling back to certain
separator types and not only a single one.
15 lines of code changed in 1 file:
* YAM_MA.c, YAM_UT.c, YAM_FO.c: fixed some missing/incorrect TAG_DONE
definitions necessary for SetAttrs().
15 lines of code changed in 3 files: