Tristan Van Berkom [Wed, 16 Jan 2013 09:02:40 +0000 (18:02 +0900)]
Make GTK+ a soft dependancy
This patch disables building of the user-prompter service and trust-prompt
module if GTK+ is not available, allowing alternative implementations of
the user prompter service to be installed on platforms where GTK+ is not
available.
Tristan Van Berkom [Mon, 17 Dec 2012 10:51:21 +0000 (19:51 +0900)]
This patch makes google addressbook backend optional
Adds a configure option to avoid building the google backend,
making libgdata an optional dependency.
Mathias Hasselmann [Wed, 16 Jan 2013 23:25:21 +0000 (00:25 +0100)]
test-server-utils: Permit to preserve working directory
Mathias Hasselmann [Wed, 16 Jan 2013 14:42:37 +0000 (15:42 +0100)]
libebook: Explicitly check e_sexp_parse() result
e_sexp_parse() returns -1 on error and 0 on success. Therefore using it
straighly within an if() statement is confusing for the reader.
Mathias Hasselmann [Wed, 16 Jan 2013 14:39:36 +0000 (15:39 +0100)]
tests: Remove phone number specific EBook query tests
They sneaked in by accident with commit
f358f98697c63a27c3a50538519ae0bacb6e086c.
Mathias Hasselmann [Thu, 6 Dec 2012 14:40:03 +0000 (15:40 +0100)]
libedataserver: Don't print warning if e_sexp_parse() fails
Backends that don't support the full range of queries call e_sexp_parse() with
their reduced set of symbols to check if they actually can process a query or
if they must resort to full table scans. If now such a backend is used from
within a GTest based test this warning causes the test to fail, which obviously
is bad. Therefore this patch drops the warning in e_sexp_parse() and moves it
to hopefully more appropriate places.
Mathias Hasselmann [Thu, 6 Dec 2012 21:18:23 +0000 (22:18 +0100)]
libedata-book: Simplify signature of sexp helpers
The compare() and list_compare() functions are used as plain boolean
predicates. Still the function signature required the helpers to return
a fancy string without actually describing the requirements for that
string. Let's stop that now.
Mathias Hasselmann [Tue, 11 Dec 2012 09:53:00 +0000 (10:53 +0100)]
libedata-book: Use slice allocator for EbSdbSearchData
EbSdbSearchData is a tiny object that gets allocated for each search result.
For such objects the slice allocator must be used to improve performance and
to reduce memory fragmentation.
Mathias Hasselmann [Tue, 4 Dec 2012 21:40:11 +0000 (22:40 +0100)]
build: Move langinfo checks into autoconf macro
Also add a check for _NL_ADDRESS_COUNTRY_AB2.
Actually this second check was the motivation for touching this.
Mathias Hasselmann [Wed, 5 Dec 2012 12:48:12 +0000 (13:48 +0100)]
tests: Verify more EBook queries
Mathias Hasselmann [Wed, 5 Dec 2012 11:22:59 +0000 (12:22 +0100)]
tests: Port libebook/test-query.c to GTest
Ihar Hrachyshka [Wed, 16 Jan 2013 11:27:19 +0000 (14:27 +0300)]
Updated Belarusian translation.
Daniel Mustieles [Tue, 15 Jan 2013 17:10:42 +0000 (18:10 +0100)]
Updated Spanish translation
Mathias Hasselmann [Tue, 15 Jan 2013 11:19:35 +0000 (12:19 +0100)]
legal: Update copyright notice of our recent contributions.
Krasimir Chonov [Tue, 15 Jan 2013 05:40:59 +0000 (07:40 +0200)]
Updated Bulgarian translation
Fran Diéguez [Sun, 13 Jan 2013 16:35:39 +0000 (17:35 +0100)]
Updated Galician translations
Matthew Barnes [Sun, 13 Jan 2013 13:09:44 +0000 (08:09 -0500)]
Post-release version bump.
Matthew Barnes [Sun, 13 Jan 2013 12:12:07 +0000 (07:12 -0500)]
NEWS update for 3.7.4 release.
Matej Urbančič [Sun, 13 Jan 2013 10:25:18 +0000 (11:25 +0100)]
Updated Slovenian translation
Matthew Barnes [Sat, 12 Jan 2013 22:04:01 +0000 (17:04 -0500)]
e-data-server-util.c: Fix a couple typos.
Matthew Barnes [Sat, 12 Jan 2013 20:16:20 +0000 (15:16 -0500)]
Deprecate e_util_copy_object_slist().
Use g_slist_copy_deep() instead, and optionally g_slist_concat() to
concatenate the copied list to another GSList.
Matthew Barnes [Sat, 12 Jan 2013 20:14:29 +0000 (15:14 -0500)]
Deprecate e_util_copy_string_slist().
Use g_slist_copy_deep() instead, and optionally g_slist_concat() to
concatenate the copied list to another GSList.
Matthew Barnes [Sat, 12 Jan 2013 19:37:46 +0000 (14:37 -0500)]
Deprecate e_util_free_object_slist().
Use g_slist_free_full() instead.
Matthew Barnes [Sat, 12 Jan 2013 19:36:24 +0000 (14:36 -0500)]
Deprecate e_util_free_string_slist().
Use g_slist_free_full() instead.
Matthew Barnes [Sat, 12 Jan 2013 19:33:46 +0000 (14:33 -0500)]
Deprecate e_client_util_free_object_slist().
Use g_slist_free_full() instead.
Matthew Barnes [Sat, 12 Jan 2013 19:32:33 +0000 (14:32 -0500)]
Deprecate e_client_util_free_string_slist().
Use g_slist_free_full() instead.
Matthew Barnes [Sat, 12 Jan 2013 19:31:06 +0000 (14:31 -0500)]
Deprecate e_client_util_copy_object_slist().
Use e_util_copy_object_slist() instead.
Matthew Barnes [Sat, 12 Jan 2013 19:29:46 +0000 (14:29 -0500)]
Deprecate e_client_util_copy_string_slist().
Use e_util_copy_string_slist() instead.
Matthew Barnes [Sat, 12 Jan 2013 19:28:33 +0000 (14:28 -0500)]
Deprecate e_client_util_strv_to_slist().
Use e_util_strv_to_slist() instead.
Matthew Barnes [Sat, 12 Jan 2013 19:27:08 +0000 (14:27 -0500)]
Deprecate e_client_util_slist_to_strv().
Use e_util_slist_to_strv() instead.
Matthew Barnes [Sat, 12 Jan 2013 19:23:48 +0000 (14:23 -0500)]
Simplify e_util_copy_object_slist().
Matthew Barnes [Sat, 12 Jan 2013 19:21:49 +0000 (14:21 -0500)]
Simplify e_util_copy_string_slist().
Matthew Barnes [Sat, 12 Jan 2013 17:11:28 +0000 (12:11 -0500)]
Update API documentation.
Matthew Barnes [Sat, 12 Jan 2013 17:08:23 +0000 (12:08 -0500)]
Restore ESourceWebdav:ignore-invalid-cert property.
Deprecate the property, don't break backward-compatibility.
Matthew Barnes [Sat, 12 Jan 2013 16:47:16 +0000 (11:47 -0500)]
Avoid GSList in new public APIs.
Matthew Barnes [Sat, 12 Jan 2013 16:34:50 +0000 (11:34 -0500)]
Move ETrustPromptResponse to e-source-enums.h.
Matthew Barnes [Sat, 12 Jan 2013 15:54:47 +0000 (10:54 -0500)]
Coding style and whitespace cleanups.
Nilamdyuti Goswami [Fri, 11 Jan 2013 15:44:25 +0000 (21:14 +0530)]
Assamese translation updated
Milan Crha [Fri, 11 Jan 2013 13:27:38 +0000 (14:27 +0100)]
Bug #691477 - exists_vcard is not supported when parsing a query from string
Matthew Barnes [Fri, 11 Jan 2013 12:17:19 +0000 (07:17 -0500)]
ECalBackend: Emit "timezone-added" from outside the cache lock.
The "timezone-added" signal triggers e_timezone_cache_list_timezones()
in ECalBackendStore, which also tries to acquire the cache lock.
Similarly in ECalClient, though less chance of deadlock there.
Milan Crha [Fri, 11 Jan 2013 11:27:47 +0000 (12:27 +0100)]
Bug #690151 - Crash in e_book_backend_file_bump_revision()
Milan Crha [Thu, 10 Jan 2013 19:27:12 +0000 (20:27 +0100)]
CamelMimeFilterPgp: Ignore right side white spaces
Matthew Barnes [Thu, 10 Jan 2013 12:03:11 +0000 (07:03 -0500)]
Bug 691466 - Cache reaper restores old IMAP cache directories
Alter the name of the cache directory when moving it to trash.
Milan Crha [Wed, 9 Jan 2013 22:03:37 +0000 (23:03 +0100)]
Bug #690177 - Use trust-prompt for certificate verification in WebDAV backends
Matthew Barnes [Wed, 9 Jan 2013 19:12:53 +0000 (14:12 -0500)]
ECalBackendStore: Better ensure final save works.
Collect what we need from ETimezoneCache when we schedule the save
instead of relying on ETimezoneCache when we actually do the save.
Matthew Barnes [Wed, 9 Jan 2013 19:24:30 +0000 (14:24 -0500)]
Revert "Add e_cal_backend_store_save()."
This reverts two commits:
a68f14d5573b72ada7e04d090af47f879455e0bc
ad12a30f349d5ca1a44fcdd607d272a8149ab9cf
Thought of a better way to solve the final save problem that doesn't
involve adding new API or modifying backends.
Matthew Barnes [Wed, 9 Jan 2013 17:36:12 +0000 (12:36 -0500)]
weather: Fix build break.
It helps to actually build the weather backend when changing it.
Forgot I had configured E-D-S with --disable-weather.
Matthew Barnes [Wed, 9 Jan 2013 17:02:00 +0000 (12:02 -0500)]
Save changes before finalizing ECalBackendStore.
Matthew Barnes [Wed, 9 Jan 2013 16:53:32 +0000 (11:53 -0500)]
Add e_cal_backend_store_save().
This function cancels the automatic save delay and saves changes to
disk immediately. If no changes have been made since the last save,
the function does nothing.
Milan Crha [Wed, 9 Jan 2013 14:41:10 +0000 (15:41 +0100)]
[http calendar] Ref backend inside source_changed_cb()
In certain situation, the backend can be freed while the callback
is still in action, then the factory can crash inside
cal_backend_http_ensure_uri() or such.
Alban Browaeys [Tue, 8 Jan 2013 15:57:39 +0000 (10:57 -0500)]
Bug 690158 - libedataserver: Vala binding updates
Matthew Barnes [Tue, 8 Jan 2013 15:00:30 +0000 (10:00 -0500)]
CamelObject: Suppress state file warnings for old IMAP accounts.
CamelImapFolder had a persistent "check-folder" property whose value was
recorded in Camel's binary state files under tag 0x2500. This property
is not present in CamelIMAPXFolder, but we may still be reading the tag
for accounts that were migrated from IMAP to IMAPX. Check for that tag
value while reading state files and suppress the runtime warning.
Christian Kirbach [Tue, 8 Jan 2013 13:47:27 +0000 (14:47 +0100)]
Updated German translation
Matthew Barnes [Sat, 5 Jan 2013 06:02:37 +0000 (01:02 -0500)]
weather: Fix build break.
Matthew Barnes [Fri, 4 Jan 2013 19:52:07 +0000 (14:52 -0500)]
ECalBackendFile: Override the ETimezoneCache methods.
This backend stores time zone data directly in an icalcomponent,
so it needs to override the ETimezoneCacheInterface implementation
provided by ECalBackend, which uses a hash table.
Matthew Barnes [Fri, 4 Jan 2013 18:03:43 +0000 (13:03 -0500)]
Remove e_cal_backend_store_put_timezone().
Use the ETimezoneCache API instead:
cache = e_cal_backend_store_ref_timezone_cache (store);
e_timezone_cache_add_timezone (cache, zone);
g_object_unref (cache);
This is another API break. 3rd party backends will have to be adjusted.
Matthew Barnes [Fri, 4 Jan 2013 17:50:30 +0000 (12:50 -0500)]
Remove e_cal_backend_store_get_timezone().
Use the ETimezoneCache API instead:
cache = e_cal_backend_store_ref_timezone_cache (store);
zone = e_timezone_cache_get_timezone (cache, tzid);
... do what you gotta do with zone ...
g_object_unref (cache);
This is another API break. 3rd party backends will have to be adjusted.
Matthew Barnes [Thu, 3 Jan 2013 16:49:44 +0000 (11:49 -0500)]
ECalBackend: Remove internal_get_timezone() method.
No longer needed since ECalBackend implements ETimezoneCache.
Use e_timezone_cache_get_timezone() instead.
Removed functions:
e_cal_backend_internal_get_timezone()
This is another API break. 3rd party backends will have to be adjusted.
Matthew Barnes [Thu, 3 Jan 2013 16:35:15 +0000 (11:35 -0500)]
ECalBackendSExp: Take an ETimezoneCache instead of ECalBackend.
Here's the real reason for the ETimezoneCache interface.
By changing ECalBackend parameters to ETimezoneCache (an interface which
ECalBackend implements), we abstract away the requirement for a calendar
backend when performing S-expression evaluation.
Since ECalClient also implements the ETimezoneCache interface, this opens
the possibility of allowing client-side S-expression evaluation. (Would
first require moving ECalBackendSExp to libecal, plus of course a rename
to omit the "Backend" part.)
Affected functions:
e_cal_backend_sexp_match_object()
e_cal_backend_sexp_match_comp()
This is another API break. 3rd party backends will have to be adjusted.
Matthew Barnes [Thu, 3 Jan 2013 15:26:51 +0000 (10:26 -0500)]
ECalBackendStore: Add a "timezone-cache" construct-only property.
Instead of keeping its own an internal hash table of icaltimezones, have
ECalBackendStore take an ETimezoneCache in e_cal_backend_store_new().
Usually the ETimezoneCache will be an ECalBackend, which implements the
ETimezoneCache interface and owns the ECalBackendStore. For that reason,
the store only keeps a weak reference on its ETimezoneCache to avoid a
reference cycle.
New functions:
e_cal_backend_store_ref_timezone_cache()
This is an API break. 3rd party backends will have to be adjusted.
Matthew Barnes [Thu, 3 Jan 2013 15:05:10 +0000 (10:05 -0500)]
e_cal_backend_store_set_default_timezone(): Remove const qualifier.
Same justification as previous commit.
Matthew Barnes [Thu, 3 Jan 2013 14:52:07 +0000 (09:52 -0500)]
e_cal_backend_store_put_timezone(): Remove const qualifier.
Semantics have not changed, but the const qualifier is unnecessary.
None of the icaltimezone API uses const, not even the "get" functions.
So to declare an icaltimezone parameter as const creates type casting
awkwardness on our end.
Matthew Barnes [Thu, 3 Jan 2013 14:13:21 +0000 (09:13 -0500)]
Remove unused e_cal_backend_cache_remove_timezone().
Matthew Barnes [Thu, 3 Jan 2013 14:11:17 +0000 (09:11 -0500)]
Remove unused e_cal_backend_store_remove_timezone().
Matthew Barnes [Thu, 3 Jan 2013 14:22:53 +0000 (09:22 -0500)]
Remove unused e_cal_backend_store_remove().
Matthew Barnes [Thu, 3 Jan 2013 13:37:26 +0000 (08:37 -0500)]
ECalBackend: Implement the ETimezoneCache interface.
Matthew Barnes [Wed, 2 Jan 2013 19:28:14 +0000 (14:28 -0500)]
ECalClient: Implement the ETimezoneCache interface.
Matthew Barnes [Wed, 2 Jan 2013 19:26:14 +0000 (14:26 -0500)]
Add ETimezoneCache interface.
Several classes (both client-side and server-side) cache icaltimezone
instances internally, indexed by their TZID strings. Classes which do
this should implement ETimezoneCacheInterface to provide a consistent
API for accessing time zone data.
Matthew Barnes [Wed, 2 Jan 2013 16:18:44 +0000 (11:18 -0500)]
Merge ECalBackendFileStore into ECalBackendStore.
ECalBackendStore is an abstract base class [1], and ECalBackendFileStore
is a subclass that stores calendar components in an iCalendar file. But
ECalBackendFileStore is the only subclass in existence, so the abstract
base class is unnecessary.
Have ECalBackendStore implement ECalBackendFileStore by default and drop
ECalBackendFileStore as a separate class. The operations are written as
virtual class methods, so we can still override the class methods from a
new subclass if a need should arise.
New functions:
e_cal_backend_store_new()
Removed functions:
e_cal_backend_file_store_new()
[1] Or at least is supposed to be abstract. Someone forgot to define
the GType with G_DEFINE_ABSTRACT_TYPE.
Matthew Barnes [Thu, 3 Jan 2013 18:16:55 +0000 (13:16 -0500)]
Bump libedata-cal shared object name.
I'll be changing parts of the API in subsequent commits.
Matthew Barnes [Fri, 4 Jan 2013 16:28:40 +0000 (11:28 -0500)]
Remove unused LIBSOUP_REQUIRED definition.
Matthew Barnes [Fri, 4 Jan 2013 16:22:30 +0000 (11:22 -0500)]
Use version-based libsoup warnings.
Apparently libsoup IS already using versioned deprecations. Excellent!
Use SOUP_VERSION_MAX_ALLOWED to warn if we accidentally use symbols that
were introduced in libsoup versions subsequent to our minimum requirement.
Use SOUP_VERSION_MIN_REQUIRED to suppress libsoup deprecation warnings by
version so we can clean them up incrementally.
Hashem Nasarat [Wed, 2 Jan 2013 20:54:11 +0000 (15:54 -0500)]
Bug 691033 - Avoid using LIBSOUP_DISABLE_DEPRECATED
Prevent E-D-S builds from suddenly breaking because of new deprecations
in libsoup. Case in point: soup_session_sync_new().
If libsoup starts using versioned deprecations like glib and gtk+ are
already doing, then we can disable libsoup symbols that were deprecated
in versions older than our minimum requirement. That would allow us to
clean up deprecations gradually rather than dealing with bugs like this.
Nilamdyuti Goswami [Wed, 2 Jan 2013 11:51:05 +0000 (17:21 +0530)]
Assamese translation updated
Piotr Drąg [Mon, 31 Dec 2012 19:53:54 +0000 (20:53 +0100)]
Updated POTFILES.in
Matthew Barnes [Mon, 31 Dec 2012 03:12:19 +0000 (22:12 -0500)]
google: Add EGDataOAuth2Authorizer.
This will eventually replace EGDataGoaAuthorizer once we require
GNOME Online Accounts 3.8. It obtains an OAuth 2.0 access token
using e_source_get_oauth2_access_token_sync() and avoid a direct
dependency on GNOME Online Accounts (or similar frameworks).
E-D-S 3.8 will still support older versions of GNOME Online Accounts,
which use OAuth 1.0a for Google authentication. So the earliest that
EGDataGoaAuthorizer will die is E-D-S 3.9.1.
Matthew Barnes [Sat, 29 Dec 2012 17:42:24 +0000 (12:42 -0500)]
google-backend: Populate [Authentication] group for contacts.
Set the Host to "www.google.com" and Method to either "OAuth2" or
"ClientLogin", depending on whether EOAuth2Support is available.
A temporary corner case occurs when using an older GNOME Online Accounts
version, which uses OAuth 1.0a instead of 2.0 for Google authentication.
In that case, the Method will say "ClientLogin" but the Google address
book backend will ignore it and use its EGDataGoaAuthorizer.
Matthew Barnes [Sat, 29 Dec 2012 00:45:04 +0000 (19:45 -0500)]
gnome-online-accounts: Implement EOAuth2Support interface.
Matthew Barnes [Sat, 29 Dec 2012 14:42:08 +0000 (09:42 -0500)]
collection_backend_child_added: Inherit OAuth 2.0 support.
Collection children will inherit the collection source's EOAuth2Support
object if set. That way OAuth 2.0 availability is consistent across the
entire collection, even if it's not USED by all sources in the collection.
Matthew Barnes [Sat, 29 Dec 2012 14:01:03 +0000 (09:01 -0500)]
EServerSideSource: Add "oauth2-support" property.
This is the object providing OAuth 2.0 support by implementing the
EOAuth2Support interface. Setting this property to a non-NULL value
automatically exports the OAuth2Support D-Bus interface.
New functions:
e_server_side_source_ref_oauth2_support()
e_server_side_source_set_oauth2_support()
Matthew Barnes [Fri, 28 Dec 2012 23:21:30 +0000 (18:21 -0500)]
libebackend: Add EOAuth2Support interface.
Standard server-side interface to be implemented by E-D-S modules
providing OAuth 2.0 support for ESources.
Matthew Barnes [Fri, 28 Dec 2012 16:56:08 +0000 (11:56 -0500)]
ESource: Add get_oauth2_access_token_sync() class method.
Obtains an access token and its expiry in seconds for data sources that
support OAuth 2.0.
This also adds corresponding asynchronous class methods.
New functions:
e_source_get_oauth2_access_token_sync()
e_source_get_oauth2_access_token()
e_source_get_oauth2_access_token_finish()
Matthew Barnes [Fri, 28 Dec 2012 13:37:39 +0000 (08:37 -0500)]
Add OAuth2Support D-Bus interface.
Backends will be able to obtain OAuth 2.0 access tokens through this
interface instead of talking directly to an "online accounts" service.
Matthew Barnes [Mon, 31 Dec 2012 14:02:00 +0000 (09:02 -0500)]
Add e_source_registry_server_find_extension().
Server-side equivalent of e_source_registry_find_extension().
Use it in e_source_registry_server_ref_backend().
Matthew Barnes [Mon, 31 Dec 2012 13:50:30 +0000 (08:50 -0500)]
e-source-registry.c: Minor code reordering.
Daniel Mustieles [Mon, 31 Dec 2012 11:17:57 +0000 (12:17 +0100)]
Updated Spanish translation
Rafael Ferreira [Thu, 27 Dec 2012 01:38:37 +0000 (23:38 -0200)]
Updated Brazilian Portuguese Translation based on branch gnome-3-6
Matthew Barnes [Fri, 28 Dec 2012 14:01:49 +0000 (09:01 -0500)]
Fix typo in libedataserver API docs.
Matthew Barnes [Thu, 27 Dec 2012 15:14:51 +0000 (10:14 -0500)]
Further API doc cleanups.
Matthew Barnes [Thu, 27 Dec 2012 14:52:54 +0000 (09:52 -0500)]
private: Fix cross-references to D-Bus interfaces in API docs.
Matthew Barnes [Thu, 27 Dec 2012 14:09:32 +0000 (09:09 -0500)]
private: Add generated DocBook files to BUILT_SOURCES.
Matthew Barnes [Thu, 27 Dec 2012 13:19:33 +0000 (08:19 -0500)]
private: Reduce the number of sections in API docs.
Combine the interface, proxy, and skeleton APIs for each D-Bus
interface into one Gtk-Doc section. GNOME Online Accounts does this
and it's cleaner and easier to navigate from the Table of Contents.
Nilamdyuti Goswami [Thu, 27 Dec 2012 15:30:32 +0000 (21:00 +0530)]
Assamese translation updated
Fran Diéguez [Mon, 24 Dec 2012 23:01:07 +0000 (00:01 +0100)]
Update Galician translations
Fran Diéguez [Mon, 24 Dec 2012 22:59:15 +0000 (23:59 +0100)]
Updated Galician translations
Dimitris Spingos [Mon, 24 Dec 2012 15:01:07 +0000 (17:01 +0200)]
Updated Greek translation
Matthew Barnes [Mon, 24 Dec 2012 13:48:52 +0000 (08:48 -0500)]
Bug 665371 - Decommission legacy IMAP backend
"IMAPX" is now our one and only IMAP backend for Camel. \o/
Matthew Barnes [Mon, 24 Dec 2012 13:43:53 +0000 (08:43 -0500)]
Add automatic IMAP to IMAPX account migration.
Uses the new "tweak-key-file" ESourceRegistryServer signal.
Matthew Barnes [Mon, 24 Dec 2012 05:19:20 +0000 (00:19 -0500)]
Fix some file header comments.
Matthew Barnes [Mon, 24 Dec 2012 04:37:25 +0000 (23:37 -0500)]
ESourceRegistryServer: Add a "tweak-key-file" signal.
This signal is emitted from e_source_registry_server_load_file() just
prior to instantiating an EServerSideSource. Signal handlers can tweak
the GKeyFile content as necessary and return TRUE to write the modified
content back to disk.
For the purposes of tweaking, it's easier to deal with a plain GKeyFile
than an ESource instance. An ESource, for example, does not allow key
file groups to be removed.
The return value is cumulative. If any signal handler returns TRUE,
the GKeyFile content is written back to disk.
Unfortunately this breaks the libebackend ABI because I forgot to add a
pool of reserved pointers to the ESourceRegistryServerClass. Do so now,
since we have the opportunity.