Commit Graph

44 Commits

Author SHA1 Message Date
a88c0ffb93 Change the license URL from http://www.gnu.org/licenses/ to https:// 2018-07-11 23:47:19 +02:00
8a37c928eb app, plug-ins, libgimp*: clean out all remaining trailing spaces/tabs.
Rather than just discovering them by chance, a simple grep and some
search and replace are much more efficient! :-)
Cleaning only done on C and automake files.
2016-06-02 02:04:26 +02:00
c77fc779db libgimp, plug-ins: use g_strfreev() to free PDB string arrays 2012-11-27 21:16:26 +01:00
c2f68b59a3 Bug 670897: Phython-fu does not return parent layer...
(pdb.gimp_item_get_parent(item))

Adjust param conversions when wrapping pdb functions
and implement 'children' and 'parent' getter for
GimpItem Python Object.
2012-02-28 18:20:10 +01:00
580b5ba624 plug-ins: Disable one more debug statement in pygimp/pygimp-pdb.c 2011-06-16 14:03:13 +02:00
d00196dc7d plug-ins: Disable debug output from pygimp/pygimp-pdb.c
Remove debug output from pygimp/pygimp-pdb.c so we don't get annoying
debug output during the plug-in query phase.
2011-05-19 07:21:54 +02:00
726ec88c26 plug-ins: Fix PyGIMP item warnings 2011-05-18 21:30:05 +02:00
3de6cc5f74 pygimp: Creates the "gimp.Item" class
Creates a gimp.Item class and change the hyerarchy so that
Python Vectors, Layers and Drawable classes inherit from it.
Still not working properly, as PDB calls returns raw integer
ID's instead of proper Python objects.
2011-05-16 10:12:59 -04:00
d40984f505 plug-ins/pygimp: Cast PyMappingMethods.mp_length to lenfunc
From Pyton 2.5 - which is the minimum Python version we require - the
type of the mp_length member in PyMappingMethods is lenfunc, not
inquiry. Fix this to get rid of "initialization from incompatible
pointer type" warnings.
2010-09-03 08:12:05 +02:00
474b5fdff3 Bug 601891 - gimp_image_get_selection returns None
The code used to make the assumption that the selection mask was
a layer. Actually it is a channel and changing the code accordingly
fixes the reported problem.
2009-11-14 16:50:42 +01:00
d9b5207aa2 Change licence to GPLv3 (and to LGPLv3 for libgimp).
2009-01-17  Michael Natterer  <mitch@gimp.org>

	* all files with a GPL header and all COPYING files:

	Change licence to GPLv3 (and to LGPLv3 for libgimp).

	Cleaned up some copyright headers and regenerated the parsers in
	the ImageMap plugin.


svn path=/trunk/; revision=27913
2009-01-17 22:28:01 +00:00
0527aaa3e4 Fix wrong strcmp evaluation.
2008-08-24  Lars-Peter Clausen  <lars@metafoo.de>

	* plug-ins/pygimp/pygimp-pdb.c (pdb_getattro): Fix wrong strcmp
	evaluation.


svn path=/trunk/; revision=26745
2008-08-24 16:38:23 +00:00
52522c3f4e also use gimp_get_pdb_error() here. Easier and safer than looking at the
2008-08-16  Sven Neumann  <sven@gimp.org>

	* plug-ins/pygimp/pygimp-pdb.c (pf_call): also use
	gimp_get_pdb_error() here. Easier and safer than looking at the
	return values to get the error message.


svn path=/trunk/; revision=26604
2008-08-16 17:29:31 +00:00
f84608d539 If a procedure call fails, pass a string describing the error as the
2008-08-16  Sven Neumann  <sven@gimp.org>

	If a procedure call fails, pass a string describing the error as
	the second return value. First step towars fixing bug #344818.

	* app/pdb/gimpprocedure.[ch] (gimp_procedure_get_return_values):
	added a GError parameter. If it is set, pass the error message 
to
	the return values.

	* app/pdb/gimppdberror.h: added some more error codes.

	* app/pdb/gimppdb.c
	* app/xcf/xcf.c: pass errors to 
gimp_procedure_get_return_values().

	* app/plug-in/gimpplugin-message.c 
