## PkPackageSack PkPackageSack — A sack of packages that can be manipulated |

## Synopsis

    #define             PK_PACKAGE_SACK_TYPE_ERROR
    struct              PkPackageSack;
    struct              PkPackageSackClass;
    gboolean            (*PkPackageSackFilterFunc)          (PkPackage *package,
                                                             gpointer user_data);
                        PkPackageSackResults;
    enum                PkPackageSackSortType;
    gboolean            pk_package_sack_add_package         (PkPackageSack *sack,
                                                             PkPackage *package);
    gboolean            pk_package_sack_add_package_by_id   (PkPackageSack *sack,
                                                             const gchar *package_id,
                                                             GError **error);
    gboolean            pk_package_sack_add_packages_from_file
                                                            (PkPackageSack *sack,
                                                             GFile *file,
                                                             GError **error);
    void                pk_package_sack_clear               (PkPackageSack *sack);
    PkPackageSack *     pk_package_sack_filter              (PkPackageSack *sack,
                                                             PkPackageSackFilterFunc filter_cb,
                                                             gpointer user_data);
    PkPackageSack *     pk_package_sack_filter_by_info      (PkPackageSack *sack,
                                                             PkInfoEnum info);
    PkPackage *         pk_package_sack_find_by_id          (PkPackageSack *sack,
                                                             const gchar *package_id);
    GPtrArray *         pk_package_sack_get_array           (PkPackageSack *sack);
    void                pk_package_sack_get_details_async   (PkPackageSack *sack,
                                                             GCancellable *cancellable,
                                                             PkProgressCallback progress_callback,
                                                             gpointer progress_user_data,
                                                             GAsyncReadyCallback callback,
                                                             gpointer user_data);
    gchar **            pk_package_sack_get_ids             (PkPackageSack *sack);
    guint               pk_package_sack_get_size            (PkPackageSack *sack);
    guint64             pk_package_sack_get_total_bytes     (PkPackageSack *sack);
    void                pk_package_sack_get_update_detail_async
                                                            (PkPackageSack *sack,
                                                             GCancellable *cancellable,
                                                             PkProgressCallback progress_callback,
                                                             gpointer progress_user_data,
                                                             GAsyncReadyCallback callback,
                                                             gpointer user_data);
    gboolean            pk_package_sack_merge_generic_finish
                                                            (PkPackageSack *sack,
                                                             GAsyncResult *res,
                                                             GError **error);
    PkPackageSack *     pk_package_sack_new                 (void);
    gboolean            pk_package_sack_remove_by_filter    (PkPackageSack *sack,
                                                             PkPackageSackFilterFunc filter_cb,
                                                             gpointer user_data);
    gboolean            pk_package_sack_remove_package      (PkPackageSack *sack,
                                                             PkPackage *package);
    gboolean            pk_package_sack_remove_package_by_id
                                                            (PkPackageSack *sack,
                                                             const gchar *package_id);
    void                pk_package_sack_resolve_async       (PkPackageSack *sack,
                                                             GCancellable *cancellable,
                                                             PkProgressCallback progress_callback,
                                                             gpointer progress_user_data,
                                                             GAsyncReadyCallback callback,
                                                             gpointer user_data);
    void                pk_package_sack_sort                (PkPackageSack *sack,
                                                             PkPackageSackSortType type);
    void                pk_package_sack_test                (gpointer user_data);

## Object Hierarchy

      GObject
       +----PkPackageSack

      GEnum
       +----PkPackageSackSortType

## Description

A package sack is a set of packages that can have operations done on them in parallel. This might be adding summary text for bare package ID's, or to add package or update details.

## Details

### PK_PACKAGE_SACK_TYPE_ERROR

    #define PK_PACKAGE_SACK_TYPE_ERROR (pk_package_sack_error_get_type ())

### struct PkPackageSack

    struct PkPackageSack;

### struct PkPackageSackClass

    struct PkPackageSackClass {
    	GObjectClass parent_class;

    	/* signals */
    	void		(* changed)			(PkPackageSack *sack);
    	/* padding for future expansion */
    	void (*_pk_reserved1) (void);
    	void (*_pk_reserved2) (void);
    	void (*_pk_reserved3) (void);
    	void (*_pk_reserved4) (void);
    	void (*_pk_reserved5) (void);
    };

### PkPackageSackFilterFunc ()

    gboolean            (*PkPackageSackFilterFunc)          (PkPackage *package,
                                                             gpointer user_data);

