/*
* camel-junk-filter.c
*
* This library is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation.
*
* This library 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 Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library. If not, see .
*
*/
#include "camel-junk-filter.h"
#include
#include
#include "camel-operation.h"
G_DEFINE_INTERFACE (CamelJunkFilter, camel_junk_filter, G_TYPE_OBJECT)
static void
camel_junk_filter_default_init (CamelJunkFilterInterface *iface)
{
}
/**
* camel_junk_filter_classify:
* @junk_filter: a #CamelJunkFilter
* @message: a #CamelMimeMessage
* @cancellable: optional #GCancellable object, or %NULL
* @error: return location for a #GError, or %NULL
*
* Classifies @message as junk, not junk or inconclusive.
*
* If an error occurs, the function sets @error and returns
* %CAMEL_JUNK_STATUS_ERROR.
*
* Returns: the junk status determined by @junk_filter
*
* Since: 3.2
**/
CamelJunkStatus
camel_junk_filter_classify (CamelJunkFilter *junk_filter,
CamelMimeMessage *message,
GCancellable *cancellable,
GError **error)
{
CamelJunkFilterInterface *iface;
g_return_val_if_fail (CAMEL_IS_JUNK_FILTER (junk_filter), 0);
g_return_val_if_fail (CAMEL_IS_MIME_MESSAGE (message), 0);
iface = CAMEL_JUNK_FILTER_GET_INTERFACE (junk_filter);
g_return_val_if_fail (iface->classify != NULL, 0);
return iface->classify (
junk_filter, message, cancellable, error);
}
/**
* camel_junk_filter_learn_junk:
* @junk_filter: a #CamelJunkFilter
* @message: a #CamelMimeMessage
* @cancellable: optional #GCancellable object, or %NULL
* @error: return location for a #GError, or %NULL
*
* Instructs @junk_filter to classify @message as junk. If using an
* adaptive junk filtering algorithm, explicitly marking @message as
* junk will influence the classification of future messages.
*
* If an error occurs, the function sets @error and returns %FALSE.
*
* Returns: %TRUE if @message was successfully classified
*
* Since: 3.2
**/
gboolean
camel_junk_filter_learn_junk (CamelJunkFilter *junk_filter,
CamelMimeMessage *message,
GCancellable *cancellable,
GError **error)
{
CamelJunkFilterInterface *iface;
g_return_val_if_fail (CAMEL_IS_JUNK_FILTER (junk_filter), FALSE);
g_return_val_if_fail (CAMEL_IS_MIME_MESSAGE (message), FALSE);
iface = CAMEL_JUNK_FILTER_GET_INTERFACE (junk_filter);
g_return_val_if_fail (iface->learn_junk != NULL, FALSE);
return iface->learn_junk (
junk_filter, message, cancellable, error);
}
/**
* camel_junk_filter_learn_not_junk:
* @junk_filter: a #CamelJunkFilter
* @message: a #CamelMimeMessage
* @cancellable: optional #GCancellable object, or %NULL
* @error: return location for a #GError, or %NULL
*
* Instructs @junk_filter to classify @message as not junk. If using an
* adaptive junk filtering algorithm, explicitly marking @message as not
* junk will influence the classification of future messages.
*
* If an error occurs, the function sets @error and returns %FALSE.
*
* Returns: %TRUE if @message was successfully classified
*
* Since: 3.2
**/
gboolean
camel_junk_filter_learn_not_junk (CamelJunkFilter *junk_filter,
CamelMimeMessage *message,
GCancellable *cancellable,
GError **error)
{
CamelJunkFilterInterface *iface;
g_return_val_if_fail (CAMEL_IS_JUNK_FILTER (junk_filter), FALSE);
g_return_val_if_fail (CAMEL_IS_MIME_MESSAGE (message), FALSE);
iface = CAMEL_JUNK_FILTER_GET_INTERFACE (junk_filter);
g_return_val_if_fail (iface->learn_not_junk != NULL, FALSE);
return iface->learn_not_junk (
junk_filter, message, cancellable, error);
}
/**
* camel_junk_filter_synchronize:
* @junk_filter: a #CamelJunkFilter
* @cancellable: optional #GCancellable object, or %NULL
* @error: return location for a #GError, or %NULL
*
* Instructs @junk_filter to flush any in-memory caches to disk, if
* applicable. When filtering many messages, delaying this step until
* all messages have been classified can improve performance.
*
* If an error occurs, the function sets @error and returns %FALSE.
*
* Returns: %TRUE if @junk_filter was successfully synchronized
*
* Since: 3.2
**/
gboolean
camel_junk_filter_synchronize (CamelJunkFilter *junk_filter,
GCancellable *cancellable,
GError **error)
{
CamelJunkFilterInterface *iface;
gboolean success = TRUE;
g_return_val_if_fail (CAMEL_IS_JUNK_FILTER (junk_filter), FALSE);
/* This method is optional. */
iface = CAMEL_JUNK_FILTER_GET_INTERFACE (junk_filter);
if (iface->synchronize != NULL) {
camel_operation_push_message (
cancellable, _("Synchronizing junk database"));
success = iface->synchronize (
junk_filter, cancellable, error);
camel_operation_pop_message (cancellable);
}
return success;
}