Merge branch 'FREMANTLE-1-2-2' into HARMATTAN-1-2-2

This commit is contained in:
Ove Kåven 2012-01-23 23:49:07 +01:00
commit 95b2c267fe
31 changed files with 5761 additions and 4497 deletions

View file

@ -232,20 +232,30 @@ installcheck-local:
done
endif
# Be strict about running 'syncevolution' only when not doing
# cross-compilation: in that case, if running 'syncevolution' fails,
# abort the build process. Otherwise proceed with the fallback below,
# which is to keep the "see --sync/source-property ?" placeholders in
# the README.
if COND_CROSS_COMPILING
RUN_SYNCEVOLUTION_CHECK=if ($$?) { return ""; } else { return $$buffer; }
else
RUN_SYNCEVOLUTION_CHECK=die if $$?; return $$buffer;
endif
# patch README.rst properties on-the-fly
README.patched.rst: README.rst src/syncevolution
perl -e '$$syncfound=0; $$sourcefound=0; $$res=0;' \
-e 'sub run { $$cmd = shift; $$buffer = `$$cmd`; die if $$?; return $$buffer; }' \
-e 'sub run { $$cmd = shift; $$buffer = `env LD_LIBRARY_PATH=src/syncevo/.libs:src/gdbus/.libs:src/gdbusxx/.libs:src/build-synthesis/src/.libs:$$ENV{LD_LIBRARY_PATH} $$cmd`; $(RUN_SYNCEVOLUTION_CHECK) }' \
-e 'while (<>) {' \
-e 's/^:Version: .*/:Version: $(VERSION)/;' \
-e 's/:Date: .*/":Date: " . `date +%Y-%m-%d`/e;' \
-e 'if (s;<<insert sync-property>>\n;run("src/syncevolution --daemon=no --sync-property ?");e) { $$syncfound=1; }' \
-e 'if (s;<<insert source-property>>\n;run("src/syncevolution --daemon=no --source-property ?");e) { $$sourcefound=1; }' \
-e 'if (s;(<< see "syncevolution --sync-property ." >>\n);run("src/syncevolution --daemon=no --sync-property ?") || $$1;e) { $$syncfound=1; }' \
-e 'if (s;(<< see "syncevolution --source-property ." >>\n);run("src/syncevolution --daemon=no --source-property ?") || $$1;e) { $$sourcefound=1; }' \
-e 'print;' \
-e '}' \
-e 'die "<<insert sync-property>> not in README.rst?!" unless $$syncfound;' \
-e 'die "<<insert source-property>> not in README.rst?!" unless $$sourcefound;' \
-e 'die "<<sync-property>> tag not in README.rst?!" unless $$syncfound;' \
-e 'die "<<source-property>> tag not in README.rst?!" unless $$sourcefound;' \
-e 'exit $$res;' \
$< >$@
CLEANFILES += README.patched.rst

48
NEWS
View file