### PkPackageSackResults

    typedef struct _PkPackageSackResults PkPackageSackResults;

### enum PkPackageSackSortType

    typedef enum {
    	PK_PACKAGE_SACK_SORT_TYPE_NAME,
    	PK_PACKAGE_SACK_SORT_TYPE_INFO,
    	PK_PACKAGE_SACK_SORT_TYPE_PACKAGE_ID,
    	PK_PACKAGE_SACK_SORT_TYPE_SUMMARY,
    	PK_PACKAGE_SACK_SORT_TYPE_LAST
    } PkPackageSackSortType;

### pk_package_sack_add_package ()

    gboolean            pk_package_sack_add_package         (PkPackageSack *sack,
                                                             PkPackage *package);

Adds a package to the sack.

`sack` : | a valid PkPackageSack instance
`package` : | a valid PkPackage instance
Returns : | `TRUE` if the package was added to the sack

Since 0.5.2

### pk_package_sack_add_package_by_id ()

    gboolean            pk_package_sack_add_package_by_id   (PkPackageSack *sack,
                                                             const gchar *package_id,
                                                             GError **error);

Adds a package reference to the sack.

`sack` : | a valid PkPackageSack instance
`package_id` : | a package_id descriptor
`error` : | a `GError` to put the error code and message in, or `NULL`
Returns : | `TRUE` if the package was added to the sack

Since 0.5.2

### pk_package_sack_add_packages_from_file ()

    gboolean            pk_package_sack_add_packages_from_file
                                                            (PkPackageSack *sack,
                                                             GFile *file,
                                                             GError **error);

Adds packages from package-list file to a PkPackageSack.

`sack` : | a valid PkPackageSack instance
`file` : | a valid package-list file
`error` : | a `GError` to put the error code and message in, or `NULL`
Returns : | `TRUE` if there were no errors.

### pk_package_sack_clear ()

    void                pk_package_sack_clear               (PkPackageSack *sack);

Empty all the packages from the sack

`sack` : | a valid PkPackageSack instance

Since 0.5.2

### pk_package_sack_filter ()

    PkPackageSack *     pk_package_sack_filter              (PkPackageSack *sack,
                                                             PkPackageSackFilterFunc filter_cb,
                                                             gpointer user_data);

Returns a new package sack which only matches packages that return `TRUE` from the filter function.

`sack` : | a valid PkPackageSack instance
`filter_cb` : | a PkPackageSackFilterFunc, which returns `TRUE` for the PkPackage's to add. [scope call]
`user_data` : | user data to pass to `filter_cb`
Returns : | a new PkPackageSack, free with `g_object_unref()`. [transfer full]

Since 0.6.3

### pk_package_sack_filter_by_info ()

    PkPackageSack *     pk_package_sack_filter_by_info      (PkPackageSack *sack,
                                                             PkInfoEnum info);

Returns a new package sack which only matches packages that match the specified info enum value.

`sack` : | a valid PkPackageSack instance
`info` : | a `PkInfoEnum` value to match
Returns : | a new PkPackageSack, free with `g_object_unref()`. [transfer full]

Since 0.6.2

### pk_package_sack_find_by_id ()

    PkPackage *         pk_package_sack_find_by_id          (PkPackageSack *sack,
                                                             const gchar *package_id);

Finds a package in a sack from reference. As soon as one package is found the search is stopped.

`sack` : | a valid PkPackageSack instance
`package_id` : | a package_id descriptor
Returns : | the PkPackage object, or `NULL` if unfound. Free with `g_object_unref()`. [transfer full]

Since 0.5.2

### pk_package_sack_get_array ()

    GPtrArray *         pk_package_sack_get_array           (PkPackageSack *sack);

Gets the package array from the sack

`sack` : | a valid PkPackageSack instance
Returns : | A GPtrArray, free with `g_ptr_array_unref()`. [element-type PkPackage][transfer container]

Since 0.6.1

### pk_package_sack_get_details_async ()

    void                pk_package_sack_get_details_async   (PkPackageSack *sack,
                                                             GCancellable *cancellable,
                                                             PkProgressCallback progress_callback,
                                                             gpointer progress_user_data,
                                                             GAsyncReadyCallback callback,
                                                             gpointer user_data);

Merges in details about packages.

`sack` : | a valid PkPackageSack instance
`cancellable` : | a GCancellable or `NULL`
`progress_callback` : | the function to run when the progress changes. [scope call]
`progress_user_data` : | data to pass to `progress_callback`
`callback` : | the function to run on completion
`user_data` : | the data to pass to `callback`