(gimp_plug_in_handle_proc_run):
	show a different error message for execution vs. calling errors.

	* app/plug-in/gimpplugin-progress.c
	(gimp_plug_in_progress_cancel_callback): pass the error
	GIMP_PDB_CANCELLED to gimp_procedure_get_return_values().

	* app/plug-in/gimppluginmanager-call.[ch]
	(gimp_plug_in_manager_call_run): removed the 
'destroy_return_vals'
	parameter.

	* app/plug-in/gimppluginprocedure.c: destroy the return values 
here.

	* app/plug-in/gimppluginprocframe.c: pass an error to
	gimp_procedure_get_return_values().

	* tools/pdbgen/app.pl
	* tools/pdbgen/pdb/fileops.pdb: generate code that passes the
	error to gimp_procedure_get_return_values().

	* app/pdb/*-cmds.c: regenerated.
	
	* plug-ins/pygimp/pygimp-pdb.c: extract the error message from 
the
	return values and pass it to the exception that is thrown.


svn path=/trunk/; revision=26593
2008-08-16 13:57:57 +00:00
81131c0bb4 Add new PDB data type PDB_COLORARRAY for using arrays of GimpRGB colors as
2008-07-14  Sven Neumann  <sven@gimp.org>

	Add new PDB data type PDB_COLORARRAY for using arrays of GimpRGB
	colors as argument or return value.

	* libgimpbase/gimpbaseenums.[ch] (enum GimpPDBArgType): replaced
	the unused GIMP_PDB_BOUNDARY with GIMP_PDB_COLORARRAY.

	* libgimpbase/gimpprotocol.h: increased GIMP_PROTOCOL_VERSION.
	(struct _GPParam): added d_colorarray entry to the union.

	* libgimpbase/gimpprotocol.c
	* libgimp/gimp.[ch]
	* app/pdb/gimp-pdb-compat.c
	* app/plug-in/plug-in-params.c
	* app/plug-in/gimpplugin-message.c
	* tools/pdbgen/pdb.pl: deal with the new data type.

	* tools/pdbgen/enums.pl: regenerated.

	* plug-ins/pygimp/pygimp-pdb.c
	* plug-ins/script-fu/scheme-wrapper.c: handle the new data type.


svn path=/trunk/; revision=26189
2008-07-14 14:09:16 +00:00
874870be13 Allow None to be passed for PDB_DISPLAY.
2008-07-10  Manish Singh  <yosh@gimp.org>

        * plug-ins/pygimp/pygimp-pdb.c: Allow None to be passed for
        PDB_DISPLAY.

svn path=/trunk/; revision=26107
2008-07-10 18:22:08 +00:00
c103ca3c90 plug-ins/pygimp/pygimp-drawable.c plug-ins/pygimp/pygimp-vectors.c
2008-07-03  Lars-Peter Clausen  <lars@metafoo.de>

	* plug-ins/pygimp/pygimp-drawable.c
	* plug-ins/pygimp/pygimp-vectors.c
	* plug-ins/pygimp/pygimp-display.c
	* plug-ins/pygimp/pygimp-image.c: Added checks to ensure that a python
	object only is created if its id is valid. Fixes bug #536403.
	* plug-ins/pygimp/pygimp-pdb.c
	* plug-ins/pygimp/pygimp-tile.c
	* plug-ins/pygimp/pygimp-colors.c
	* plug-ins/pygimp/pygimp.h: Fix crashing when pygimp is used with
	python-2.5 on 64 bit systems. Fixes bug #540629.


svn path=/trunk/; revision=26044
2008-07-03 11:39:52 +00:00
335c9a90cb revert last patch because Py_ssize_t is undefined in some (older?)
2008-06-28  Michael Natterer  <mitch@gimp.org>

	* pygimp-pdb.c:
	* pygimp-tile.c:
	* pygimp-colors.c: revert last patch because Py_ssize_t is
	undefined in some (older?) pythons. Needs more investigation.


svn path=/trunk/; revision=26016
2008-06-28 21:01:53 +00:00
c3d5eeab80 Applied patch from Ed Swartz that makes use of Py_ssize_t:s instead of
2008-06-28  Martin Nordholts  <martinn@svn.gnome.org>

	* pygimp-pdb.c:
	* pygimp-tile.c:
	* pygimp-colors.c: Applied patch from Ed Swartz that makes use of
	Py_ssize_t:s instead of int:s to better utilize 64-bit
	systems. (Bug #540629.)

svn path=/trunk/; revision=26011
2008-06-28 16:38:50 +00:00
60f4aa444c Handle __members__ specially to return the current PDB procedure list, and
2008-01-10  Manish Singh  <yosh@gimp.org>

        * plug-ins/pygimp/pygimp-pdb.c (pdb_getattro): Handle __members__
        specially to return the current PDB procedure list, and pass-through
        any attributes that start with "_" without looking them up in the
        PDB.

svn path=/trunk/; revision=24595
2008-01-10 23:39:49 +00:00
43f8239668 plug-ins/pygimp/gimpmodule.c plug-ins/pygimp/pygimp-pdb.c
2007-12-30  Manish Singh  <yosh@gimp.org>

        * plug-ins/pygimp/gimpmodule.c
        * plug-ins/pygimp/pygimp-pdb.c
        * plug-ins/pygimp/pygimp-colors.c
        * plug-ins/pygimp/pygimpcolor-api.h
        * plug-ins/pygimp/pygimpcolor.h: Move pygimp_rgb_from_pyobject into
        the gimpcolor module, and make it handle translation of sequences
        into colors too. Make the GimpParam translation code use it.

        * plug-ins/pygimp/gimpcolormodule.c: Initial wrapping of
        gimp_bilinear color functions.

        * plug-ins/pygimp/gimpenumsmodule.c
        * plug-ins/pygimp/gimpmodule.c
        * plug-ins/pygimp/pygimp.h
        * plug-ins/pygimp/pygimp-tile.c: Basic wrapping of GimpPixelFetcher.

svn path=/trunk/; revision=24481
2007-12-30 15:25:13 +00:00
9e13d05f5c drop the reference we added to the args tuple in the error case.
2007-09-30  Manish Singh  <yosh@gimp.org>

        * plug-ins/pygimp/pygimp-pdb.c (pygimp_param_from_tuple): drop the
        reference we added to the args tuple in the error case.

svn path=/trunk/; revision=23694
2007-09-30 08:37:45 +00:00
6f26979be4 plug-ins/pygimp/gimpcolormodule.c plug-ins/pygimp/gimpenumsmodule.c
2007-05-28  Manish Singh  <yosh@gimp.org>

        * plug-ins/pygimp/gimpcolormodule.c
        * plug-ins/pygimp/gimpenumsmodule.c
        * plug-ins/pygimp/gimpmodule.c
        * plug-ins/pygimp/gimpthumbmodule.c
        * plug-ins/pygimp/gimpuimodule.c
        * plug-ins/pygimp/pygimp-drawable.c
        * plug-ins/pygimp/pygimp-image.c
        * plug-ins/pygimp/pygimp-pdb.c
        * plug-ins/pygimp/pygimp-tile.c: cleanups.

svn path=/trunk/; revision=22644
2007-05-28 22:26:22 +00:00
c0057c99a0 add optional run_mode keyword argument to pdb calls.
2007-04-28 Manish Singh <yosh@gimp.org>

        * plug-ins/pygimp/pygimp-pdb.c: add optional run_mode keyword argument
        to pdb calls.

svn path=/trunk/; revision=22361
2007-04-28 23:14:28 +00:00
b99f99f16c plug-ins/common/curve_bend.c plug-ins/common/depthmerge.c
2007-02-19  Sven Neumann  <sven@gimp.org>

	* plug-ins/common/curve_bend.c
	* plug-ins/common/depthmerge.c
	* plug-ins/common/neon.c
	* plug-ins/common/nlfilt.c
	* plug-ins/common/pix.c
	* plug-ins/common/psd.c
	* plug-ins/common/spheredesigner.c
	* plug-ins/metadata/interface.c
	* plug-ins/pygimp/gimpmodule.c
	* plug-ins/pygimp/pygimp-pdb.c
	* plug-ins/script-fu/scheme-wrapper.c
	* plug-ins/script-fu/script-fu-scripts.c
	* plug-ins/script-fu/script-fu-server.c
	* plug-ins/xjt/xjpeg.c
	* plug-ins/xjt/xjt.c: use g_printerr() instead of fprintf().


svn path=/trunk/; revision=21947
2007-02-19 10:37:33 +00:00
7d014b4ae2 wrap gimp_vectors_stroke_new_from_points in the form of a
2006-10-27  Manish Singh  <yosh@gimp.org>

        * plug-ins/pygimp/pygimp-vectors.c: wrap
        gimp_vectors_stroke_new_from_points in the form of a
        VectorsBezierStroke constructor.

        * plug-ins/pygimp/gimpmodule.c: wrap gimp_vectors_new_from_file
        and gimp_vectors_new_from_string.

        * plug-ins/pygimp/pygimp-pdb.c: PDB_VECTORS should be translated
        into Vectors objects.
2006-10-27 07:17:13 +00:00
c46a34fdf0 plug-ins/pygimp/pygimp-drawable.c reorder includes to avoid preprocessor
2006-09-08  Manish Singh  <yosh@gimp.org>

        * plug-ins/pygimp/pygimp-drawable.c
        * plug-ins/pygimp/pygimp-pdb.c: reorder includes to avoid preprocessor
        symbol redefinition warnings.
2006-09-08 21:05:38 +00:00
793da2025f plug-ins/pygimp/pygimp-drawable.c #define NO_IMPORT_PYGOBJECT, so the
2006-09-08  Manish Singh  <yosh@gimp.org>

        * plug-ins/pygimp/pygimp-drawable.c
        * plug-ins/pygimp/pygimp-pdb.c: #define NO_IMPORT_PYGOBJECT, so
        the internal pygobject API symbol is only defined once.
2006-09-08 20:54:10 +00:00
cbd3a1930d This is the start of wrapping much more of the GIMP API in Python. It's
2006-07-19  Manish Singh  <yosh@gimp.org>

        This is the start of wrapping much more of the GIMP API in Python.
        It's not complete yet, some things are broken.

        * plug-ins/pygimp/gimpcolormodule.c
        * plug-ins/pygimp/pygimpcolor.h
        * plug-ins/pygimp/pygimpcolor-api.h
        * plug-ins/pygimp/pygimp-colors.c: wrapped GimpHSV, GimpHSL, and
        GimpCMYK. Fleshed out a bit more of GimpRGB as well. Made the API
        exportable to other modules.

        * plug-ins/pygimp/pygimp-rgb.c: removed, subsumed into
        pygimp-colors.c.

        * plug-ins/pygimp/gimpmodule.c
        * plug-ins/pygimp/pygimp-drawable.c
        * plug-ins/pygimp/pygimp-pdb.c: PDB calls receive and create
        gimpcolor.RGB objects now.

        * plug-ins/pygimp/gimpmodule.c
        * plug-ins/pygimp/pygimp-api.h: export pygimp_drawable_new.

        * plug-ins/pygimp/gimpcolor-types.defs
        * plug-ins/pygimp/gimpenums-types.defs
        * plug-ins/pygimp/gimpui.defs
        * plug-ins/pygimp/gimpui.override
        * plug-ins/pygimp/gimpuimodule.c: new module for GIMP UI widget
        bindings.

        * plug-ins/pygimp/gimpui.py
        * plug-ins/pygimp/gimpfu.py: use some of the new widgets.

        * plug-ins/pygimp/Makefile.am: hook all the above into the build
        system.

        * plug-ins/pygimp/plug-ins/palette-sort.py: use new color API.
2006-07-20 04:53:47 +00:00
1eeaa25fa0 quick fix so colors in the PDB work again.
2006-06-25  Manish Singh  <yosh@gimp.org>

        * plug-ins/pygimp/pygimp-pdb.c: quick fix so colors in the PDB work
        again.
2006-06-26 05:29:58 +00:00
f1e54be89d app/plug-in/plug-in-params.c libgimp/gimp.[ch]
2006-06-25  Manish Singh  <yosh@gimp.org>

        * app/plug-in/plug-in-params.c
        * libgimp/gimp.[ch]
        * libgimpbase/gimpprotocol.[ch]
        * plug-ins/common/colormap-remap.c
        * plug-ins/common/curve_bend.c
        * plug-ins/common/grid.c
        * plug-ins/pygimp/pygimp-pdb.c
        * plug-ins/script-fu/siod-wrapper.c
        * tools/pdbgen/pdb.pl: turn d_int8 and d_int8array into guint8.
        Fixes bug #344431.
2006-06-25 23:30:15 +00:00
7d8998a99c automatically removed trailing whitespace from 3460 lines.
2006-01-17  Raphael Quinet  <raphael@gimp.org>

	* (about 130 *.[ch] files): automatically removed trailing
	whitespace from 3460 lines.
2006-01-17 12:43:50 +00:00
a0d231b33c renamed GIMP_PDB_PATH to GIMP_PDB_VECTORS and add the former as an alias
2005-12-29  Michael Natterer  <mitch@gimp.org>

	* libgimpbase/gimpbaseenums.[ch] (enum GimpPDBArgType): renamed
	GIMP_PDB_PATH to GIMP_PDB_VECTORS and add the former as an alias
	for the latter.

	* libgimp/gimp.h (union _GimpParamData): added back d_path member
	to maintian source compatibility.

	* tools/pdbgen/pdb.pl
	* libgimp/gimp.c
	* app/pdb/procedural_db.c
	* app/plug-in/plug-in-params.c
	* libgimpbase/gimpprotocol.[ch]
	* plug-ins/pygimp/pygimp-pdb.c
	* plug-ins/script-fu/siod-wrapper.c: s/GIMP_PDB_PATH/GIMP_PDB_VECTORS/

	* app/pdb/image_cmds.c
	* app/pdb/procedural_db_cmds.c
	* app/pdb/vectors_cmds.c
	* libgimp/gimpimage_pdb.c
	* libgimp/gimpvectors_pdb.c
	* tools/pdbgen/enums.pl: regenerated.
2005-12-29 01:07:02 +00:00
8ac30ae882 handle d_path -> d_vectors rename.
2005-12-28  Manish Singh  <yosh@gimp.org>

        * plug-ins/pygimp/pygimp-pdb.c: handle d_path -> d_vectors rename.
2005-12-28 22:33:50 +00:00
678de416f4 use canonical name for run-mode.
2005-09-30  Manish Singh  <yosh@gimp.org>

        * plug-ins/pygimp/pygimp-pdb.c (pf_call): use canonical name for
        run-mode.

        * plug-ins/pygimp/plug-ins/clothify.py
        * plug-ins/pygimp/plug-ins/foggify.py: revert the below, since
        we eat the run-mode parameter again.
2005-10-01 06:30:03 +00:00
a56d6b41ad no need to export PLUG_IN_INFO symbol.
2005-03-04  Manish Singh  <yosh@gimp.org>

        * plug-ins/pygimp/Makefile.am: no need to export PLUG_IN_INFO symbol.

        * plug-ins/pygimp/pygimp-image.c: more descriptive exception for
        Image constructor.

        * plug-ins/pygimp/pygimp-pdb.c: cosmetic changes.

        * plug-ins/pygimp/pygimp-drawable.c: wrap transform API, add keyword
        arguments to several drawable methods, wrap
        layer_resize_to_image_size.
2005-03-05 00:30:29 +00:00
872c501ee6 Make a compatibility wrapper for PyBool_FromLong for pre-2.3 versions of
2005-03-03  Manish Singh  <yosh@gimp.org>

        * plug-ins/pygimp/pygimp.h: Make a compatibility wrapper for
        PyBool_FromLong for pre-2.3 versions of python.

        * plug-ins/pygimp/gimpfu.py
        * plug-ins/pygimp/gimpui.py: Update to use some more modern python
        features.

        * plug-ins/pygimp/gimpmodule.c
        * plug-ins/pygimp/pygimp-display.c
        * plug-ins/pygimp/pygimp-drawable.c
        * plug-ins/pygimp/pygimp-image.c
        * plug-ins/pygimp/pygimp-parasite.c
        * plug-ins/pygimp/pygimp-pdb.c
        * plug-ins/pygimp/pygimp-tile.c: Throw exceptions on failures for
        libgimp wrappers (fixes bug #160136), and make the exception strings
        a lot more descriptive to aid debugging. Also return proper Bools when
        appropriate. Some new API wrapped as well. Still a work in progress.

        * plug-ins/pygimp/gimpplugin.py
        * plug-ins/pygimp/gimpshelf.py
        * plug-ins/pygimp/plug-ins/clothify.py
        * plug-ins/pygimp/plug-ins/foggify.py
        * plug-ins/pygimp/plug-ins/sphere.py: Add some whitespace to make
        things more readable.
2005-03-03 08:43:55 +00:00
b91a3dd27e make libgimpprocbrowser a libtooled library.
2004-11-17  Manish Singh  <yosh@gimp.org>

        * plug-ins/dbbrowser/Makefile.am: make libgimpprocbrowser a libtooled
        library.

        * plug-ins/dbbrowser/gimpprocbrowser.[ch]: add a user_data pointer
        for GimpProcBrowserApplyCallback.

        * plug-ins/dbbrowser/gimpprocbrowser.c: only convert the name to
        scheme style if scheme_names in the proc info pane too.

        * plug-ins/dbbrowser/procedure-browser.c
        * plug-ins/script-fu/script-fu-console.c: pass NULL as user_data.

        * plug-ins/script-fu/Makefile.am: reference libgimpprocbrowser.la.

        * plug-ins/pygimp/Makefile.am
        * plug-ins/pygimp/procbrowser.c: new module, which wraps
        libgimprocbrowser.

        * plug-ins/pygimp/gimpmodule.c
        * plug-ins/pygimp/pygimp.h
        * plug-ins/pygimp/pygimp-pdb.c: export GimpPDBFunction so other
        modules can use it.

        * plug-ins/pygimp/plug-ins/pdbbrowse.py
        * plug-ins/pygimp/plug-ins/gimpcons.py: use gimpprocbrowser.
2004-11-17 20:02:23 +00:00
11410ff7f0 Translate None to NULL when passing strings.
2004-02-05  Manish Singh  <yosh@gimp.org>

        * plug-ins/pygimp/pygimp-pdb.c (pygimp_param_from_tuple): Translate
        None to NULL when passing strings.
2004-02-05 09:17:19 +00:00
0518761f23 plug-ins/pygimp/gimpmodule.c plug-ins/pygimp/pygimp-drawable.c
2003-12-03  Manish Singh  <yosh@gimp.org>

        * plug-ins/pygimp/gimpmodule.c
        * plug-ins/pygimp/pygimp-drawable.c
        * plug-ins/pygimp/pygimp-image.c
        * plug-ins/pygimp/pygimp-pdb.c
        * plug-ins/pygimp/pygimp-tile.c: some cosmetic changes to error
        messages.

        * plug-ins/pygimp/pygimp-drawable.c: accessors for name, tattoo, and
        visible live in the drawable class now, so layer and channel objects
        inherit it.
2003-12-03 21:52:09 +00:00
4c3671b29f slight fix for arg handling, shouldn't have any functional difference.
2003-07-25  Manish Singh  <yosh@gimp.org>

        * plug-ins/pygimp/gimpfu.py: slight fix for arg handling, shouldn't
        have any functional difference. This code should be redone at some
        point.

        * plug-ins/pygimp/gimpmodule.c
        * plug-ins/pygimp/pygimp.h
        * plug-ins/pygimp/pygimp-pdb.c: constify

        * plug-ins/pygimp/plug-ins/sphere.py: use new blend pdb interface
2003-07-25 23:46:40 +00:00
29aa6f5037 add getsets for common drawable attributes. (PyGimpLayer_Type): convert
2002-08-30  James Henstridge  <james@daa.com.au>

    * pygimp-drawable.c (PyGimpDrawable_Type): add getsets for common
    drawable attributes.
    (PyGimpLayer_Type): convert getattr and setattr to getsets.
    (PyGimpChannel_Type): convert to getsets.

    * gimpmodule.c (new_parasite): remove.  Superceded by
    gimp.Parasite constructor.
    (pygimp_image_list): rename to match actual API.

    * pygimp-parasite.c (PyGimpParasite_Type): switch to getsets.
    (para_init): add constructor.
2002-08-30 12:46:27 +00:00
47f86d9f89 many updates to Python code to work with new PyGTK. I can start a plug in
2002-08-29  James Henstridge  <james@daa.com.au>

    * *.py, plug-ins/*.py: many updates to Python code to work with
    new PyGTK.  I can start a plug in now.
2002-08-29 01:53:26 +00:00
dc70b17ac0 split module into multiple files, and convert types to Python 2.2 style
2002-08-28  James Henstridge  <james@daa.com.au>

    * *.c, pygimp.h: split module into multiple files, and convert
    types to Python 2.2 style types.  Still need to fix some of the
    getattr routines.
2002-08-28 15:17:29 +00:00