This commit is contained in:
the-djmaze 2022-04-16 11:01:24 +02:00
parent 7bbc53c8af
commit 0a49027840
64 changed files with 239 additions and 123 deletions

View file

@ -2,6 +2,7 @@ import ko from 'ko';
import { koComputable } from 'External/ko';
import { SettingsGet } from 'Common/Globals';
import { i18n, trigger as translatorTrigger } from 'Common/Translator';
import { ContactUserStore } from 'Stores/User/Contact';
import Remote from 'Remote/User/Fetch';
@ -10,14 +11,24 @@ export class UserSettingsContacts /*extends AbstractViewSettings*/ {
this.contactsAutosave = ko.observable(!!SettingsGet('ContactsAutosave'));
this.allowContactsSync = ContactUserStore.allowSync;
this.enableContactsSync = ContactUserStore.enableSync;
this.contactsSyncUrl = ContactUserStore.syncUrl;
this.contactsSyncUser = ContactUserStore.syncUser;
this.contactsSyncPass = ContactUserStore.syncPass;
this.syncMode = ContactUserStore.syncMode;
this.syncUrl = ContactUserStore.syncUrl;
this.syncUser = ContactUserStore.syncUser;
this.syncPass = ContactUserStore.syncPass;
const i18nSyncMode = key => i18n('SETTINGS_CONTACTS/SYNC_' + key);
this.syncModeOptions = koComputable(() => {
translatorTrigger();
return [
{ id: 0, name: i18nSyncMode('NO') },
{ id: 1, name: i18nSyncMode('YES') },
{ id: 2, name: i18nSyncMode('READ') },
];
});
this.saveTrigger = koComputable(() =>
[
ContactUserStore.enableSync() ? '1' : '0',
ContactUserStore.syncMode(),
ContactUserStore.syncUrl(),
ContactUserStore.syncUser(),
ContactUserStore.syncPass()
@ -31,7 +42,7 @@ export class UserSettingsContacts /*extends AbstractViewSettings*/ {
this.saveTrigger.subscribe(() =>
Remote.request('SaveContactsSyncData', null, {
Enable: ContactUserStore.enableSync() ? 1 : 0,
Mode: ContactUserStore.syncMode(),
Url: ContactUserStore.syncUrl(),
User: ContactUserStore.syncUser(),
Password: ContactUserStore.syncPass()

View file

@ -12,7 +12,7 @@ ContactUserStore.syncing = ko.observable(false).extend({ debounce: 200 });
addObservablesTo(ContactUserStore, {
allowSync: false, // Admin setting
enableSync: false,
syncMode: 0,
syncUrl: '',
syncUser: '',
syncPass: ''
@ -23,7 +23,7 @@ addObservablesTo(ContactUserStore, {
* @returns {void}
*/
ContactUserStore.sync = fResultFunc => {
if (ContactUserStore.enableSync()
if (ContactUserStore.syncMode()
&& !ContactUserStore.importing()
&& !ContactUserStore.syncing()
) {
@ -39,7 +39,7 @@ ContactUserStore.init = () => {
let value = !!SettingsGet('ContactsSyncIsAllowed');
ContactUserStore.allowSync(value);
if (value) {
ContactUserStore.enableSync(!!SettingsGet('EnableContactsSync'));
ContactUserStore.syncMode(SettingsGet('ContactsSyncMode'));
ContactUserStore.syncUrl(SettingsGet('ContactsSyncUrl'));
ContactUserStore.syncUser(SettingsGet('ContactsSyncUser'));
ContactUserStore.syncPass(SettingsGet('ContactsSyncPassword'));

View file

@ -37,9 +37,6 @@ export class ContactsPopupView extends AbstractViewPopup {
this.bBackToCompose = false;
this.sLastComposeFocusedField = '';
this.allowContactsSync = ContactUserStore.allowSync;
this.enableContactsSync = ContactUserStore.enableSync;
this.addObservables({
search: '',
contactsCount: 0,
@ -124,6 +121,8 @@ export class ContactsPopupView extends AbstractViewPopup {
contactsCheckedOrSelectedUids: () => this.contactsCheckedOrSelected().map(contact => contact.id),
contactsSyncEnabled: () => ContactUserStore.allowSync() && ContactUserStore.syncMode(),
viewHash: () => '' + this.viewProperties.map(property => property.value && property.value()).join('')
});

View file

@ -803,7 +803,7 @@ class Actions
$aResult['ContactsSyncIsAllowed'] = (bool)$oConfig->Get('contacts', 'allow_sync', false);
$aResult['ContactsSyncInterval'] = (int)$oConfig->Get('contacts', 'sync_interval', 20);
$aResult['EnableContactsSync'] = false;
$aResult['ContactsSyncMode'] = 0;
$aResult['ContactsSyncUrl'] = '';
$aResult['ContactsSyncUser'] = '';
$aResult['ContactsSyncPassword'] = '';
@ -811,7 +811,7 @@ class Actions
if ($aResult['ContactsIsAllowed'] && $aResult['ContactsSyncIsAllowed']) {
$mData = $this->getContactsSyncData($oAccount);
if (\is_array($mData)) {
$aResult['EnableContactsSync'] = isset($mData['Enable']) ? !!$mData['Enable'] : false;
$aResult['ContactsSyncMode'] = isset($mData['Mode']) ? $mData['Mode'] : 0;
$aResult['ContactsSyncUrl'] = isset($mData['Url']) ? \trim($mData['Url']) : '';
$aResult['ContactsSyncUser'] = isset($mData['User']) ? \trim($mData['User']) : '';
$aResult['ContactsSyncPassword'] = APP_DUMMY;

View file

@ -15,19 +15,16 @@ trait Contacts
return $this->FalseResponse(__FUNCTION__);
}
$bEnabled = '1' === (string) $this->GetActionParam('Enable', '0');
$sUrl = $this->GetActionParam('Url', '');
$sUser = $this->GetActionParam('User', '');
$sPassword = $this->GetActionParam('Password', '');
$mData = $this->getContactsSyncData($oAccount);
$bResult = $this->setContactsSyncData($oAccount, array(
'Enable' => $bEnabled,
'User' => $sUser,
'Mode' => \intval($this->GetActionParam('Mode', '0')),
'User' => $this->GetActionParam('User', ''),
'Password' => APP_DUMMY === $sPassword && isset($mData['Password'])
? $mData['Password'] : (APP_DUMMY === $sPassword ? '' : $sPassword),
'Url' => $sUrl
'Url' => $this->GetActionParam('Url', '')
));
return $this->DefaultResponse(__FUNCTION__, $bResult);
@ -42,11 +39,16 @@ trait Contacts
if ($oAddressBookProvider && $oAddressBookProvider->IsActive())
{
$mData = $this->getContactsSyncData($oAccount);
if (isset($mData['Enable'], $mData['User'], $mData['Password'], $mData['Url']) && $mData['Enable'])
if (isset($mData['User'], $mData['Password'], $mData['Url']) && !empty($mData['Mode']))
{
$bResult = $oAddressBookProvider->Sync(
$this->GetMainEmail($oAccount),
$mData['Url'], $mData['User'], $mData['Password']);
$bResult = $oAddressBookProvider->Sync([
'Email' => $this->GetMainEmail($oAccount),
'Url' => $mData['Url'],
'User' => $mData['User'],
'Password' => $mData['Password'],
'Mode' => $mData['Mode'],
'Proxy' => ''
]);
}
}
@ -236,6 +238,9 @@ trait Contacts
public function setContactsSyncData(\RainLoop\Model\Account $oAccount, array $aData) : bool
{
if (!isset($aData['Mode'])) {
$aData['Mode'] = empty($aData['Enable']) ? 0 : 1;
}
$oMainAccount = $this->getMainAccountFromToken();
if ($aData['Password']) {
$aData['Password'] = \SnappyMail\Crypt::EncryptToJSON($aData['Password'], $oMainAccount->CryptKey());
@ -272,6 +277,9 @@ trait Contacts
);
}
}
if (!isset($aData['Mode'])) {
$aData['Mode'] = empty($aData['Enable']) ? 0 : 1;
}
return $aData;
}

View file

@ -41,9 +41,9 @@ class AddressBook extends \RainLoop\Providers\AbstractProvider
$this->oDriver->IsSharingAllowed();
}
public function Sync(string $sEmail, string $sUrl, string $sUser, string $sPassword) : bool
public function Sync(array $oConfig) : bool
{
return $this->IsActive() ? $this->oDriver->Sync($sEmail, $sUrl, $sUser, $sPassword) : false;
return $this->IsActive() ? $this->oDriver->Sync($oConfig) : false;
}
public function Export(string $sEmail, string $sType = 'vcf') : bool

View file

@ -112,18 +112,18 @@ class PdoAddressBook
return $aResult;
}
public function Sync(string $sEmail, string $sUrl, string $sUser, string $sPassword, string $sProxy = '') : bool
public function Sync(array $oConfig) : bool
{
$this->SyncDatabase();
$iUserID = $this->getUserId($sEmail);
$iUserID = $this->getUserId($oConfig['Email']);
if (0 >= $iUserID)
{
\SnappyMail\Log::warning('PdoAddressBook', 'Sync() invalid $iUserID');
return false;
}
$oClient = $this->getDavClient($sUrl, $sUser, $sPassword, $sProxy);
$oClient = $this->getDavClient($oConfig['Url'], $oConfig['User'], $oConfig['Password'], $oConfig['Proxy']);
if (!$oClient)
{
\SnappyMail\Log::warning('PdoAddressBook', 'Sync() invalid DavClient');
@ -144,18 +144,18 @@ class PdoAddressBook
// $this->oLogger->WriteDump($aRemoteSyncData);
// $this->oLogger->WriteDump($aDatabaseSyncData);
//+++del (from carddav)
foreach ($aDatabaseSyncData as $sKey => $aData)
{
if ($aData['deleted'] &&
isset($aRemoteSyncData[$sKey], $aRemoteSyncData[$sKey]['vcf']))
// Delete remote when Mode = read + write
if (1 === $oConfig['Mode']) {
foreach ($aDatabaseSyncData as $sKey => $aData)
{
$this->davClientRequest($oClient, 'DELETE', $sPath.$aRemoteSyncData[$sKey]['vcf']);
if ($aData['deleted'] && isset($aRemoteSyncData[$sKey], $aRemoteSyncData[$sKey]['vcf']))
{
$this->davClientRequest($oClient, 'DELETE', $sPath.$aRemoteSyncData[$sKey]['vcf']);
}
}
}
//---del
//+++del (from db)
// Delete from db
$aIdsForDeletedion = array();
foreach ($aDatabaseSyncData as $sKey => $aData)
{
@ -164,12 +164,10 @@ class PdoAddressBook
$aIdsForDeletedion[] = $aData['id_contact'];
}
}
if (\count($aIdsForDeletedion))
{
$this->DeleteContacts($sEmail, $aIdsForDeletedion, false);
$this->DeleteContacts($oConfig['Email'], $aIdsForDeletedion, false);
}
//---del
$this->flushDeletedContacts($iUserID);
@ -186,7 +184,7 @@ class PdoAddressBook
)
{
$mID = $aData['id_contact'];
$oContact = $this->GetContactByID($sEmail, $mID, false);
$oContact = $this->GetContactByID($oConfig['Email'], $mID, false);
if ($oContact)
{
$sExsistensBody = '';
@ -202,17 +200,20 @@ class PdoAddressBook
// $this->oLogger->WriteDump($sExsistensBody);
}
$oResponse = $this->davClientRequest($oClient, 'PUT',
$sPath.(\strlen($mExsistenRemoteID) ? $mExsistenRemoteID : $oContact->CardDavNameUri()),
$oContact->ToVCard($sExsistensBody, $this->oLogger)."\r\n\r\n");
if ($oResponse)
{
$sEtag = \trim(\trim($oResponse->getHeader('etag')), '"\'');
$sDate = \trim($oResponse->getHeader('date'));
if (!empty($sEtag))
// Add remote when Mode = read + write
if (1 === $oConfig['Mode']) {
$oResponse = $this->davClientRequest($oClient, 'PUT',
$sPath.(\strlen($mExsistenRemoteID) ? $mExsistenRemoteID : $oContact->CardDavNameUri()),
$oContact->ToVCard($sExsistensBody, $this->oLogger)."\r\n\r\n");
if ($oResponse)
{
$iChanged = empty($sDate) ? \time() : \MailSo\Base\DateTimeHelper::ParseRFC2822DateString($sDate);
$this->updateContactEtagAndTime($iUserID, $mID, $sEtag, $iChanged);
$sEtag = \trim(\trim($oResponse->getHeader('etag')), '"\'');
$sDate = \trim($oResponse->getHeader('date'));
if (!empty($sEtag))
{
$iChanged = empty($sDate) ? \time() : \MailSo\Base\DateTimeHelper::ParseRFC2822DateString($sDate);
$this->updateContactEtagAndTime($iUserID, $mID, $sEtag, $iChanged);
}
}
}
}
@ -268,7 +269,7 @@ class PdoAddressBook
$oContact = null;
if ($mExsistenContactID)
{
$oContact = $this->GetContactByID($sEmail, $mExsistenContactID);
$oContact = $this->GetContactByID($oConfig['Email'], $mExsistenContactID);
}
if (!$oContact)
{
@ -280,7 +281,7 @@ class PdoAddressBook
\trim(\trim($oResponse->getHeader('etag')), '"\'')
);
$this->ContactSave($sEmail, $oContact);
$this->ContactSave($oConfig['Email'], $oContact);
unset($oContact);
// } else if ($this->oLogger) {
// $this->oLogger->WriteDump($sBody);

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "تفعيل التزامن عن بعد",
"LABEL_CONTACTS_SYNC_SERVER": "المخدم",
"LABEL_CONTACTS_SYNC_AB_URL": "وصلة دفتر العناوين",
"LABEL_CONTACTS_SYNC_USER": "المستخدم"
"LABEL_CONTACTS_SYNC_USER": "المستخدم",
"SYNC_NO": "لا",
"SYNC_YES": "نعم",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "المظاهر العامة",

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Разрешаване на отдалечено синхронизиране",
"LABEL_CONTACTS_SYNC_SERVER": "Сървър",
"LABEL_CONTACTS_SYNC_AB_URL": "URL на адресната книга",
"LABEL_CONTACTS_SYNC_USER": "Потребител"
"LABEL_CONTACTS_SYNC_USER": "Потребител",
"SYNC_NO": "Не",
"SYNC_YES": "Да",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Теми",

View file

@ -104,7 +104,7 @@
"LABEL_ALL_RIGHTS_RESERVED": "Všechna práva vyhrazena.",
"HINT_READ_CHANGE_LOG": "Přečtěte si prosím change log předtím, než budete chtít provést aktualizaci.",
"HINT_IS_UP_TO_DATE": "RainLoop je v aktuální verzi.",
"HTML_NEW_VERSION": "Nová verze <b>%VERSION%</b> je k dispozici.",
"HTML_NEW_VERSION": "Nová verze <b>%VERSION%<\/b> je k dispozici.",
"LABEL_UPDATING": "Aktualizuji",
"LABEL_CHECKING": "Kontroluji nové aktualizace",
"BUTTON_RELEASES": "Releases"

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Povolit vzdálenou synchronizaci",
"LABEL_CONTACTS_SYNC_SERVER": "Server",
"LABEL_CONTACTS_SYNC_AB_URL": "URL adresáře",
"LABEL_CONTACTS_SYNC_USER": "Uživatel"
"LABEL_CONTACTS_SYNC_USER": "Uživatel",
"SYNC_NO": "Ne",
"SYNC_YES": "Ano",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Motivy",

View file

@ -104,7 +104,7 @@
"LABEL_ALL_RIGHTS_RESERVED": "alle rettigheder forbeholdes.",
"HINT_READ_CHANGE_LOG": "Læs ændrings listen før der opdateres.",
"HINT_IS_UP_TO_DATE": "RainLoop is up to date.",
"HTML_NEW_VERSION": "Ny <b>%VERSION%</b> version tilgængelig",
"HTML_NEW_VERSION": "Ny <b>%VERSION%<\/b> version tilgængelig",
"LABEL_UPDATING": "Opdatere",
"LABEL_CHECKING": "Tjekker for opdateringer",
"BUTTON_RELEASES": "Releases"

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Aktivér synkronisering",
"LABEL_CONTACTS_SYNC_SERVER": "Server",
"LABEL_CONTACTS_SYNC_AB_URL": "Adressebogs URL",
"LABEL_CONTACTS_SYNC_USER": "Bruger"
"LABEL_CONTACTS_SYNC_USER": "Bruger",
"SYNC_NO": "Nej",
"SYNC_YES": "Ja",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Temaer",

View file

@ -104,7 +104,7 @@
"LABEL_ALL_RIGHTS_RESERVED": "Alle Rechte vorbehalten.",
"HINT_READ_CHANGE_LOG": "Bitte Lesen Sie das Änderungsprotokoll vor dem Update.",
"HINT_IS_UP_TO_DATE": "RainLoop ist auf dem neusten Stand.",
"HTML_NEW_VERSION": "Neue Version <b>%VERSION%</b> verfügbar.",
"HTML_NEW_VERSION": "Neue Version <b>%VERSION%<\/b> verfügbar.",
"LABEL_UPDATING": "Aktualisiere",
"LABEL_CHECKING": "Prüfe auf Aktualisierungen",
"BUTTON_RELEASES": "Releases"

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Remote-Synchronisierung aktivieren",
"LABEL_CONTACTS_SYNC_SERVER": "Server",
"LABEL_CONTACTS_SYNC_AB_URL": "Adressbuch-URL",
"LABEL_CONTACTS_SYNC_USER": "Benutzer"
"LABEL_CONTACTS_SYNC_USER": "Benutzer",
"SYNC_NO": "Nein",
"SYNC_YES": "Ja",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Themen",

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Ενεργοποίηση απομακρυσμένου συγχρονισμού",
"LABEL_CONTACTS_SYNC_SERVER": "Εξυπηρετητής",
"LABEL_CONTACTS_SYNC_AB_URL": "URL του καταλόγου διεθύνσεων",
"LABEL_CONTACTS_SYNC_USER": "Χρήστης"
"LABEL_CONTACTS_SYNC_USER": "Χρήστης",
"SYNC_NO": "Όχι",
"SYNC_YES": "Ναι",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Θέματα",

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Enable remote synchronization",
"LABEL_CONTACTS_SYNC_SERVER": "Server",
"LABEL_CONTACTS_SYNC_AB_URL": "Addressbook URL",
"LABEL_CONTACTS_SYNC_USER": "User"
"LABEL_CONTACTS_SYNC_USER": "User",
"SYNC_NO": "No",
"SYNC_YES": "Yes",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Themes",

View file

@ -104,7 +104,7 @@
"LABEL_ALL_RIGHTS_RESERVED": "Todos los Derechos Reservados.",
"HINT_READ_CHANGE_LOG": "Revisa la lista de cambios antes de actualizar.",
"HINT_IS_UP_TO_DATE": "RainLoop está actualizado.",
"HTML_NEW_VERSION": "Nueva versión ( <b>%VERSION%</b> ) está disponible.",
"HTML_NEW_VERSION": "Nueva versión ( <b>%VERSION%<\/b> ) está disponible.",
"LABEL_UPDATING": "Actualizando",
"LABEL_CHECKING": "Buscando actualizaciones",
"BUTTON_RELEASES": "Releases"

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Activar la sincronización remota",
"LABEL_CONTACTS_SYNC_SERVER": "Servidor",
"LABEL_CONTACTS_SYNC_AB_URL": "Libreta de direcciones URL",
"LABEL_CONTACTS_SYNC_USER": "Usuario"
"LABEL_CONTACTS_SYNC_USER": "Usuario",
"SYNC_NO": "No",
"SYNC_YES": "Sí",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Temas",

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Luba väline sünkroniseerimine",
"LABEL_CONTACTS_SYNC_SERVER": "Server",
"LABEL_CONTACTS_SYNC_AB_URL": "Aadressiraamatu URL",
"LABEL_CONTACTS_SYNC_USER": "Kasutaja"
"LABEL_CONTACTS_SYNC_USER": "Kasutaja",
"SYNC_NO": "Ei",
"SYNC_YES": "Jah",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Teemad",

View file

@ -104,7 +104,7 @@
"LABEL_ALL_RIGHTS_RESERVED": "همه حقوق محفوظ هست",
"HINT_READ_CHANGE_LOG": "فایل وقایع را قبل از بروزرسانی بخوانید.",
"HINT_IS_UP_TO_DATE": "RainLoop بروز هست",
"HTML_NEW_VERSION": "نسخه <b>%VERSION%</b> در دسترس هست",
"HTML_NEW_VERSION": "نسخه <b>%VERSION%<\/b> در دسترس هست",
"LABEL_UPDATING": "در حال بروزرسانی",
"LABEL_CHECKING": "چک کردن برای بروزرسانی",
"BUTTON_RELEASES": "Releases"

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "فعال‌سازی همگام‌سازی از راه دور",
"LABEL_CONTACTS_SYNC_SERVER": "سرور",
"LABEL_CONTACTS_SYNC_AB_URL": "تارنمای آدرس‌بوک",
"LABEL_CONTACTS_SYNC_USER": "کاربر"
"LABEL_CONTACTS_SYNC_USER": "کاربر",
"SYNC_NO": "خیر",
"SYNC_YES": "بلی",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "پوسته‌ها",

View file

@ -104,7 +104,7 @@
"LABEL_ALL_RIGHTS_RESERVED": "Kaikki oikeudet pidätetään.",
"HINT_READ_CHANGE_LOG": "Lue muutosloki ennen päivitystä.",
"HINT_IS_UP_TO_DATE": "RainLoop on ajan tasalla.",
"HTML_NEW_VERSION": "Uusi versio <b>%VERSION%</b> on saatavissa.",
"HTML_NEW_VERSION": "Uusi versio <b>%VERSION%<\/b> on saatavissa.",
"LABEL_UPDATING": "Päivitetään",
"LABEL_CHECKING": "Tarkastetaan päivityksiä",
"BUTTON_RELEASES": "Releases"

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Aktivoi etä-synkronointi",
"LABEL_CONTACTS_SYNC_SERVER": "Palvelin",
"LABEL_CONTACTS_SYNC_AB_URL": "Osoitekirjan URL",
"LABEL_CONTACTS_SYNC_USER": "Käyttäjä"
"LABEL_CONTACTS_SYNC_USER": "Käyttäjä",
"SYNC_NO": "Ei",
"SYNC_YES": "Kyllä",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Teemat",

View file

@ -104,7 +104,7 @@
"LABEL_ALL_RIGHTS_RESERVED": "Tous droits réservés.",
"HINT_READ_CHANGE_LOG": "Veuillez lire le journal des modifications avant de faire la mise à jour.",
"HINT_IS_UP_TO_DATE": "Rainloop est à jour.",
"HTML_NEW_VERSION": "Une nouvelle version <b>%VERSION%</b> est disponible.",
"HTML_NEW_VERSION": "Une nouvelle version <b>%VERSION%<\/b> est disponible.",
"LABEL_UPDATING": "Mise à jour",
"LABEL_CHECKING": "Vérification des mises à jour",
"BUTTON_RELEASES": "Releases"

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Activer la synchronisation à distance",
"LABEL_CONTACTS_SYNC_SERVER": "Serveur",
"LABEL_CONTACTS_SYNC_AB_URL": "URL du carnet d'adresses",
"LABEL_CONTACTS_SYNC_USER": "Utilisateur"
"LABEL_CONTACTS_SYNC_USER": "Utilisateur",
"SYNC_NO": "Non",
"SYNC_YES": "Oui",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Thèmes",

View file

@ -104,7 +104,7 @@
"LABEL_ALL_RIGHTS_RESERVED": "Minden jog fenntartva.",
"HINT_READ_CHANGE_LOG": "Frissítés előtt kérlek olvasd el a változások listáját.",
"HINT_IS_UP_TO_DATE": "A RainLoop naprakész.",
"HTML_NEW_VERSION": "Új verzió érhető el: <b>%VERSION%</b>",
"HTML_NEW_VERSION": "Új verzió érhető el: <b>%VERSION%<\/b>",
"LABEL_UPDATING": "Frissítés",
"LABEL_CHECKING": "Frissítések ellenőrzése",
"BUTTON_RELEASES": "Releases"

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Távoli szinkronizálás engedélyezése",
"LABEL_CONTACTS_SYNC_SERVER": "Szerver",
"LABEL_CONTACTS_SYNC_AB_URL": "Címtár URL",
"LABEL_CONTACTS_SYNC_USER": "Felhasználó"
"LABEL_CONTACTS_SYNC_USER": "Felhasználó",
"SYNC_NO": "Nem",
"SYNC_YES": "Igen",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Témák",

View file

@ -104,7 +104,7 @@
"LABEL_ALL_RIGHTS_RESERVED": "Hak Cipta",
"HINT_READ_CHANGE_LOG": "Mohon baca log perubahan sebelum melakukan pembaruan",
"HINT_IS_UP_TO_DATE": "RainLoop sudah terbaru",
"HTML_NEW_VERSION": "Versi <b>%VERSION%</b> baru tersedia",
"HTML_NEW_VERSION": "Versi <b>%VERSION%<\/b> baru tersedia",
"LABEL_UPDATING": "Memperbarui",
"LABEL_CHECKING": "Memeriksa pembaruan",
"BUTTON_RELEASES": "Releases"

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Nyalakan sinkronisasi remote",
"LABEL_CONTACTS_SYNC_SERVER": "Server",
"LABEL_CONTACTS_SYNC_AB_URL": "URL Buku alamat",
"LABEL_CONTACTS_SYNC_USER": "User"
"LABEL_CONTACTS_SYNC_USER": "User",
"SYNC_NO": "Tidak",
"SYNC_YES": "Ya",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Tema",

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Virkja fjartengda samstillingu",
"LABEL_CONTACTS_SYNC_SERVER": "Þjónn",
"LABEL_CONTACTS_SYNC_AB_URL": "Slóð á nafnaskrá",
"LABEL_CONTACTS_SYNC_USER": "Notandi"
"LABEL_CONTACTS_SYNC_USER": "Notandi",
"SYNC_NO": "Nei",
"SYNC_YES": "Já",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Þemu",

View file

@ -104,7 +104,7 @@
"LABEL_ALL_RIGHTS_RESERVED": "All Rights Reserved.",
"HINT_READ_CHANGE_LOG": "Leggere il changelog prima di effettuare l'aggiornamento.",
"HINT_IS_UP_TO_DATE": "RainLoop è aggiornato.",
"HTML_NEW_VERSION": "La nuova versione <b>%VERSION%</b> è disponibile.",
"HTML_NEW_VERSION": "La nuova versione <b>%VERSION%<\/b> è disponibile.",
"LABEL_UPDATING": "Aggiornamento in corso...",
"LABEL_CHECKING": "Controllo della presenza di aggiornamenti...",
"BUTTON_RELEASES": "Releases"

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Abilita sincronizzazione remota",
"LABEL_CONTACTS_SYNC_SERVER": "Server",
"LABEL_CONTACTS_SYNC_AB_URL": "Indirizzo della rubrica",
"LABEL_CONTACTS_SYNC_USER": "Utente"
"LABEL_CONTACTS_SYNC_USER": "Utente",
"SYNC_NO": "No",
"SYNC_YES": "Sì",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Temi",

View file

@ -104,7 +104,7 @@
"LABEL_ALL_RIGHTS_RESERVED": "All Rights Reserved.",
"HINT_READ_CHANGE_LOG": "更新する前に変更ログをお読みください。",
"HINT_IS_UP_TO_DATE": "RainLoopは最新のものです。",
"HTML_NEW_VERSION": "新しいバージョン <b>%VERSION%</b> があります",
"HTML_NEW_VERSION": "新しいバージョン <b>%VERSION%<\/b> があります",
"LABEL_UPDATING": "更新中",
"LABEL_CHECKING": "アップデートの確認",
"BUTTON_RELEASES": "Releases"

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "リモート同期を有効化",
"LABEL_CONTACTS_SYNC_SERVER": "サーバー",
"LABEL_CONTACTS_SYNC_AB_URL": "アドレス帳 URL",
"LABEL_CONTACTS_SYNC_USER": "ユーザー"
"LABEL_CONTACTS_SYNC_USER": "ユーザー",
"SYNC_NO": "いいえ",
"SYNC_YES": "はい",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "テーマ",

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "원격 동기화 활성화",
"LABEL_CONTACTS_SYNC_SERVER": "서버",
"LABEL_CONTACTS_SYNC_AB_URL": "주소록 URL",
"LABEL_CONTACTS_SYNC_USER": "사용자"
"LABEL_CONTACTS_SYNC_USER": "사용자",
"SYNC_NO": "아니요",
"SYNC_YES": "예",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "테마",

View file

@ -104,7 +104,7 @@
"LABEL_ALL_RIGHTS_RESERVED": "Visos teisės saugomos.",
"HINT_READ_CHANGE_LOG": "Prašom perskaityti pasikeitimų eigą prieš atnaujinant.",
"HINT_IS_UP_TO_DATE": "RainLoop naujausios laidos.",
"HTML_NEW_VERSION": "Nauja <b>%VERSION%</b> versija jau prieinama.",
"HTML_NEW_VERSION": "Nauja <b>%VERSION%<\/b> versija jau prieinama.",
"LABEL_UPDATING": "Atnaujinama",
"LABEL_CHECKING": "Ieškau atnaujinimų",
"BUTTON_RELEASES": "Releases"

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Įjungti nuotolinį sinchronizavimą",
"LABEL_CONTACTS_SYNC_SERVER": "Serveris",
"LABEL_CONTACTS_SYNC_AB_URL": "Adresų knygos URL adresas",
"LABEL_CONTACTS_SYNC_USER": "Vartotojas"
"LABEL_CONTACTS_SYNC_USER": "Vartotojas",
"SYNC_NO": "Ne",
"SYNC_YES": "Taip",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Temos",

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Enable remote synchronization",
"LABEL_CONTACTS_SYNC_SERVER": "Server",
"LABEL_CONTACTS_SYNC_AB_URL": "Addressbook URL",
"LABEL_CONTACTS_SYNC_USER": "User"
"LABEL_CONTACTS_SYNC_USER": "User",
"SYNC_NO": "Nē",
"SYNC_YES": "Jā",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Tēmas",

View file

@ -104,7 +104,7 @@
"LABEL_ALL_RIGHTS_RESERVED": "All Rights Reserved.",
"HINT_READ_CHANGE_LOG": "Les endringslogg før du oppdaterer.",
"HINT_IS_UP_TO_DATE": "RainLoop er oppdatert.",
"HTML_NEW_VERSION": "Versjon <b>%VERSION%</b> er nå tilgjengelig.",
"HTML_NEW_VERSION": "Versjon <b>%VERSION%<\/b> er nå tilgjengelig.",
"LABEL_UPDATING": "Oppdaterer",
"LABEL_CHECKING": "Ser etter oppdateringer",
"BUTTON_RELEASES": "Releases"

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Slå på fjernstyrt synkronisering",
"LABEL_CONTACTS_SYNC_SERVER": "Tjener",
"LABEL_CONTACTS_SYNC_AB_URL": "Nettadresse til adressebok",
"LABEL_CONTACTS_SYNC_USER": "Bruker"
"LABEL_CONTACTS_SYNC_USER": "Bruker",
"SYNC_NO": "Nei",
"SYNC_YES": "Ja",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Tema",

View file

@ -104,7 +104,7 @@
"LABEL_ALL_RIGHTS_RESERVED": "Alle rechten voorbehouden.",
"HINT_READ_CHANGE_LOG": "Lees a.u.b. het veranderingen logboek alvorens te updaten.",
"HINT_IS_UP_TO_DATE": "De laatste versie van RainLoop is geïnstalleerd.",
"HTML_NEW_VERSION": "Een nieuwe versie <b>%VERSION%</b> is beschikbaar.",
"HTML_NEW_VERSION": "Een nieuwe versie <b>%VERSION%<\/b> is beschikbaar.",
"LABEL_UPDATING": "Bezig met updaten",
"LABEL_CHECKING": "Controleren op updates",
"BUTTON_RELEASES": "Releases"

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Server synchronisatie inschakelen",
"LABEL_CONTACTS_SYNC_SERVER": "Server",
"LABEL_CONTACTS_SYNC_AB_URL": "Adresboek URL",
"LABEL_CONTACTS_SYNC_USER": "Gebruikersnaam"
"LABEL_CONTACTS_SYNC_USER": "Gebruikersnaam",
"SYNC_NO": "Nee",
"SYNC_YES": "Ja",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Thema's",

View file

@ -104,7 +104,7 @@
"LABEL_ALL_RIGHTS_RESERVED": "Wszystkie prawa zastrzeżone.",
"HINT_READ_CHANGE_LOG": "Przed aktualizacją przeczytaj proszę listę zmian.",
"HINT_IS_UP_TO_DATE": "RainLoop jest aktualny.",
"HTML_NEW_VERSION": "Dostępna jest nowa wersja: <b>%VERSION%</b>.",
"HTML_NEW_VERSION": "Dostępna jest nowa wersja: <b>%VERSION%<\/b>.",
"LABEL_UPDATING": "Aktualizacja w toku...",
"LABEL_CHECKING": "Szukanie aktualizacji...",
"BUTTON_RELEASES": "Releases"

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Włącz zdalną synchronizację",
"LABEL_CONTACTS_SYNC_SERVER": "Serwer",
"LABEL_CONTACTS_SYNC_AB_URL": "URL książki adresowej",
"LABEL_CONTACTS_SYNC_USER": "Użytkownik"
"LABEL_CONTACTS_SYNC_USER": "Użytkownik",
"SYNC_NO": "Nie",
"SYNC_YES": "Tak",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Motywy",

View file

@ -104,7 +104,7 @@
"LABEL_ALL_RIGHTS_RESERVED": "Todos os direitos reservados.",
"HINT_READ_CHANGE_LOG": "Por favor, leia o registro de alterações antes de atualizar.",
"HINT_IS_UP_TO_DATE": "RainLoop está atualizado.",
"HTML_NEW_VERSION": "Está disponível uma nova versão: <b>%VERSION%</b>.",
"HTML_NEW_VERSION": "Está disponível uma nova versão: <b>%VERSION%<\/b>.",
"LABEL_UPDATING": "Atualizando",
"LABEL_CHECKING": "Checar por atualizações",
"BUTTON_RELEASES": "Releases"

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Habilitar sincronização remota",
"LABEL_CONTACTS_SYNC_SERVER": "Servidor",
"LABEL_CONTACTS_SYNC_AB_URL": "URL da lista de contatos",
"LABEL_CONTACTS_SYNC_USER": "Usuário"
"LABEL_CONTACTS_SYNC_USER": "Usuário",
"SYNC_NO": "Não",
"SYNC_YES": "Sim",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Temas",

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Ativar sincronização remota",
"LABEL_CONTACTS_SYNC_SERVER": "Servidor",
"LABEL_CONTACTS_SYNC_AB_URL": "URL do livro de endereços",
"LABEL_CONTACTS_SYNC_USER": "Utilizador"
"LABEL_CONTACTS_SYNC_USER": "Utilizador",
"SYNC_NO": "Não",
"SYNC_YES": "Sim",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Temas",

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Enable remote synchronization",
"LABEL_CONTACTS_SYNC_SERVER": "Server",
"LABEL_CONTACTS_SYNC_AB_URL": "Addressbook URL",
"LABEL_CONTACTS_SYNC_USER": "User"
"LABEL_CONTACTS_SYNC_USER": "User",
"SYNC_NO": "Nu",
"SYNC_YES": "Da",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Tematică",

View file

@ -104,7 +104,7 @@
"LABEL_ALL_RIGHTS_RESERVED": "Все права защищены.",
"HINT_READ_CHANGE_LOG": "Пожалуйста, ознакомьтесь с изменениями перед обновлением.\n",
"HINT_IS_UP_TO_DATE": "Версия RainLoop актуальна.",
"HTML_NEW_VERSION": "Новая <b>%VERSION%</b> версия доступна.",
"HTML_NEW_VERSION": "Новая <b>%VERSION%<\/b> версия доступна.",
"LABEL_UPDATING": "Обновление",
"LABEL_CHECKING": "Проверка",
"BUTTON_RELEASES": "Releases"

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Включить синхронизация",
"LABEL_CONTACTS_SYNC_SERVER": "Сервер",
"LABEL_CONTACTS_SYNC_AB_URL": "Адресная книга (URL)",
"LABEL_CONTACTS_SYNC_USER": "Пользователь"
"LABEL_CONTACTS_SYNC_USER": "Пользователь",
"SYNC_NO": "Нет",
"SYNC_YES": "Да",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Темы Оформления",

View file

@ -104,7 +104,7 @@
"LABEL_ALL_RIGHTS_RESERVED": "Všetky práva vyhradené.",
"HINT_READ_CHANGE_LOG": "Prosím prečítajte si zoznam zmien pred aktualizáciou.",
"HINT_IS_UP_TO_DATE": "RainLoop je aktuálny.",
"HTML_NEW_VERSION": "Dostupná nová <b>%VERSION%</b> verzia.",
"HTML_NEW_VERSION": "Dostupná nová <b>%VERSION%<\/b> verzia.",
"LABEL_UPDATING": "Aktualizujem",
"LABEL_CHECKING": "Kontrolujem aktualizácie",
"BUTTON_RELEASES": "Releases"

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Enable remote synchronization",
"LABEL_CONTACTS_SYNC_SERVER": "Server",
"LABEL_CONTACTS_SYNC_AB_URL": "Addressbook URL",
"LABEL_CONTACTS_SYNC_USER": "User"
"LABEL_CONTACTS_SYNC_USER": "User",
"SYNC_NO": "Nie",
"SYNC_YES": "Áno",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Motívy",

View file

@ -104,7 +104,7 @@
"LABEL_ALL_RIGHTS_RESERVED": "Vse pravice pridržane.",
"HINT_READ_CHANGE_LOG": "Preberite dnevnik sprememb pred posodobitvijo.",
"HINT_IS_UP_TO_DATE": "Ni novih posodobitev.",
"HTML_NEW_VERSION": "Na voljo je nova verzija <b>%VERSION%</b>.",
"HTML_NEW_VERSION": "Na voljo je nova verzija <b>%VERSION%<\/b>.",
"LABEL_UPDATING": "Posodabljanje",
"LABEL_CHECKING": "Preverjanje za posdodobitve",
"BUTTON_RELEASES": "Releases"

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Omogoči oddaljeno sinhronizacijo",
"LABEL_CONTACTS_SYNC_SERVER": "Strežnik",
"LABEL_CONTACTS_SYNC_AB_URL": "URL imenika",
"LABEL_CONTACTS_SYNC_USER": "Uporabnik"
"LABEL_CONTACTS_SYNC_USER": "Uporabnik",
"SYNC_NO": "Ne",
"SYNC_YES": "Da",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Teme",

View file

@ -104,7 +104,7 @@
"LABEL_ALL_RIGHTS_RESERVED": "Alla rättigheter förbehållna.",
"HINT_READ_CHANGE_LOG": "Vänligen läs ändringsloggen innan du uppdaterar.",
"HINT_IS_UP_TO_DATE": "RainLoop är aktuell.",
"HTML_NEW_VERSION": "Ny <b>%VERSION%</b> version är tillgänglig",
"HTML_NEW_VERSION": "Ny <b>%VERSION%<\/b> version är tillgänglig",
"LABEL_UPDATING": "Uppdaterar",
"LABEL_CHECKING": "Letar efter uppdaterar",
"BUTTON_RELEASES": "Releases"

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Aktivera fjärrsynkronisering",
"LABEL_CONTACTS_SYNC_SERVER": "Server",
"LABEL_CONTACTS_SYNC_AB_URL": "Adressboks-URL",
"LABEL_CONTACTS_SYNC_USER": "Användare"
"LABEL_CONTACTS_SYNC_USER": "Användare",
"SYNC_NO": "Nej",
"SYNC_YES": "Ja",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Teman",

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Uzaktan eşleştirme etkin",
"LABEL_CONTACTS_SYNC_SERVER": "Sunucu",
"LABEL_CONTACTS_SYNC_AB_URL": "Adres Defteri URL",
"LABEL_CONTACTS_SYNC_USER": "Kullanıcı Adı"
"LABEL_CONTACTS_SYNC_USER": "Kullanıcı Adı",
"SYNC_NO": "Hayır",
"SYNC_YES": "Evet",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Temalar",

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "Увімкнути синхронизацію",
"LABEL_CONTACTS_SYNC_SERVER": "Сервер",
"LABEL_CONTACTS_SYNC_AB_URL": "Адресна книга (URL)",
"LABEL_CONTACTS_SYNC_USER": "Користувач"
"LABEL_CONTACTS_SYNC_USER": "Користувач",
"SYNC_NO": "Ні",
"SYNC_YES": "Так",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "Теми Оформлення",

View file

@ -104,7 +104,7 @@
"LABEL_ALL_RIGHTS_RESERVED": "保留所有权利",
"HINT_READ_CHANGE_LOG": "请在更新前阅读更新日志",
"HINT_IS_UP_TO_DATE": "RainLoop已经是最新版本的",
"HTML_NEW_VERSION": "有新的<b>%VERSION%</b> 版本可用.",
"HTML_NEW_VERSION": "有新的<b>%VERSION%<\/b> 版本可用.",
"LABEL_UPDATING": "更新中",
"LABEL_CHECKING": "检查更新",
"BUTTON_RELEASES": "Releases"

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "启用远程同步",
"LABEL_CONTACTS_SYNC_SERVER": "服务器",
"LABEL_CONTACTS_SYNC_AB_URL": "地址簿 URL",
"LABEL_CONTACTS_SYNC_USER": "用户名"
"LABEL_CONTACTS_SYNC_USER": "用户名",
"SYNC_NO": "否",
"SYNC_YES": "是",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "主题",

View file

@ -404,7 +404,10 @@
"LABEL_CONTACTS_SYNC_ENABLE": "啟用遠程同步",
"LABEL_CONTACTS_SYNC_SERVER": "伺服器",
"LABEL_CONTACTS_SYNC_AB_URL": "地址簿URL",
"LABEL_CONTACTS_SYNC_USER": "用戶名"
"LABEL_CONTACTS_SYNC_USER": "用戶名",
"SYNC_NO": "否",
"SYNC_YES": "是",
"SYNC_READ": "Read only"
},
"SETTINGS_THEMES": {
"LEGEND_THEMES": "主題",

View file

@ -31,7 +31,7 @@
<span data-i18n="CONTACTS/BUTTON_EXPORT_VCARD"></span>
</a>
</li>
<li class="dividerbar" role="presentation" data-bind="visible: enableContactsSync() && allowContactsSync()">
<li class="dividerbar" role="presentation" data-bind="visible: contactsSyncEnabled">
<a href="#" tabindex="-1" data-bind="command: syncCommand">
<i class="fontastic" data-bind="css: {'icon-spinner': contacts.syncing}"></i>
<span data-i18n="CONTACTS/BUTTON_SYNC"></span>

View file

@ -13,35 +13,30 @@
<div class="form-horizontal" data-bind="visible: allowContactsSync">
<div class="legend" data-i18n="SETTINGS_CONTACTS/LEGEND_CONTACTS_SYNC"></div>
<div class="control-group">
<label data-i18n="SETTINGS_CONTACTS/LABEL_CONTACTS_SYNC_ENABLE"></label>
<div data-bind="component: {
name: 'Checkbox',
name: 'Select',
params: {
label: 'SETTINGS_CONTACTS/LABEL_CONTACTS_SYNC_ENABLE',
value: enableContactsSync
options: syncModeOptions,
value: syncMode,
optionsText: 'name',
optionsValue: 'id'
}
}"></div>
<!-- TODO: https://github.com/the-djmaze/snappymail/issues/293
<select>
<option value="0">No</option>
<option value="1">Yes, read + write</option>
<option value="2">Yes, read</option>
</select>
-->
</div>
<div class="control-group">
<label data-i18n="SETTINGS_CONTACTS/LABEL_CONTACTS_SYNC_AB_URL"></label>
<input type="text" class="input-xxlarge" autocomplete="off" autocorrect="off" autocapitalize="off"
spellcheck="false" data-bind="value: contactsSyncUrl" placeholder="https://">
spellcheck="false" data-bind="value: syncUrl" placeholder="https://">
</div>
<div class="control-group">
<label data-i18n="SETTINGS_CONTACTS/LABEL_CONTACTS_SYNC_USER"></label>
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: contactsSyncUser">
data-bind="value: syncUser">
</div>
<div class="control-group">
<label data-i18n="GLOBAL/PASSWORD"></label>
<input type="password" autocomplete="current-password" autocorrect="off" autocapitalize="off"
spellcheck="false" data-bind="value: contactsSyncPass">
spellcheck="false" data-bind="value: syncPass">
</div>
</div>