### pk_package_sack_get_ids ()

    gchar **            pk_package_sack_get_ids             (PkPackageSack *sack);

Returns all the Package IDs in the sack

`sack` : | a valid PkPackageSack instance
Returns : | the number of packages in the sack, free with `g_strfreev()`. [transfer full]

Since 0.5.3

### pk_package_sack_get_size ()

    guint               pk_package_sack_get_size            (PkPackageSack *sack);

Gets the number of packages in the sack

`sack` : | a valid PkPackageSack instance
Returns : | the number of packages in the sack

Since 0.5.2

### pk_package_sack_get_total_bytes ()

    guint64             pk_package_sack_get_total_bytes     (PkPackageSack *sack);

Gets the total size of the package sack in bytes.

`sack` : | a valid PkPackageSack instance
Returns : | the size in bytes

Since 0.5.2

### pk_package_sack_get_update_detail_async ()

    void                pk_package_sack_get_update_detail_async
                                                            (PkPackageSack *sack,
                                                             GCancellable *cancellable,
                                                             PkProgressCallback progress_callback,
                                                             gpointer progress_user_data,
                                                             GAsyncReadyCallback callback,
                                                             gpointer user_data);

Merges in update details about packages.

`sack` : | a valid PkPackageSack instance
`cancellable` : | a GCancellable or `NULL`
`progress_callback` : | the function to run when the progress changes. [scope call]
`progress_user_data` : | data to pass to `progress_callback`
`callback` : | the function to run on completion
`user_data` : | the data to pass to `callback`

Since 0.5.2

### pk_package_sack_merge_generic_finish ()

    gboolean            pk_package_sack_merge_generic_finish
                                                            (PkPackageSack *sack,
                                                             GAsyncResult *res,
                                                             GError **error);

Gets the result from the asynchronous function.

`sack` : | a valid PkPackageSack instance
`res` : | the GAsyncResult
`error` : | A GError or `NULL`
Returns : | `TRUE` for success

Since 0.5.2

### pk_package_sack_new ()

    PkPackageSack *     pk_package_sack_new                 (void);

Returns : | a new PkPackageSack object.

Since 0.5.2

### pk_package_sack_remove_by_filter ()

    gboolean            pk_package_sack_remove_by_filter    (PkPackageSack *sack,
                                                             PkPackageSackFilterFunc filter_cb,
                                                             gpointer user_data);

Removes from the package sack any packages that return `FALSE` from the filter function.

`sack` : | a valid PkPackageSack instance
`filter_cb` : | a PkPackageSackFilterFunc, which returns `TRUE` for the PkPackage's to retain. [scope call]
`user_data` : | user data to pass to `filter_cb`
Returns : | `TRUE` if a package was removed from the sack

Since 0.6.3

### pk_package_sack_remove_package ()

    gboolean            pk_package_sack_remove_package      (PkPackageSack *sack,
                                                             PkPackage *package);

Removes a package reference from the sack. The pointers have to match exactly.

`sack` : | a valid PkPackageSack instance
`package` : | a valid PkPackage instance
Returns : | `TRUE` if the package was removed from the sack

Since 0.5.2

### pk_package_sack_remove_package_by_id ()

    gboolean            pk_package_sack_remove_package_by_id
                                                            (PkPackageSack *sack,
                                                             const gchar *package_id);

Removes a package reference from the sack. As soon as one package is removed the search is stopped.

`sack` : | a valid PkPackageSack instance
`package_id` : | a package_id descriptor
Returns : | `TRUE` if the package was removed from the sack

Since 0.5.2

### pk_package_sack_resolve_async ()

    void                pk_package_sack_resolve_async       (PkPackageSack *sack,
                                                             GCancellable *cancellable,
                                                             PkProgressCallback progress_callback,
                                                             gpointer progress_user_data,
                                                             GAsyncReadyCallback callback,
                                                             gpointer user_data);

Merges in details about packages using resolve.

`sack` : | a valid PkPackageSack instance
`cancellable` : | a GCancellable or `NULL`
`progress_callback` : | the function to run when the progress changes. [scope call]
`progress_user_data` : | data to pass to `progress_callback`
`callback` : | the function to run on completion
`user_data` : | the data to pass to `callback`

Since 0.5.2

### pk_package_sack_sort ()

    void                pk_package_sack_sort                (PkPackageSack *sack,
                                                             PkPackageSackSortType type);

### pk_package_sack_test ()

    void                pk_package_sack_test                (gpointer user_data);