@ -1,3 +1,51 @@
SyncEvolution 1.2.1 -> 1.2.2, 13.01.2012
========================================
Maintenance release with various bug fixes.
* syncevo-dbus-server + ConnMan: fixed "online" detection (BMC #21541, BMC #24587)
SyncEvolution did not recognize any cellular connectivity as
suitable for syncing. The strict check for certain "connected
technology" is unnecessary, anything which makes the computer
"online" should be good enough. So now it just uses the ConnMan
"State" property.
Additional benefit: will continue to work with ConnMan 1.0, which
won't have the "ConnectedTechnologies" property anymore.
The Bluetooth available check was also (incorrectly) using the
ConnMan API. Now asssume that OBEX/Bluetooth is always available.
* automatic backups: added INFO messages and fixed dumpData/printChanges (BMC #24619)
Point out that backups are created (user might be unaware otherwise
and wonder about the delay), explain why (so that users know how to
turn it off).
Turning these backups off with dumpData=0 printChanges=0 had to be
fixed, backups were always written previously.
* EDS compatibility: bumped version check for EDS 3.2
SyncEvolution is known to work with EDS 3.2. Therefore use the
libebook/ecal/edataserver libs from 3.2 if available, without
warnings in the --version output. Also happens with inconsistent
distro setups where the old libs are available and would have been
prefered by SyncEvolution 1.2.1 even though the old libs no longer
work with EDS 3.2.
* GTK-UI: do not accept service config without a username (BMC#23106)
Instead of creating such a config, an error dialog is shown.
* GTK-UI: updated translations
* fixed various compile issues, primarily on Fedora Core 17
(unistd.h/ssize_t, invoking syncevolution during compilation,
missing src/dbus/qt/configure-sub.in)
SyncEvolution 1.2 -> 1.2.1, 25.11.2011
======================================

View file

@ -662,11 +662,11 @@ defined, which is marked with the word `required`.
Sync properties
---------------
<<insert sync-property>>
<< see "syncevolution --sync-property ?" >>
Source properties
-----------------
<<insert source-property>>
<< see "syncevolution --source-property ?" >>
EXAMPLES

View file

@ -158,6 +158,9 @@ SYNCEVOLUTION_LIBS=`pwd`/src/syncevo/libsyncevolution.la
AC_SUBST(SYNCEVOLUTION_CFLAGS)
AC_SUBST(SYNCEVOLUTION_LIBS)
# invoking syncevolution binary is allowed to fail when cross-compiling
AM_CONDITIONAL([COND_CROSS_COMPILING], [test "$cross_compiling" = "yes"])
AC_CONFIG_FILES(Makefile src/dbus/interfaces/Makefile src/gdbus/Makefile src/dbus/Makefile src/dbus/glib/Makefile src/Makefile src/syncevo/Makefile src/syncevo/syncevolution.pc src/syncevo/configs/Makefile src/synthesis-includes/Makefile src/gtk-ui/Makefile po/Makefile.in test/Makefile src/dbus/glib/syncevo-dbus.pc)
AC_OUTPUT

View file

@ -8,7 +8,7 @@ dnl Invoke autogen.sh to produce a configure script.
#
# Starting with the 1.1 release cycle, the rpm-style
# .99 pseudo-version number is used to mark a pre-release.
AC_INIT([syncevolution], [1.2.1])
AC_INIT([syncevolution], [1.2.2])
# STABLE_VERSION=1.0.1+
AC_SUBST(STABLE_VERSION)

8
debian/changelog vendored
View file

@ -1,3 +1,11 @@
syncevolution (1:1.2.2-1) unstable; urgency=low
* SyncEvolution 1.2.2 for Maemo.
* Merged from Harmattan branch (irrelevant on Fremantle):
- Only sync contacts which have a SyncTarget of "addressbook".
-- Ove Kaaven <ovek@arcticnet.no> Mon, 23 Jan 2012 23:19:33 +0100
syncevolution (1:1.2.1-1) unstable; urgency=low
* SyncEvolution 1.2.1 for Harmattan.

594
po/de.po

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

985
po/en_US.po Normal file
View file

@ -0,0 +1,985 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Margie Foster <margie@linux.intel.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: syncevolution\n"
"Report-Msgid-Bugs-To: https://bugs.meego.com/\n"
"POT-Creation-Date: 2011-12-05 10:21-0800\n"
"PO-Revision-Date: 2011-12-05 22:05+0000\n"
"Last-Translator: margie <margie@linux.intel.com>\n"
"Language-Team: English (United States) (http://www.transifex.net/projects/p/meego/team/en_US/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: en_US\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#. TRANSLATORS: this is the application name that may be used by e.g.
#. the windowmanager
#: ../src/gtk-ui/main.c:40 ../src/gtk-ui/ui.glade.h:38
#: ../src/gtk-ui/sync.desktop.in.h:1
#: ../src/gnome-bluetooth/syncevolution.c:112
msgid "Sync"
msgstr "Sync"
#: ../src/gtk-ui/sync-ui.c:266
msgid "Contacts"
msgstr "Contacts"
#: ../src/gtk-ui/sync-ui.c:268
msgid "Appointments"
msgstr "Appointments"
#: ../src/gtk-ui/sync-ui.c:270 ../src/gtk-ui/ui.glade.h:40
msgid "Tasks"
msgstr "Tasks"
#: ../src/gtk-ui/sync-ui.c:272
msgid "Notes"
msgstr "Notes"
#. TRANSLATORS: This is a "combination source" for syncing with devices
#. * that combine appointments and tasks. the name should match the ones
#. * used for calendar and todo above
#: ../src/gtk-ui/sync-ui.c:277
msgid "Appointments & Tasks"
msgstr "Appointments & Tasks"
#: ../src/gtk-ui/sync-ui.c:349
msgid "Starting sync"
msgstr "Starting sync"
#. TRANSLATORS: slow sync confirmation dialog message. Placeholder
#. * is service/device name
#: ../src/gtk-ui/sync-ui.c:387
#, c-format
msgid "Do you want to slow sync with %s?"
msgstr "Do you want to slow sync with %s?"
#: ../src/gtk-ui/sync-ui.c:391
msgid "Yes, do slow sync"
msgstr "Yes, do slow sync"
#: ../src/gtk-ui/sync-ui.c:391
msgid "No, cancel sync"
msgstr "No, cancel sync"
#. TRANSLATORS: confirmation dialog for "refresh from peer". Placeholder
#. * is service/device name
#: ../src/gtk-ui/sync-ui.c:424
#, c-format
msgid ""
"Do you want to delete all local data and replace it with data from %s? This "
"is not usually advised."
msgstr ""
"Do you want to delete all local data and replace it with data from %s? This "
"is not usually advised."
#: ../src/gtk-ui/sync-ui.c:429 ../src/gtk-ui/sync-ui.c:462
msgid "Yes, delete and replace"
msgstr "Yes, delete and replace"
#: ../src/gtk-ui/sync-ui.c:429 ../src/gtk-ui/sync-ui.c:462
#: ../src/gtk-ui/sync-ui.c:1610
msgid "No"
msgstr "No"
#. TRANSLATORS: confirmation dialog for "refresh from local side". Placeholder
#. * is service/device name
#: ../src/gtk-ui/sync-ui.c:457
#, c-format
msgid ""
"Do you want to delete all data in %s and replace it with your local data? "
"This is not usually advised."
msgstr ""
"Do you want to delete all data in %s and replace it with your local data? "
"This is not usually advised."
#: ../src/gtk-ui/sync-ui.c:491
msgid "Trying to cancel sync"
msgstr "Trying to cancel sync"
#: ../src/gtk-ui/sync-ui.c:533
msgid "No service or device selected"
msgstr "No service or device selected"
#. TRANSLATORS: This is the title on main view. Placeholder is
#. * the service name. Example: "Google - synced just now"
#: ../src/gtk-ui/sync-ui.c:541
#, c-format
msgid "%s - synced just now"
msgstr "%s - synced just now"
#: ../src/gtk-ui/sync-ui.c:545
#, c-format
msgid "%s - synced a minute ago"
msgstr "%s - synced a minute ago"
#: ../src/gtk-ui/sync-ui.c:549
#, c-format
msgid "%s - synced %ld minutes ago"
msgstr "%s - synced %ld minutes ago"
#: ../src/gtk-ui/sync-ui.c:554
#, c-format
msgid "%s - synced an hour ago"
msgstr "%s - synced an hour ago"
#: ../src/gtk-ui/sync-ui.c:558
#, c-format
msgid "%s - synced %ld hours ago"
msgstr "%s - synced %ld hours ago"
#: ../src/gtk-ui/sync-ui.c:563
#, c-format
msgid "%s - synced a day ago"
msgstr "%s - synced a day ago"
#: ../src/gtk-ui/sync-ui.c:567
#, c-format
msgid "%s - synced %ld days ago"
msgstr "%s - synced %ld days ago"
#. TRANSLATORS: Action button in info bar in main view. Shown with e.g.
#. * "You've just restored a backup. The changes have not been "
#. * "synced with %s yet"
#: ../src/gtk-ui/sync-ui.c:616 ../src/gtk-ui/sync-ui.c:701
msgid "Sync now"
msgstr "Sync now"
#. TRANSLATORS: Action button in info bar in main view. Shown with e.g.
#. * "A normal sync is not possible at this time..." message.
#. * "Other options" will open Emergency view
#: ../src/gtk-ui/sync-ui.c:622 ../src/gtk-ui/ui.glade.h:37
msgid "Slow sync"
msgstr "Slow sync"
#: ../src/gtk-ui/sync-ui.c:623
msgid "Other options..."
msgstr "Other options..."
#. TRANSLATORS: Action button in info bar in main view. Shown e.g.
#. * when no service is selected. Will open configuration view
#: ../src/gtk-ui/sync-ui.c:628
msgid "Select sync service"
msgstr "Select sync service"
#. TRANSLATORS: Action button in info bar in main view. Shown e.g.
#. * login to service fails. Will open configuration view for this service
#: ../src/gtk-ui/sync-ui.c:633
msgid "Edit service settings"
msgstr "Edit service settings"
#: ../src/gtk-ui/sync-ui.c:709
msgid ""
"You haven't selected a sync service or device yet. Sync services let you "
"synchronize your data between your netbook and a web service. You can also "
"sync directly with some devices."
msgstr ""
"You haven't selected a sync service or device yet. Sync services let you "
"synchronize your data between your netbook and a web service. You can also "
"sync directly with some devices."
#: ../src/gtk-ui/sync-ui.c:729
msgid "Sync again"
msgstr "Sync again"
#: ../src/gtk-ui/sync-ui.c:748
msgid "Restoring"
msgstr "Restoring"
#: ../src/gtk-ui/sync-ui.c:750
msgid "Syncing"
msgstr "Syncing"
#. TRANSLATORS: This is for the button in main view, right side.
#. Keep line length below ~20 characters, use two lines if needed
#: ../src/gtk-ui/sync-ui.c:762 ../src/gtk-ui/sync-ui.c:3407
msgid "Cancel sync"
msgstr "Cancel sync"
#: ../src/gtk-ui/sync-ui.c:927
msgid "Back to sync"
msgstr "Back to sync"
#. TRANSLATORS: label for checkbutton/toggle in main view.
#. * Please stick to similar length strings or break the line with
#. * "\n" if absolutely needed
#: ../src/gtk-ui/sync-ui.c:1229
msgid "Automatic sync"
msgstr "Automatic sync"
#. This is the expander label in emergency view. It summarizes the
#. * currently selected data sources. First placeholder is service/device
#. * name, second a comma separeted list of sources.
#. * E.g. "Affected data: Google Contacts, Appointments"
#: ../src/gtk-ui/sync-ui.c:1524
#, c-format
msgid "Affected data: %s %s"
msgstr "Affected data: %s %s"
#: ../src/gtk-ui/sync-ui.c:1529
#, c-format
msgid "Affected data: none"
msgstr "Affected data: none"
#. TRANSLATORS: confirmation for restoring a backup. placeholder is the
#. * backup time string defined below
#: ../src/gtk-ui/sync-ui.c:1607
#, c-format
msgid ""
"Do you want to restore the backup from %s? All changes you have made since "
"then will be lost."
msgstr ""
"Do you want to restore the backup from %s? All changes you have made since "
"then will be lost."
#: ../src/gtk-ui/sync-ui.c:1610
msgid "Yes, restore"
msgstr "Yes, restore"
#. TRANSLATORS: date/time for strftime(), used in emergency view backup
#. * label. Any time format that shows date and time is good.
#: ../src/gtk-ui/sync-ui.c:1642
#, c-format
msgid "%x %X"
msgstr "%x %X"
#. TRANSLATORS: label for a backup in emergency view. Placeholder is
#. * service or device name
#: ../src/gtk-ui/sync-ui.c:1661
#, c-format
msgid "Backed up before syncing with %s"
msgstr "Backed up before syncing with %s"
#: ../src/gtk-ui/sync-ui.c:1678
msgid "Restore"
msgstr "Restore"
#. TRANSLATORS: this is an explanation in Emergency view.
#. * Placeholder is a service/device name
#: ../src/gtk-ui/sync-ui.c:1785
#, c-format
msgid ""
"A normal sync with %s is not possible at this time. You can do a slow two-"
"way sync or start from scratch. You can also restore a backup, but a slow "
"sync or starting from scratch will still be required before normal sync is "
"possible."
msgstr ""
"A normal sync with %s is not possible at this time. You can do a slow two-"
"way sync or start from scratch. You can also restore a backup, but a slow "
"sync or starting from scratch will still be required before normal sync is "
"possible."
#: ../src/gtk-ui/sync-ui.c:1795
#, c-format
msgid ""
"If something has gone horribly wrong, you can try a slow sync, start from "
"scratch or restore from backup."
msgstr ""
"If something has gone horribly wrong, you can try a slow sync, start from "
"scratch or restore from backup."
#. TRANSLATORS: These are a buttons in Emergency view. Placeholder is a
#. * service/device name. Please don't use too long lines, but feel free to
#. * use several lines.
#: ../src/gtk-ui/sync-ui.c:1804
#, c-format
msgid ""
"Delete all your local\n"
"data and replace with\n"
"data from %s"
msgstr ""
"Delete all your local\n"
"data and replace with\n"
"data from %s"
#: ../src/gtk-ui/sync-ui.c:1810
#, c-format
msgid ""
"Delete all data on\n"
"%s and replace\n"
"with your local data"
msgstr ""
"Delete all data on\n"
"%s and replace\n"
"with your local data"
#: ../src/gtk-ui/sync-ui.c:2275
msgid "Failed to get list of supported services from SyncEvolution"
msgstr "Failed to get list of supported services from SyncEvolution"
#: ../src/gtk-ui/sync-ui.c:2329
msgid ""
"There was a problem communicating with the sync process. Please try again "
"later."
msgstr ""
"There was a problem communicating with the sync process. Please try again "
"later."
#: ../src/gtk-ui/sync-ui.c:2388
msgid "Restore failed"
msgstr "Restore failed"
#: ../src/gtk-ui/sync-ui.c:2391 ../src/gtk-ui/sync-ui.c:3276
msgid "Sync failed"
msgstr "Sync failed"
#: ../src/gtk-ui/sync-ui.c:2397
msgid "Restore complete"
msgstr "Restore complete"
#: ../src/gtk-ui/sync-ui.c:2400
msgid "Sync complete"
msgstr "Sync complete"
#: ../src/gtk-ui/sync-ui.c:2492
#, c-format
msgid "Preparing '%s'"
msgstr "Preparing '%s'"
#: ../src/gtk-ui/sync-ui.c:2495
#, c-format
msgid "Receiving '%s'"
msgstr "Receiving '%s'"
#: ../src/gtk-ui/sync-ui.c:2498
#, c-format
msgid "Sending '%s'"
msgstr "Sending '%s'"
#: ../src/gtk-ui/sync-ui.c:2619
#, c-format
msgid "There was one remote rejection."
msgid_plural "There were %ld remote rejections."
msgstr[0] "There was one remote rejection."
msgstr[1] "There were %ld remote rejections."
#: ../src/gtk-ui/sync-ui.c:2624
#, c-format
msgid "There was one local rejection."
msgid_plural "There were %ld local rejections."
msgstr[0] "There was one local rejection."
msgstr[1] "There were %ld local rejections."
#: ../src/gtk-ui/sync-ui.c:2629
#, c-format
msgid "There were %ld local rejections and %ld remote rejections."
msgstr "There were %ld local rejections and %ld remote rejections."
#: ../src/gtk-ui/sync-ui.c:2634
#, c-format
msgid "Last time: No changes."
msgstr "Last time: No changes."
#: ../src/gtk-ui/sync-ui.c:2636
#, c-format
msgid "Last time: Sent one change."
msgid_plural "Last time: Sent %ld changes."
msgstr[0] "Last time: Sent one change."
msgstr[1] "Last time: Sent %ld changes."
#. This is about changes made to the local data. Not all of these
#. changes were requested by the remote server, so "applied"
#. is a better word than "received" (bug #5185).
#: ../src/gtk-ui/sync-ui.c:2644
#, c-format
msgid "Last time: Applied one change."
msgid_plural "Last time: Applied %ld changes."
msgstr[0] "Last time: Applied one change."
msgstr[1] "Last time: Applied %ld changes."
#: ../src/gtk-ui/sync-ui.c:2649
#, c-format
msgid "Last time: Applied %ld changes and sent %ld changes."
msgstr "Last time: Applied %ld changes and sent %ld changes."
#. TRANSLATORS: the placeholder is a error message (hopefully)
#. * explaining the problem
#: ../src/gtk-ui/sync-ui.c:2856
#, c-format
msgid ""
"There was a problem with last sync:\n"
"%s"
msgstr ""
"There was a problem with last sync:\n"
"%s"
#: ../src/gtk-ui/sync-ui.c:2866
#, c-format
msgid ""
"You've just restored a backup. The changes have not been synced with %s yet"
msgstr ""
"You've just restored a backup. The changes have not been synced with %s yet"
#: ../src/gtk-ui/sync-ui.c:3154
msgid "Waiting for current operation to finish..."
msgstr "Waiting for current operation to finish..."
#. TRANSLATORS: next strings are error messages.
#: ../src/gtk-ui/sync-ui.c:3188
msgid ""
"A normal sync is not possible at this time. The server suggests a slow sync,"
" but this might not always be what you want if both ends already have data."
msgstr ""
"A normal sync is not possible at this time. The server suggests a slow sync,"
" but this might not always be what you want if both ends already have data."
#: ../src/gtk-ui/sync-ui.c:3192
msgid "The sync process died unexpectedly."
msgstr "The sync process died unexpectedly."
#: ../src/gtk-ui/sync-ui.c:3197
msgid ""
"Password request was not answered. You can save the password in the settings"
" to prevent the request."
msgstr ""
"Password request was not answered. You can save the password in the settings"
" to prevent the request."
#. TODO use the service device name here, this is a remote problem
#: ../src/gtk-ui/sync-ui.c:3201
msgid "There was a problem processing sync request. Trying again may help."
msgstr "There was a problem processing sync request. Trying again may help."
#: ../src/gtk-ui/sync-ui.c:3207
msgid ""
"Failed to login. Could there be a problem with your username or password?"
msgstr ""
"Failed to log in. Could there be a problem with your username or password?"
#: ../src/gtk-ui/sync-ui.c:3210
msgid "Forbidden"
msgstr "Forbidden"
#. TRANSLATORS: data source means e.g. calendar or addressbook
#: ../src/gtk-ui/sync-ui.c:3216
msgid ""
"A data source could not be found. Could there be a problem with the "
"settings?"
msgstr ""
"A data source could not be found. Could there be a problem with the "
"settings?"
#: ../src/gtk-ui/sync-ui.c:3220
msgid "Remote database error"
msgstr "Remote database error"
#. This can happen when EDS is borked, restart it may help...
#: ../src/gtk-ui/sync-ui.c:3223
msgid ""
"There is a problem with the local database. Syncing again or rebooting may "
"help."
msgstr ""
"There is a problem with the local database. Syncing again or rebooting may "
"help."
#: ../src/gtk-ui/sync-ui.c:3226
msgid "No space on disk"
msgstr "No space on disk"
#: ../src/gtk-ui/sync-ui.c:3228
msgid "Failed to process SyncML"
msgstr "Failed to process SyncML"
#: ../src/gtk-ui/sync-ui.c:3230
msgid "Server authorization failed"
msgstr "Server authorization failed"
#: ../src/gtk-ui/sync-ui.c:3232
msgid "Failed to parse configuration file"
msgstr "Failed to parse configuration file"
#: ../src/gtk-ui/sync-ui.c:3234
msgid "Failed to read configuration file"
msgstr "Failed to read configuration file"
#: ../src/gtk-ui/sync-ui.c:3236
msgid "No configuration found"
msgstr "No configuration found"
#: ../src/gtk-ui/sync-ui.c:3238
msgid "No configuration file found"
msgstr "No configuration file found"
#: ../src/gtk-ui/sync-ui.c:3240
msgid "Server sent bad content"
msgstr "Server sent bad content"
#: ../src/gtk-ui/sync-ui.c:3242
msgid "Connection certificate has expired"
msgstr "Connection certificate has expired"
#: ../src/gtk-ui/sync-ui.c:3244
msgid "Connection certificate is invalid"
msgstr "Connection certificate is invalid"
#: ../src/gtk-ui/sync-ui.c:3252
msgid ""
"We were unable to connect to the server. The problem could be temporary or "
"there could be something wrong with the settings."
msgstr ""
"We were unable to connect to the server. The problem could be temporary or "
"there could be something wrong with the settings."
#: ../src/gtk-ui/sync-ui.c:3259
msgid "The server URL is bad"
msgstr "The server URL is bad"
#: ../src/gtk-ui/sync-ui.c:3264
msgid "The server was not found"
msgstr "The server was not found"
#: ../src/gtk-ui/sync-ui.c:3266
#, c-format
msgid "Error %d"
msgstr "Error %d"
#. TRANSLATORS: password request dialog contents: title, cancel button
#. * and ok button
#: ../src/gtk-ui/sync-ui.c:3404
msgid "Password is required for sync"
msgstr "Password is required for sync"
#: ../src/gtk-ui/sync-ui.c:3408
msgid "Sync with password"
msgstr "Sync with password"
#. TRANSLATORS: password request dialog message, placeholder is service name
#: ../src/gtk-ui/sync-ui.c:3418
#, c-format
msgid "Please enter password for syncing with %s:"
msgstr "Please enter password for syncing with %s:"
#. title for the buttons on the right side of main view
#: ../src/gtk-ui/ui.glade.h:2
msgid "<b>Actions</b>"
msgstr "<b>Actions</b>"
#. text between the two "start from scratch" buttons in emergency view
#: ../src/gtk-ui/ui.glade.h:4
msgid "<b>or</b>"
msgstr "<b>or</b>"
#: ../src/gtk-ui/ui.glade.h:5
msgid "<big>Direct sync</big>"
msgstr "<big>Direct sync</big>"
#: ../src/gtk-ui/ui.glade.h:6
msgid "<big>Network sync</big>"
msgstr "<big>Network sync</big>"
#. a title in emergency view
#: ../src/gtk-ui/ui.glade.h:8
msgid "<big>Restore from backup</big>"
msgstr "<big>Restore from backup</big>"
#. a title in emergency view
#: ../src/gtk-ui/ui.glade.h:10
msgid "<big>Slow sync</big>"
msgstr "<big>Slow sync</big>"
#. a title in emergency view
#: ../src/gtk-ui/ui.glade.h:12
msgid "<big>Start from scratch</big>"
msgstr "<big>Start from scratch</big>"
#: ../src/gtk-ui/ui.glade.h:13
msgid ""
"A slow sync compares items from both sides and tries to merge them. \n"
"This may fail in some cases, leading to duplicates or lost information."
msgstr ""
"A slow sync compares items from both sides and tries to merge them. \n"
"This may fail in some cases, leading to duplicates or lost information."
#: ../src/gtk-ui/ui.glade.h:15
msgid "Add new device"
msgstr "Add new device"
#: ../src/gtk-ui/ui.glade.h:16
msgid "Add new service"
msgstr "Add new service"
#. explanation of "Restore backup" function
#: ../src/gtk-ui/ui.glade.h:18
msgid ""
"Backups are made before every time we Sync. Choose a backup to restore. Any "
"changes you have made since then will be lost."
msgstr ""
"Backups are made before every sync. Choose a backup to restore. Any changes "
"you have made since then will be lost."
#: ../src/gtk-ui/ui.glade.h:19
msgid "Calendar"
msgstr "Calendar"
#. Button in main view, right side. Keep to below 20 chars per line, feel free
#. to use two lines
#: ../src/gtk-ui/ui.glade.h:21
msgid ""
"Change or edit\n"
"sync service"
msgstr ""
"Change or edit\n"
"sync service"
#. close button for settings window
#: ../src/gtk-ui/ui.glade.h:24
msgid "Close"
msgstr "Close"
#: ../src/gtk-ui/ui.glade.h:25
msgid ""
"Delete all data on Zyb \n"
"and replace with your\n"
"local information"
msgstr ""
"Delete all data on Zyb \n"
"and replace with your\n"
"local information"
#: ../src/gtk-ui/ui.glade.h:28
msgid ""
"Delete all your local\n"
"information and replace\n"
"with data from Zyb"
msgstr ""
"Delete all your local\n"
"information and replace\n"
"with data from Zyb"
#. button in main view, right side. Keep length to 20 characters or so, use
#. two lines if needed
#: ../src/gtk-ui/ui.glade.h:32
msgid ""
"Fix a sync\n"
"emergency"
msgstr ""
"Fix a sync\n"
"emergency"
#: ../src/gtk-ui/ui.glade.h:34
msgid ""
"If you don't see your service above but know that your sync provider uses SyncML\n"
"you can setup a service manually."
msgstr ""
"If you don't see your service above but know that your sync provider uses SyncML\n"
"you can setup a service manually."
#: ../src/gtk-ui/ui.glade.h:36
msgid "Settings"
msgstr "Settings"
#: ../src/gtk-ui/ui.glade.h:39
msgid "Sync Emergency"
msgstr "Sync Emergency"
#: ../src/gtk-ui/ui.glade.h:41
msgid ""
"To sync you'll need a network connection and an account with a sync service.\n"
"We support the following services: "
msgstr ""
"To sync you'll need a network connection and an account with a sync service.\n"
"We support the following services: "
#: ../src/gtk-ui/ui.glade.h:43
msgid "Use Bluetooth to Sync your data from one device to another."
msgstr "Use Bluetooth to sync your data from one device to another."
#: ../src/gtk-ui/ui.glade.h:44
msgid "You will need to add Bluetooth devices before they can be synced."
msgstr "You will need to add Bluetooth devices before they can be synced."
#: ../src/gtk-ui/sync.desktop.in.h:2
msgid "Up to date"
msgstr "Up to date"
#: ../src/gtk-ui/sync-gtk.desktop.in.h:1
msgid "SyncEvolution (GTK)"
msgstr "SyncEvolution (GTK)"
#: ../src/gtk-ui/sync-gtk.desktop.in.h:2
msgid "Synchronize PIM data"
msgstr "Synchronize PIM data"
#: ../src/gtk-ui/sync-config-widget.c:88
msgid ""
"ScheduleWorld enables you to keep your contacts, events, tasks, and notes in"
" sync."
msgstr ""
"ScheduleWorld enables you to keep your contacts, events, tasks, and notes in"
" sync."
#: ../src/gtk-ui/sync-config-widget.c:91
msgid ""
"Google Sync can back up and synchronize your contacts with your Gmail "
"contacts."
msgstr ""
"Google Sync can back up and synchronize your contacts with your Gmail "
"contacts."
#. TRANSLATORS: Please include the word "demo" (or the equivalent in
#. your language): Funambol is going to be a 90 day demo service
#. in the future
#: ../src/gtk-ui/sync-config-widget.c:97
msgid ""
"Back up your contacts and calendar. Sync with a single click, anytime, "
"anywhere (DEMO)."
msgstr ""
"Back up your contacts and calendar. Sync with a single click, anytime, "
"anywhere (DEMO)."
#: ../src/gtk-ui/sync-config-widget.c:100
msgid ""
"Mobical Backup and Restore service allows you to securely back up your "
"personal mobile data for free."
msgstr ""
"Mobical Backup and Restore service allows you to securely back up your "
"personal mobile data for free."
#: ../src/gtk-ui/sync-config-widget.c:103
msgid ""
"ZYB is a simple way for people to store and share mobile information online."
msgstr ""
"ZYB is a simple way for people to store and share mobile information online."
#: ../src/gtk-ui/sync-config-widget.c:106
msgid ""
"Memotoo lets you access your personal data from any computer connected to "
"the Internet."
msgstr ""
"Memotoo lets you access your personal data from any computer connected to "
"the Internet."
#: ../src/gtk-ui/sync-config-widget.c:195
msgid "Sorry, failed to save the configuration"
msgstr "Sorry, failed to save the configuration"
#: ../src/gtk-ui/sync-config-widget.c:445
msgid "Service must have a name and server URL"
msgstr "Service must have a name and server URL"
#. TRANSLATORS: error dialog when creating a new sync configuration
#: ../src/gtk-ui/sync-config-widget.c:451
msgid "A username is required for this service"
msgstr "A username is required for this service"
#: ../src/gtk-ui/sync-config-widget.c:493
#, c-format
msgid ""
"Do you want to reset the settings for %s? This will not remove any synced "
"information on either end."
msgstr ""
"Do you want to reset the settings for %s? This will not remove any synced "
"information on either end."
#. TRANSLATORS: buttons in reset-service warning dialog
#: ../src/gtk-ui/sync-config-widget.c:497
msgid "Yes, reset"
msgstr "Yes, reset"
#: ../src/gtk-ui/sync-config-widget.c:498
#: ../src/gtk-ui/sync-config-widget.c:509
msgid "No, keep settings"
msgstr "No, keep settings"
#: ../src/gtk-ui/sync-config-widget.c:503
#, c-format
msgid ""
"Do you want to delete the settings for %s? This will not remove any synced "
"information on either end but it will remove these settings."
msgstr ""
"Do you want to delete the settings for %s? This will not remove any synced "
"information on either end but it will remove these settings."
#. TRANSLATORS: buttons in delete-service warning dialog
#: ../src/gtk-ui/sync-config-widget.c:508
msgid "Yes, delete"
msgstr "Yes, delete"
#: ../src/gtk-ui/sync-config-widget.c:539
msgid "Reset settings"
msgstr "Reset settings"
#: ../src/gtk-ui/sync-config-widget.c:542
msgid "Delete settings"
msgstr "Delete settings"
#: ../src/gtk-ui/sync-config-widget.c:552
msgid "Save and use"
msgstr "Save and use"
#: ../src/gtk-ui/sync-config-widget.c:555
msgid ""
"Save and replace\n"
"current service"
msgstr ""
"Save and replace\n"
"current service"
#: ../src/gtk-ui/sync-config-widget.c:563
msgid "Stop using device"
msgstr "Stop using device"
#: ../src/gtk-ui/sync-config-widget.c:566
msgid "Stop using service"
msgstr "Stop using service"
#. TRANSLATORS: label for an entry in service configuration form.
#. * Placeholder is a source name.
#. * Example: "Appointments URI"
#: ../src/gtk-ui/sync-config-widget.c:749
#, c-format
msgid "%s URI"
msgstr "%s URI"
#. TRANSLATORS: toggles in service configuration form, placeholder is service
#. * or device name
#: ../src/gtk-ui/sync-config-widget.c:936
#, c-format
msgid "Send changes to %s"
msgstr "Send changes to %s"
#: ../src/gtk-ui/sync-config-widget.c:941
#, c-format
msgid "Receive changes from %s"
msgstr "Receive changes from %s"
#: ../src/gtk-ui/sync-config-widget.c:957
msgid "<b>Sync</b>"
msgstr "<b>Sync</b>"
#. TRANSLATORS: label of a entry in service configuration
#: ../src/gtk-ui/sync-config-widget.c:973
msgid "Server address"
msgstr "Server address"
#. TRANSLATORS: explanation before a device template combobox.
#. * Placeholder is a device name like 'Nokia N85' or 'Syncevolution
#. * Client'
#: ../src/gtk-ui/sync-config-widget.c:1049
#, c-format
msgid ""
"This device looks like it might be a '%s'. If this is not correct, please "
"take a look at the list of supported devices and pick yours if it is listed"
msgstr ""
"This device looks like it might be a '%s'. If this is not correct, please "
"take a look at the list of supported devices and pick yours if it is listed"
#: ../src/gtk-ui/sync-config-widget.c:1055
#: ../src/gtk-ui/sync-config-widget.c:1915
msgid ""
"We don't know what this device is exactly. Please take a look at the list of"
" supported devices and pick yours if it is listed"
msgstr ""
"We don't know what this device is exactly. Please take a look at the list of"
" supported devices and pick yours if it is listed"
#: ../src/gtk-ui/sync-config-widget.c:1207
#, c-format
msgid "%s - Bluetooth device"
msgstr "%s - Bluetooth device"
#. TRANSLATORS: service title for services that are not based on a
#. * template in service list, the placeholder is the name of the service
#: ../src/gtk-ui/sync-config-widget.c:1213
#, c-format
msgid "%s - manually setup"
msgstr "%s - manually set up"
#. TRANSLATORS: link button in service configuration form
#: ../src/gtk-ui/sync-config-widget.c:1886
msgid "Launch website"
msgstr "Launch website"
#. TRANSLATORS: button in service configuration form
#: ../src/gtk-ui/sync-config-widget.c:1895
msgid "Set up now"
msgstr "Set up now"
#: ../src/gtk-ui/sync-config-widget.c:1953
msgid "Use these settings"
msgstr "Use these settings"
#. TRANSLATORS: labels of entries in service configuration form
#: ../src/gtk-ui/sync-config-widget.c:1991
msgid "Username"
msgstr "Username"
#: ../src/gtk-ui/sync-config-widget.c:2006
msgid "Password"
msgstr "Password"
#. TRANSLATORS: warning in service configuration form for people
#. who have modified the configuration via other means.
#: ../src/gtk-ui/sync-config-widget.c:2029
msgid ""
"Current configuration is more complex than what can be shown here. Changes "
"to sync mode or synced data types will overwrite that configuration."
msgstr ""
"Current configuration is more complex than what can be shown here. Changes "
"to sync mode or synced data types will overwrite that configuration."
#. TRANSLATORS: this is the epander label for server settings
#. in service configuration form
#: ../src/gtk-ui/sync-config-widget.c:2048
msgid "Hide server settings"
msgstr "Hide server settings"
#. TRANSLATORS: this is the epander label for server settings
#. in service configuration form
#: ../src/gtk-ui/sync-config-widget.c:2068
msgid "Show server settings"
msgstr "Show server settings"
#: ../src/gnome-bluetooth/syncevolution.c:110
msgid "Sync in the Sync application"
msgstr "Sync in the Sync application"
#: ../src/syncevo-dbus-server.cpp:6653
#, c-format
msgid "%s is syncing"
msgstr "%s is syncing"
#: ../src/syncevo-dbus-server.cpp:6654
#, c-format
msgid "We have just started to sync your computer with the %s sync service."
msgstr "We have just started to sync your computer with the %s sync service."
#. if sync is successfully started and done
#: ../src/syncevo-dbus-server.cpp:6670
#, c-format
msgid "%s sync complete"
msgstr "%s sync complete"
#: ../src/syncevo-dbus-server.cpp:6671
#, c-format
msgid "We have just finished syncing your computer with the %s sync service."
msgstr "We have just finished syncing your computer with the %s sync service."
#. if sync is successfully started and has errors, or not started successful
#. with a fatal problem
#: ../src/syncevo-dbus-server.cpp:6676
msgid "Sync problem."
msgstr "Sync problem."
#: ../src/syncevo-dbus-server.cpp:6677
msgid "Sorry, there's a problem with your sync that you need to attend to."
msgstr "Sorry, there's a problem with your sync that you need to attend to."
#: ../src/syncevo-dbus-server.cpp:6758
msgid "View"
msgstr "View"
#. Use "default" as ID because that is what mutter-moblin
#. recognizes: it then skips the action instead of adding it
#. in addition to its own "Dismiss" button (always added).
#: ../src/syncevo-dbus-server.cpp:6762
msgid "Dismiss"
msgstr "Dismiss"

607
po/es.po

File diff suppressed because it is too large Load diff

474
po/fi.po

File diff suppressed because it is too large Load diff

729
po/fr.po

File diff suppressed because it is too large Load diff

690
po/it.po

File diff suppressed because it is too large Load diff

483
po/ja.po

File diff suppressed because it is too large Load diff

566
po/ko.po

File diff suppressed because it is too large Load diff

624
po/nl.po

File diff suppressed because it is too large Load diff

421
po/pl.po

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

585
po/ru.po

File diff suppressed because it is too large Load diff

706
po/sv.po

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -150,7 +150,7 @@ dist-hook:
mkdir -p $(distdir)/synthesis && \
if test -d "$(SYNTHESIS_SRC)/.git"; \
then \
( ( cd "$(SYNTHESIS_SRC)" && git archive HEAD ) | ( cd "$(distdir)/synthesis" && tar xf - && $$SHELL autogen.sh && rm -rf autom4te.cache ) ) && \
( ( cd "$(SYNTHESIS_SRC)" && git archive HEAD ) | ( cd "$(distdir)/synthesis" && tar xf - && $$SHELL autogen.sh && rm -rf autom4te.cache && find . -name .gitignore -delete ) ) && \
( echo Creating ChangeLog && \
( ( cd "$(SYNTHESIS_SRC)" && \
echo '# Generated by configure. Do no edit.' && \
@ -166,7 +166,7 @@ dist-hook:
elif test $(SYNTHESIS_SRC) != "no-synthesis-source"; then \
cp -a $(SYNTHESIS_SRC)/* $(distdir)/synthesis && \
for i in _build autom4te.cache; do [ ! -d "$(SYNTHESIS_SRC)/$$i" ] || chmod -R u+rwx "$(SYNTHESIS_SRC)/$$i"; done && \
find "$(distdir)" -name .libs -o -name "*~" -o -name ".*" -o -name "*.o" -o -name "*.lo" -o -name CVS -o -name .svn -o -name .git -o -name autom4te.cache -print0 | xargs -0 rm -rf; \
find "$(distdir)" -name .libs -o -name "*~" -o -name ".*" -o -name "*.o" -o -name "*.lo" -o -name CVS -o -name .svn -o -name .git -o -name .gitignore -o -name autom4te.cache -print0 | xargs -0 rm -rf; \
fi
clean-local: testclean

View file

@ -31,6 +31,6 @@ AC_ARG_ENABLE(neon-compatibility,
)
if test "$enable_neon_compat" = "yes"; then
AC_DEFINE(NEON_COMPATIBILITY, 1, [dynamically open libneon])
NEON_LIBS="`echo $NEON_LIBS | sed -e 's/\(-lneon\|[^ ]*libneon.la\)/-ldl/'`"
NEON_LIBS="`echo $NEON_LIBS | sed -e 's/\(-lneon\(-gnutls\)*\|[^ ]*libneon\(-gnutls\)*.la\)/-ldl/'`"
fi
AM_CONDITIONAL([NEON_COMPATIBILITY], [test "$enable_neon_compat" = "yes"])

View file

@ -1,3 +1,5 @@
EXTRA_DIST = configure-sub.in
if ENABLE_QT_DBUS
include $(top_srcdir)/m4-repo/autotroll.mk
@ -22,8 +24,6 @@ nodist_libsyncevolution_qt_dbus_la_SOURCES = \
AM_CPPFLAGS = $(SYNCEVOLUTION_CFLAGS) -I$(top_srcdir)/test $(BACKEND_CPPFLAGS)
EXTRA_DIST = configure-sub.in
built_headers = \
syncevo-server-full.h \
syncevo-session-full.h \

View file

@ -446,6 +446,12 @@ use_clicked_cb (GtkButton *btn, SyncConfigWidget *self)
_("Service must have a name and server URL"));
return;
}
if (!username || strlen (username) == 0) {
/* TRANSLATORS: error dialog when creating a new sync configuration */
show_error_dialog (GTK_WIDGET (self), _("A username is required for this service"));
return;
}
}
syncevo_config_foreach_source (self->config,

View file

@ -1023,13 +1023,15 @@ class PresenceStatus {
void updateConfigPeers (const std::string &peer, const ReadOperations::Config_t &config);
void updatePresenceStatus (bool httpPresence, bool btPresence);
void updatePresenceStatus (bool newStatus, TransportType type);
bool getHttpPresence() { return m_httpPresence; }
bool getBtPresence() { return m_btPresence; }
Timer& getHttpTimer() { return m_httpTimer; }
Timer& getBtTimer() { return m_btTimer; }
private:
void updatePresenceStatus (bool httpPresence, bool btPresence);
};
/*
@ -1047,9 +1049,9 @@ public:
virtual DBusConnection *getConnection() const {return m_connmanConn.get();}
void propertyChanged(const string &name,
const boost::variant<vector<string>, string> &prop);
const boost::variant<std::string> &prop);
void getPropCb(const std::map <std::string, boost::variant <std::vector <std::string> > >& props, const string &error);
void getPropCb(const std::map <std::string, boost::variant<std::string> >& props, const string &error);
/** TRUE if watching ConnMan status */
bool isAvailable() { return m_connmanConn; }
@ -1058,7 +1060,7 @@ private:
DBusServer &m_server;
DBusConnectionPtr m_connmanConn;
SignalWatch2 <string,boost::variant<vector<string>, string> > m_propertyChanged;
SignalWatch2 <string, boost::variant<std::string> > m_propertyChanged;
};
/**
@ -1539,7 +1541,7 @@ public:
void autoTermCallback() { m_autoTerm.reset(); }
/** poll_nm callback for connman, used for presence detection*/
void connmanCallback(const std::map <std::string, boost::variant <std::vector <std::string> > >& props, const string &error);
void connmanCallback(const std::map <std::string, boost::variant<std::string> >& props, const string &error);
PresenceStatus& getPresenceStatus() {return m_presence;}
@ -5328,7 +5330,7 @@ ConnmanClient::ConnmanClient(DBusServer &server):
const char *connmanTest = getenv ("DBUS_TEST_CONNMAN");
m_connmanConn = b_dbus_setup_bus (connmanTest ? DBUS_BUS_SESSION: DBUS_BUS_SYSTEM, NULL, true, NULL);
if (m_connmanConn){
typedef std::map <std::string, boost::variant <std::vector <std::string> > > PropDict;
typedef std::map <std::string, boost::variant<std::string> > PropDict;
DBusClientCall1<PropDict> getProp(*this,"GetProperties");
getProp (boost::bind(&ConnmanClient::getPropCb, this, _1, _2));
m_propertyChanged.activate(boost::bind(&ConnmanClient::propertyChanged, this, _1, _2));
@ -5338,12 +5340,12 @@ ConnmanClient::ConnmanClient(DBusServer &server):
}
void ConnmanClient::getPropCb (const std::map <std::string,
boost::variant <std::vector <std::string> > >& props, const string &error){
boost::variant<std::string> >& props, const string &error){
if (!error.empty()) {
if (error == "org.freedesktop.DBus.Error.ServiceUnknown") {
// ensure there is still first set of singal set in case of no
// connman available
m_server.getPresenceStatus().updatePresenceStatus (true, true);
m_server.getPresenceStatus().updatePresenceStatus (true, PresenceStatus::HTTP_TRANSPORT);
SE_LOG_DEBUG (NULL, NULL, "No connman service available %s", error.c_str());
return;
}
@ -5351,65 +5353,28 @@ void ConnmanClient::getPropCb (const std::map <std::string,
return;
}
typedef std::pair <std::string, boost::variant <std::vector <std::string> > > element;
bool httpPresence = false, btPresence = false;
typedef std::pair <std::string, boost::variant<std::string> > element;
bool httpPresence = false;
BOOST_FOREACH (element entry, props) {
//match connected for HTTP based peers (wifi/wimax/ethernet)
if (entry.first == "ConnectedTechnologies") {
std::vector <std::string> connected = boost::get <std::vector <std::string> > (entry.second);
BOOST_FOREACH (std::string tech, connected) {
if (boost::iequals (tech, "wifi") || boost::iequals (tech, "ethernet")
|| boost::iequals (tech, "wimax")) {
httpPresence = true;
break;
}
}
} else if (entry.first == "AvailableTechnologies") {
std::vector <std::string> enabled = boost::get <std::vector <std::string> > (entry.second);
BOOST_FOREACH (std::string tech, enabled){
if (boost::iequals (tech, "bluetooth")) {
btPresence = true;
break;
}
}
} else {
continue;
// just check online state, we don't care how about the underlying technology
if (entry.first == "State") {
std::string state = boost::get<std::string>(entry.second);
httpPresence = state == "online";
break;
}
}
//now delivering the signals
m_server.getPresenceStatus().updatePresenceStatus (httpPresence, btPresence);
m_server.getPresenceStatus().updatePresenceStatus (httpPresence, PresenceStatus::HTTP_TRANSPORT);
}
void ConnmanClient::propertyChanged(const string &name,
const boost::variant<vector<string>, string> &prop)
const boost::variant<std::string> &prop)
{
bool httpPresence=false, btPresence=false;
bool httpChanged=false, btChanged=false;
if (boost::iequals(name, "ConnectedTechnologies")) {
httpChanged=true;
vector<string> connected = boost::get<vector<string> >(prop);
BOOST_FOREACH (std::string tech, connected) {
if (boost::iequals (tech, "wifi") || boost::iequals (tech, "ethernet")
|| boost::iequals (tech, "wimax")) {
httpPresence=true;
break;
}
}
} else if (boost::iequals (name, "AvailableTechnologies")){
btChanged=true;
vector<string> enabled = boost::get<vector<string> >(prop);
BOOST_FOREACH (std::string tech, enabled){
if (boost::iequals (tech, "bluetooth")) {
btPresence = true;
break;
}
}
}
if(httpChanged) {
m_server.getPresenceStatus().updatePresenceStatus (httpPresence, PresenceStatus::HTTP_TRANSPORT);
} else if (btChanged) {
m_server.getPresenceStatus().updatePresenceStatus (btPresence, PresenceStatus::BT_TRANSPORT);
} else {
if (name == "State") {
std::string state = boost::get<std::string>(prop);
m_server.getPresenceStatus().updatePresenceStatus(state == "online",
PresenceStatus::HTTP_TRANSPORT);
}
}
@ -5709,10 +5674,15 @@ DBusServer::DBusServer(GMainLoop *loop, const DBusConnectionPtr &conn, int durat
LoggerBase::pushLogger(this);
setLevel(LoggerBase::DEBUG);
// Assume that Bluetooth is available. Neither ConnMan nor Network
// manager can tell us about that. The "Bluetooth" ConnMan technology
// is about IP connection via Bluetooth - not what we need.
getPresenceStatus().updatePresenceStatus(true, PresenceStatus::BT_TRANSPORT);
if (!m_connman.isAvailable() &&
!m_networkManager.isAvailable()) {
// assume that we are online if no network manager was found at all
getPresenceStatus().updatePresenceStatus(true, true);
getPresenceStatus().updatePresenceStatus(true, PresenceStatus::HTTP_TRANSPORT);
}
}

View file

@ -1289,10 +1289,16 @@ public:
// @param excludeSource when non-empty, limit preparation to that source
void syncPrepare(const string &excludeSource = "") {
if (m_logdir.getLogfile().size() &&
(m_client.getDumpData() || m_doLogging)) {
m_doLogging &&
(m_client.getDumpData() || m_client.getPrintChanges())) {
// dump initial databases
SE_LOG_INFO(NULL, NULL, "creating complete data backup before sync (%s)",
(m_client.getDumpData() && m_client.getPrintChanges()) ? "enabled with dumpData and needed for printChanges" :
m_client.getDumpData() ? "because it was enabled with dumpData" :
m_client.getPrintChanges() ? "needed for printChanges" :
"???");
dumpDatabases("before", &SyncSourceReport::m_backupBefore, excludeSource);
if (m_doLogging) {
if (m_client.getPrintChanges()) {
// compare against the old "after" database dump
dumpLocalChanges("", "after", "before", excludeSource,
StringPrintf("%s data changes to be applied during synchronization:\n",
@ -1313,9 +1319,15 @@ public:
// dump database after sync if explicitly enabled or
// needed for comparison;
// in the latter case only if dumping it at the beginning completed
if (m_client.getDumpData() ||
(m_doLogging && m_reportTodo && !m_prepared.empty())) {
if (m_doLogging &&
(m_client.getDumpData() ||
(m_client.getPrintChanges() && m_reportTodo && !m_prepared.empty()))) {
try {
SE_LOG_INFO(NULL, NULL, "creating complete data backup after sync (%s)",
(m_client.getDumpData() && m_client.getPrintChanges()) ? "enabled with dumpData and needed for printChanges" :
m_client.getDumpData() ? "because it was enabled with dumpData" :
m_client.getPrintChanges() ? "needed for printChanges" :
"???");
dumpDatabases("after", &SyncSourceReport::m_backupAfter);
} catch (...) {
Exception::handle();
@ -1366,11 +1378,15 @@ public:
}
// compare databases?
dumpLocalChanges(m_logdir.getLogdir(),
"before", "after", "",
StringPrintf("\nData modified %s during synchronization:\n",
m_client.isLocalSync() ? m_client.getContextName().c_str() : "locally"),
"CLIENT_TEST_LEFT_NAME='before sync' CLIENT_TEST_RIGHT_NAME='after sync' CLIENT_TEST_REMOVED='removed during sync' CLIENT_TEST_ADDED='added during sync'");
if (m_client.getPrintChanges()) {
dumpLocalChanges(m_logdir.getLogdir(),
"before", "after", "",
StringPrintf("\nData modified %s during synchronization:\n",
m_client.isLocalSync() ? m_client.getContextName().c_str() : "locally"),
"CLIENT_TEST_LEFT_NAME='before sync' CLIENT_TEST_RIGHT_NAME='after sync' CLIENT_TEST_REMOVED='removed during sync' CLIENT_TEST_ADDED='added during sync'");
}
// now remove some old logdirs
m_logdir.expire();
}
}
@ -3820,14 +3836,14 @@ void SyncContext::status()
bool found = access(prevLogdir.c_str(), R_OK|X_OK) == 0;
if (found) {
try {
sourceList.setPath(prevLogdir);
if (getPrintChanges() || getDumpData()) {
if (!m_quiet && getPrintChanges()) {
try {
sourceList.setPath(prevLogdir);
sourceList.dumpDatabases("current", NULL);
sourceList.dumpLocalChanges("", "after", "current", "");
} catch(...) {
Exception::handle();
}
} catch(...) {
Exception::handle();
}
} else {
ostream &out = getOutput();
@ -3952,10 +3968,8 @@ void SyncContext::restore(const string &dirname, RestoreDatabase database)
source->open();
}
if (!m_quiet || getDumpData()) {
if (!m_quiet && getPrintChanges()) {
sourceList.dumpDatabases("current", NULL);
}
if (!m_quiet) {
sourceList.dumpLocalChanges(dirname, "current", datadump, "",
"Data changes to be applied locally during restore:\n",
"CLIENT_TEST_LEFT_NAME='current data' "

View file

@ -198,7 +198,7 @@ extern "C" void EDSAbiWrapperInit()
# ifdef ENABLE_EBOOK
ebookhandle =
findSymbols("libebook-1.2.so", 5, 10,
findSymbols("libebook-1.2.so", 5, 12,
FIND_SYMBOLS_NEED_ALL|FIND_SYMBOLS_LENIENT_MAX_VERSION, NULL,
&EDSAbiWrapperSingleton.e_book_add_contact, "e_book_add_contact",
&EDSAbiWrapperSingleton.e_book_authenticate_user, "e_book_authenticate_user",
@ -232,7 +232,7 @@ extern "C" void EDSAbiWrapperInit()
# ifdef ENABLE_ECAL
static const int libecalMinVersion = 3,
libecalMaxVersion = 8;
libecalMaxVersion = 10;
ecalhandle =
findSymbols("libecal-1.2.so", libecalMinVersion, libecalMaxVersion,
FIND_SYMBOLS_NEED_ALL|FIND_SYMBOLS_LENIENT_MAX_VERSION, NULL,

View file

@ -25,6 +25,9 @@
#include <list>
#include <ostream>
// for size_t and ssize_t
#include <unistd.h>
#include <syncevo/declarations.h>
SE_BEGIN_CXX
namespace LCS {

View file

@ -951,162 +951,158 @@ class TestDBusServerTerm(unittest.TestCase, DBusUtil):
class Connman (dbus.service.Object):
count = 0
state = "online"
getPropertiesCalled = False
waitingForGetProperties = False
@dbus.service.method(dbus_interface='net.connman.Manager', in_signature='', out_signature='a{sv}')
def GetProperties(self):
self.count = self.count+1
if (self.count == 1):
# notify TestDBusServerPresence.setUp()?
if self.waitingForGetProperties:
loop.quit()
return {"ConnectedTechnologies":["ethernet", "some other stuff"],
"AvailableTechnologies": ["bluetooth"]}
elif (self.count == 2):
""" unplug the ethernet cable """
loop.quit()
return {"ConnectedTechnologies":["some other stuff"],
"AvailableTechnologies": ["bluetooth"]}
elif (self.count == 3):
""" replug the ethernet cable """
loop.quit()
return {"ConnectedTechnologies":["ethernet", "some other stuff"],
"AvailableTechnologies": ["bluetooth"]}
elif (self.count == 4):
""" nothing presence """
loop.quit()
return {"ConnectedTechnologies":[""],
"AvailableTechnologies": [""]}
elif (self.count == 5):
""" come back the same time """
loop.quit()
return {"ConnectedTechnologies":["ethernet", "some other stuff"],
"AvailableTechnologies": ["bluetooth"]}
else:
return {}
self.getPropertiesCalled = True
return { "State" : self.state }
@dbus.service.signal(dbus_interface='net.connman.Manager', signature='sv')
def PropertyChanged(self, key, value):
pass
def emitSignal(self):
self.count = self.count+1
if (self.count == 2):
""" unplug the ethernet cable """
self.PropertyChanged("ConnectedTechnologies",["some other stuff"])
return
elif (self.count == 3):
""" replug the ethernet cable """
self.PropertyChanged("ConnectedTechnologies", ["ethernet", "some other stuff"])
return
elif (self.count == 4):
""" nothing presence """
self.PropertyChanged("ConnectedTechnologies", [""])
self.PropertyChanged("AvailableTechnologies", [""])
return
elif (self.count == 5):
""" come back the same time """
self.PropertyChanged("ConnectedTechnologies", ["ethernet", "some other stuff"])
self.PropertyChanged("AvailableTechnologies", ["bluetooth"])
return
def setState(self, state):
if self.state != state:
self.state = state
self.PropertyChanged("State", state)
# race condition: it happened that method calls
# reached syncevo-dbus-server before the state change,
# thus breaking the test
time.sleep(1)
def reset(self):
self.count = 0
self.state = "online"
self.getPropertiesCalled = False
self.waitingForGetProperties = False
class TestDBusServerPresence(unittest.TestCase, DBusUtil):
"""Tests Presence signal and checkPresence API"""
# Our fake ConnMan implementation must be present on the
# bus also outside of tests, because syncevo-dbus-server
# will try to call it before setUp(). The implementation's
# initialization and tearDown() below ensures that the state
# is "online" outside of tests.
name = dbus.service.BusName ("net.connman", bus);
conn = Connman (bus, "/")
def setUp(self):
self.conn = Connman (bus, "/")
self.setUpServer()
self.cbFailure = None
# we don't know if the GetProperties() call was already
# processed; if not, wait for it here
if not self.conn.getPropertiesCalled:
self.conn.waitingForGetProperties = True
loop.run()
def tearDown(self):
self.conn.remove_from_connection()
self.conn.reset()
self.conf = None
def presenceCB(self,
server, status, transport,
expected):
try:
state = expected.pop(server, None)
if not state:
self.fail("unexpected presence signal for config " + server)
self.failUnlessEqual(status, state[0])
if not status:
self.failUnlessEqual(transport, state[1])
except Exception, ex:
# tell test method about the problem
loop.quit()
self.cbFailure = ex
# log exception
raise ex
if not expected:
# got all expected signals
loop.quit()
def expect(self, expected):
'''expected: hash from server config name to state+transport'''
match = bus.add_signal_receiver(lambda x,y,z:
self.presenceCB(x,y,z, expected), \
'Presence',
'org.syncevolution.Server',
self.server.bus_name,
None,
byte_arrays=True,
utf8_strings=True)
return match
@property("ENV", "DBUS_TEST_CONNMAN=session")
@timeout(100)
def testPresenceSignal(self):
"""TestDBusServerPresence.testPresenceSignal - check Server.Presence signal"""
self.conn.reset()
self.setUpSession("foo")
self.session.SetConfig(False, False, {"" : {"syncURL":
"http://http-only-1"}})
self.session.Detach()
def cb_http_presence(server, status, transport):
self.failUnlessEqual (status, "")
self.failUnlessEqual (server, "foo")
self.failUnlessEqual (transport, "http://http-only-1")
loop.quit()
match = bus.add_signal_receiver(cb_http_presence,
'Presence',
'org.syncevolution.Server',
self.server.bus_name,
None,
byte_arrays=True,
utf8_strings=True)
# creating a config does not trigger a Presence signal
self.setUpSession("foo")
self.session.SetConfig(False, False, {"" : {"syncURL": "http://http-only-1"}})
self.session.Detach()
# go offline
match = self.expect({"foo" : ("no transport", "")})
self.conn.setState("idle")
loop.run()
time.sleep(1)
self.failIf(self.cbFailure)
match.remove()
# Changing the properties temporarily does change
# the presence of the config although strictly speaking,
# the presence of the config on disk hasn't changed.
# Not sure whether we really want that behavior.
match = self.expect({"foo" : ("", "obex-bt://temp-bluetooth-peer-changed-from-http")})
self.setUpSession("foo")
self.session.SetConfig(True, False, {"" : {"syncURL":
"obex-bt://temp-bluetooth-peer-changed-from-http"}})
def cb_bt_presence(server, status, transport):
self.failUnlessEqual (status, "")
self.failUnlessEqual (server, "foo")
self.failUnlessEqual (transport,
"obex-bt://temp-bluetooth-peer-changed-from-http")
loop.quit()
match.remove()
match = bus.add_signal_receiver(cb_bt_presence,
'Presence',
'org.syncevolution.Server',
self.server.bus_name,
None,
byte_arrays=True,
utf8_strings=True)
self.conn.emitSignal()
# A ConnMan state change is needed to trigger the presence signal.
# Definitely not the behavior that we want :-/
self.conn.setState("failure")
loop.run()
time.sleep(1)
self.failIf(self.cbFailure)
match.remove()
# remove temporary config change, back to using HTTP
# BUG BMC #24648 in syncevo-dbus-server: after discarding the temporary
# config change it keeps using the obex-bt syncURL.
# Work around that bug in thus test here temporarily
# by explicitly restoring the previous URL.
self.session.SetConfig(True, False, {"" : {"syncURL": "http://http-only-1"}})
self.session.Detach()
# create second session
self.setUpSession("bar")
self.session.SetConfig(False, False, {"" : {"syncURL":
"http://http-client-2"}})
self.session.Detach()
self.foo = "random string"
self.bar = "random string"
match.remove()
self.conn.emitSignal()
self.conn.emitSignal()
def cb_bt_http_presence(server, status, transport):
if (server == "foo"):
self.foo = status
elif (server == "bar"):
self.bar = status
else:
self.fail("wrong server config")
loop.quit()
match = bus.add_signal_receiver(cb_bt_http_presence,
'Presence',
'org.syncevolution.Server',
self.server.bus_name,
None,
byte_arrays=True,
utf8_strings=True)
#count=5, 2 signals recevied
self.conn.emitSignal()
# go back to online mode
match = self.expect({"foo" : ("", "http://http-only-1"),
"bar" : ("", "http://http-client-2")})
self.conn.setState("online")
loop.run()
self.failIf(self.cbFailure)
match.remove()
# and offline
match = self.expect({"foo" : ("no transport", ""),
"bar" : ("no transport", "")})
self.conn.setState("idle")
loop.run()
time.sleep(1)
self.failUnlessEqual (self.foo, "")
self.failUnlessEqual (self.bar, "")
self.failIf(self.cbFailure)
match.remove()
@property("ENV", "DBUS_TEST_CONNMAN=session")
@timeout(100)
def testServerCheckPresence(self):
"""TestDBusServerPresence.testServerCheckPresence - check Server.CheckPresence()"""
self.conn.reset()
self.setUpSession("foo")
self.session.SetConfig(False, False, {"" : {"syncURL":
"http://http-client"}})
@ -1120,9 +1116,7 @@ class TestDBusServerPresence(unittest.TestCase, DBusUtil):
"obex-bt://bt-client-mixed http://http-client-mixed"}})
self.session.Detach()
#let dbus server get the first presence
loop.run()
time.sleep(1)
# online initially
(status, transports) = self.server.CheckPresence ("foo")
self.failUnlessEqual (status, "")
self.failUnlessEqual (transports, ["http://http-client"])
@ -1134,9 +1128,17 @@ class TestDBusServerPresence(unittest.TestCase, DBusUtil):
self.failUnlessEqual (transports, ["obex-bt://bt-client-mixed",
"http://http-client-mixed"])
#count = 2
self.conn.emitSignal()
time.sleep(1)
# go offline; Bluetooth remains on
self.conn.setState("idle")
# wait until server has seen the state change
match = bus.add_signal_receiver(lambda x,y,z: loop.quit(),
'Presence',
'org.syncevolution.Server',
self.server.bus_name,
None,
byte_arrays=True,
utf8_strings=True)
match.remove()
(status, transports) = self.server.CheckPresence ("foo")
self.failUnlessEqual (status, "no transport")
(status, transports) = self.server.CheckPresence ("bar")
@ -1150,22 +1152,67 @@ class TestDBusServerPresence(unittest.TestCase, DBusUtil):
@timeout(100)
def testSessionCheckPresence(self):
"""TestDBusServerPresence.testSessionCheckPresence - check Session.CheckPresence()"""
self.conn.reset()
self.setUpSession("foobar")
self.session.SetConfig(False, False, {"" : {"syncURL":
"obex-bt://bt-client-mixed http://http-client-mixed"}})
loop.run()
time.sleep(1)
status = self.session.checkPresence()
self.failUnlessEqual (status, "")
self.conn.emitSignal()
self.conn.emitSignal()
self.conn.emitSignal()
#count = 4
time.sleep(1)
# go offline; Bluetooth remains on
self.conn.setState("idle")
# wait until server has seen the state change
match = bus.add_signal_receiver(lambda x,y,z: loop.quit(),
'Presence',
'org.syncevolution.Server',
self.server.bus_name,
None,
byte_arrays=True,
utf8_strings=True)
match.remove()
# config uses Bluetooth, so syncing still possible
status = self.session.checkPresence()
self.failUnlessEqual (status, "")
# now the same without Bluetooth, while offline
self.session.Detach()
self.setUpSession("foo")
self.session.SetConfig(False, False, {"" : {"syncURL": "http://http-only"}})
status = self.session.checkPresence()
self.failUnlessEqual (status, "no transport")
# go online
self.conn.setState("online")
# wait until server has seen the state change
match = bus.add_signal_receiver(lambda x,y,z: loop.quit(),
'Presence',
'org.syncevolution.Server',
self.server.bus_name,
None,
byte_arrays=True,
utf8_strings=True)
match.remove()
status = self.session.checkPresence()
self.failUnlessEqual (status, "")
# temporary config change shall always affect the
# Session.CheckPresence() result: go offline,
# then switch to Bluetooth (still present)
self.conn.setState("idle")
match = bus.add_signal_receiver(lambda x,y,z: loop.quit(),
'Presence',
'org.syncevolution.Server',
self.server.bus_name,
None,
byte_arrays=True,
utf8_strings=True)
match.remove()
status = self.session.checkPresence()
self.failUnlessEqual (status, "no transport")
self.session.SetConfig(True, False, {"" : {"syncURL": "obex-bt://bt-client-mixed"}})
status = self.session.checkPresence()
self.failUnlessEqual (status, "")
def run(self, result):
self.runTest(result, True)