summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/kaddressbook/germantranslation.txt20
-rw-r--r--bin/kdepim/korganizer/germantranslation.txt22
-rw-r--r--korganizer/calendarview.cpp2
-rw-r--r--libkdepim/ksyncmanager.cpp97
-rw-r--r--libkdepim/ksyncmanager.h6
5 files changed, 125 insertions, 22 deletions
diff --git a/bin/kdepim/kaddressbook/germantranslation.txt b/bin/kdepim/kaddressbook/germantranslation.txt
index f64bfda..4a5122f 100644
--- a/bin/kdepim/kaddressbook/germantranslation.txt
+++ b/bin/kdepim/kaddressbook/germantranslation.txt
@@ -693,101 +693,121 @@
693{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" }, 693{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" },
694{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" }, 694{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" },
695{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" }, 695{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" },
696{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" }, 696{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" },
697{ "Time period","Zeitspanne" }, 697{ "Time period","Zeitspanne" },
698{ "From ","Von " }, 698{ "From ","Von " },
699{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " }, 699{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " },
700{ " weeks in the future "," Wochen in der Zukunft " }, 700{ " weeks in the future "," Wochen in der Zukunft " },
701{ "Profile kind specific settings","Profil Art abhängige Einstellungen" }, 701{ "Profile kind specific settings","Profil Art abhängige Einstellungen" },
702{ "Local temp file:","Lokale temp Datei:" }, 702{ "Local temp file:","Lokale temp Datei:" },
703{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" }, 703{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" },
704{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" }, 704{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" },
705{ "You cannot remove your standard resource!\n Please select a new standard resource first.","Standard Resource kann\nnicht entfernt werden!\nBitte eine andere Resource\nals Standard setzen." }, 705{ "You cannot remove your standard resource!\n Please select a new standard resource first.","Standard Resource kann\nnicht entfernt werden!\nBitte eine andere Resource\nals Standard setzen." },
706{ "Sorry","Tut mir leid" }, 706{ "Sorry","Tut mir leid" },
707{ "You cannot use a read-only<br> resource as standard!","Man kann nicht eine read-only<br> Resource als Standard setzen!" }, 707{ "You cannot use a read-only<br> resource as standard!","Man kann nicht eine read-only<br> Resource als Standard setzen!" },
708{ "Please restart to get the \nchanged resources (re)loaded!\n","Bitte starten Sie jetzt\ndas Programm neu, um die geänderten\nResourcen neu zu laden!\n" }, 708{ "Please restart to get the \nchanged resources (re)loaded!\n","Bitte starten Sie jetzt\ndas Programm neu, um die geänderten\nResourcen neu zu laden!\n" },
709{ "The selected file does not\ninclude a valid vCard.\nPlease check the file and try again.\n","Die gewählte Datei enthält\nkeine gültige vCard.\nBitte prüfen Sie die Datei\nund versuchen es erneut.\n" }, 709{ "The selected file does not\ninclude a valid vCard.\nPlease check the file and try again.\n","Die gewählte Datei enthält\nkeine gültige vCard.\nBitte prüfen Sie die Datei\nund versuchen es erneut.\n" },
710{ "Unable to load resource '%1'","Resource kann nicht geladen werden: '%1'" }, 710{ "Unable to load resource '%1'","Resource kann nicht geladen werden: '%1'" },
711{ "Some changes are only\neffective after a restart!\n","Einige Änderungen werden erst\nnach einem Neustart übernommen!\n" }, 711{ "Some changes are only\neffective after a restart!\n","Einige Änderungen werden erst\nnach einem Neustart übernommen!\n" },
712{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." }, 712{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." },
713{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." }, 713{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." },
714{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." }, 714{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." },
715{ "Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?","Verbindungsversuch wegen\nZeitüberschreitung gescheitert!\nWurde vergessen Pi-Sync auf\nder Gegenstelle anzuschalten?" }, 715{ "Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?","Verbindungsversuch wegen\nZeitüberschreitung gescheitert!\nWurde vergessen Pi-Sync auf\nder Gegenstelle anzuschalten?" },
716{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." }, 716{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." },
717{ "Error","Fehler" }, 717{ "Error","Fehler" },
718{ ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." }, 718{ ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." },
719{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." }, 719{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." },
720{ "Warning","Warnung" }, 720{ "Warning","Warnung" },
721{ "Select week number","Wähle Wochen Nummer" }, 721{ "Select week number","Wähle Wochen Nummer" },
722{ "Februar","Februar" }, 722{ "Februar","Februar" },
723{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " }, 723{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " },
724{ "Password for remote access:","Passwort für fernen Zugriff:" }, 724{ "Password for remote access:","Passwort für fernen Zugriff:" },
725{ "Remote IP address:","Ferne IP Adresse:" }, 725{ "Remote IP address:","Ferne IP Adresse:" },
726{ "Remote port number:","Ferne Port Nummer:" }, 726{ "Remote port number:","Ferne Port Nummer:" },
727{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." }, 727{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." },
728{ "Remote from: ","Fern von: " }, 728{ "Remote from: ","Fern von: " },
729{ "Local from: ","Lokal von: " }, 729{ "Local from: ","Lokal von: " },
730{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n","Synchronisationsübersicht:\n\n %d lokal hinzugefügt\n %d fern hinzugefügt\n %d lokal geändert\n %d fern geändert\n %d lokal gelöscht\n %d fern gelöscht\n %d eingehende ausgefiltert\n %d ausgehende ausgefiltert\n" }, 730{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n","Synchronisationsübersicht:\n\n %d lokal hinzugefügt\n %d fern hinzugefügt\n %d lokal geändert\n %d fern geändert\n %d lokal gelöscht\n %d fern gelöscht\n %d eingehende ausgefiltert\n %d ausgehende ausgefiltert\n" },
731{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" }, 731{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" },
732{ "Write back","Schreibe zurück" }, 732{ "Write back","Schreibe zurück" },
733{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" }, 733{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" },
734{ "Received sync request","Sync Anfrage erhalten" }, 734{ "Received sync request","Sync Anfrage erhalten" },
735{ "Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog.","Ferne Synchronisation ...\n\nBenutze diese Anwendung nicht!\n\nWenn das Syncen fehlschlägt kann\ndieser Dialog geschlossen werden." }, 735{ "Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog.","Ferne Synchronisation ...\n\nBenutze diese Anwendung nicht!\n\nWenn das Syncen fehlschlägt kann\ndieser Dialog geschlossen werden." },
736{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." }, 736{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." },
737{ "Data saved to temp file!","Daten in temp Datei gespeichert!" }, 737{ "Data saved to temp file!","Daten in temp Datei gespeichert!" },
738{ "Sending file...","Sende Datei..." }, 738{ "Sending file...","Sende Datei..." },
739{ "Waiting for synced file...","Warte auf gesyncte Daten..." }, 739{ "Waiting for synced file...","Warte auf gesyncte Daten..." },
740{ "Receiving synced file...","Gesyncte Daten erhalten..." }, 740{ "Receiving synced file...","Gesyncte Daten erhalten..." },
741{ "Received %1 bytes","%1 Bytes erhalten" }, 741{ "Received %1 bytes","%1 Bytes erhalten" },
742{ "Writing file to disk...","Speichere Datei..." }, 742{ "Writing file to disk...","Speichere Datei..." },
743{ "Pi-Sync successful!","Pi-Sync erfolgreich!" }, 743{ "Pi-Sync successful!","Pi-Sync erfolgreich!" },
744{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" }, 744{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" },
745{ "Synchronize!","Synchronisiere!" }, 745{ "Synchronize!","Synchronisiere!" },
746{ "High clock skew!","Großer Uhrzeitunterschied!" }, 746{ "High clock skew!","Großer Uhrzeitunterschied!" },
747{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" }, 747{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" },
748{ "The clocks of the syncing\ndevices have a difference\nof more than 5 minutes.\nPlease adjust your clocks.\nYou may get wrong syncing results!\nPlease confirm synchronization!","Die Uhren der syncenden Geräte\nhaben einen Unterschied von\nmehr als 5 Minuten. Bitte die\nUhrzeiten anpassen. Sie können\nfalsche Sync-Resultate erhalten!\nBitte das Syncen bestätigen!" }, 748{ "The clocks of the syncing\ndevices have a difference\nof more than 5 minutes.\nPlease adjust your clocks.\nYou may get wrong syncing results!\nPlease confirm synchronization!","Die Uhren der syncenden Geräte\nhaben einen Unterschied von\nmehr als 5 Minuten. Bitte die\nUhrzeiten anpassen. Sie können\nfalsche Sync-Resultate erhalten!\nBitte das Syncen bestätigen!" },
749{ "Change search field enable jump bar","Ändere Suchfeld um Jumpbar anzuzeigen" }, 749{ "Change search field enable jump bar","Ändere Suchfeld um Jumpbar anzuzeigen" },
750{ "Search with '*' prefix (wildcard)","Suche mit '*' Prefix (Wildcard)" }, 750{ "Search with '*' prefix (wildcard)","Suche mit '*' Prefix (Wildcard)" },
751{ "Shrink searchfield in portrait view","Verkleinere Suchfeld im Portraitmodus" }, 751{ "Shrink searchfield in portrait view","Verkleinere Suchfeld im Portraitmodus" },
752{ "Edit new contact","Bearbeite neuen Kontakt" }, 752{ "Edit new contact","Bearbeite neuen Kontakt" },
753{ "Edit ","Bearbeite " }, 753{ "Edit ","Bearbeite " },
754{ "No contact changed!","Kein Kontakt verändert" }, 754{ "No contact changed!","Kein Kontakt verändert" },
755{ "%1 contacts changed!","%1 Kontakte geändert!" }, 755{ "%1 contacts changed!","%1 Kontakte geändert!" },
756{ "Mobile (home)","Handy (Arbeit)" }, 756{ "Mobile (home)","Handy (Arbeit)" },
757{ "Mobile (work)","Handy (Privat)" }, 757{ "Mobile (work)","Handy (Privat)" },
758{ "Def.Formatted Name","Def. Format. Name" }, 758{ "Def.Formatted Name","Def. Format. Name" },
759{ "Colors","Farben" }, 759{ "Colors","Farben" },
760{ "Alternating background of list views","Abwechselnder Hintergrund für Listen" }, 760{ "Alternating background of list views","Abwechselnder Hintergrund für Listen" },
761{ "Backup enabled","Backup angeschaltet" }, 761{ "Backup enabled","Backup angeschaltet" },
762{ "Use standard backup dir","Standard Backupverzeichnis" }, 762{ "Use standard backup dir","Standard Backupverzeichnis" },
763{ "Number of Backups:","Anzahl der Backups" }, 763{ "Number of Backups:","Anzahl der Backups" },
764{ "Make backup every ","Mache ein Backup alle " }, 764{ "Make backup every ","Mache ein Backup alle " },
765{ " days"," Tage" }, 765{ " days"," Tage" },
766{ "Creating backup ... please wait ...","Erzeuge Backup ... bitte warten ..." }, 766{ "Creating backup ... please wait ...","Erzeuge Backup ... bitte warten ..." },
767{ "Backup Failed!","Backup Problem!" }, 767{ "Backup Failed!","Backup Problem!" },
768{ "Try again now","Versuche jetzt nochmal" }, 768{ "Try again now","Versuche jetzt nochmal" },
769{ "Try again later","Versuche später nochmal" }, 769{ "Try again later","Versuche später nochmal" },
770{ "Try again tomorrow","Versuche morgen nochmal" }, 770{ "Try again tomorrow","Versuche morgen nochmal" },
771{ "Disable backup","Schalte Backup ab" }, 771{ "Disable backup","Schalte Backup ab" },
772{ "<b>Backup directory does not exist: </b>","<b>Backup Verzeichnis existiert nicht: </b>" }, 772{ "<b>Backup directory does not exist: </b>","<b>Backup Verzeichnis existiert nicht: </b>" },
773{ "<b>The backup copy command failed!</b>","<b>Das Backup Kopierkommando is fehlgeschlagen!</b>" }, 773{ "<b>The backup copy command failed!</b>","<b>Das Backup Kopierkommando is fehlgeschlagen!</b>" },
774{ "Choose action","Wähle Aktion" }, 774{ "Choose action","Wähle Aktion" },
775{ "&Configure KA/Pi...","Konfiguriere KA/Pi..." }, 775{ "&Configure KA/Pi...","Konfiguriere KA/Pi..." },
776{ "Global Settings...","Globale Einstellungen..." }, 776{ "Global Settings...","Globale Einstellungen..." },
777{ "Spouse","Ehegatte" }, 777{ "Spouse","Ehegatte" },
778{ "Notes","Notizen" }, 778{ "Notes","Notizen" },
779{ "Messanger","Messanger" }, 779{ "Messanger","Messanger" },
780{ "Assistant","Assistent" }, 780{ "Assistant","Assistent" },
781{ "Manager","Manager" }, 781{ "Manager","Manager" },
782{ "Secrecy","Sichtbar" }, 782{ "Secrecy","Sichtbar" },
783{ "male","männlich" }, 783{ "male","männlich" },
784{ "female","weiblich" }, 784{ "female","weiblich" },
785{ "Hide!","Verbergen!" }, 785{ "Hide!","Verbergen!" },
786{ "Show!","Anzeigen!" }, 786{ "Show!","Anzeigen!" },
787{ "Details","Details" }, 787{ "Details","Details" },
788{ "Search:","Suche:" }, 788{ "Search:","Suche:" },
789{ "Automatically sync with KDE-Desktop\nwhen receiving sync request","Synce automatisch mit KDE-Desktop\nwenn eine Sync-Anforderung kommt" },
790{ "Pi-Sync Port Error","Pi-Sync Port Fehler" },
791{ "<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?","<b>Anschalten von Pi-Sync fehlgeschlagen!</b> Fehler beim Ansprechen des Ports %1! Ist bereits eine andere Anwendung dabei diesen Port zu nutzen?" },
792{ "No valid port number:\n%1","Keine gültige Port Nummer:\n%1" },
793{ "Port number (Default: %1)\nValid range from 1 to 65535","Port Nummer (Standard: %1)\nGültiger Bereich von 1 bis 65535" },
794{ "Pi-Sync Error","Pi-Sync Fehler" },
795{ "Got send file request\nwith invalid password","Erhielt "sende Datei" Anfrage\nmit ungültigem Passwort" },
796{ "Got receive file request\nwith invalid password","Erhielt "empfange Datei" Anfrage\nmit ungültigem Passwort" },
797{ "Wrong password: Receiving remote file failed.","Falsches Passwort: Empfangen von entfernter Datei fehlgeschlagen." },
798{ "Please close error dialog on remote.","Bitte schließe Fehler-Dialog am entfernten Rechner" },
799{ "Unknown error on remote.","Unbekannter Fehler am entfernten Rechner" },
800{ "Pi-Sync: Connected!","Pi-Sync: Verbunden!" },
801{ "Receiving file from remote...","Empfange entfernte Datei..." },
802{ "Sending back synced file...","Sende synchronisierte Datei zurück..." },
803{ "Do you want to\nclear all sync info\nof all profiles?","Möchten Sie wirklich\ndie Sync-Info\nfür alle Profile\nlöschen?" },
804{ "Do you want to\nclear the sync\ninfo of profile\n%1?\n","Möchten Sie wirklich\ndie Sync-Info für Profil\n%1?\nlöschen" },
805{ "Sorry, no valid port.Syncing cancelled.","Sorry, kein gültiger Port. Syncing abgebrochen." },
806{ "Remote port number:\n(May be: 1 - 65535)","Ferne Port Nummer:\n(Darf sein: 1 - 65535)" },
807{ "Writing back file ...","Schreibe Datei zurück..." },
808{ "Sending back file ...","Sende Datei zurück..." },
789{ "","" }, 809{ "","" },
790{ "","" }, 810{ "","" },
791{ "","" }, 811{ "","" },
792{ "","" }, 812{ "","" },
793{ "","" }, \ No newline at end of file 813{ "","" }, \ No newline at end of file
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt
index 34e9b7f..ff5e095 100644
--- a/bin/kdepim/korganizer/germantranslation.txt
+++ b/bin/kdepim/korganizer/germantranslation.txt
@@ -864,193 +864,192 @@
864{ "%1 %","%1 %" }, 864{ "%1 %","%1 %" },
865{ "Enable Pi-Sync","Schalte Pi-Sync an" }, 865{ "Enable Pi-Sync","Schalte Pi-Sync an" },
866{ "Import!","Importiere!" }, 866{ "Import!","Importiere!" },
867{ "inserting birthdays - close to abort!","Burzeltage werden eingefügt - schließe um abzubrechen!" }, 867{ "inserting birthdays - close to abort!","Burzeltage werden eingefügt - schließe um abzubrechen!" },
868{ "Export to phone options","Export ans Handy Optionen" }, 868{ "Export to phone options","Export ans Handy Optionen" },
869{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." }, 869{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." },
870{ "I/O device: ","I/O device: " }, 870{ "I/O device: ","I/O device: " },
871{ "Connection: ","Connection: " }, 871{ "Connection: ","Connection: " },
872{ "Model(opt.): ","Model(opt.): " }, 872{ "Model(opt.): ","Model(opt.): " },
873{ "Write back events in future only","Schreibe nur zukünftige Termine zurück" }, 873{ "Write back events in future only","Schreibe nur zukünftige Termine zurück" },
874{ "Max. weeks in future: ","Max. Wochen in der Zukunft: " }, 874{ "Max. weeks in future: ","Max. Wochen in der Zukunft: " },
875{ "NOTE: This will remove all old\ntodo/calendar data on phone!","ACHTUNG: Das löscht alle alten\nTodo/Kalender Daten auf dem Handy!" }, 875{ "NOTE: This will remove all old\ntodo/calendar data on phone!","ACHTUNG: Das löscht alle alten\nTodo/Kalender Daten auf dem Handy!" },
876{ "Export to mobile phone!","Exportiere auf das Handy!" }, 876{ "Export to mobile phone!","Exportiere auf das Handy!" },
877{ "Export complete calendar","Exportiere kompletten Kalender" }, 877{ "Export complete calendar","Exportiere kompletten Kalender" },
878{ "Writing to phone...","Sende Daten ans Handy..." }, 878{ "Writing to phone...","Sende Daten ans Handy..." },
879{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" }, 879{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" },
880{ "Retry","Nochmal versuchen" }, 880{ "Retry","Nochmal versuchen" },
881{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" }, 881{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" },
882{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" }, 882{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" },
883{ "Error exporting to phone!","Fehler beim Export auf das Handy!" }, 883{ "Error exporting to phone!","Fehler beim Export auf das Handy!" },
884{ "Export filtered calendar","Exportiere gefilterten Kalender" }, 884{ "Export filtered calendar","Exportiere gefilterten Kalender" },
885{ "Preferences","Vorlieben" }, 885{ "Preferences","Vorlieben" },
886{ "Global","Global" }, 886{ "Global","Global" },
887{ "Phone","Phone" }, 887{ "Phone","Phone" },
888{ "SMS","SMS" }, 888{ "SMS","SMS" },
889{ "Fax","Fax" }, 889{ "Fax","Fax" },
890{ "Pager","Pager" }, 890{ "Pager","Pager" },
891{ "SIP","SIP" }, 891{ "SIP","SIP" },
892{ "Italian","Italienisch" }, 892{ "Italian","Italienisch" },
893{ "24:00","24:00" }, 893{ "24:00","24:00" },
894{ "12:00am","12:00am" }, 894{ "12:00am","12:00am" },
895{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" }, 895{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" },
896{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" }, 896{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" },
897{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" }, 897{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" },
898{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" }, 898{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" },
899{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" }, 899{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" },
900{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" }, 900{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" },
901{ "Used Mail Client","Benutzter Mail Client" }, 901{ "Used Mail Client","Benutzter Mail Client" },
902{ "Channel:","Channel:" }, 902{ "Channel:","Channel:" },
903{ "Message:","Message:" }, 903{ "Message:","Message:" },
904{ "Parameters:","Parameter:" }, 904{ "Parameters:","Parameter:" },
905{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" }, 905{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" },
906{ "extra Message:","extra Message:" }, 906{ "extra Message:","extra Message:" },
907{ "extra Parameters:","extra Parameter:" }, 907{ "extra Parameters:","extra Parameter:" },
908{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" }, 908{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" },
909{ "External Apps.","Externe Appl." }, 909{ "External Apps.","Externe Appl." },
910{ "24 hours","24 Std." }, 910{ "24 hours","24 Std." },
911{ "3 hours","3 Std." }, 911{ "3 hours","3 Std." },
912{ "1 hour","1 Std." }, 912{ "1 hour","1 Std." },
913{ "15 minutes","15 Min." }, 913{ "15 minutes","15 Min." },
914{ "5 minutes","5 Min." }, 914{ "5 minutes","5 Min." },
915{ "1 minute","1 Min." }, 915{ "1 minute","1 Min." },
916{ "23","23" }, 916{ "23","23" },
917{ "Mon 15","Mon 15" }, 917{ "Mon 15","Mon 15" },
918{ "Configure KO","Konfiguriere KO" }, 918{ "Configure KO","Konfiguriere KO" },
919{ "Event text","Termin Text" }, 919{ "Event text","Termin Text" },
920{ "ToDo","Todo" }, 920{ "ToDo","Todo" },
921{ "Today","Heute" }, 921{ "Today","Heute" },
922{ "What's Next View","What's Next Ansicht" }, 922{ "What's Next View","What's Next Ansicht" },
923{ "Allday Agenda view shows todos","Ganztag Agenda zeigt Todos" }, 923{ "Allday Agenda view shows todos","Ganztag Agenda zeigt Todos" },
924{ "Alarm","Alarm" }, 924{ "Alarm","Alarm" },
925{ "Used %1 Client","Benutzter %1 Client" }, 925{ "Used %1 Client","Benutzter %1 Client" },
926{ "No email client installed","Kein Email Klient installiert" }, 926{ "No email client installed","Kein Email Klient installiert" },
927{ "Userdefined email client","Benutzerdef. Email Klient" }, 927{ "Userdefined email client","Benutzerdef. Email Klient" },
928{ "OM/Pi email client","OM/Pi Email Klient" }, 928{ "OM/Pi email client","OM/Pi Email Klient" },
929{ "Include in multiple ","Beziehe in multiple " }, 929{ "Include in multiple ","Beziehe in multiple " },
930{ "calendar ","Kalender " }, 930{ "calendar ","Kalender " },
931{ "addressbook ","Adressbuch " }, 931{ "addressbook ","Adressbuch " },
932{ "pwmanager","PWmanager" }, 932{ "pwmanager","PWmanager" },
933{ " sync"," Sync ein" }, 933{ " sync"," Sync ein" },
934{ "Write back synced data","Schreibe gesyncte Daten zurück" }, 934{ "Write back synced data","Schreibe gesyncte Daten zurück" },
935{ "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" }, 935{ "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" },
936{ "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" }, 936{ "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" },
937{ "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " }, 937{ "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " },
938{ "Pi-Sync ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync ( direktes Kx/Pi zu Kx/Pi sync )" }, 938{ "Pi-Sync ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync ( direktes Kx/Pi zu Kx/Pi sync )" },
939{ "Mobile device (cell phone)","Mobiles Gerät (Handy)" }, 939{ "Mobile device (cell phone)","Mobiles Gerät (Handy)" },
940{ "Help...","Hilfe..." }, 940{ "Help...","Hilfe..." },
941{ "Local file Cal:","Lokale Datei Kal:" }, 941{ "Local file Cal:","Lokale Datei Kal:" },
942{ "Local file ABook:","Lokale Datei ABuch:" }, 942{ "Local file ABook:","Lokale Datei ABuch:" },
943{ "Local file PWMgr:","Lokale Datei PWMgr:" }, 943{ "Local file PWMgr:","Lokale Datei PWMgr:" },
944{ "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" }, 944{ "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" },
945{ "Calendar:","Kalender:" }, 945{ "Calendar:","Kalender:" },
946{ "AddressBook:","AdressBuch:" }, 946{ "AddressBook:","AdressBuch:" },
947{ "PWManager:","PWManager:" }, 947{ "PWManager:","PWManager:" },
948{ "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" }, 948{ "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" },
949{ "ssh/scp","ssh/scp" }, 949{ "ssh/scp","ssh/scp" },
950{ "ftp","ftp" }, 950{ "ftp","ftp" },
951{ "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" }, 951{ "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" },
952{ "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" }, 952{ "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" },
953{ "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" }, 953{ "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" },
954{ "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" }, 954{ "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" },
955{ "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" }, 955{ "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" },
956{ "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" }, 956{ "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" },
957{ "KDE-Pim sync config","KDE-Pim sync Konfig" }, 957{ "KDE-Pim sync config","KDE-Pim sync Konfig" },
958{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" }, 958{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" },
959{ "Recommended: Leave empty!\n(Such that model can\nbe auto detected)\nOr insert name of model:\n","Empfohlen: Leer lassen!\n(So dass das Model\nautomatisch erkannt\nwerden kann)\nOder füge Model Name ein:\n" }, 959{ "Recommended: Leave empty!\n(Such that model can\nbe auto detected)\nOr insert name of model:\n","Empfohlen: Leer lassen!\n(So dass das Model\nautomatisch erkannt\nwerden kann)\nOder füge Model Name ein:\n" },
960{ "Port number (Default: %1)","Port Nummer (Default: %1)" },
961{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" }, 960{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" },
962{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" }, 961{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" },
963{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" }, 962{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" },
964{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" }, 963{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" },
965{ "Disable Pi-Sync","Schalte Pi-Sync aus" }, 964{ "Disable Pi-Sync","Schalte Pi-Sync aus" },
966{ "Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!","Wollen Sie wirklich\nmit allen selektierten\nProfilen "Multi-Syncen"?\nDas Syncen dauert einige Zeit -\nalle Profile werden zweimal gesynct!" }, 965{ "Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!","Wollen Sie wirklich\nmit allen selektierten\nProfilen "Multi-Syncen"?\nDas Syncen dauert einige Zeit -\nalle Profile werden zweimal gesynct!" },
967{ "KDE-Pim Sync","KDE-Pim Sync" }, 966{ "KDE-Pim Sync","KDE-Pim Sync" },
968{ "Multiple profiles","Multi-Sync Profile" }, 967{ "Multiple profiles","Multi-Sync Profile" },
969{ "Device: ","Gerät: " }, 968{ "Device: ","Gerät: " },
970{ "Multiple sync started.","Multi-Sync gestartet." }, 969{ "Multiple sync started.","Multi-Sync gestartet." },
971{ "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile\nselektiert für Multi-Sync" }, 970{ "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile\nselektiert für Multi-Sync" },
972{ "Turn filter on","Schalte Filter an" }, 971{ "Turn filter on","Schalte Filter an" },
973{ "Turn filter off","Schalte Filter aus" }, 972{ "Turn filter off","Schalte Filter aus" },
974{ "Key bindings KOrganizer/Pi","Tastatur Belegung KOrganizer/Pi" }, 973{ "Key bindings KOrganizer/Pi","Tastatur Belegung KOrganizer/Pi" },
975{ "<p><b>White</b>: Item readonly</p>\n","<p><b>Weiss</b>: Eintrag schreibgeschützt</p>\n" }, 974{ "<p><b>White</b>: Item readonly</p>\n","<p><b>Weiss</b>: Eintrag schreibgeschützt</p>\n" },
976{ "<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n","<p><b>Dunkelgelb</b>: Termin/Todo mit Teilnehmern.</p>\n" }, 975{ "<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n","<p><b>Dunkelgelb</b>: Termin/Todo mit Teilnehmern.</p>\n" },
977{ "<p><b>Black</b>: Event/todo with attendees. You are the organizer!</p>\n","<p><b>Schwarz</b>: Termin/Todo mit Teilnehmern. Sie sind der Organisator!</p>\n" }, 976{ "<p><b>Black</b>: Event/todo with attendees. You are the organizer!</p>\n","<p><b>Schwarz</b>: Termin/Todo mit Teilnehmern. Sie sind der Organisator!</p>\n" },
978{ "<p><b>Dark green</b>: Information(description) available.([i] in WN view)</p>\n","<p><b>Dunkelgrün</b>: Information(Beschreibung) verfügbar.([i] in WN Ansicht)</p>\n" }, 977{ "<p><b>Dark green</b>: Information(description) available.([i] in WN view)</p>\n","<p><b>Dunkelgrün</b>: Information(Beschreibung) verfügbar.([i] in WN Ansicht)</p>\n" },
979{ "<p><b>Blue</b>: Recurrent event.([r] in Whats'Next view)</p>\n","<p><b>Blau</b>: Wiederholender Termin.([r] in Whats'Next Ansicht)</p>\n" }, 978{ "<p><b>Blue</b>: Recurrent event.([r] in Whats'Next view)</p>\n","<p><b>Blau</b>: Wiederholender Termin.([r] in Whats'Next Ansicht)</p>\n" },
980{ "<p><b>Red</b>: Alarm set.([a] in Whats'Next view)</p>\n","<p><b>Rot</b>: Alarm gesetzt.([a] in Whats'Next Ansicht)</p>\n" }, 979{ "<p><b>Red</b>: Alarm set.([a] in Whats'Next view)</p>\n","<p><b>Rot</b>: Alarm gesetzt.([a] in Whats'Next Ansicht)</p>\n" },
981{ "<p><b>Cross</b>: Item cancelled.([c] in Whats'Next view)</p>\n","<p><b>Kreuz</b>: Eintrag gecancelt.([c] in Whats'Next Ansicht)</p>\n" }, 980{ "<p><b>Cross</b>: Item cancelled.([c] in Whats'Next view)</p>\n","<p><b>Kreuz</b>: Eintrag gecancelt.([c] in Whats'Next Ansicht)</p>\n" },
982{ "<p><b>(for square icons in agenda and month view)</b></p>\n","<p><b>(für quadratische Icons in Agenda und Monats Ansicht)</b></p>\n" }, 981{ "<p><b>(for square icons in agenda and month view)</b></p>\n","<p><b>(für quadratische Icons in Agenda und Monats Ansicht)</b></p>\n" },
983{ "<p><h2>KO/Pi icon colors:</h2></p>\n","<p><h2>KO/Pi Icon Farben:</h2></p>\n" }, 982{ "<p><h2>KO/Pi icon colors:</h2></p>\n","<p><h2>KO/Pi Icon Farben:</h2></p>\n" },
984{ "<p><b>E</b>: Edit item</p>\n","<p><b>E</b>: Editiere Eintrag</p>\n" }, 983{ "<p><b>E</b>: Edit item</p>\n","<p><b>E</b>: Editiere Eintrag</p>\n" },
985{ "<p><b>A</b>: Show agenda view.</p>\n","<p><b>A</b>: Zeige Agenda Ansicht.</p>\n" }, 984{ "<p><b>A</b>: Show agenda view.</p>\n","<p><b>A</b>: Zeige Agenda Ansicht.</p>\n" },
986{ "<p><b>I,C</b>: Close dialog.</p>\n","<p><b>I,C</b>: Schließe Dialog.</p>\n" }, 985{ "<p><b>I,C</b>: Close dialog.</p>\n","<p><b>I,C</b>: Schließe Dialog.</p>\n" },
987{ "<p><h3>In event/todo viewer:</h3></p>\n","<p><h3>In Termin/Todo Detail-Anzeige:</h3></p>\n" }, 986{ "<p><h3>In event/todo viewer:</h3></p>\n","<p><h3>In Termin/Todo Detail-Anzeige:</h3></p>\n" },
988{ "<p><b>shift+up/down</b>: Goto first/last item</p>\n","<p><b>shift+up/down</b>: Gehe zum ersten/letzten Eintrag</p>\n" }, 987{ "<p><b>shift+up/down</b>: Goto first/last item</p>\n","<p><b>shift+up/down</b>: Gehe zum ersten/letzten Eintrag</p>\n" },
989{ "<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n","<p><b>ctrl+up/down</b>: Gehe hoch/runter 20% aller Einträge</p>\n" }, 988{ "<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n","<p><b>ctrl+up/down</b>: Gehe hoch/runter 20% aller Einträge</p>\n" },
990{ "<p><b>up/down</b>: Next/prev item</p>\n","<p><b>up/down</b>: Nächster/vorheriger Eintrag</p>\n" }, 989{ "<p><b>up/down</b>: Next/prev item</p>\n","<p><b>up/down</b>: Nächster/vorheriger Eintrag</p>\n" },
991{ "<p><b>return+shift</b>: Deselect item+one step down</p>\n","<p><b>return+shift</b>: Deselektiere Item+Cursor einen Eintrag runter</p>\n" }, 990{ "<p><b>return+shift</b>: Deselect item+one step down</p>\n","<p><b>return+shift</b>: Deselektiere Item+Cursor einen Eintrag runter</p>\n" },
992{ "<p><b>return</b>: Select item+one step down</p>\n","<p><b>return</b>: Selektiere Item+Cursor einen Eintrag runter</p>\n" }, 991{ "<p><b>return</b>: Select item+one step down</p>\n","<p><b>return</b>: Selektiere Item+Cursor einen Eintrag runter</p>\n" },
993{ "<p><b>I</b>: Show info of current item+one step down.</p>\n","<p><b>I</b>: Zeige Detail-Ansicht vom sel.Eintrag+Cursor einen Eintrag runter.</p>\n" }, 992{ "<p><b>I</b>: Show info of current item+one step down.</p>\n","<p><b>I</b>: Zeige Detail-Ansicht vom sel.Eintrag+Cursor einen Eintrag runter.</p>\n" },
994{ "<p><h3>In list view:</h3></p>\n","<p><h3>In Listen Ansicht:</h3></p>\n" }, 993{ "<p><h3>In list view:</h3></p>\n","<p><h3>In Listen Ansicht:</h3></p>\n" },
995{ "<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n","<p><b>return+shift</b>: Markiere Todo als nicht erledigt+Cursor einen Eintrag runter</p>\n" }, 994{ "<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n","<p><b>return+shift</b>: Markiere Todo als nicht erledigt+Cursor einen Eintrag runter</p>\n" },
996{ "<p><b>return</b>: Mark item as completed+one step down.</p>\n","<p><b>return</b>: Markiere Todo als erledigt+Cursor einen Eintrag runter.</p>\n" }, 995{ "<p><b>return</b>: Mark item as completed+one step down.</p>\n","<p><b>return</b>: Markiere Todo als erledigt+Cursor einen Eintrag runter.</p>\n" },
997{ "<p><b>Q</b>: Toggle quick todo line edit.</p>\n","<p><b>Q</b>: Zeige/verstecke Quick Todo Eingabe Zeile.</p>\n" }, 996{ "<p><b>Q</b>: Toggle quick todo line edit.</p>\n","<p><b>Q</b>: Zeige/verstecke Quick Todo Eingabe Zeile.</p>\n" },
998{ "<p><b>shift+P</b>: Make new <b>P</b>arent for todo selected with shift+S</p>\n","<p><b>shift+P</b>: Mache Todo zum neuen <b>P</b>arent Todo für das Todo, welches mit shift+Sselektiert wurde.</p>\n" }, 997{ "<p><b>shift+P</b>: Make new <b>P</b>arent for todo selected with shift+S</p>\n","<p><b>shift+P</b>: Mache Todo zum neuen <b>P</b>arent Todo für das Todo, welches mit shift+Sselektiert wurde.</p>\n" },
999{ "<p><b>shift+S</b>: Make <b>S</b>ubtodo (reparent todo)</p>\n","<p><b>shift+S</b>: Mache Todo zum <b>S</b>ubtodo</p>\n" }, 998{ "<p><b>shift+S</b>: Make <b>S</b>ubtodo (reparent todo)</p>\n","<p><b>shift+S</b>: Mache Todo zum <b>S</b>ubtodo</p>\n" },
1000{ "<p><b>shift+U</b>: <b>U</b>nparent todo (make root todo)</p>\n","<p><b>shift+U</b>: <b>U</b>nparent Todo (Mache Sub-Todo zum Toplevel Todo)</p>\n" }, 999{ "<p><b>shift+U</b>: <b>U</b>nparent todo (make root todo)</p>\n","<p><b>shift+U</b>: <b>U</b>nparent Todo (Mache Sub-Todo zum Toplevel Todo)</p>\n" },
1001{ "<p><h3>In todo view:</h3></p>\n","<p><h3>In Todo Anzige:</h3></p>\n" }, 1000{ "<p><h3>In todo view:</h3></p>\n","<p><h3>In Todo Anzige:</h3></p>\n" },
1002{ "<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n","<p><b>ctrl+up/down</b>: Scrolle kleine Todo Ansicht</p>\n" }, 1001{ "<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n","<p><b>ctrl+up/down</b>: Scrolle kleine Todo Ansicht</p>\n" },
1003{ "<p><b>up/down</b>: Scroll agenda view</p>\n","<p><b>up/down</b>: Scrolle Agenda Ansicht</p>\n" }, 1002{ "<p><b>up/down</b>: Scroll agenda view</p>\n","<p><b>up/down</b>: Scrolle Agenda Ansicht</p>\n" },
1004{ "<p><h3>In agenda view:</h3></p>\n","<p><h3>In Agenda Ansicht:</h3></p>\n" }, 1003{ "<p><h3>In agenda view:</h3></p>\n","<p><h3>In Agenda Ansicht:</h3></p>\n" },
1005{ "<p><b>del,backspace</b>: Delete selected item</p>\n","<p><b>del,backspace</b>: Lösche selektiertes Item</p>\n" }, 1004{ "<p><b>del,backspace</b>: Delete selected item</p>\n","<p><b>del,backspace</b>: Lösche selektiertes Item</p>\n" },
1006{ "<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n","<p><b>left</b>: Vorh. Woche | <b>left+ctrl</b>: Vorh. Monat</p>\n" }, 1005{ "<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n","<p><b>left</b>: Vorh. Woche | <b>left+ctrl</b>: Vorh. Monat</p>\n" },
1007{ "<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n","<p><b>right</b>: Nächste Woche | <b>right+ctrl</b>: Nächste Woche</p>\n" }, 1006{ "<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n","<p><b>right</b>: Nächste Woche | <b>right+ctrl</b>: Nächste Woche</p>\n" },
1008{ "<p><b>B</b>: Edit description (details) of selected item</p>\n","<p><b>B</b>: Editiere Beschreibung (Details) des selektierten Items</p>\n" }, 1007{ "<p><b>B</b>: Edit description (details) of selected item</p>\n","<p><b>B</b>: Editiere Beschreibung (Details) des selektierten Items</p>\n" },
1009{ "<p><b>C</b>: Show current time in agenda view</p>\n","<p><b>C</b>: Zeige aktuelle Zeit in Agenda Ansicht</p>\n" }, 1008{ "<p><b>C</b>: Show current time in agenda view</p>\n","<p><b>C</b>: Zeige aktuelle Zeit in Agenda Ansicht</p>\n" },
1010{ "<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n","<p><b>+,-</b> : Zoom rein/raus Agenda | <b>A</b>: Wechsle Ganztag Agenda Höhe</p>\n" }, 1009{ "<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n","<p><b>+,-</b> : Zoom rein/raus Agenda | <b>A</b>: Wechsle Ganztag Agenda Höhe</p>\n" },
1011{ "<p><b>S+ctrl</b>: Add sub-todo | <b>X+ctrl</b>: Toggle datenavigator</p>\n","<p><b>S+ctrl</b>: Füge Sub-Todo hinzu | <b>X+ctrl</b>: Zeige/verstecke Datumsnavigator</p>\n" }, 1010{ "<p><b>S+ctrl</b>: Add sub-todo | <b>X+ctrl</b>: Toggle datenavigator</p>\n","<p><b>S+ctrl</b>: Füge Sub-Todo hinzu | <b>X+ctrl</b>: Zeige/verstecke Datumsnavigator</p>\n" },
1012{ "<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n","<p><b>T</b>: Gehe zu Heute | <b>T+ctrl</b>: Neues Todo</p>\n" }, 1011{ "<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n","<p><b>T</b>: Gehe zu Heute | <b>T+ctrl</b>: Neues Todo</p>\n" },
1013{ "<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n","<p><b>E</b>: Editiere selektiertes Item |<b> E+ctrl</b>: Neuer Termin</p>\n" }, 1012{ "<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n","<p><b>E</b>: Editiere selektiertes Item |<b> E+ctrl</b>: Neuer Termin</p>\n" },
1014{ "<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n","<p><b>D</b>: Ein-Tages Ansicht | <b>M</b>: Monatsansicht</p>\n" }, 1013{ "<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n","<p><b>D</b>: Ein-Tages Ansicht | <b>M</b>: Monatsansicht</p>\n" },
1015{ "<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n","<p><b>Z,Y</b>: Arbeitswochenansicht | <b>U</b>: Wochenansicht</p>\n" }, 1014{ "<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n","<p><b>Z,Y</b>: Arbeitswochenansicht | <b>U</b>: Wochenansicht</p>\n" },
1016{ "<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n","<p><b>V</b>: Todo Ansicht | <b>L</b>: Termin Listen Ansicht</p>\n" }, 1015{ "<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n","<p><b>V</b>: Todo Ansicht | <b>L</b>: Termin Listen Ansicht</p>\n" },
1017{ "<p><b>X</b>: Next X days view| <b>W</b>: What's next view\n ","<p><b>X</b>: Nächste-X-Tage Ansicht | <b>W</b>: What's Next Ansicht\n " }, 1016{ "<p><b>X</b>: Next X days view| <b>W</b>: What's next view\n ","<p><b>X</b>: Nächste-X-Tage Ansicht | <b>W</b>: What's Next Ansicht\n " },
1018{ "<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n","<p><b>1-0</b> (+<b>ctrl</b>): Selektiere Filter 1-10 (11-20)</p>\n" }, 1017{ "<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n","<p><b>1-0</b> (+<b>ctrl</b>): Selektiere Filter 1-10 (11-20)</p>\n" },
1019{ "<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n","<p><b>O</b>: Filter An/Aus | <b>J</b>: Journal Ansicht</p>\n" }, 1018{ "<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n","<p><b>O</b>: Filter An/Aus | <b>J</b>: Journal Ansicht</p>\n" },
1020{ "<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n","<p><b>Space</b>: Zeige fullscreen | <b>P</b>: Datums Picker</p>\n" }, 1019{ "<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n","<p><b>Space</b>: Zeige fullscreen | <b>P</b>: Datums Picker</p>\n" },
1021{ "<p><b>I</b>: Show info for selected event/todo</p>\n","<p><b>I</b>: Zeige Info (Details) für selektiertes Item</p>\n" }, 1020{ "<p><b>I</b>: Show info for selected event/todo</p>\n","<p><b>I</b>: Zeige Info (Details) für selektiertes Item</p>\n" },
1022{ "<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n","<p><b>H</b>: Dieser Hilfe Dialog | <b>S</b>: Such Dialog</p>\n" }, 1021{ "<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n","<p><b>H</b>: Dieser Hilfe Dialog | <b>S</b>: Such Dialog</p>\n" },
1023{ "<p><h2>KO/Pi key shortcuts:</h2></p>\n","<p><h2>KO/Pi Tastatur Kurzbefehle:</h2></p>\n" }, 1022{ "<p><h2>KO/Pi key shortcuts:</h2></p>\n","<p><h2>KO/Pi Tastatur Kurzbefehle:</h2></p>\n" },
1024{ "After changing something, the data is\nautomatically saved to the file\n~/kdepim/apps/korganizer/mycalendar.ics\nafter (configurable) three minutes.\nFor safety reasons there is one autosaving\nafter 10 minutes (of idle time) again. The \ndata is saved automatically when closing KO/Pi\nYou can create a backup file \nwith: File - Save Calendar Backup\n","Nachdem etwas geändert wurde, werden die\nDaten automatisch in die Datei abgespeichert\n~/kdepim/apps/korganizer/mycalendar.ics\nnach (konfigurierbar) drei Minuten.\nAus Sicherheitsgründen wird noch einmal\nnach 10 Min. abgespeichert, wenn keine\nÄnderungen vorgenommen wurden. Die \nDaten werden automatisch gespeichert,\nwenn KO/Pi beendet wird.\nSie können eine Backup-Datei erstellen im\nMenu: Datei - Speichere Kalender Backup\n" }, 1023{ "After changing something, the data is\nautomatically saved to the file\n~/kdepim/apps/korganizer/mycalendar.ics\nafter (configurable) three minutes.\nFor safety reasons there is one autosaving\nafter 10 minutes (of idle time) again. The \ndata is saved automatically when closing KO/Pi\nYou can create a backup file \nwith: File - Save Calendar Backup\n","Nachdem etwas geändert wurde, werden die\nDaten automatisch in die Datei abgespeichert\n~/kdepim/apps/korganizer/mycalendar.ics\nnach (konfigurierbar) drei Minuten.\nAus Sicherheitsgründen wird noch einmal\nnach 10 Min. abgespeichert, wenn keine\nÄnderungen vorgenommen wurden. Die \nDaten werden automatisch gespeichert,\nwenn KO/Pi beendet wird.\nSie können eine Backup-Datei erstellen im\nMenu: Datei - Speichere Kalender Backup\n" },
1025{ "Auto Saving in KOrganizer/Pi","Auto Speichern in KOrganizer/Pi" }, 1024{ "Auto Saving in KOrganizer/Pi","Auto Speichern in KOrganizer/Pi" },
1026{ "\nhttp://sourceforge.net/projects/kdepimpi\n","\nhttp://sourceforge.net/projects/kdepimpi\n" }, 1025{ "\nhttp://sourceforge.net/projects/kdepimpi\n","\nhttp://sourceforge.net/projects/kdepimpi\n" },
1027{ "\nor report them in the bugtracker on\n","\noder trage sie in dem Bugtracker ein auf\n" }, 1026{ "\nor report them in the bugtracker on\n","\noder trage sie in dem Bugtracker ein auf\n" },
1028{ "\nPlease report unexpected behaviour to\nlutz@pi-sync.info\n","\nBitte melde fehlerhaftes Verhalten an\nlutz@pi-sync.info\n" }, 1027{ "\nPlease report unexpected behaviour to\nlutz@pi-sync.info\n","\nBitte melde fehlerhaftes Verhalten an\nlutz@pi-sync.info\n" },
1029{ "2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n","2) Ein Audio Alarm Daemon\nfür den Zaurus ist verfügbar\nals zusätzliche Anwendung\n" }, 1028{ "2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n","2) Ein Audio Alarm Daemon\nfür den Zaurus ist verfügbar\nals zusätzliche Anwendung\n" },
1030{ "1) Importing *.vcs or *.ics files from\nother applications may not work properly,\nif there are events with properties\nKO/Pi does not support.\n","1) Importieren von *.vcs oder *.ics Dateien von\nanderen Anwendungen kann möglicherweise\n nicht richtig funktionieren,\nwenn die Termine Eigenschaften haben,\ndie KO/Pi nicht unterstützt.\n" }, 1029{ "1) Importing *.vcs or *.ics files from\nother applications may not work properly,\nif there are events with properties\nKO/Pi does not support.\n","1) Importieren von *.vcs oder *.ics Dateien von\nanderen Anwendungen kann möglicherweise\n nicht richtig funktionieren,\nwenn die Termine Eigenschaften haben,\ndie KO/Pi nicht unterstützt.\n" },
1031{ "Known Problems in KOrganizer/Pi","Bekannte Probleme in KOrganizer/Pi" }, 1030{ "Known Problems in KOrganizer/Pi","Bekannte Probleme in KOrganizer/Pi" },
1032{ "KO/Pi FAQ","KO/Pi FAQ" }, 1031{ "KO/Pi FAQ","KO/Pi FAQ" },
1033{ "PDA-Edition\nfor: Zaurus 5x00/7x0/860/3000/6000\n","PDA-Edition\nfür: Zaurus 5x00/7x0/860/3000/6000\n" }, 1032{ "PDA-Edition\nfor: Zaurus 5x00/7x0/860/3000/6000\n","PDA-Edition\nfür: Zaurus 5x00/7x0/860/3000/6000\n" },
1034{ "KOrganizer/Platform-independent\n","KOrganizer/Platform-independent\n" }, 1033{ "KOrganizer/Platform-independent\n","KOrganizer/Platform-independent\n" },
1035{ "About KOrganizer/Pi","Über KOrganizer/Pi" }, 1034{ "About KOrganizer/Pi","Über KOrganizer/Pi" },
1036{ "From: ","Von: " }, 1035{ "From: ","Von: " },
1037{ "Remove sync info","Entferne Sync Info" }, 1036{ "Remove sync info","Entferne Sync Info" },
1038{ "For all profiles","Für alle Profile" }, 1037{ "For all profiles","Für alle Profile" },
1039{ "Hide not Running","Verstecke nicht Laufende" }, 1038{ "Hide not Running","Verstecke nicht Laufende" },
1040{ "ME","ME" }, 1039{ "ME","ME" },
1041{ "Toolbar","Toolbar" }, 1040{ "Toolbar","Toolbar" },
1042{ "Undo Delete...","UNDO Löschen..." }, 1041{ "Undo Delete...","UNDO Löschen..." },
1043{ "Undo Delete","Löschen rückgängig machen" }, 1042{ "Undo Delete","Löschen rückgängig machen" },
1044{ "KDE Sync HowTo...","KDE Sync HowTo..." }, 1043{ "KDE Sync HowTo...","KDE Sync HowTo..." },
1045{ "Multi Sync HowTo...","Multi Sync HowTo..." }, 1044{ "Multi Sync HowTo...","Multi Sync HowTo..." },
1046{ "Januar","Januar" }, 1045{ "Januar","Januar" },
1047{ "KO/Pi Keys + Colors","KO/Pi Tasten + Farben" }, 1046{ "KO/Pi Keys + Colors","KO/Pi Tasten + Farben" },
1048{ "No Filter","Kein Filter" }, 1047{ "No Filter","Kein Filter" },
1049{ "Multiple Sync options","Multi Sync Optionen" }, 1048{ "Multiple Sync options","Multi Sync Optionen" },
1050{ "Sync algo options","Sync Ablauf Optionen" }, 1049{ "Sync algo options","Sync Ablauf Optionen" },
1051{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" }, 1050{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" },
1052{ "Incoming calendar filter:","Eingehender Kalender Filter:" }, 1051{ "Incoming calendar filter:","Eingehender Kalender Filter:" },
1053{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" }, 1052{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" },
1054{ "Write back options","Optionen zum Zurückschreiben" }, 1053{ "Write back options","Optionen zum Zurückschreiben" },
1055{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" }, 1054{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" },
1056{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" }, 1055{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" },
@@ -1413,105 +1412,124 @@
1413{ "Sorry, the file \n%1\nis already loaded!\nPlease choose another file!","Sorry, die Datei \n%1\nist schon geladen!\nBitte wählen Sie eine andere!" }, 1412{ "Sorry, the file \n%1\nis already loaded!\nPlease choose another file!","Sorry, die Datei \n%1\nist schon geladen!\nBitte wählen Sie eine andere!" },
1414{ "Choose Color","Wähle Farbe" }, 1413{ "Choose Color","Wähle Farbe" },
1415{ " OK "," OK " }, 1414{ " OK "," OK " },
1416{ " Cancel "," Abbrechen " }, 1415{ " Cancel "," Abbrechen " },
1417{ "Matching items will be added to list","Passende werden zur Liste hinzugefügt" }, 1416{ "Matching items will be added to list","Passende werden zur Liste hinzugefügt" },
1418{ "Matching items will be removed from list","Passende werden von der Liste entfernt" }, 1417{ "Matching items will be removed from list","Passende werden von der Liste entfernt" },
1419{ "Search on displayed list only","Suche auf der dargestellten Liste" }, 1418{ "Search on displayed list only","Suche auf der dargestellten Liste" },
1420{ "List will be cleared before search","Liste wird vor der Suche gelöscht" }, 1419{ "List will be cleared before search","Liste wird vor der Suche gelöscht" },
1421{ "<center>%1</center> <center>is not running. Do you want to set\nthe state to running?</center>","<center>%1</center> <center>ist nicht am Laufen. Möchten Sie den Zustand auf "laufend" setzen?</center>" }, 1420{ "<center>%1</center> <center>is not running. Do you want to set\nthe state to running?</center>","<center>%1</center> <center>ist nicht am Laufen. Möchten Sie den Zustand auf "laufend" setzen?</center>" },
1422{ "%1\nis running!","%1\nist am Laufen!" }, 1421{ "%1\nis running!","%1\nist am Laufen!" },
1423{ "Additional Comment:","Zusätzlicher Kommentar:" }, 1422{ "Additional Comment:","Zusätzlicher Kommentar:" },
1424{ "Stop and save","Stopp und Speichern" }, 1423{ "Stop and save","Stopp und Speichern" },
1425{ "Continue running","Weiter laufen lassen" }, 1424{ "Continue running","Weiter laufen lassen" },
1426{ "Stop - do not save","Stopp - nicht Speichern" }, 1425{ "Stop - do not save","Stopp - nicht Speichern" },
1427{ "Do you really want to set\nthe state to stopped\nwithout saving the data?","Möchten sie den Zustand\nwirklich auf gestoppt setzen\nohne die Daten abzuspeichern?" }, 1426{ "Do you really want to set\nthe state to stopped\nwithout saving the data?","Möchten sie den Zustand\nwirklich auf gestoppt setzen\nohne die Daten abzuspeichern?" },
1428{ "Time mismatch!","Zeiten stimmen nicht!" }, 1427{ "Time mismatch!","Zeiten stimmen nicht!" },
1429{ "The start time is\nafter the end time!","Die Startzeit ist\nhinter der Endzeit!" }, 1428{ "The start time is\nafter the end time!","Die Startzeit ist\nhinter der Endzeit!" },
1430{ "Yes, stop todo","Ja, stoppe Todo" }, 1429{ "Yes, stop todo","Ja, stoppe Todo" },
1431{ "Todo stopped - no data saved because runtime was < 15 sec!","Todo gestoppt - nichts gespeichert da Laufzeit < 15 sec!" }, 1430{ "Todo stopped - no data saved because runtime was < 15 sec!","Todo gestoppt - nichts gespeichert da Laufzeit < 15 sec!" },
1432{ "Todo started! Double click again to stop!","Todo gestartet! Doppelklicke um es zu stoppen!" }, 1431{ "Todo started! Double click again to stop!","Todo gestartet! Doppelklicke um es zu stoppen!" },
1433{ "Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.","Bitte wählen Sie den <b>Default-Kalender</b> in dieser Spalte. Neu angelegte oder importierte Einträge werden dem Default-Kalender hinzugefügt." }, 1432{ "Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.","Bitte wählen Sie den <b>Default-Kalender</b> in dieser Spalte. Neu angelegte oder importierte Einträge werden dem Default-Kalender hinzugefügt." },
1434{ "Spouse","Ehegatte" }, 1433{ "Spouse","Ehegatte" },
1435{ "Notes","Notizen" }, 1434{ "Notes","Notizen" },
1436{ "Messanger","Messanger" }, 1435{ "Messanger","Messanger" },
1437{ "Assistant","Assistent" }, 1436{ "Assistant","Assistent" },
1438{ "Manager","Manager" }, 1437{ "Manager","Manager" },
1439{ "Secrecy","Sichtbar" }, 1438{ "Secrecy","Sichtbar" },
1440{ "male","männlich" }, 1439{ "male","männlich" },
1441{ "female","weiblich" }, 1440{ "female","weiblich" },
1442{ "Hide!","Verbergen!" }, 1441{ "Hide!","Verbergen!" },
1443{ "Show!","Anzeigen!" }, 1442{ "Show!","Anzeigen!" },
1444{ "Details","Details" }, 1443{ "Details","Details" },
1445{ "Profession","Beruf" }, 1444{ "Profession","Beruf" },
1446{ "Children","Kinder" }, 1445{ "Children","Kinder" },
1447{ "Department","Abteilung" }, 1446{ "Department","Abteilung" },
1448{ "Backup cancelled","Backup abgebrochen" }, 1447{ "Backup cancelled","Backup abgebrochen" },
1449{ "Backup globally disabled","Backup global abgeschaltet" }, 1448{ "Backup globally disabled","Backup global abgeschaltet" },
1450{ "Backup succesfully finished","Backup erfolgreich beendet" }, 1449{ "Backup succesfully finished","Backup erfolgreich beendet" },
1451{ "(Hint: You can enable automatic backup in the global settings!)","(Hinweis: Sie können ein automatisches Backup in den globalen Einstellungen konfigurieren!)" }, 1450{ "(Hint: You can enable automatic backup in the global settings!)","(Hinweis: Sie können ein automatisches Backup in den globalen Einstellungen konfigurieren!)" },
1452{ "This will <b>backup all calendar files</b> to the directory %1 %2","Das schreibt ein <b>Backup aller Kalenderdateien</b> in das Verzeichnis %1 %2" }, 1451{ "This will <b>backup all calendar files</b> to the directory %1 %2","Das schreibt ein <b>Backup aller Kalenderdateien</b> in das Verzeichnis %1 %2" },
1453{ "Birthdays","Geburtstage" }, 1452{ "Birthdays","Geburtstage" },
1454{ "KO/Pi import information!","KO/Pi Import Information!" }, 1453{ "KO/Pi import information!","KO/Pi Import Information!" },
1455{ "Start this todo\nand stop all running","Starte dieses Todo\nund stoppe alle Laufenden" }, 1454{ "Start this todo\nand stop all running","Starte dieses Todo\nund stoppe alle Laufenden" },
1456{ "Cancel - do not start"," Abbrechen - Todo nicht starten" }, 1455{ "Cancel - do not start"," Abbrechen - Todo nicht starten" },
1457{ "The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n"How do I change the timezone?"\nas well!","Die Zeitzone wurde geändert!\nSollen die Kalender neu geladen\nwerden num die Zeiten\nder Termine zu ändern?\nBitte lesen Sie auch\nMenu: Help->FAQ:\n"How do I change the timezone?"" }, 1456{ "The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n"How do I change the timezone?"\nas well!","Die Zeitzone wurde geändert!\nSollen die Kalender neu geladen\nwerden num die Zeiten\nder Termine zu ändern?\nBitte lesen Sie auch\nMenu: Help->FAQ:\n"How do I change the timezone?"" },
1458{ "Reload","Neu laden" }, 1457{ "Reload","Neu laden" },
1459{ "Timezone settings","Zeitzoneneinstellung" }, 1458{ "Timezone settings","Zeitzoneneinstellung" },
1460{ "Title: ","Titel: " }, 1459{ "Title: ","Titel: " },
1461{ "Journal from: ","Journal vom: " }, 1460{ "Journal from: ","Journal vom: " },
1462{ "Journal: %1 from ","Journal: %1 vom " }, 1461{ "Journal: %1 from ","Journal: %1 vom " },
1463{ "<b>Click here to edit categories: </b>","<b>Klicke hier um Kategorien zu ändern: </b>" }, 1462{ "<b>Click here to edit categories: </b>","<b>Klicke hier um Kategorien zu ändern: </b>" },
1464{ "Selected Item","Ausgewähltes Item" }, 1463{ "Selected Item","Ausgewähltes Item" },
1465{ "Select Date...","Wähle Datum..." }, 1464{ "Select Date...","Wähle Datum..." },
1466{ "After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:","Nach dem Importieren/Laden/Syncen kann es neue Kategorien in den Terminen oder Todos geben, die nicht automatisch der Kategorieliste hinzugefügt werden. Bitte wählen Sie, was <b>jetzt</b> passieren soll:" }, 1465{ "After importing/loading/syncing there may be new categories in events or todos which are not added automatically to the category list. Please choose what to do <b>now</b>:","Nach dem Importieren/Laden/Syncen kann es neue Kategorien in den Terminen oder Todos geben, die nicht automatisch der Kategorieliste hinzugefügt werden. Bitte wählen Sie, was <b>jetzt</b> passieren soll:" },
1467{ "Change category list now!","Ändere Kategorieliste jetzt!" }, 1466{ "Change category list now!","Ändere Kategorieliste jetzt!" },
1468{ "Edit category list...","Ändere Kategorieliste..." }, 1467{ "Edit category list...","Ändere Kategorieliste..." },
1469{ "Toolbar changes needs a restart!","Neustart benötigt für Toolbaränderungen!" }, 1468{ "Toolbar changes needs a restart!","Neustart benötigt für Toolbaränderungen!" },
1470{ "Filepath: ","Dateipfad: " }, 1469{ "Filepath: ","Dateipfad: " },
1471{ "You can try to reload the calendar in the Resource View!","In der Resourcenansicht können Sie erneut versuchen den Kalender zu laden!" }, 1470{ "You can try to reload the calendar in the Resource View!","In der Resourcenansicht können Sie erneut versuchen den Kalender zu laden!" },
1472{ "<b>WARNING:</b> There is a pending suspended alarm!","<b>WARNUNG:</b> Es gibt einen laufenden Suspendalarm!" }, 1471{ "<b>WARNING:</b> There is a pending suspended alarm!","<b>WARNUNG:</b> Es gibt einen laufenden Suspendalarm!" },
1473{ "Pending Suspend Alarm","Laufender Suspend Alarm" }, 1472{ "Pending Suspend Alarm","Laufender Suspend Alarm" },
1474{ "Error loading calendar %1","Fehler beim Laden von Kalender %1" }, 1473{ "Error loading calendar %1","Fehler beim Laden von Kalender %1" },
1475{ "Calendar(s) not loaded:","Nicht geladene(r) Kalender:" }, 1474{ "Calendar(s) not loaded:","Nicht geladene(r) Kalender:" },
1476{ "Loding of calendar(s) failed","Laden von Kalendern fehlgeschlagen" }, 1475{ "Loding of calendar(s) failed","Laden von Kalendern fehlgeschlagen" },
1477{ "Alarm Options","Alarm Einstellungen" }, 1476{ "Alarm Options","Alarm Einstellungen" },
1478{ "Delete selected...","Lösche Ausgewählte..." }, 1477{ "Delete selected...","Lösche Ausgewählte..." },
1479{ "None","Nichts" }, 1478{ "None","Nichts" },
1480{ "Selection","Auswahl" }, 1479{ "Selection","Auswahl" },
1481{ "Set categories","Setze Kategorien" }, 1480{ "Set categories","Setze Kategorien" },
1482{ "This adds the selected\nitems to the calendar\n%1\nand removes them from\ntheir current calendar!","Das fügt die ausgewählten\nEinträge dem Kalender\n%1\nhinzu und entfernt sie von\nihrem aktuellen Kalender!" }, 1481{ "This adds the selected\nitems to the calendar\n%1\nand removes them from\ntheir current calendar!","Das fügt die ausgewählten\nEinträge dem Kalender\n%1\nhinzu und entfernt sie von\nihrem aktuellen Kalender!" },
1483{ "Reset","Neu setzen" }, 1482{ "Reset","Neu setzen" },
1484{ "Do you want to <b>add</b> categories to the selected items or <b>reset</b> the list (i.e. remove current categories)?","Möchten Sie Kategorien zu den ausgewählten Einträgen <b>hinzufügen</b> oder die Liste <b>neu setzen</b> (d.h. vorhandene Kategorien löschen)?" }, 1483{ "Do you want to <b>add</b> categories to the selected items or <b>reset</b> the list (i.e. remove current categories)?","Möchten Sie Kategorien zu den ausgewählten Einträgen <b>hinzufügen</b> oder die Liste <b>neu setzen</b> (d.h. vorhandene Kategorien löschen)?" },
1485{ "The file\n%1\ndoes not exist!\nShall I create it for you?","Die Datei\n%1\nexistiert nicht!\nSoll sie neu angelegt werden?" }, 1484{ "The file\n%1\ndoes not exist!\nShall I create it for you?","Die Datei\n%1\nexistiert nicht!\nSoll sie neu angelegt werden?" },
1486{ "Sorry, cannot create the file\n%1!\nNo calendar added!","Kann leider die Datei\n%1\nnicht anlegen!\nKein Kalender hinzugefügt!" }, 1485{ "Sorry, cannot create the file\n%1!\nNo calendar added!","Kann leider die Datei\n%1\nnicht anlegen!\nKein Kalender hinzugefügt!" },
1487{ "\nNO\n WRITEABLE\n CALENDAR\n FOUND!\n\nPlease fix your calendar settings!\n","\nKEIN\n SCHREIBBARER\n KALENDER\n GEFUNDEN!\n\nBitte korrigieren Sie\nihre Kalendereinstellungen!\n" }, 1486{ "\nNO\n WRITEABLE\n CALENDAR\n FOUND!\n\nPlease fix your calendar settings!\n","\nKEIN\n SCHREIBBARER\n KALENDER\n GEFUNDEN!\n\nBitte korrigieren Sie\nihre Kalendereinstellungen!\n" },
1488{ "\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n","\nDie Datei\n%1\nwurde verändert!\nDatei Grösse: %2 Bytes.\nZuletzt geändert: %3\nMöchten Sie:\n\n - Speichern und die Datei überschreiben?\n - Mit Datei Synchronisieren, dann speichern?\n - Abbrechen ohne zu speichern? \n" }, 1487{ "\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n","\nDie Datei\n%1\nwurde verändert!\nDatei Grösse: %2 Bytes.\nZuletzt geändert: %3\nMöchten Sie:\n\n - Speichern und die Datei überschreiben?\n - Mit Datei Synchronisieren, dann speichern?\n - Abbrechen ohne zu speichern? \n" },
1489{ "Edit","Edit" }, 1488{ "Edit","Edit" },
1490{ "Last Modified","Zuletzt geändert" }, 1489{ "Last Modified","Zuletzt geändert" },
1491{ "Journal viewer","Journal Anzeige" }, 1490{ "Journal viewer","Journal Anzeige" },
1492{ "Configure Calendar Files...","Konfiguriere Kalenderdateien..." }, 1491{ "Configure Calendar Files...","Konfiguriere Kalenderdateien..." },
1493{ "You can use and display <b>more than one</b> calendar file in KO/Pi. A calendar file is called a <b>resource</b>. To add a calendar or change calendar settings please use menu: <b>View -> Toggle Resource View</b>.","Sie können <b>mehr als eine</b> Kalenderdatei in KO/Pi darstellen und benutzen. Eine Kalenderdatei wird <b>Resource</b> genannt. Um einen Kalender hinzuzufügen oder die Kalendereinstellungen zu ändern benutzen Sie bitte das Menu: <b>Ansicht -> Resourcenansicht umschalten</b>." }, 1492{ "You can use and display <b>more than one</b> calendar file in KO/Pi. A calendar file is called a <b>resource</b>. To add a calendar or change calendar settings please use menu: <b>View -> Toggle Resource View</b>.","Sie können <b>mehr als eine</b> Kalenderdatei in KO/Pi darstellen und benutzen. Eine Kalenderdatei wird <b>Resource</b> genannt. Um einen Kalender hinzuzufügen oder die Kalendereinstellungen zu ändern benutzen Sie bitte das Menu: <b>Ansicht -> Resourcenansicht umschalten</b>." },
1494{ "Hide Completed","Verstecke erledigte Todos" }, 1493{ "Hide Completed","Verstecke erledigte Todos" },
1495{ "Show not Running","Zeige nicht Laufende" }, 1494{ "Show not Running","Zeige nicht Laufende" },
1496{ "Click to add new Todo","Klick für neues Todo!" }, 1495{ "Click to add new Todo","Klick für neues Todo!" },
1497{ "Show next conflict for","Zeige nächsten Konflikt für" }, 1496{ "Show next conflict for","Zeige nächsten Konflikt für" },
1498{ "All events","Alle Termine" }, 1497{ "All events","Alle Termine" },
1499{ "Allday events","Ganztagestermine" }, 1498{ "Allday events","Ganztagestermine" },
1500{ "Events with time","Termine mit Zeit" }, 1499{ "Events with time","Termine mit Zeit" },
1501{ "No conflict found","Kein Konflikt gefunden" }, 1500{ "No conflict found","Kein Konflikt gefunden" },
1502{ "Conflict %1 <-> %2","Konflikt %1 <-> %2" }, 1501{ "Conflict %1 <-> %2","Konflikt %1 <-> %2" },
1503{ "<p><b>Q</b>: Show next date with conflicting events\n ","<p><b>Q</b>: Zeige nächstes Datum mit Terminen im Konflikt\n " }, 1502{ "<p><b>Q</b>: Show next date with conflicting events\n ","<p><b>Q</b>: Zeige nächstes Datum mit Terminen im Konflikt\n " },
1504{ "Week view mode uses row layout","Wochenansicht Modus nutzt Reihenlayout" }, 1503{ "Week view mode uses row layout","Wochenansicht Modus nutzt Reihenlayout" },
1505{ "The event\n%1\nconflicts with event\n%2\nat date\n%3.\n","Der Termin\n%1\nist im Konflikt mit Termin\n%2\nam Datum\n%3.\n" }, 1504{ "The event\n%1\nconflicts with event\n%2\nat date\n%3.\n","Der Termin\n%1\nist im Konflikt mit Termin\n%2\nam Datum\n%3.\n" },
1506{ "KO/Pi Conflict delected","KO/Pi Konflikt erkannt" }, 1505{ "KO/Pi Conflict delected","KO/Pi Konflikt erkannt" },
1507{ "Show date","Zeige Datum" }, 1506{ "Show date","Zeige Datum" },
1508{ "No problem!","Null Problemo!" }, 1507{ "No problem!","Null Problemo!" },
1509{ "","" }, 1508{ "Automatically sync with KDE-Desktop\nwhen receiving sync request","Synce automatisch mit KDE-Desktop\nwenn eine Sync-Anforderung kommt" },
1509{ "Pi-Sync Port Error","Pi-Sync Port Fehler" },
1510{ "<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?","<b>Anschalten von Pi-Sync fehlgeschlagen!</b> Fehler beim Ansprechen des Ports %1! Ist bereits eine andere Anwendung dabei diesen Port zu nutzen?" },
1511{ "No valid port number:\n%1","Keine gültige Port Nummer:\n%1" },
1512{ "Port number (Default: %1)\nValid range from 1 to 65535","Port Nummer (Standard: %1)\nGültiger Bereich von 1 bis 65535" },
1513{ "Pi-Sync Error","Pi-Sync Fehler" },
1514{ "Got send file request\nwith invalid password","Erhielt "sende Datei" Anfrage\nmit ungültigem Passwort" },
1515{ "Got receive file request\nwith invalid password","Erhielt "empfange Datei" Anfrage\nmit ungültigem Passwort" },
1516{ "Wrong password: Receiving remote file failed.","Falsches Passwort: Empfangen von entfernter Datei fehlgeschlagen." },
1517{ "Please close error dialog on remote.","Bitte schließe Fehler-Dialog am entfernten Rechner" },
1518{ "Unknown error on remote.","Unbekannter Fehler am entfernten Rechner" },
1519{ "Pi-Sync: Connected!","Pi-Sync: Verbunden!" },
1520{ "Receiving file from remote...","Empfange entfernte Datei..." },
1521{ "Sending back synced file...","Sende synchronisierte Datei zurück..." },
1522{ "Do you want to\nclear all sync info\nof all profiles?","Möchten Sie wirklich\ndie Sync-Info\nfür alle Profile\nlöschen?" },
1523{ "Do you want to\nclear the sync\ninfo of profile\n%1?\n","Möchten Sie wirklich\ndie Sync-Info für Profil\n%1?\nlöschen" },
1524{ "Sorry, no valid port.Syncing cancelled.","Sorry, kein gültiger Port. Syncing abgebrochen." },
1525{ "Remote port number:\n(May be: 1 - 65535)","Ferne Port Nummer:\n(Darf sein: 1 - 65535)" },
1526{ "Writing back file ...","Schreibe Datei zurück..." },
1527{ "Sending back file ...","Sende Datei zurück..." },
1510{ "","" }, 1528{ "","" },
1511{ "","" }, 1529{ "","" },
1512{ "","" }, 1530{ "","" },
1513{ "","" }, 1531{ "","" },
1514{ "","" }, 1532{ "","" },
1515{ "","" }, 1533{ "","" },
1516{ "","" }, 1534{ "","" },
1517{ "","" }, 1535{ "","" },
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 68d1bc6..940ea91 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -355,193 +355,193 @@ CalendarView::CalendarView( CalendarResources *calendar,
355CalendarView::CalendarView( Calendar *calendar, 355CalendarView::CalendarView( Calendar *calendar,
356 QWidget *parent, const char *name ) 356 QWidget *parent, const char *name )
357 : CalendarViewBase( parent, name ), 357 : CalendarViewBase( parent, name ),
358 mCalendar( calendar ), 358 mCalendar( calendar ),
359 mResourceManager( 0 ) 359 mResourceManager( 0 )
360{ 360{
361 361
362 mEventEditor = 0; 362 mEventEditor = 0;
363 mTodoEditor = 0; 363 mTodoEditor = 0;
364 init(); 364 init();
365} 365}
366 366
367void CalendarView::init() 367void CalendarView::init()
368{ 368{
369 mNextAlarmDateTime = QDateTime::currentDateTime(); 369 mNextAlarmDateTime = QDateTime::currentDateTime();
370 setFocusPolicy ( NoFocus ); 370 setFocusPolicy ( NoFocus );
371 mViewerCallerIsSearchDialog = false; 371 mViewerCallerIsSearchDialog = false;
372 mBlockShowDates = false; 372 mBlockShowDates = false;
373 373
374 mDatePickerMode = 0; 374 mDatePickerMode = 0;
375 mCurrentSyncDevice = ""; 375 mCurrentSyncDevice = "";
376 mViewManager = new KOViewManager( this ); 376 mViewManager = new KOViewManager( this );
377 mDialogManager = new KODialogManager( this ); 377 mDialogManager = new KODialogManager( this );
378 mEventViewerDialog = 0; 378 mEventViewerDialog = 0;
379 mModified = false; 379 mModified = false;
380 mReadOnly = false; 380 mReadOnly = false;
381 mSelectedIncidence = 0; 381 mSelectedIncidence = 0;
382 mCalPrinter = 0; 382 mCalPrinter = 0;
383 mFilters.setAutoDelete(true); 383 mFilters.setAutoDelete(true);
384 384
385 mCalendar->registerObserver( this ); 385 mCalendar->registerObserver( this );
386 // TODO: Make sure that view is updated, when calendar is changed. 386 // TODO: Make sure that view is updated, when calendar is changed.
387 387
388 mStorage = new FileStorage( mCalendar ); 388 mStorage = new FileStorage( mCalendar );
389 mNavigator = new DateNavigator( this, "datevav", mViewManager ); 389 mNavigator = new DateNavigator( this, "datevav", mViewManager );
390 390
391 QBoxLayout *topLayout = (QBoxLayout*)layout(); 391 QBoxLayout *topLayout = (QBoxLayout*)layout();
392#ifndef KORG_NOSPLITTER 392#ifndef KORG_NOSPLITTER
393 // create the main layout frames. 393 // create the main layout frames.
394 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner"); 394 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner");
395 topLayout->addWidget(mPanner); 395 topLayout->addWidget(mPanner);
396 396
397 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner, 397 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner,
398 "CalendarView::LeftFrame"); 398 "CalendarView::LeftFrame");
399 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize); 399 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize);
400 400
401 mDateNavigator = new DateNavigatorContainer( mLeftSplitter, 401 mDateNavigator = new DateNavigatorContainer( mLeftSplitter,
402 "CalendarView::DateNavigator" ); 402 "CalendarView::DateNavigator" );
403 403
404 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize); 404 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize);
405 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2"); 405 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2");
406 mTodoList->setNavigator( mNavigator ); 406 mTodoList->setNavigator( mNavigator );
407 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView"); 407 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView");
408 408
409#ifdef KORG_NORESOURCEVIEW 409#ifdef KORG_NORESOURCEVIEW
410 mResourceView = 0; 410 mResourceView = 0;
411#else 411#else
412 if ( mResourceManager ) { 412 if ( mResourceManager ) {
413 mResourceView = new ResourceView( mResourceManager, mLeftSplitter ); 413 mResourceView = new ResourceView( mResourceManager, mLeftSplitter );
414 mResourceView->updateView(); 414 mResourceView->updateView();
415 connect( mResourceView, SIGNAL( resourcesChanged() ), 415 connect( mResourceView, SIGNAL( resourcesChanged() ),
416 SLOT( updateView() ) ); 416 SLOT( updateView() ) );
417 } else { 417 } else {
418 mResourceView = 0; 418 mResourceView = 0;
419 } 419 }
420#endif 420#endif
421 QWidget *rightBox = new QWidget( mPanner ); 421 QWidget *rightBox = new QWidget( mPanner );
422 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 422 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
423 423
424 mRightFrame = new QWidgetStack( rightBox ); 424 mRightFrame = new QWidgetStack( rightBox );
425 rightLayout->addWidget( mRightFrame, 1 ); 425 rightLayout->addWidget( mRightFrame, 1 );
426 426
427 mLeftFrame = mLeftSplitter; 427 mLeftFrame = mLeftSplitter;
428#else 428#else
429 //QWidget *mainBox = new QWidget( this ); 429 //QWidget *mainBox = new QWidget( this );
430 //QWidget *leftFrame = new QWidget( mainBox ); 430 //QWidget *leftFrame = new QWidget( mainBox );
431 //QBoxLayout * mainBoxLayout; 431 //QBoxLayout * mainBoxLayout;
432 if ( KOPrefs::instance()->mVerticalScreen ) { 432 if ( KOPrefs::instance()->mVerticalScreen ) {
433 //mainBoxLayout = new QVBoxLayout(mainBox); 433 //mainBoxLayout = new QVBoxLayout(mainBox);
434 //leftFrameLayout = new QHBoxLayout(leftFrame ); 434 //leftFrameLayout = new QHBoxLayout(leftFrame );
435 mMainFrame = new KDGanttMinimizeSplitter( Qt::Vertical, this ); 435 mMainFrame = new KDGanttMinimizeSplitter( Qt::Vertical, this );
436 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 436 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
437 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, mMainFrame);; 437 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, mMainFrame);;
438 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 438 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
439 } else { 439 } else {
440 //mainBoxLayout = new QHBoxLayout(mainBox); 440 //mainBoxLayout = new QHBoxLayout(mainBox);
441 //leftFrameLayout = new QVBoxLayout(leftFrame ); 441 //leftFrameLayout = new QVBoxLayout(leftFrame );
442 mMainFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, this); 442 mMainFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, this);
443 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Left); 443 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Left);
444 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Vertical, mMainFrame); 444 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Vertical, mMainFrame);
445 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 445 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
446 } 446 }
447 mMainFrame->setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) ); 447 mMainFrame->setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) );
448 //QBoxLayout * leftFrameLayout; 448 //QBoxLayout * leftFrameLayout;
449 topLayout->addWidget( mMainFrame ); 449 topLayout->addWidget( mMainFrame );
450#ifdef DESKTOP_VERSION 450#ifdef DESKTOP_VERSION
451 mDateScrollBar = new QScrollBar ( 0, 364, 1,30, 200,QScrollBar::Horizontal, this ); 451 mDateScrollBar = new QScrollBar ( 1, 365, 1,30, 200,QScrollBar::Horizontal, this );
452 topLayout->addWidget( mDateScrollBar ); 452 topLayout->addWidget( mDateScrollBar );
453 connect( mDateScrollBar, SIGNAL( valueChanged ( int ) ),this, SLOT( scrollBarValue( int )) ); 453 connect( mDateScrollBar, SIGNAL( valueChanged ( int ) ),this, SLOT( scrollBarValue( int )) );
454 if ( QApplication::desktop()->width() < 800 ) 454 if ( QApplication::desktop()->width() < 800 )
455 mDateScrollBar->hide(); 455 mDateScrollBar->hide();
456#endif 456#endif
457 //mainBoxLayout->addWidget (mLeftFrame); 457 //mainBoxLayout->addWidget (mLeftFrame);
458 mDateNavigator = new DateNavigatorContainer( mLeftFrame, 458 mDateNavigator = new DateNavigatorContainer( mLeftFrame,
459 "CalendarView::DateNavigator" ); 459 "CalendarView::DateNavigator" );
460#if 0 460#if 0
461 // FIXME 461 // FIXME
462 mDateNavigator = new KDateNavigator(mLeftFrame, mCalendar, TRUE, 462 mDateNavigator = new KDateNavigator(mLeftFrame, mCalendar, TRUE,
463 "CalendarView::DateNavigator", QDate::currentDate()); 463 "CalendarView::DateNavigator", QDate::currentDate());
464#endif 464#endif
465 // mDateNavigator->blockSignals( true ); 465 // mDateNavigator->blockSignals( true );
466 //leftFrameLayout->addWidget( mDateNavigator ); 466 //leftFrameLayout->addWidget( mDateNavigator );
467 mTodoList = new KOTodoView(mCalendar, mLeftFrame, "todolistsmall"); 467 mTodoList = new KOTodoView(mCalendar, mLeftFrame, "todolistsmall");
468 mFilterView = new KOFilterView(&mFilters,mLeftFrame,"CalendarView::FilterView"); 468 mFilterView = new KOFilterView(&mFilters,mLeftFrame,"CalendarView::FilterView");
469 mCalEditView = new KOCalEditView(mLeftFrame,"CalendarView::CaleditView"); 469 mCalEditView = new KOCalEditView(mLeftFrame,"CalendarView::CaleditView");
470 connect( mCalEditView, SIGNAL( calendarEnabled (int,bool) ),mCalendar, SLOT( setCalendarEnabled(int,bool)) ); 470 connect( mCalEditView, SIGNAL( calendarEnabled (int,bool) ),mCalendar, SLOT( setCalendarEnabled(int,bool)) );
471 connect( mCalEditView, SIGNAL( alarmEnabled(int,bool) ),mCalendar, SLOT( setAlarmEnabled(int,bool)) ); 471 connect( mCalEditView, SIGNAL( alarmEnabled(int,bool) ),mCalendar, SLOT( setAlarmEnabled(int,bool)) );
472 connect( mCalEditView, SIGNAL( calendarReadonly(int,bool) ),this, SLOT( setCalReadOnly(int,bool)) ); 472 connect( mCalEditView, SIGNAL( calendarReadonly(int,bool) ),this, SLOT( setCalReadOnly(int,bool)) );
473 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mCalendar, SLOT( setDefaultCalendar(int)) ); 473 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mCalendar, SLOT( setDefaultCalendar(int)) );
474 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mViewManager, SLOT( setDefaultCalendar(int)) ); 474 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mViewManager, SLOT( setDefaultCalendar(int)) );
475 connect( mCalEditView, SIGNAL( removeCalendar(int) ),mCalendar, SLOT( setCalendarRemove(int)) ); 475 connect( mCalEditView, SIGNAL( removeCalendar(int) ),mCalendar, SLOT( setCalendarRemove(int)) );
476 connect( mCalEditView, SIGNAL( calendarAdded(int) ),this, SLOT( addCalendarId(int)) ); 476 connect( mCalEditView, SIGNAL( calendarAdded(int) ),this, SLOT( addCalendarId(int)) );
477 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateView()) ); 477 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateView()) );
478 connect( mCalEditView, SIGNAL( checkCalendar() ),this, SLOT( checkFiles() )); 478 connect( mCalEditView, SIGNAL( checkCalendar() ),this, SLOT( checkFiles() ));
479 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateUnmanagedViews()) ); 479 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateUnmanagedViews()) );
480 480
481 mTodoList->setNavigator( mNavigator ); 481 mTodoList->setNavigator( mNavigator );
482#if 0 482#if 0
483 if ( QApplication::desktop()->width() < 480 ) { 483 if ( QApplication::desktop()->width() < 480 ) {
484 leftFrameLayout->addWidget(mFilterView); 484 leftFrameLayout->addWidget(mFilterView);
485 leftFrameLayout->addWidget(mTodoList, 2 ); 485 leftFrameLayout->addWidget(mTodoList, 2 );
486 486
487 } else { 487 } else {
488 leftFrameLayout->addWidget(mTodoList,2 ); 488 leftFrameLayout->addWidget(mTodoList,2 );
489 leftFrameLayout->addWidget(mFilterView ); 489 leftFrameLayout->addWidget(mFilterView );
490 } 490 }
491#endif 491#endif
492 mFilterView->hide(); 492 mFilterView->hide();
493 mCalEditView->hide(); 493 mCalEditView->hide();
494 QWidget *rightBox = new QWidget( mMainFrame ); 494 QWidget *rightBox = new QWidget( mMainFrame );
495 //mainBoxLayout->addWidget ( rightBox, 10 ); 495 //mainBoxLayout->addWidget ( rightBox, 10 );
496 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 496 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
497 mRightFrame = new QWidgetStack( rightBox ); 497 mRightFrame = new QWidgetStack( rightBox );
498 rightLayout->addWidget( mRightFrame, 10 ); 498 rightLayout->addWidget( mRightFrame, 10 );
499 499
500 //mLeftFrame = (QWidget *)leftFrame; 500 //mLeftFrame = (QWidget *)leftFrame;
501 if ( KOPrefs::instance()->mVerticalScreen ) { 501 if ( KOPrefs::instance()->mVerticalScreen ) {
502 //mDateNavigator->setFixedHeight( mDateNavigator->sizeHint().height() ); 502 //mDateNavigator->setFixedHeight( mDateNavigator->sizeHint().height() );
503 //mDateNavigator->setMinimumWidth( mDateNavigator->sizeHint().width() ); 503 //mDateNavigator->setMinimumWidth( mDateNavigator->sizeHint().width() );
504 //mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() ); 504 //mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() );
505 //leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() ); 505 //leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() );
506 } else { 506 } else {
507 //mDateNavigator->setFixedWidth( mDateNavigator->sizeHint().width() ); 507 //mDateNavigator->setFixedWidth( mDateNavigator->sizeHint().width() );
508 //mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() ); 508 //mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() );
509 //leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() ); 509 //leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() );
510 } 510 }
511 if ( !KOPrefs::instance()->mShowDateNavigator) 511 if ( !KOPrefs::instance()->mShowDateNavigator)
512 mDateNavigator->hide(); 512 mDateNavigator->hide();
513 //qDebug("Calendarview Size %d %d ", width(), height()); 513 //qDebug("Calendarview Size %d %d ", width(), height());
514#endif 514#endif
515 515
516 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 516 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
517 SLOT( showDates( const KCal::DateList & ) ) ); 517 SLOT( showDates( const KCal::DateList & ) ) );
518 518
519 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 519 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
520 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 520 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
521 521
522 522
523 523
524 connect( mDateNavigator, SIGNAL( showMonth( const QDate & ) ), 524 connect( mDateNavigator, SIGNAL( showMonth( const QDate & ) ),
525 mViewManager, SLOT( showMonth( const QDate & ) ) ); 525 mViewManager, SLOT( showMonth( const QDate & ) ) );
526 526
527 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ), 527 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ),
528 mNavigator, SLOT( selectWeek( const QDate & ) ) ); 528 mNavigator, SLOT( selectWeek( const QDate & ) ) );
529 529
530 connect( mDateNavigator, SIGNAL( goPrevYear() ), 530 connect( mDateNavigator, SIGNAL( goPrevYear() ),
531 mNavigator, SLOT( selectPreviousYear() ) ); 531 mNavigator, SLOT( selectPreviousYear() ) );
532 connect( mDateNavigator, SIGNAL( goNextYear() ), 532 connect( mDateNavigator, SIGNAL( goNextYear() ),
533 mNavigator, SLOT( selectNextYear() ) ); 533 mNavigator, SLOT( selectNextYear() ) );
534 connect( mDateNavigator, SIGNAL( goPrevMonth() ), 534 connect( mDateNavigator, SIGNAL( goPrevMonth() ),
535 mNavigator, SLOT( selectPreviousMonth() ) ); 535 mNavigator, SLOT( selectPreviousMonth() ) );
536 connect( mDateNavigator, SIGNAL( goNextMonth() ), 536 connect( mDateNavigator, SIGNAL( goNextMonth() ),
537 mNavigator, SLOT( selectNextMonth() ) ); 537 mNavigator, SLOT( selectNextMonth() ) );
538 538
539 connect( mDateNavigator, SIGNAL( goPrevious() ), 539 connect( mDateNavigator, SIGNAL( goPrevious() ),
540 mNavigator, SLOT( selectPrevious() ) ); 540 mNavigator, SLOT( selectPrevious() ) );
541 connect( mDateNavigator, SIGNAL( goNext() ), 541 connect( mDateNavigator, SIGNAL( goNext() ),
542 mNavigator, SLOT( selectNext() ) ); 542 mNavigator, SLOT( selectNext() ) );
543 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ), 543 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ),
544 mNavigator, SLOT( slotMonthSelect( int ) ) ); 544 mNavigator, SLOT( slotMonthSelect( int ) ) );
545 545
546 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 546 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
547 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 547 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
diff --git a/libkdepim/ksyncmanager.cpp b/libkdepim/ksyncmanager.cpp
index fc0ac6b..f2ee0ab 100644
--- a/libkdepim/ksyncmanager.cpp
+++ b/libkdepim/ksyncmanager.cpp
@@ -260,276 +260,281 @@ void KSyncManager::slotSyncMenu( int action )
260 mIsKapiFile = temp->getIsKapiFile(); 260 mIsKapiFile = temp->getIsKapiFile();
261 mWriteBackInFuture = 0; 261 mWriteBackInFuture = 0;
262 if ( temp->getWriteBackFuture() ) { 262 if ( temp->getWriteBackFuture() ) {
263 mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); 263 mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
264 mWriteBackInPast = temp->getWriteBackPastWeeks( ); 264 mWriteBackInPast = temp->getWriteBackPastWeeks( );
265 } 265 }
266 mFilterInCal = temp->getFilterInCal(); 266 mFilterInCal = temp->getFilterInCal();
267 mFilterOutCal = temp->getFilterOutCal(); 267 mFilterOutCal = temp->getFilterOutCal();
268 mFilterInAB = temp->getFilterInAB(); 268 mFilterInAB = temp->getFilterInAB();
269 mFilterOutAB = temp->getFilterOutAB(); 269 mFilterOutAB = temp->getFilterOutAB();
270 270
271 if ( action == 1000 ) { 271 if ( action == 1000 ) {
272 mIsKapiFile = false; 272 mIsKapiFile = false;
273#ifdef DESKTOP_VERSION 273#ifdef DESKTOP_VERSION
274 syncKDE(); 274 syncKDE();
275#else 275#else
276 syncSharp(); 276 syncSharp();
277#endif 277#endif
278 278
279 } else if ( action == 1001 ) { 279 } else if ( action == 1001 ) {
280 syncLocalFile(); 280 syncLocalFile();
281 281
282 } else if ( action == 1002 ) { 282 } else if ( action == 1002 ) {
283 mWriteBackFile = false; 283 mWriteBackFile = false;
284 mAskForPreferences = false; 284 mAskForPreferences = false;
285 mShowSyncSummary = false; 285 mShowSyncSummary = false;
286 mSyncAlgoPrefs = 3; 286 mSyncAlgoPrefs = 3;
287 quickSyncLocalFile(); 287 quickSyncLocalFile();
288 288
289 } else if ( action >= 1003 ) { 289 } else if ( action >= 1003 ) {
290 if ( temp->getIsLocalFileSync() ) { 290 if ( temp->getIsLocalFileSync() ) {
291 switch(mTargetApp) 291 switch(mTargetApp)
292 { 292 {
293 case (KAPI): 293 case (KAPI):
294 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) ) 294 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) )
295 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB(); 295 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
296 break; 296 break;
297 case (KOPI): 297 case (KOPI):
298 if ( syncWithFile( temp->getRemoteFileName( ), false ) ) 298 if ( syncWithFile( temp->getRemoteFileName( ), false ) )
299 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileName(); 299 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileName();
300 break; 300 break;
301 case (PWMPI): 301 case (PWMPI):
302 if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) ) 302 if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) )
303 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNamePWM(); 303 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNamePWM();
304 break; 304 break;
305 default: 305 default:
306 qDebug("KSM::slotSyncMenu: invalid apptype selected"); 306 qDebug("KSM::slotSyncMenu: invalid apptype selected");
307 break; 307 break;
308 308
309 } 309 }
310 } else { 310 } else {
311 if ( temp->getIsPhoneSync() ) { 311 if ( temp->getIsPhoneSync() ) {
312 mPhoneDevice = temp->getPhoneDevice( ) ; 312 mPhoneDevice = temp->getPhoneDevice( ) ;
313 mPhoneConnection = temp->getPhoneConnection( ); 313 mPhoneConnection = temp->getPhoneConnection( );
314 mPhoneModel = temp->getPhoneModel( ); 314 mPhoneModel = temp->getPhoneModel( );
315 syncPhone(); 315 syncPhone();
316 } else if ( temp->getIsPiSync() ) { 316 } else if ( temp->getIsPiSync() ) {
317 if ( mTargetApp == KAPI ) { 317 if ( mTargetApp == KAPI ) {
318 mPassWordPiSync = temp->getRemotePwAB(); 318 mPassWordPiSync = temp->getRemotePwAB();
319 mActiveSyncPort = temp->getRemotePortAB(); 319 mActiveSyncPort = temp->getRemotePortAB();
320 mActiveSyncIP = temp->getRemoteIPAB(); 320 mActiveSyncIP = temp->getRemoteIPAB();
321 } else if ( mTargetApp == KOPI ) { 321 } else if ( mTargetApp == KOPI ) {
322 mPassWordPiSync = temp->getRemotePw(); 322 mPassWordPiSync = temp->getRemotePw();
323 mActiveSyncPort = temp->getRemotePort(); 323 mActiveSyncPort = temp->getRemotePort();
324 mActiveSyncIP = temp->getRemoteIP(); 324 mActiveSyncIP = temp->getRemoteIP();
325 } else { 325 } else {
326 mPassWordPiSync = temp->getRemotePwPWM(); 326 mPassWordPiSync = temp->getRemotePwPWM();
327 mActiveSyncPort = temp->getRemotePortPWM(); 327 mActiveSyncPort = temp->getRemotePortPWM();
328 mActiveSyncIP = temp->getRemoteIPPWM(); 328 mActiveSyncIP = temp->getRemoteIPPWM();
329 } 329 }
330 syncPi(); 330 syncPi();
331 while ( !mPisyncFinished ) { 331 while ( !mPisyncFinished ) {
332 //qDebug("waiting "); 332 //qDebug("waiting ");
333 qApp->processEvents(); 333 qApp->processEvents();
334 } 334 }
335 } else 335 } else
336 syncRemote( temp ); 336 syncRemote( temp );
337 337
338 } 338 }
339 } 339 }
340 delete temp; 340 delete temp;
341 setBlockSave(false); 341 setBlockSave(false);
342} 342}
343 343
344void KSyncManager::enableQuick( bool ask ) 344void KSyncManager::enableQuick( bool ask )
345{ 345{
346 bool autoStart; 346 bool autoStart;
347 bool changed = false; 347 bool changed = false;
348 if ( ask ) { 348 if ( ask ) {
349 QDialog dia ( 0, "input-dialog", true ); 349 QDialog dia ( 0, "input-dialog", true );
350 QLineEdit lab ( &dia ); 350 QLineEdit lab ( &dia );
351 QVBoxLayout lay( &dia ); 351 QVBoxLayout lay( &dia );
352 lab.setText( mPrefs->mPassiveSyncPort ); 352 lab.setText( mPrefs->mPassiveSyncPort );
353 lay.setMargin(7); 353 lay.setMargin(7);
354 lay.setSpacing(7); 354 lay.setSpacing(7);
355 int po = 9197+mTargetApp; 355 int po = 9197+mTargetApp;
356 QLabel label ( i18n("Port number (Default: %1)").arg(po), &dia ); 356 QLabel label ( i18n("Port number (Default: %1)\nValid range from 1 to 65535").arg(po), &dia );
357 lay.addWidget( &label); 357 lay.addWidget( &label);
358 lay.addWidget( &lab); 358 lay.addWidget( &lab);
359 359
360 QLineEdit lepw ( &dia ); 360 QLineEdit lepw ( &dia );
361 lepw.setText( mPrefs->mPassiveSyncPw ); 361 lepw.setText( mPrefs->mPassiveSyncPw );
362 QLabel label2 ( i18n("Password to enable\naccess from remote:"), &dia ); 362 QLabel label2 ( i18n("Password to enable\naccess from remote:"), &dia );
363 lay.addWidget( &label2); 363 lay.addWidget( &label2);
364 lay.addWidget( &lepw); 364 lay.addWidget( &lepw);
365 QCheckBox autostart(i18n("Automatically start\nat application startup"), &dia ); 365 QCheckBox autostart(i18n("Automatically start\nat application startup"), &dia );
366 lay.addWidget( &autostart); 366 lay.addWidget( &autostart);
367 autostart.setChecked( mPrefs->mPassiveSyncAutoStart ); 367 autostart.setChecked( mPrefs->mPassiveSyncAutoStart );
368#ifdef DESKTOP_VERSION 368#ifdef DESKTOP_VERSION
369#ifdef _WIN32_ 369#ifdef _WIN32_
370 QCheckBox syncdesktop( i18n("Automatically sync with Outlook\nwhen receiving sync request"),&dia ); 370 QCheckBox syncdesktop( i18n("Automatically sync with Outlook\nwhen receiving sync request"),&dia );
371 syncdesktop.hide();// not implemented! 371 syncdesktop.hide();// not implemented!
372#else 372#else
373 QCheckBox syncdesktop( i18n("Automatically sync with KDE-Desktop\nwhen receiving sync request"),&dia ); 373 QCheckBox syncdesktop( i18n("Automatically sync with KDE-Desktop\nwhen receiving sync request"),&dia );
374#endif 374#endif
375 lay.addWidget( &syncdesktop); 375 lay.addWidget( &syncdesktop);
376#else 376#else
377 mPrefs->mPassiveSyncWithDesktop = false; 377 mPrefs->mPassiveSyncWithDesktop = false;
378 QCheckBox syncdesktop( i18n("Automatically sync\nwith KDE-Desktop"),&dia ); 378 QCheckBox syncdesktop( i18n("Automatically sync\nwith KDE-Desktop"),&dia );
379 syncdesktop.hide(); 379 syncdesktop.hide();
380#endif 380#endif
381 syncdesktop.setChecked( mPrefs->mPassiveSyncWithDesktop ); 381 syncdesktop.setChecked( mPrefs->mPassiveSyncWithDesktop );
382 382
383 QPushButton pb ( "OK", &dia); 383 QPushButton pb ( "OK", &dia);
384 lay.addWidget( &pb ); 384 lay.addWidget( &pb );
385 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 385 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
386 dia.resize( 230,120 ); 386 dia.resize( 230,120 );
387 dia.setCaption( i18n("Enter port for Pi-Sync") ); 387 dia.setCaption( i18n("Enter port for Pi-Sync") );
388 dia.show(); 388 dia.show();
389#ifndef DESKTOP_VERSION 389#ifndef DESKTOP_VERSION
390 int dw = QApplication::desktop()->width(); 390 int dw = QApplication::desktop()->width();
391 int dh = QApplication::desktop()->height(); 391 int dh = QApplication::desktop()->height();
392 dia.move( (dw-dia.width())/2, (dh - dia.height() )/2 ); 392 dia.move( (dw-dia.width())/2, (dh - dia.height() )/2 );
393#endif 393#endif
394 if ( ! dia.exec() ) 394 if ( ! dia.exec() )
395 return; 395 return;
396 dia.hide(); 396 dia.hide();
397 qApp->processEvents(); 397 qApp->processEvents();
398 if ( mPrefs->mPassiveSyncPw != lepw.text() ) { 398 if ( mPrefs->mPassiveSyncPw != lepw.text() ) {
399 changed = true; 399 changed = true;
400 mPrefs->mPassiveSyncPw = lepw.text(); 400 mPrefs->mPassiveSyncPw = lepw.text();
401 } 401 }
402 if ( mPrefs->mPassiveSyncPort != lab.text() ) { 402 if ( mPrefs->mPassiveSyncPort != lab.text() ) {
403 mPrefs->mPassiveSyncPort = lab.text(); 403 mPrefs->mPassiveSyncPort = lab.text();
404 changed = true; 404 changed = true;
405 } 405 }
406 autoStart = autostart.isChecked(); 406 autoStart = autostart.isChecked();
407 if (mPrefs->mPassiveSyncWithDesktop != syncdesktop.isChecked() ) { 407 if (mPrefs->mPassiveSyncWithDesktop != syncdesktop.isChecked() ) {
408 changed = true; 408 changed = true;
409 mPrefs->mPassiveSyncWithDesktop = syncdesktop.isChecked(); 409 mPrefs->mPassiveSyncWithDesktop = syncdesktop.isChecked();
410 } 410 }
411 } 411 }
412 else 412 else
413 autoStart = mPrefs->mPassiveSyncAutoStart; 413 autoStart = mPrefs->mPassiveSyncAutoStart;
414 if ( autoStart != mPrefs->mPassiveSyncAutoStart ) 414 if ( autoStart != mPrefs->mPassiveSyncAutoStart )
415 changed = true; 415 changed = true;
416 bool ok; 416 bool ok;
417 mPrefs->mPassiveSyncAutoStart = false; 417 mPrefs->mPassiveSyncAutoStart = false;
418 Q_UINT16 port = mPrefs->mPassiveSyncPort.toUInt(&ok); 418 Q_UINT32 port_t = mPrefs->mPassiveSyncPort.toUInt(&ok);
419 if ( ! ok ) { 419 qDebug("%d ", port_t);
420 KMessageBox::information( 0, i18n("No valid port")); 420 if ( ! ok || port_t > 65535 ) {
421 KMessageBox::information( 0, i18n("No valid port number:\n%1").arg ( mPrefs->mPassiveSyncPort ), i18n("Pi-Sync Port Error"));
421 return; 422 return;
422 } 423 }
424 Q_UINT16 port = port_t;
423 //qDebug("port %d ", port); 425 //qDebug("port %d ", port);
424 mServerSocket = new KServerSocket ( mPrefs->mPassiveSyncPw, port ,1 ); 426 mServerSocket = new KServerSocket ( mPrefs->mPassiveSyncPw, port ,1 );
425 mServerSocket->setFileName( defaultFileName() );//bbb 427 mServerSocket->setFileName( defaultFileName() );//bbb
426 if ( !mServerSocket->ok() ) { 428 if ( !mServerSocket->ok() ) {
427 KMessageBox::information( 0, i18n("Failed to bind or\nlisten to the port!")); 429 QTimer::singleShot( 2000, this, SLOT ( displayErrorPort() ) );
428 delete mServerSocket; 430 delete mServerSocket;
429 mServerSocket = 0; 431 mServerSocket = 0;
430 return; 432 return;
431 } 433 }
432 mPrefs->mPassiveSyncAutoStart = autoStart; 434 mPrefs->mPassiveSyncAutoStart = autoStart;
433 if ( changed ) { 435 if ( changed ) {
434 mPrefs->writeConfig(); 436 mPrefs->writeConfig();
435 } 437 }
436 connect( mServerSocket, SIGNAL ( request_file() ),this, SIGNAL ( request_file() ) ); 438 connect( mServerSocket, SIGNAL ( request_file() ),this, SIGNAL ( request_file() ) );
437 connect( mServerSocket, SIGNAL ( file_received( bool ) ), this, SIGNAL ( getFile( bool ) ) ); 439 connect( mServerSocket, SIGNAL ( file_received( bool ) ), this, SIGNAL ( getFile( bool ) ) );
438} 440}
439 441void KSyncManager::displayErrorPort()
442{
443 KMessageBox::information( 0, i18n("<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?").arg( mPrefs->mPassiveSyncPort) , i18n("Pi-Sync Port Error"));
444}
440void KSyncManager::syncLocalFile() 445void KSyncManager::syncLocalFile()
441{ 446{
442 447
443 QString fn =mPrefs->mLastSyncedLocalFile; 448 QString fn =mPrefs->mLastSyncedLocalFile;
444 QString ext; 449 QString ext;
445 450
446 switch(mTargetApp) 451 switch(mTargetApp)
447 { 452 {
448 case (KAPI): 453 case (KAPI):
449 ext = "(*.vcf)"; 454 ext = "(*.vcf)";
450 break; 455 break;
451 case (KOPI): 456 case (KOPI):
452 ext = "(*.ics/*.vcs)"; 457 ext = "(*.ics/*.vcs)";
453 break; 458 break;
454 case (PWMPI): 459 case (PWMPI):
455 ext = "(*.pwm)"; 460 ext = "(*.pwm)";
456 break; 461 break;
457 default: 462 default:
458 qDebug("KSM::syncLocalFile: invalid apptype selected"); 463 qDebug("KSM::syncLocalFile: invalid apptype selected");
459 break; 464 break;
460 465
461 } 466 }
462 467
463 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename"+ext), mParent ); 468 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename"+ext), mParent );
464 if ( fn == "" ) 469 if ( fn == "" )
465 return; 470 return;
466 if ( syncWithFile( fn, false ) ) { 471 if ( syncWithFile( fn, false ) ) {
467 qDebug("KSM::syncLocalFile() successful "); 472 qDebug("KSM::syncLocalFile() successful ");
468 } 473 }
469 474
470} 475}
471 476
472bool KSyncManager::syncWithFile( QString fn , bool quick ) 477bool KSyncManager::syncWithFile( QString fn , bool quick )
473{ 478{
474 bool ret = false; 479 bool ret = false;
475 QFileInfo info; 480 QFileInfo info;
476 info.setFile( fn ); 481 info.setFile( fn );
477 QString mess; 482 QString mess;
478 if ( !info. exists() ) { 483 if ( !info. exists() ) {
479 mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) ); 484 mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) );
480 QMessageBox::warning( mParent, i18n("Warning!"), 485 QMessageBox::warning( mParent, i18n("Warning!"),
481 mess ); 486 mess );
482 return ret; 487 return ret;
483 } 488 }
484 int result = 0; 489 int result = 0;
485 if ( !quick ) { 490 if ( !quick ) {
486 mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); 491 mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false ));
487 result = QMessageBox::warning( mParent, i18n("Warning!"), 492 result = QMessageBox::warning( mParent, i18n("Warning!"),
488 mess, 493 mess,
489 i18n("Sync"), i18n("Cancel"), 0, 494 i18n("Sync"), i18n("Cancel"), 0,
490 0, 1 ); 495 0, 1 );
491 if ( result ) 496 if ( result )
492 return false; 497 return false;
493 } 498 }
494 if ( mAskForPreferences ) 499 if ( mAskForPreferences )
495 if ( !edit_sync_options()) { 500 if ( !edit_sync_options()) {
496 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") ); 501 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") );
497 return false; 502 return false;
498 } 503 }
499 if ( result == 0 ) { 504 if ( result == 0 ) {
500 //qDebug("Now sycing ... "); 505 //qDebug("Now sycing ... ");
501 if ( ret = mImplementation->sync( this, fn, mSyncAlgoPrefs ) ) 506 if ( ret = mImplementation->sync( this, fn, mSyncAlgoPrefs ) )
502 mParent->topLevelWidget()->setCaption( i18n("Synchronization successful") ); 507 mParent->topLevelWidget()->setCaption( i18n("Synchronization successful") );
503 else 508 else
504 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") ); 509 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") );
505 if ( ! quick ) 510 if ( ! quick )
506 mPrefs->mLastSyncedLocalFile = fn; 511 mPrefs->mLastSyncedLocalFile = fn;
507 } 512 }
508 return ret; 513 return ret;
509} 514}
510 515
511void KSyncManager::quickSyncLocalFile() 516void KSyncManager::quickSyncLocalFile()
512{ 517{
513 518
514 if ( syncWithFile( mPrefs->mLastSyncedLocalFile, true ) ) { 519 if ( syncWithFile( mPrefs->mLastSyncedLocalFile, true ) ) {
515 qDebug("KSM::quick syncLocalFile() successful "); 520 qDebug("KSM::quick syncLocalFile() successful ");
516 521
517 } 522 }
518} 523}
519 524
520void KSyncManager::multiSync( bool askforPrefs ) 525void KSyncManager::multiSync( bool askforPrefs )
521{ 526{
522 if (blockSave()) 527 if (blockSave())
523 return; 528 return;
524 setBlockSave(true); 529 setBlockSave(true);
525 if ( askforPrefs ) { 530 if ( askforPrefs ) {
526 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!"); 531 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!");
527 if ( QMessageBox::information( mParent, i18n("KDE-Pim Sync"), 532 if ( QMessageBox::information( mParent, i18n("KDE-Pim Sync"),
528 question, 533 question,
529 i18n("Yes"), i18n("No"), 534 i18n("Yes"), i18n("No"),
530 0, 0 ) != 0 ) { 535 0, 0 ) != 0 ) {
531 setBlockSave(false); 536 setBlockSave(false);
532 mParent->topLevelWidget()->setCaption(i18n("Aborted! Nothing synced!")); 537 mParent->topLevelWidget()->setCaption(i18n("Aborted! Nothing synced!"));
533 return; 538 return;
534 } 539 }
535 } 540 }
@@ -703,193 +708,193 @@ void KSyncManager::syncRemote( KSyncProfile* prof, bool ask)
703 QString preCommand; 708 QString preCommand;
704 QString localTempFile; 709 QString localTempFile;
705 QString postCommand; 710 QString postCommand;
706 711
707 switch(mTargetApp) 712 switch(mTargetApp)
708 { 713 {
709 case (KAPI): 714 case (KAPI):
710 preCommand = prof->getPreSyncCommandAB(); 715 preCommand = prof->getPreSyncCommandAB();
711 postCommand = prof->getPostSyncCommandAB(); 716 postCommand = prof->getPostSyncCommandAB();
712 localTempFile = prof->getLocalTempFileAB(); 717 localTempFile = prof->getLocalTempFileAB();
713 break; 718 break;
714 case (KOPI): 719 case (KOPI):
715 preCommand = prof->getPreSyncCommand(); 720 preCommand = prof->getPreSyncCommand();
716 postCommand = prof->getPostSyncCommand(); 721 postCommand = prof->getPostSyncCommand();
717 localTempFile = prof->getLocalTempFile(); 722 localTempFile = prof->getLocalTempFile();
718 break; 723 break;
719 case (PWMPI): 724 case (PWMPI):
720 preCommand = prof->getPreSyncCommandPWM(); 725 preCommand = prof->getPreSyncCommandPWM();
721 postCommand = prof->getPostSyncCommandPWM(); 726 postCommand = prof->getPostSyncCommandPWM();
722 localTempFile = prof->getLocalTempFilePWM(); 727 localTempFile = prof->getLocalTempFilePWM();
723 break; 728 break;
724 default: 729 default:
725 qDebug("KSM::syncRemote: invalid apptype selected"); 730 qDebug("KSM::syncRemote: invalid apptype selected");
726 break; 731 break;
727 } 732 }
728 733
729 734
730 int fi; 735 int fi;
731 if ( (fi = preCommand.find("$PWD$")) > 0 ) { 736 if ( (fi = preCommand.find("$PWD$")) > 0 ) {
732 QString pwd = getPassword(); 737 QString pwd = getPassword();
733 preCommand = preCommand.left( fi )+ pwd + preCommand.mid( fi+5 ); 738 preCommand = preCommand.left( fi )+ pwd + preCommand.mid( fi+5 );
734 739
735 } 740 }
736 int maxlen = 30; 741 int maxlen = 30;
737 if ( QApplication::desktop()->width() > 320 ) 742 if ( QApplication::desktop()->width() > 320 )
738 maxlen += 25; 743 maxlen += 25;
739 mParent->topLevelWidget()->setCaption ( i18n( "Copy remote file to local machine..." ) ); 744 mParent->topLevelWidget()->setCaption ( i18n( "Copy remote file to local machine..." ) );
740 int fileSize = 0; 745 int fileSize = 0;
741 int result = system ( preCommand ); 746 int result = system ( preCommand );
742 // 0 : okay 747 // 0 : okay
743 // 256: no such file or dir 748 // 256: no such file or dir
744 // 749 //
745 qDebug("KSM::Sync: Remote copy result(0 = okay): %d ",result ); 750 qDebug("KSM::Sync: Remote copy result(0 = okay): %d ",result );
746 if ( result != 0 ) { 751 if ( result != 0 ) {
747 unsigned int len = maxlen; 752 unsigned int len = maxlen;
748 while ( len < preCommand.length() ) { 753 while ( len < preCommand.length() ) {
749 preCommand.insert( len , "\n" ); 754 preCommand.insert( len , "\n" );
750 len += maxlen +2; 755 len += maxlen +2;
751 } 756 }
752 question = i18n("Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n").arg (preCommand) ; 757 question = i18n("Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n").arg (preCommand) ;
753 QMessageBox::information( mParent, i18n("Sync - ERROR"), 758 QMessageBox::information( mParent, i18n("Sync - ERROR"),
754 question, 759 question,
755 i18n("Okay!")) ; 760 i18n("Okay!")) ;
756 mParent->topLevelWidget()->setCaption ("KDE-Pim"); 761 mParent->topLevelWidget()->setCaption ("KDE-Pim");
757 return; 762 return;
758 } 763 }
759 mParent->topLevelWidget()->setCaption ( i18n( "Copying succeed." ) ); 764 mParent->topLevelWidget()->setCaption ( i18n( "Copying succeed." ) );
760 //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() ); 765 //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() );
761 766
762 if ( syncWithFile( localTempFile, true ) ) { 767 if ( syncWithFile( localTempFile, true ) ) {
763 768
764 if ( mWriteBackFile ) { 769 if ( mWriteBackFile ) {
765 int fi; 770 int fi;
766 if ( (fi = postCommand.find("$PWD$")) > 0 ) { 771 if ( (fi = postCommand.find("$PWD$")) > 0 ) {
767 QString pwd = getPassword(); 772 QString pwd = getPassword();
768 postCommand = postCommand.left( fi )+ pwd + postCommand.mid( fi+5 ); 773 postCommand = postCommand.left( fi )+ pwd + postCommand.mid( fi+5 );
769 774
770 } 775 }
771 mParent->topLevelWidget()->setCaption ( i18n( "Writing back file ..." ) ); 776 mParent->topLevelWidget()->setCaption ( i18n( "Writing back file ..." ) );
772 result = system ( postCommand ); 777 result = system ( postCommand );
773 qDebug("KSM::Sync:Writing back file result: %d ", result); 778 qDebug("KSM::Sync:Writing back file result: %d ", result);
774 if ( result != 0 ) { 779 if ( result != 0 ) {
775 mParent->topLevelWidget()->setCaption ( i18n( "Writing back file result: " )+QString::number( result ) ); 780 mParent->topLevelWidget()->setCaption ( i18n( "Writing back file result: " )+QString::number( result ) );
776 return; 781 return;
777 } else { 782 } else {
778 mParent->topLevelWidget()->setCaption ( i18n( "Syncronization sucessfully completed" ) ); 783 mParent->topLevelWidget()->setCaption ( i18n( "Syncronization sucessfully completed" ) );
779 } 784 }
780 } 785 }
781 } 786 }
782 return; 787 return;
783} 788}
784bool KSyncManager::edit_pisync_options() 789bool KSyncManager::edit_pisync_options()
785{ 790{
786 QDialog dia( mParent, "dia", true ); 791 QDialog dia( mParent, "dia", true );
787 dia.setCaption( i18n("Pi-Sync options for device: " ) +mCurrentSyncDevice ); 792 dia.setCaption( i18n("Pi-Sync options for device: " ) +mCurrentSyncDevice );
788 QVBoxLayout lay ( &dia ); 793 QVBoxLayout lay ( &dia );
789 lay.setSpacing( 5 ); 794 lay.setSpacing( 5 );
790 lay.setMargin( 3 ); 795 lay.setMargin( 3 );
791 QLabel lab1 ( i18n("Password for remote access:"), &dia); 796 QLabel lab1 ( i18n("Password for remote access:"), &dia);
792 lay.addWidget( &lab1 ); 797 lay.addWidget( &lab1 );
793 QLineEdit le1 (&dia ); 798 QLineEdit le1 (&dia );
794 lay.addWidget( &le1 ); 799 lay.addWidget( &le1 );
795 QLabel lab2 ( i18n("Remote IP address:"), &dia); 800 QLabel lab2 ( i18n("Remote IP address:"), &dia);
796 lay.addWidget( &lab2 ); 801 lay.addWidget( &lab2 );
797 QLineEdit le2 (&dia ); 802 QLineEdit le2 (&dia );
798 lay.addWidget( &le2 ); 803 lay.addWidget( &le2 );
799 QLabel lab3 ( i18n("Remote port number:"), &dia); 804 QLabel lab3 ( i18n("Remote port number:\n(May be: 1 - 65535)"), &dia);
800 lay.addWidget( &lab3 ); 805 lay.addWidget( &lab3 );
801 QLineEdit le3 (&dia ); 806 QLineEdit le3 (&dia );
802 lay.addWidget( &le3 ); 807 lay.addWidget( &le3 );
803 QPushButton pb ( "OK", &dia); 808 QPushButton pb ( "OK", &dia);
804 lay.addWidget( &pb ); 809 lay.addWidget( &pb );
805 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 810 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
806 le1.setText( mPassWordPiSync ); 811 le1.setText( mPassWordPiSync );
807 le2.setText( mActiveSyncIP ); 812 le2.setText( mActiveSyncIP );
808 le3.setText( mActiveSyncPort ); 813 le3.setText( mActiveSyncPort );
809 if ( dia.exec() ) { 814 if ( dia.exec() ) {
810 mPassWordPiSync = le1.text(); 815 mPassWordPiSync = le1.text();
811 mActiveSyncPort = le3.text(); 816 mActiveSyncPort = le3.text();
812 mActiveSyncIP = le2.text(); 817 mActiveSyncIP = le2.text();
813 return true; 818 return true;
814 } 819 }
815 return false; 820 return false;
816} 821}
817bool KSyncManager::edit_sync_options() 822bool KSyncManager::edit_sync_options()
818{ 823{
819 824
820 QDialog dia( mParent, "dia", true ); 825 QDialog dia( mParent, "dia", true );
821 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice ); 826 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice );
822 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia); 827 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia);
823 QVBoxLayout lay ( &dia ); 828 QVBoxLayout lay ( &dia );
824 lay.setSpacing( 2 ); 829 lay.setSpacing( 2 );
825 lay.setMargin( 3 ); 830 lay.setMargin( 3 );
826 lay.addWidget(&gr); 831 lay.addWidget(&gr);
827 QRadioButton loc ( i18n("Take local entry on conflict"), &gr ); 832 QRadioButton loc ( i18n("Take local entry on conflict"), &gr );
828 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr ); 833 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr );
829 QRadioButton newest( i18n("Take newest entry on conflict"), &gr ); 834 QRadioButton newest( i18n("Take newest entry on conflict"), &gr );
830 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr ); 835 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr );
831 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr ); 836 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr );
832 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr ); 837 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr );
833 //QRadioButton both( i18n("Take both on conflict"), &gr ); 838 //QRadioButton both( i18n("Take both on conflict"), &gr );
834 QPushButton pb ( "OK", &dia); 839 QPushButton pb ( "OK", &dia);
835 lay.addWidget( &pb ); 840 lay.addWidget( &pb );
836 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 841 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
837 switch ( mSyncAlgoPrefs ) { 842 switch ( mSyncAlgoPrefs ) {
838 case 0: 843 case 0:
839 loc.setChecked( true); 844 loc.setChecked( true);
840 break; 845 break;
841 case 1: 846 case 1:
842 rem.setChecked( true ); 847 rem.setChecked( true );
843 break; 848 break;
844 case 2: 849 case 2:
845 newest.setChecked( true); 850 newest.setChecked( true);
846 break; 851 break;
847 case 3: 852 case 3:
848 ask.setChecked( true); 853 ask.setChecked( true);
849 break; 854 break;
850 case 4: 855 case 4:
851 f_loc.setChecked( true); 856 f_loc.setChecked( true);
852 break; 857 break;
853 case 5: 858 case 5:
854 f_rem.setChecked( true); 859 f_rem.setChecked( true);
855 break; 860 break;
856 case 6: 861 case 6:
857 // both.setChecked( true); 862 // both.setChecked( true);
858 break; 863 break;
859 default: 864 default:
860 break; 865 break;
861 } 866 }
862 if ( dia.exec() ) { 867 if ( dia.exec() ) {
863 mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ; 868 mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ;
864 return true; 869 return true;
865 } 870 }
866 return false; 871 return false;
867} 872}
868 873
869QString KSyncManager::getPassword( ) 874QString KSyncManager::getPassword( )
870{ 875{
871 QString retfile = ""; 876 QString retfile = "";
872 QDialog dia ( mParent, "input-dialog", true ); 877 QDialog dia ( mParent, "input-dialog", true );
873 QLineEdit lab ( &dia ); 878 QLineEdit lab ( &dia );
874 lab.setEchoMode( QLineEdit::Password ); 879 lab.setEchoMode( QLineEdit::Password );
875 QVBoxLayout lay( &dia ); 880 QVBoxLayout lay( &dia );
876 lay.setMargin(7); 881 lay.setMargin(7);
877 lay.setSpacing(7); 882 lay.setSpacing(7);
878 lay.addWidget( &lab); 883 lay.addWidget( &lab);
879 dia.setFixedSize( 230,50 ); 884 dia.setFixedSize( 230,50 );
880 dia.setCaption( i18n("Enter password") ); 885 dia.setCaption( i18n("Enter password") );
881 QPushButton pb ( "OK", &dia); 886 QPushButton pb ( "OK", &dia);
882 lay.addWidget( &pb ); 887 lay.addWidget( &pb );
883 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 888 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
884 dia.show(); 889 dia.show();
885 int res = dia.exec(); 890 int res = dia.exec();
886 if ( res ) 891 if ( res )
887 retfile = lab.text(); 892 retfile = lab.text();
888 dia.hide(); 893 dia.hide();
889 qApp->processEvents(); 894 qApp->processEvents();
890 return retfile; 895 return retfile;
891 896
892} 897}
893 898
894 899
895void KSyncManager::confSync() 900void KSyncManager::confSync()
@@ -1095,561 +1100,615 @@ QString KSyncManager::syncFileName()
1095 fn = "tempsyncpw.pwm"; 1100 fn = "tempsyncpw.pwm";
1096 break; 1101 break;
1097 default: 1102 default:
1098 break; 1103 break;
1099 } 1104 }
1100#ifdef _WIN32_ 1105#ifdef _WIN32_
1101 return locateLocal( "tmp", fn ); 1106 return locateLocal( "tmp", fn );
1102#else 1107#else
1103 return (QString( "/tmp/" )+ fn ); 1108 return (QString( "/tmp/" )+ fn );
1104#endif 1109#endif
1105} 1110}
1106 1111
1107void KSyncManager::syncPi() 1112void KSyncManager::syncPi()
1108{ 1113{
1109 mIsKapiFile = true; 1114 mIsKapiFile = true;
1110 mPisyncFinished = false; 1115 mPisyncFinished = false;
1111 qApp->processEvents(); 1116 qApp->processEvents();
1112 if ( mAskForPreferences ) 1117 if ( mAskForPreferences )
1113 if ( !edit_pisync_options()) { 1118 if ( !edit_pisync_options()) {
1114 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") ); 1119 mParent->topLevelWidget()->setCaption( i18n("Syncing aborted. Nothing synced.") );
1115 mPisyncFinished = true; 1120 mPisyncFinished = true;
1116 return; 1121 return;
1117 } 1122 }
1118 bool ok; 1123 bool ok;
1119 Q_UINT16 port = mActiveSyncPort.toUInt(&ok); 1124 Q_UINT16 port = mActiveSyncPort.toUInt(&ok);
1120 if ( ! ok ) { 1125 if ( ! ok ) {
1121 mParent->topLevelWidget()->setCaption( i18n("Sorry, no valid port.Syncing cancelled.") ); 1126 mParent->topLevelWidget()->setCaption( i18n("Sorry, no valid port.Syncing cancelled.") );
1122 mPisyncFinished = true; 1127 mPisyncFinished = true;
1123 return; 1128 return;
1124 } 1129 }
1125 KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() ); 1130 KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() );
1126 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) ); 1131 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) );
1127 commandSocket->readFile( syncFileName() ); 1132 commandSocket->readFile( syncFileName() );
1128} 1133}
1129 1134
1130void KSyncManager::deleteCommandSocket(KCommandSocket*s, int state) 1135void KSyncManager::deleteCommandSocket(KCommandSocket*s, int state)
1131{ 1136{
1132 //enum { success, errorW, errorR, quiet }; 1137 //enum { success, errorW, errorR, quiet };
1133 1138
1134 1139
1135 1140
1136 if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO ||state == KCommandSocket::errorPW || 1141 if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO ||state == KCommandSocket::errorPW ||
1137 state == KCommandSocket::errorCA ||state == KCommandSocket::errorFI ||state == KCommandSocket::errorUN||state == KCommandSocket::errorED ) { 1142 state == KCommandSocket::errorCA ||state == KCommandSocket::errorFI ||state == KCommandSocket::errorUN||state == KCommandSocket::errorED ) {
1138 if ( state == KCommandSocket::errorPW ) 1143 if ( state == KCommandSocket::errorPW )
1139 mParent->topLevelWidget()->setCaption( i18n("Wrong password: Receiving remote file failed.") ); 1144 mParent->topLevelWidget()->setCaption( i18n("Wrong password: Receiving remote file failed.") );
1140 else if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO ) 1145 else if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO )
1141 mParent->topLevelWidget()->setCaption( i18n("ERROR: Receiving remote file failed.") ); 1146 mParent->topLevelWidget()->setCaption( i18n("ERROR: Receiving remote file failed.") );
1142 else if ( state == KCommandSocket::errorCA ) 1147 else if ( state == KCommandSocket::errorCA )
1143 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled from remote.") ); 1148 mParent->topLevelWidget()->setCaption( i18n("Sync cancelled from remote.") );
1144 else if ( state == KCommandSocket::errorFI ) 1149 else if ( state == KCommandSocket::errorFI )
1145 mParent->topLevelWidget()->setCaption( i18n("File error on remote.") ); 1150 mParent->topLevelWidget()->setCaption( i18n("File error on remote.") );
1146 else if ( state == KCommandSocket::errorED ) 1151 else if ( state == KCommandSocket::errorED )
1147 mParent->topLevelWidget()->setCaption( i18n("Please close error dialog on remote.") ); 1152 mParent->topLevelWidget()->setCaption( i18n("Please close error dialog on remote.") );
1148 else if ( state == KCommandSocket::errorUN ) 1153 else if ( state == KCommandSocket::errorUN )
1149 mParent->topLevelWidget()->setCaption( i18n("Unknown error on remote.") ); 1154 mParent->topLevelWidget()->setCaption( i18n("Unknown error on remote.") );
1150 delete s; 1155 delete s;
1151 if ( state == KCommandSocket::errorR ) { 1156 if ( state == KCommandSocket::errorR ) {
1152 KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget()); 1157 KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget());
1153 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) ); 1158 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) );
1154 commandSocket->sendStop(); 1159 commandSocket->sendStop();
1155 } 1160 }
1156 mPisyncFinished = true; 1161 mPisyncFinished = true;
1157 return; 1162 return;
1158 1163
1159 } else if ( state == KCommandSocket::errorW ) { 1164 } else if ( state == KCommandSocket::errorW ) {
1160 mParent->topLevelWidget()->setCaption( i18n("ERROR:Writing back file failed.") ); 1165 mParent->topLevelWidget()->setCaption( i18n("ERROR:Writing back file failed.") );
1161 mPisyncFinished = true; 1166 mPisyncFinished = true;
1162 1167
1163 } else if ( state == KCommandSocket::successR ) { 1168 } else if ( state == KCommandSocket::successR ) {
1164 QTimer::singleShot( 1, this , SLOT ( readFileFromSocket())); 1169 QTimer::singleShot( 1, this , SLOT ( readFileFromSocket()));
1165 1170
1166 } else if ( state == KCommandSocket::successW ) { 1171 } else if ( state == KCommandSocket::successW ) {
1167 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync successful!") ); 1172 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync successful!") );
1168 mPisyncFinished = true; 1173 mPisyncFinished = true;
1169 } else if ( state == KCommandSocket::quiet ){ 1174 } else if ( state == KCommandSocket::quiet ){
1170 qDebug("KSS: quiet "); 1175 qDebug("KSS: quiet ");
1171 mPisyncFinished = true; 1176 mPisyncFinished = true;
1172 } else { 1177 } else {
1173 qDebug("KSS: Error: unknown state: %d ", state); 1178 qDebug("KSS: Error: unknown state: %d ", state);
1174 mPisyncFinished = true; 1179 mPisyncFinished = true;
1175 } 1180 }
1176 1181
1177 delete s; 1182 delete s;
1178} 1183}
1179 1184
1180void KSyncManager::readFileFromSocket() 1185void KSyncManager::readFileFromSocket()
1181{ 1186{
1182 QString fileName = syncFileName(); 1187 QString fileName = syncFileName();
1183 bool syncOK = true; 1188 bool syncOK = true;
1184 mParent->topLevelWidget()->setCaption( i18n("Remote file saved to temp file.") ); 1189 mParent->topLevelWidget()->setCaption( i18n("Remote file saved to temp file.") );
1185 if ( ! syncWithFile( fileName , true ) ) { 1190 if ( ! syncWithFile( fileName , true ) ) {
1186 mParent->topLevelWidget()->setCaption( i18n("Syncing failed.") ); 1191 mParent->topLevelWidget()->setCaption( i18n("Syncing failed.") );
1187 syncOK = false; 1192 syncOK = false;
1188 } 1193 }
1189 KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget() ); 1194 KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget() );
1190 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) ); 1195 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) );
1191 if ( mWriteBackFile && syncOK ) 1196 if ( mWriteBackFile && syncOK ) {
1197 mParent->topLevelWidget()->setCaption( i18n("Sending back file ...") );
1192 commandSocket->writeFile( fileName ); 1198 commandSocket->writeFile( fileName );
1199 }
1193 else { 1200 else {
1194 commandSocket->sendStop(); 1201 commandSocket->sendStop();
1195 if ( syncOK ) 1202 if ( syncOK )
1196 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync succesful!") ); 1203 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync succesful!") );
1197 mPisyncFinished = true; 1204 mPisyncFinished = true;
1198 } 1205 }
1199} 1206}
1200 1207
1201KServerSocket:: KServerSocket ( QString pw, Q_UINT16 port, int backlog, QObject * parent, const char * name ) : QServerSocket( port, backlog, parent, name ) 1208KServerSocket:: KServerSocket ( QString pw, Q_UINT16 port, int backlog, QObject * parent, const char * name ) : QServerSocket( port, backlog, parent, name )
1202{ 1209{
1203 mPassWord = pw; 1210 mPassWord = pw;
1204 mSocket = 0; 1211 mSocket = 0;
1205 mSyncActionDialog = 0; 1212 mSyncActionDialog = 0;
1206 blockRC = false; 1213 blockRC = false;
1207 mErrorMessage = 0; 1214 mErrorMessage = 0;
1208} 1215}
1209 1216
1210void KServerSocket::newConnection ( int socket ) 1217void KServerSocket::newConnection ( int socket )
1211{ 1218{
1212 // qDebug("KServerSocket:New connection %d ", socket); 1219 // qDebug("KServerSocket:New connection %d ", socket);
1213 if ( mSocket ) { 1220 if ( mSocket ) {
1214 qDebug("KSS::newConnection Socket deleted! "); 1221 qDebug("KSS::newConnection Socket deleted! ");
1215 delete mSocket; 1222 delete mSocket;
1216 mSocket = 0; 1223 mSocket = 0;
1217 } 1224 }
1218 mSocket = new QSocket( this ); 1225 mSocket = new QSocket( this );
1219 connect( mSocket , SIGNAL(readyRead()), this, SLOT(readClient()) ); 1226 connect( mSocket , SIGNAL(readyRead()), this, SLOT(readClient()) );
1220 connect( mSocket , SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) ); 1227 connect( mSocket , SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) );
1221 mSocket->setSocket( socket ); 1228 mSocket->setSocket( socket );
1222} 1229}
1223 1230
1224void KServerSocket::discardClient() 1231void KServerSocket::discardClient()
1225{ 1232{
1226 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1233 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1227} 1234}
1228void KServerSocket::deleteSocket() 1235void KServerSocket::deleteSocket()
1229{ 1236{
1230 qDebug("KSS::deleteSocket"); 1237 qDebug("KSS::deleteSocket");
1231 if ( mSocket ) { 1238 if ( mSocket ) {
1232 delete mSocket; 1239 delete mSocket;
1233 mSocket = 0; 1240 mSocket = 0;
1234 } 1241 }
1235 if ( mErrorMessage ) 1242 if ( mErrorMessage )
1236 QTimer::singleShot( 10, this , SLOT ( displayErrorMessage())); 1243 QTimer::singleShot( 10, this , SLOT ( displayErrorMessage()));
1237} 1244}
1238void KServerSocket::readClient() 1245void KServerSocket::readClient()
1239{ 1246{
1240 if ( blockRC ) 1247 if ( blockRC )
1241 return; 1248 return;
1242 if ( mSocket == 0 ) { 1249 if ( mSocket == 0 ) {
1243 qDebug("ERROR::KSS::readClient(): mSocket == 0 "); 1250 qDebug("ERROR::KSS::readClient(): mSocket == 0 ");
1244 return; 1251 return;
1245 } 1252 }
1246 if ( mErrorMessage ) { 1253 if ( mErrorMessage ) {
1247 mErrorMessage = 999; 1254 mErrorMessage = 999;
1248 error_connect("ERROR_ED\r\n\r\n"); 1255 error_connect("ERROR_ED\r\n\r\n");
1249 return; 1256 return;
1250 } 1257 }
1251 mErrorMessage = 0; 1258 mErrorMessage = 0;
1252 //qDebug("KServerSocket::readClient()"); 1259 //qDebug("KServerSocket::readClient()");
1253 if ( mSocket->canReadLine() ) { 1260 if ( mSocket->canReadLine() ) {
1254 QString line = mSocket->readLine(); 1261 QString line = mSocket->readLine();
1255 //qDebug("KServerSocket readline: %s ", line.latin1()); 1262 //qDebug("KServerSocket readline: %s ", line.latin1());
1256 QStringList tokens = QStringList::split( QRegExp("[ \r\n][ \r\n]*"), line ); 1263 QStringList tokens = QStringList::split( QRegExp("[ \r\n][ \r\n]*"), line );
1257 if ( tokens[0] == "GET" ) { 1264 if ( tokens[0] == "GET" ) {
1258 if ( tokens[1] == mPassWord ) { 1265 if ( tokens[1] == mPassWord ) {
1259 //emit sendFile( mSocket ); 1266 //emit sendFile( mSocket );
1260 bool ok = false; 1267 bool ok = false;
1261 QDateTime dt = KGlobal::locale()->readDateTime( tokens[2], KLocale::ISODate, &ok); 1268 QDateTime dt = KGlobal::locale()->readDateTime( tokens[2], KLocale::ISODate, &ok);
1262 if ( ok ) { 1269 if ( ok ) {
1263 KSyncManager::mRequestedSyncEvent = dt; 1270 KSyncManager::mRequestedSyncEvent = dt;
1264 } 1271 }
1265 else 1272 else
1266 KSyncManager::mRequestedSyncEvent = QDateTime(); 1273 KSyncManager::mRequestedSyncEvent = QDateTime();
1267 send_file(); 1274 send_file();
1268 } 1275 }
1269 else { 1276 else {
1270 mErrorMessage = 1; 1277 mErrorMessage = 1;
1271 error_connect("ERROR_PW\r\n\r\n"); 1278 error_connect("ERROR_PW\r\n\r\n");
1272 } 1279 }
1273 } 1280 }
1274 if ( tokens[0] == "PUT" ) { 1281 if ( tokens[0] == "PUT" ) {
1275 if ( tokens[1] == mPassWord ) { 1282 if ( tokens[1] == mPassWord ) {
1276 //emit getFile( mSocket ); 1283 //emit getFile( mSocket );
1277 blockRC = true; 1284 blockRC = true;
1278 get_file(); 1285 get_file();
1279 } 1286 }
1280 else { 1287 else {
1281 mErrorMessage = 2; 1288 mErrorMessage = 2;
1282 error_connect("ERROR_PW\r\n\r\n"); 1289 error_connect("ERROR_PW\r\n\r\n");
1283 end_connect(); 1290 end_connect();
1284 } 1291 }
1285 } 1292 }
1286 if ( tokens[0] == "STOP" ) { 1293 if ( tokens[0] == "STOP" ) {
1287 //emit endConnect(); 1294 //emit endConnect();
1288 end_connect(); 1295 end_connect();
1289 } 1296 }
1290 } 1297 }
1291} 1298}
1292void KServerSocket::displayErrorMessage() 1299void KServerSocket::displayErrorMessage()
1293{ 1300{
1294 if ( mErrorMessage == 1 ) { 1301 if ( mErrorMessage == 1 ) {
1295 KMessageBox::error( 0, i18n("Got send file request\nwith invalid password")); 1302 KMessageBox::error( 0, i18n("Got send file request\nwith invalid password"), i18n("Pi-Sync Error"));
1296 mErrorMessage = 0; 1303 mErrorMessage = 0;
1297 } 1304 }
1298 else if ( mErrorMessage == 2 ) { 1305 else if ( mErrorMessage == 2 ) {
1299 KMessageBox::error( 0, i18n("Got receive file request\nwith invalid password")); 1306 KMessageBox::error( 0, i18n("Got receive file request\nwith invalid password"), i18n("Pi-Sync Error"));
1300 mErrorMessage = 0; 1307 mErrorMessage = 0;
1301 } 1308 }
1302} 1309}
1303void KServerSocket::error_connect( QString errmess ) 1310void KServerSocket::error_connect( QString errmess )
1304{ 1311{
1305 QTextStream os( mSocket ); 1312 QTextStream os( mSocket );
1306 os.setEncoding( QTextStream::Latin1 ); 1313 os.setEncoding( QTextStream::Latin1 );
1307 os << errmess ; 1314 os << errmess ;
1308 mSocket->close(); 1315 mSocket->close();
1309 if ( mSocket->state() == QSocket::Idle ) { 1316 if ( mSocket->state() == QSocket::Idle ) {
1310 QTimer::singleShot( 0, this , SLOT ( discardClient())); 1317 QTimer::singleShot( 0, this , SLOT ( discardClient()));
1311 } 1318 }
1312} 1319}
1313void KServerSocket::end_connect() 1320void KServerSocket::end_connect()
1314{ 1321{
1315 delete mSyncActionDialog; 1322 delete mSyncActionDialog;
1316 mSyncActionDialog = 0; 1323 mSyncActionDialog = 0;
1317} 1324}
1318void KServerSocket::send_file() 1325void KServerSocket::send_file()
1319{ 1326{
1320 //qDebug("MainWindow::sendFile(QSocket* s) "); 1327 //qDebug("MainWindow::sendFile(QSocket* s) ");
1321 if ( mSyncActionDialog ) 1328 if ( mSyncActionDialog )
1322 delete mSyncActionDialog; 1329 delete mSyncActionDialog;
1323 mSyncActionDialog = new QDialog ( 0, "input-dialog", true ); 1330 mSyncActionDialog = new QDialog ( 0, "input-dialog", true );
1324 mSyncActionDialog->setCaption(i18n("Received sync request")); 1331 mSyncActionDialog->setCaption(i18n("Received sync request"));
1325 QLabel* label = new QLabel( i18n("Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog."), mSyncActionDialog ); 1332 QLabel* label = new QLabel( i18n("Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog."), mSyncActionDialog );
1326 label->setAlignment ( Qt::AlignHCenter ); 1333 label->setAlignment ( Qt::AlignHCenter );
1327 QVBoxLayout* lay = new QVBoxLayout( mSyncActionDialog ); 1334 QVBoxLayout* lay = new QVBoxLayout( mSyncActionDialog );
1328 lay->addWidget( label); 1335 lay->addWidget( label);
1329 lay->setMargin(7); 1336 lay->setMargin(7);
1330 lay->setSpacing(7); 1337 lay->setSpacing(7);
1331 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 1338 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
1332 int secs = QDateTime::currentDateTime().secsTo( KSyncManager::mRequestedSyncEvent ); 1339 int secs = QDateTime::currentDateTime().secsTo( KSyncManager::mRequestedSyncEvent );
1333 //secs = 333; 1340 //secs = 333;
1334 if ( secs < 0 ) 1341 if ( secs < 0 )
1335 secs = secs * (-1); 1342 secs = secs * (-1);
1336 if ( secs > 30 ) 1343 if ( secs > 30 )
1337 //if ( true ) 1344 //if ( true )
1338 { 1345 {
1339 QString warning = i18n("Clock skew of\nsyncing devices\nis %1 seconds!").arg( secs ); 1346 QString warning = i18n("Clock skew of\nsyncing devices\nis %1 seconds!").arg( secs );
1340 QLabel* label = new QLabel( warning, mSyncActionDialog ); 1347 QLabel* label = new QLabel( warning, mSyncActionDialog );
1341 label->setAlignment ( Qt::AlignHCenter ); 1348 label->setAlignment ( Qt::AlignHCenter );
1342 lay->addWidget( label); 1349 lay->addWidget( label);
1343 if ( secs > 180 ) 1350 if ( secs > 180 )
1344 { 1351 {
1345 if ( secs > 300 ) { 1352 if ( secs > 300 ) {
1346 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(0, i18n("The clocks of the syncing\ndevices have a difference\nof more than 5 minutes.\nPlease adjust your clocks.\nYou may get wrong syncing results!\nPlease confirm synchronization!"), i18n("High clock skew!"),i18n("Synchronize!"))) { 1353 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(0, i18n("The clocks of the syncing\ndevices have a difference\nof more than 5 minutes.\nPlease adjust your clocks.\nYou may get wrong syncing results!\nPlease confirm synchronization!"), i18n("High clock skew!"),i18n("Synchronize!"))) {
1347 qDebug("KSS::Sync cancelled ,cs"); 1354 qDebug("KSS::Sync cancelled ,cs");
1348 mErrorMessage = 0; 1355 mErrorMessage = 0;
1349 end_connect(); 1356 end_connect();
1350 error_connect("ERROR_CA\r\n\r\n"); 1357 error_connect("ERROR_CA\r\n\r\n");
1351 return ; 1358 return ;
1352 } 1359 }
1353 } 1360 }
1354 QFont f = label->font(); 1361 QFont f = label->font();
1355 f.setPointSize ( f.pointSize() *2 ); 1362 f.setPointSize ( f.pointSize() *2 );
1356 f. setBold (true ); 1363 f. setBold (true );
1357 QLabel* label = new QLabel( warning, mSyncActionDialog ); 1364 QLabel* label = new QLabel( warning, mSyncActionDialog );
1358 label->setFont( f ); 1365 label->setFont( f );
1359 warning = i18n("ADJUST\nYOUR\nCLOCKS!"); 1366 warning = i18n("ADJUST\nYOUR\nCLOCKS!");
1360 label->setText( warning ); 1367 label->setText( warning );
1361 label->setAlignment ( Qt::AlignHCenter ); 1368 label->setAlignment ( Qt::AlignHCenter );
1362 lay->addWidget( label); 1369 lay->addWidget( label);
1363 mSyncActionDialog->setFixedSize( 230, 300); 1370 mSyncActionDialog->setFixedSize( 230, 300);
1364 } else { 1371 } else {
1365 mSyncActionDialog->setFixedSize( 230, 200); 1372 mSyncActionDialog->setFixedSize( 230, 200);
1366 } 1373 }
1367 } else { 1374 } else {
1368 mSyncActionDialog->setFixedSize( 230, 120); 1375 mSyncActionDialog->setFixedSize( 230, 120);
1369 } 1376 }
1370 } else 1377 } else
1371 mSyncActionDialog->setFixedSize( 230, 120); 1378 mSyncActionDialog->setFixedSize( 230, 120);
1372 mSyncActionDialog->show(); 1379 mSyncActionDialog->show();
1373 mSyncActionDialog->raise(); 1380 mSyncActionDialog->raise();
1374 emit request_file(); 1381 emit request_file();
1375 qApp->processEvents(); 1382 qApp->processEvents();
1376 QString fileName = mFileName; 1383 QString fileName = mFileName;
1377 QFile file( fileName ); 1384 QFile file( fileName );
1378 if (!file.open( IO_ReadOnly ) ) { 1385 if (!file.open( IO_ReadOnly ) ) {
1379 mErrorMessage = 0; 1386 mErrorMessage = 0;
1380 end_connect(); 1387 end_connect();
1381 error_connect("ERROR_FI\r\n\r\n"); 1388 error_connect("ERROR_FI\r\n\r\n");
1382 return ; 1389 return ;
1383 } 1390 }
1384 mSyncActionDialog->setCaption( i18n("Sending file...") ); 1391 mSyncActionDialog->setCaption( i18n("Sending file...") );
1385 QTextStream ts( &file ); 1392 QTextStream ts( &file );
1386 ts.setEncoding( QTextStream::Latin1 ); 1393 ts.setEncoding( QTextStream::Latin1 );
1387 1394
1388 QTextStream os( mSocket ); 1395 QTextStream os( mSocket );
1389 os.setEncoding( QTextStream::Latin1 ); 1396 os.setEncoding( QTextStream::Latin1 );
1390 while ( ! ts.atEnd() ) { 1397 while ( ! ts.atEnd() ) {
1391 os << ts.readLine() << "\r\n"; 1398 os << ts.readLine() << "\r\n";
1392 } 1399 }
1393 os << "\r\n"; 1400 os << "\r\n";
1394 //os << ts.read(); 1401 //os << ts.read();
1395 file.close(); 1402 file.close();
1396 mSyncActionDialog->setCaption( i18n("Waiting for synced file...") ); 1403 mSyncActionDialog->setCaption( i18n("Waiting for synced file...") );
1397 mSocket->close(); 1404 mSocket->close();
1398 if ( mSocket->state() == QSocket::Idle ) 1405 if ( mSocket->state() == QSocket::Idle )
1399 QTimer::singleShot( 10, this , SLOT ( discardClient())); 1406 QTimer::singleShot( 10, this , SLOT ( discardClient()));
1400} 1407}
1401void KServerSocket::get_file() 1408void KServerSocket::get_file()
1402{ 1409{
1403 mSyncActionDialog->setCaption( i18n("Receiving synced file...") ); 1410 mSyncActionDialog->setCaption( i18n("Receiving synced file...") );
1404 1411
1405 piTime.start(); 1412 piTime.start();
1406 piFileString = ""; 1413 piFileString = "";
1407 QTimer::singleShot( 1, this , SLOT (readBackFileFromSocket( ) )); 1414 QTimer::singleShot( 1, this , SLOT (readBackFileFromSocket( ) ));
1408} 1415}
1409 1416
1410 1417
1411void KServerSocket::readBackFileFromSocket() 1418void KServerSocket::readBackFileFromSocket()
1412{ 1419{
1413 //qDebug("readBackFileFromSocket() %d ", piTime.elapsed ()); 1420 //qDebug("readBackFileFromSocket() %d ", piTime.elapsed ());
1414 while ( mSocket->canReadLine () ) { 1421 while ( mSocket->canReadLine () ) {
1415 piTime.restart(); 1422 piTime.restart();
1416 QString line = mSocket->readLine (); 1423 QString line = mSocket->readLine ();
1417 piFileString += line; 1424 piFileString += line;
1418 //qDebug("readline: %s ", line.latin1()); 1425 //qDebug("readline: %s ", line.latin1());
1419 mSyncActionDialog->setCaption( i18n("Received %1 bytes").arg( piFileString.length() ) ); 1426 mSyncActionDialog->setCaption( i18n("Received %1 bytes").arg( piFileString.length() ) );
1420 1427
1421 } 1428 }
1422 if ( piTime.elapsed () < 3000 ) { 1429 if ( piTime.elapsed () < 3000 ) {
1423 // wait for more 1430 // wait for more
1424 //qDebug("waitformore "); 1431 //qDebug("waitformore ");
1425 QTimer::singleShot( 100, this , SLOT (readBackFileFromSocket( ) )); 1432 QTimer::singleShot( 100, this , SLOT (readBackFileFromSocket( ) ));
1426 return; 1433 return;
1427 } 1434 }
1428 QString fileName = mFileName; 1435 QString fileName = mFileName;
1429 QFile file ( fileName ); 1436 QFile file ( fileName );
1430 if (!file.open( IO_WriteOnly ) ) { 1437 if (!file.open( IO_WriteOnly ) ) {
1431 delete mSyncActionDialog; 1438 delete mSyncActionDialog;
1432 mSyncActionDialog = 0; 1439 mSyncActionDialog = 0;
1433 qDebug("KSS:Error open read back file "); 1440 qDebug("KSS:Error open read back file ");
1434 piFileString = ""; 1441 piFileString = "";
1435 emit file_received( false ); 1442 emit file_received( false );
1436 blockRC = false; 1443 blockRC = false;
1437 return ; 1444 return ;
1438 1445
1439 } 1446 }
1440 1447
1441 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1)); 1448 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1));
1442 QTextStream ts ( &file ); 1449 QTextStream ts ( &file );
1443 ts.setEncoding( QTextStream::Latin1 ); 1450 ts.setEncoding( QTextStream::Latin1 );
1444 mSyncActionDialog->setCaption( i18n("Writing file to disk...") ); 1451 mSyncActionDialog->setCaption( i18n("Writing file to disk...") );
1445 ts << piFileString; 1452 ts << piFileString;
1446 mSocket->close(); 1453 mSocket->close();
1447 if ( mSocket->state() == QSocket::Idle ) 1454 if ( mSocket->state() == QSocket::Idle )
1448 QTimer::singleShot( 10, this , SLOT ( discardClient())); 1455 QTimer::singleShot( 10, this , SLOT ( discardClient()));
1449 file.close(); 1456 file.close();
1450 piFileString = ""; 1457 piFileString = "";
1451 emit file_received( true ); 1458 emit file_received( true );
1452 delete mSyncActionDialog; 1459 delete mSyncActionDialog;
1453 mSyncActionDialog = 0; 1460 mSyncActionDialog = 0;
1454 blockRC = false; 1461 blockRC = false;
1455 1462
1456} 1463}
1457 1464
1458KCommandSocket::KCommandSocket ( QString password, Q_UINT16 port, QString host, QObject * parent, QWidget * cap, const char * name ): QObject( parent, name ) 1465KCommandSocket::KCommandSocket ( QString password, Q_UINT16 port, QString host, QObject * parent, QWidget * cap, const char * name ): QObject( parent, name )
1459{ 1466{
1460 mPassWord = password; 1467 mPassWord = password;
1461 mSocket = 0; 1468 mSocket = 0;
1462 mFirst = false; 1469 mFirst = false;
1463 mFirstLine = true; 1470 mFirstLine = true;
1464 mPort = port; 1471 mPort = port;
1465 mHost = host; 1472 mHost = host;
1466 tlw = cap; 1473 tlw = cap;
1467 mRetVal = quiet; 1474 mRetVal = quiet;
1468 mTimerSocket = new QTimer ( this ); 1475 mTimerSocket = new QTimer ( this );
1469 connect( mTimerSocket, SIGNAL ( timeout () ), this, SLOT ( deleteSocket() ) ); 1476 connect( mTimerSocket, SIGNAL ( timeout () ), this, SLOT ( updateConnectDialog() ) );
1477 mConnectProgress.setCaption( i18n("Pi-Sync") );
1478 connect( &mConnectProgress, SIGNAL ( cancelled () ), this, SLOT ( deleteSocket() ) );
1479 mConnectCount = -1;
1470} 1480}
1471void KCommandSocket::sendFileRequest() 1481void KCommandSocket::sendFileRequest()
1472{ 1482{
1473 if ( tlw ) 1483 if ( tlw )
1474 tlw->setCaption( i18n("Connected! Sending request for remote file ...") ); 1484 tlw->setCaption( i18n("Connected! Sending request for remote file ...") );
1475 mTimerSocket->start( 300000 ); 1485 mConnectProgress.hide();
1486 mConnectCount = 300;mConnectMax = 300;
1487 mConnectProgress.setCaption( i18n("Pi-Sync: Connected!") );
1488 mTimerSocket->start( 100, true );
1476 QTextStream os( mSocket ); 1489 QTextStream os( mSocket );
1477 os.setEncoding( QTextStream::Latin1 ); 1490 os.setEncoding( QTextStream::Latin1 );
1478 1491
1479 QString curDt = " " +KGlobal::locale()->formatDateTime(QDateTime::currentDateTime().addSecs(-1),true, true,KLocale::ISODate ); 1492 QString curDt = " " +KGlobal::locale()->formatDateTime(QDateTime::currentDateTime().addSecs(-1),true, true,KLocale::ISODate );
1480 os << "GET " << mPassWord << curDt <<"\r\n\r\n"; 1493 os << "GET " << mPassWord << curDt <<"\r\n\r\n";
1481} 1494}
1482 1495
1483void KCommandSocket::readFile( QString fn ) 1496void KCommandSocket::readFile( QString fn )
1484{ 1497{
1485 if ( !mSocket ) { 1498 if ( !mSocket ) {
1486 mSocket = new QSocket( this ); 1499 mSocket = new QSocket( this );
1487 connect( mSocket, SIGNAL(readyRead()), this, SLOT(startReadFileFromSocket()) ); 1500 connect( mSocket, SIGNAL(readyRead()), this, SLOT(startReadFileFromSocket()) );
1488 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1501 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1489 connect( mSocket, SIGNAL(connected ()), this, SLOT(sendFileRequest() )); 1502 connect( mSocket, SIGNAL(connected ()), this, SLOT(sendFileRequest() ));
1490 } 1503 }
1491 mFileString = ""; 1504 mFileString = "";
1492 mFileName = fn; 1505 mFileName = fn;
1493 mFirst = true; 1506 mFirst = true;
1494 if ( tlw ) 1507 if ( tlw )
1495 tlw->setCaption( i18n("Trying to connect to remote...") ); 1508 tlw->setCaption( i18n("Trying to connect to remote...") );
1496 mTimerSocket->start( 20000 ); 1509 mConnectCount = 30;mConnectMax = 30;
1510 mTimerSocket->start( 1000, true );
1497 mSocket->connectToHost( mHost, mPort ); 1511 mSocket->connectToHost( mHost, mPort );
1498 qDebug("KSS: Waiting for connection"); 1512 qDebug("KSS: Waiting for connection");
1499} 1513}
1500 1514void KCommandSocket::updateConnectDialog()
1515{
1516
1517 if ( mConnectCount == mConnectMax ) {
1518 //qDebug("MAXX %d", mConnectMax);
1519 mConnectProgress.setTotalSteps ( 30 );
1520 mConnectProgress.show();
1521 mConnectProgress.setLabelText( i18n("Trying to connect to remote...") );
1522 }
1523 //qDebug("updateConnectDialog() %d", mConnectCount);
1524 mConnectProgress.raise();
1525 mConnectProgress.setProgress( (mConnectMax - mConnectCount)%30 );
1526 --mConnectCount;
1527 if ( mConnectCount > 0 )
1528 mTimerSocket->start( 1000, true );
1529 else
1530 deleteSocket();
1531
1532}
1501void KCommandSocket::writeFile( QString fileName ) 1533void KCommandSocket::writeFile( QString fileName )
1502{ 1534{
1503 if ( !mSocket ) { 1535 if ( !mSocket ) {
1504 mSocket = new QSocket( this ); 1536 mSocket = new QSocket( this );
1505 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1537 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1506 connect( mSocket, SIGNAL(connected ()), this, SLOT(writeFileToSocket()) ); 1538 connect( mSocket, SIGNAL(connected ()), this, SLOT(writeFileToSocket()) );
1507 } 1539 }
1508 mFileName = fileName ; 1540 mFileName = fileName ;
1509 mTimerSocket->start( 20000 ); 1541 mConnectCount = 30;mConnectMax = 30;
1542 mTimerSocket->start( 1000, true );
1510 mSocket->connectToHost( mHost, mPort ); 1543 mSocket->connectToHost( mHost, mPort );
1511} 1544}
1512void KCommandSocket::writeFileToSocket() 1545void KCommandSocket::writeFileToSocket()
1513{ 1546{
1514 mTimerSocket->stop(); 1547 mTimerSocket->stop();
1515 QFile file2( mFileName ); 1548 QFile file2( mFileName );
1516 if (!file2.open( IO_ReadOnly ) ) { 1549 if (!file2.open( IO_ReadOnly ) ) {
1550 mConnectProgress.hide();
1551 mConnectCount = -1;
1517 mRetVal= errorW; 1552 mRetVal= errorW;
1518 mSocket->close(); 1553 mSocket->close();
1519 if ( mSocket->state() == QSocket::Idle ) 1554 if ( mSocket->state() == QSocket::Idle )
1520 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1555 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1521 return ; 1556 return ;
1522 } 1557 }
1558 mConnectProgress.setTotalSteps ( file2.size() );
1559 mConnectProgress.show();
1560 int count = 0;
1561 mConnectProgress.setLabelText( i18n("Sending back synced file...") );
1562 mConnectProgress.setProgress( count );
1563 mConnectProgress.blockSignals( true );
1523 QTextStream ts2( &file2 ); 1564 QTextStream ts2( &file2 );
1524 ts2.setEncoding( QTextStream::Latin1 ); 1565 ts2.setEncoding( QTextStream::Latin1 );
1525 QTextStream os2( mSocket ); 1566 QTextStream os2( mSocket );
1526 os2.setEncoding( QTextStream::Latin1 ); 1567 os2.setEncoding( QTextStream::Latin1 );
1527 os2 << "PUT " << mPassWord << "\r\n\r\n";; 1568 os2 << "PUT " << mPassWord << "\r\n\r\n";;
1528 while ( ! ts2.atEnd() ) { 1569 while ( ! ts2.atEnd() ) {
1529 os2 << ts2.readLine() << "\r\n"; 1570 qApp->processEvents();
1571 mConnectProgress.setProgress( count );
1572 QString temp = ts2.readLine();
1573 count += temp.length();
1574 os2 << temp << "\r\n";
1530 } 1575 }
1576 file2.close();
1577 mConnectProgress.hide();
1578 mConnectCount = -1;
1531 os2 << "\r\n"; 1579 os2 << "\r\n";
1532 mRetVal= successW; 1580 mRetVal= successW;
1533 file2.close();
1534 mSocket->close(); 1581 mSocket->close();
1535 if ( mSocket->state() == QSocket::Idle ) 1582 if ( mSocket->state() == QSocket::Idle )
1536 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1583 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1584 mConnectProgress.blockSignals( false );
1537} 1585}
1538void KCommandSocket::sendStop() 1586void KCommandSocket::sendStop()
1539{ 1587{
1540 if ( !mSocket ) { 1588 if ( !mSocket ) {
1541 mSocket = new QSocket( this ); 1589 mSocket = new QSocket( this );
1542 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1590 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1543 } 1591 }
1544 mSocket->connectToHost( mHost, mPort ); 1592 mSocket->connectToHost( mHost, mPort );
1545 QTextStream os2( mSocket ); 1593 QTextStream os2( mSocket );
1546 os2.setEncoding( QTextStream::Latin1 ); 1594 os2.setEncoding( QTextStream::Latin1 );
1547 os2 << "STOP\r\n\r\n"; 1595 os2 << "STOP\r\n\r\n";
1548 mSocket->close(); 1596 mSocket->close();
1549 if ( mSocket->state() == QSocket::Idle ) 1597 if ( mSocket->state() == QSocket::Idle )
1550 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1598 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1551} 1599}
1552 1600
1553void KCommandSocket::startReadFileFromSocket() 1601void KCommandSocket::startReadFileFromSocket()
1554{ 1602{
1555 if ( ! mFirst ) 1603 if ( ! mFirst )
1556 return; 1604 return;
1605 mConnectProgress.setLabelText( i18n("Receiving file from remote...") );
1557 mFirst = false; 1606 mFirst = false;
1558 mTimerSocket->stop();
1559 mFileString = ""; 1607 mFileString = "";
1560 mTime.start(); 1608 mTime.start();
1561 mFirstLine = true; 1609 mFirstLine = true;
1562 QTimer::singleShot( 1, this , SLOT (readFileFromSocket( ) )); 1610 QTimer::singleShot( 1, this , SLOT (readFileFromSocket( ) ));
1563 1611
1564} 1612}
1565void KCommandSocket::readFileFromSocket() 1613void KCommandSocket::readFileFromSocket()
1566{ 1614{
1567 //qDebug("readBackFileFromSocket() %d ", mTime.elapsed ()); 1615 //qDebug("readBackFileFromSocket() %d ", mTime.elapsed ());
1568 while ( mSocket->canReadLine () ) { 1616 while ( mSocket->canReadLine () ) {
1569 mTime.restart(); 1617 mTime.restart();
1570 QString line = mSocket->readLine (); 1618 QString line = mSocket->readLine ();
1571 if ( mFirstLine ) { 1619 if ( mFirstLine ) {
1572 mFirstLine = false; 1620 mFirstLine = false;
1573 if ( line.left( 6 ) == "ERROR_" ) { 1621 if ( line.left( 6 ) == "ERROR_" ) {
1622 mTimerSocket->stop();
1623 mConnectCount = -1;
1574 if ( line.left( 8 ) == "ERROR_PW" ) { 1624 if ( line.left( 8 ) == "ERROR_PW" ) {
1575 mRetVal = errorPW; 1625 mRetVal = errorPW;
1576 deleteSocket(); 1626 deleteSocket();
1577 return ; 1627 return ;
1578 } 1628 }
1579 if ( line.left( 8 ) == "ERROR_CA" ) { 1629 if ( line.left( 8 ) == "ERROR_CA" ) {
1580 mRetVal = errorCA; 1630 mRetVal = errorCA;
1581 deleteSocket(); 1631 deleteSocket();
1582 return ; 1632 return ;
1583 } 1633 }
1584 if ( line.left( 8 ) == "ERROR_FI" ) { 1634 if ( line.left( 8 ) == "ERROR_FI" ) {
1585 mRetVal = errorFI; 1635 mRetVal = errorFI;
1586 deleteSocket(); 1636 deleteSocket();
1587 return ; 1637 return ;
1588 } 1638 }
1589 if ( line.left( 8 ) == "ERROR_ED" ) { 1639 if ( line.left( 8 ) == "ERROR_ED" ) {
1590 mRetVal = errorED; 1640 mRetVal = errorED;
1591 deleteSocket(); 1641 deleteSocket();
1592 return ; 1642 return ;
1593 } 1643 }
1594 mRetVal = errorUN; 1644 mRetVal = errorUN;
1595 deleteSocket(); 1645 deleteSocket();
1596 return ; 1646 return ;
1597 } 1647 }
1598 } 1648 }
1599 mFileString += line; 1649 mFileString += line;
1600 //qDebug("readline: %s ", line.latin1()); 1650 //qDebug("readline: %s ", line.latin1());
1601 } 1651 }
1602 if ( mTime.elapsed () < 3000 ) { 1652 if ( mTime.elapsed () < 3000 ) {
1603 // wait for more 1653 // wait for more
1604 //qDebug("waitformore "); 1654 //qDebug("waitformore ");
1605 QTimer::singleShot( 100, this , SLOT (readFileFromSocket( ) )); 1655 QTimer::singleShot( 100, this , SLOT (readFileFromSocket( ) ));
1606 return; 1656 return;
1607 } 1657 }
1658 mTimerSocket->stop();
1659 mConnectCount = -1;
1660 mConnectProgress.hide();
1608 QString fileName = mFileName; 1661 QString fileName = mFileName;
1609 QFile file ( fileName ); 1662 QFile file ( fileName );
1610 if (!file.open( IO_WriteOnly ) ) { 1663 if (!file.open( IO_WriteOnly ) ) {
1611 mFileString = ""; 1664 mFileString = "";
1612 mRetVal = errorR; 1665 mRetVal = errorR;
1613 qDebug("KSS:Error open temp sync file for writing: %s",fileName.latin1() ); 1666 qDebug("KSS:Error open temp sync file for writing: %s",fileName.latin1() );
1614 deleteSocket(); 1667 deleteSocket();
1615 return ; 1668 return ;
1616 1669
1617 } 1670 }
1618 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1)); 1671 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1));
1619 QTextStream ts ( &file ); 1672 QTextStream ts ( &file );
1620 ts.setEncoding( QTextStream::Latin1 ); 1673 ts.setEncoding( QTextStream::Latin1 );
1621 ts << mFileString; 1674 ts << mFileString;
1622 file.close(); 1675 file.close();
1623 mFileString = ""; 1676 mFileString = "";
1624 mRetVal = successR; 1677 mRetVal = successR;
1625 mSocket->close(); 1678 mSocket->close();
1626 // if state is not idle, deleteSocket(); is called via 1679 // if state is not idle, deleteSocket(); is called via
1627 // connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1680 // connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1628 if ( mSocket->state() == QSocket::Idle ) 1681 if ( mSocket->state() == QSocket::Idle )
1629 deleteSocket(); 1682 deleteSocket();
1630} 1683}
1631 1684
1632void KCommandSocket::deleteSocket() 1685void KCommandSocket::deleteSocket()
1633{ 1686{
1634 //qDebug("KCommandSocket::deleteSocket() "); 1687 //qDebug("KCommandSocket::deleteSocket() ");
1635 if ( mTimerSocket->isActive () ) { 1688 mConnectProgress.hide();
1689
1690 if ( mConnectCount >= 0 ) {
1636 mTimerSocket->stop(); 1691 mTimerSocket->stop();
1637 mRetVal = errorTO; 1692 mRetVal = errorTO;
1638 qDebug("KCS::Connection to remote host timed out"); 1693 qDebug("KCS::Connection to remote host timed out");
1639 if ( mSocket ) { 1694 if ( mSocket ) {
1640 mSocket->close(); 1695 mSocket->close();
1641 //if ( mSocket->state() == QSocket::Idle ) 1696 //if ( mSocket->state() == QSocket::Idle )
1642 // deleteSocket(); 1697 // deleteSocket();
1643 delete mSocket; 1698 delete mSocket;
1644 mSocket = 0; 1699 mSocket = 0;
1645 } 1700 }
1701 if ( mConnectCount == 0 )
1646 KMessageBox::error( 0, i18n("Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?")); 1702 KMessageBox::error( 0, i18n("Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?"));
1703 else if ( tlw )
1704 tlw->setCaption( i18n("Connection to remote host cancelled!") );
1647 emit commandFinished( this, mRetVal ); 1705 emit commandFinished( this, mRetVal );
1648 return; 1706 return;
1649 } 1707 }
1650 //qDebug("KCommandSocket::deleteSocket() %d", mRetVal ); 1708 //qDebug("KCommandSocket::deleteSocket() %d", mRetVal );
1651 if ( mSocket) 1709 if ( mSocket)
1652 delete mSocket; 1710 delete mSocket;
1653 mSocket = 0; 1711 mSocket = 0;
1712 qDebug("commandFinished ");
1654 emit commandFinished( this, mRetVal ); 1713 emit commandFinished( this, mRetVal );
1655} 1714}
diff --git a/libkdepim/ksyncmanager.h b/libkdepim/ksyncmanager.h
index 30ec1e6..e6738b6 100644
--- a/libkdepim/ksyncmanager.h
+++ b/libkdepim/ksyncmanager.h
@@ -1,230 +1,236 @@
1/* 1/*
2 This file is part of KDE-Pim/Pi. 2 This file is part of KDE-Pim/Pi.
3 Copyright (c) 2004 Ulf Schenk 3 Copyright (c) 2004 Ulf Schenk
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19 19
20 $Id$ 20 $Id$
21*/ 21*/
22#ifndef _KSYNCMANAGER_H 22#ifndef _KSYNCMANAGER_H
23#define _KSYNCMANAGER_H 23#define _KSYNCMANAGER_H
24 24
25#include <qobject.h> 25#include <qobject.h>
26#include <qstring.h> 26#include <qstring.h>
27#include <qsocket.h> 27#include <qsocket.h>
28#include <qdatetime.h> 28#include <qdatetime.h>
29#include <qserversocket.h> 29#include <qserversocket.h>
30#include <qtextstream.h> 30#include <qtextstream.h>
31#include <qregexp.h> 31#include <qregexp.h>
32#include <qprogressdialog.h>
32 33
33class QPopupMenu; 34class QPopupMenu;
34class KSyncProfile; 35class KSyncProfile;
35class KPimPrefs; 36class KPimPrefs;
36class QWidget; 37class QWidget;
37class KSyncManager; 38class KSyncManager;
38class KSyncInterface; 39class KSyncInterface;
39class QProgressBar; 40class QProgressBar;
40 41
41 42
42class KServerSocket : public QServerSocket 43class KServerSocket : public QServerSocket
43{ 44{
44 Q_OBJECT 45 Q_OBJECT
45 46
46 public: 47 public:
47 KServerSocket ( QString password, Q_UINT16 port, int backlog = 0, QObject * parent=0, const char * name=0 ); 48 KServerSocket ( QString password, Q_UINT16 port, int backlog = 0, QObject * parent=0, const char * name=0 );
48 49
49 void newConnection ( int socket ) ; 50 void newConnection ( int socket ) ;
50 void setFileName( QString fn ) {mFileName = fn;}; 51 void setFileName( QString fn ) {mFileName = fn;};
51 signals: 52 signals:
52 void file_received( bool ); 53 void file_received( bool );
53 void request_file(); 54 void request_file();
54 void saveFile(); 55 void saveFile();
55 void endConnect(); 56 void endConnect();
56 private slots: 57 private slots:
57 void discardClient(); 58 void discardClient();
58 void deleteSocket(); 59 void deleteSocket();
59 void readClient(); 60 void readClient();
60 void displayErrorMessage(); 61 void displayErrorMessage();
61 void readBackFileFromSocket(); 62 void readBackFileFromSocket();
62 private : 63 private :
63 int mErrorMessage; 64 int mErrorMessage;
64 bool blockRC; 65 bool blockRC;
65 void send_file(); 66 void send_file();
66 void get_file(); 67 void get_file();
67 void end_connect(); 68 void end_connect();
68 void error_connect( QString ); 69 void error_connect( QString );
69 QDialog* mSyncActionDialog; 70 QDialog* mSyncActionDialog;
70 QSocket* mSocket; 71 QSocket* mSocket;
71 QString mPassWord; 72 QString mPassWord;
72 QString mFileName; 73 QString mFileName;
73 QTime piTime; 74 QTime piTime;
74 QString piFileString; 75 QString piFileString;
75}; 76};
76 77
77class KCommandSocket : public QObject 78class KCommandSocket : public QObject
78{ 79{
79 Q_OBJECT 80 Q_OBJECT
80 public: 81 public:
81 enum state { successR, errorR, successW, errorW, errorTO, errorPW, errorCA, errorFI, errorUN, errorED,quiet }; 82 enum state { successR, errorR, successW, errorW, errorTO, errorPW, errorCA, errorFI, errorUN, errorED,quiet };
82 KCommandSocket ( QString password, Q_UINT16 port, QString host, QObject * parent=0, QWidget* cap = 0, const char * name=0 ); 83 KCommandSocket ( QString password, Q_UINT16 port, QString host, QObject * parent=0, QWidget* cap = 0, const char * name=0 );
83 void readFile( QString ); 84 void readFile( QString );
84 void writeFile( QString ); 85 void writeFile( QString );
85 void sendStop(); 86 void sendStop();
86 87
87 private slots : 88 private slots :
88 void sendFileRequest(); 89 void sendFileRequest();
90 void updateConnectDialog();
89 91
90 signals: 92 signals:
91 void commandFinished( KCommandSocket*, int ); 93 void commandFinished( KCommandSocket*, int );
92 private slots: 94 private slots:
93 void startReadFileFromSocket(); 95 void startReadFileFromSocket();
94 void readFileFromSocket(); 96 void readFileFromSocket();
95 void deleteSocket(); 97 void deleteSocket();
96 void writeFileToSocket(); 98 void writeFileToSocket();
97 private : 99 private :
100 int mConnectCount;
101 int mConnectMax;
102 QProgressDialog mConnectProgress;
98 QWidget* tlw; 103 QWidget* tlw;
99 QSocket* mSocket; 104 QSocket* mSocket;
100 QString mPassWord; 105 QString mPassWord;
101 Q_UINT16 mPort; 106 Q_UINT16 mPort;
102 QString mHost; 107 QString mHost;
103 QString mFileName; 108 QString mFileName;
104 QTimer* mTimerSocket; 109 QTimer* mTimerSocket;
105 int mRetVal; 110 int mRetVal;
106 QTime mTime; 111 QTime mTime;
107 QString mFileString; 112 QString mFileString;
108 bool mFirst; 113 bool mFirst;
109 bool mFirstLine; 114 bool mFirstLine;
110}; 115};
111 116
112 117
113class KSyncManager : public QObject 118class KSyncManager : public QObject
114{ 119{
115 Q_OBJECT 120 Q_OBJECT
116 121
117 public: 122 public:
118 enum TargetApp { 123 enum TargetApp {
119 KOPI = 0, 124 KOPI = 0,
120 KAPI = 1, 125 KAPI = 1,
121 PWMPI = 2 }; 126 PWMPI = 2 };
122 127
123 KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu); 128 KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu);
124 ~KSyncManager() ; 129 ~KSyncManager() ;
125 130
126 void multiSync( bool askforPrefs ); 131 void multiSync( bool askforPrefs );
127 bool blockSave() { return mBlockSaveFlag; } 132 bool blockSave() { return mBlockSaveFlag; }
128 void setBlockSave(bool sa) { mBlockSaveFlag = sa; } 133 void setBlockSave(bool sa) { mBlockSaveFlag = sa; }
129 void setDefaultFileName( QString s) ; 134 void setDefaultFileName( QString s) ;
130 QString defaultFileName() { return mDefFileName ;} 135 QString defaultFileName() { return mDefFileName ;}
131 QString syncFileName(); 136 QString syncFileName();
132 void enableQuick( bool ask = true); 137 void enableQuick( bool ask = true);
133 138
134 bool syncWithDesktop () { return mSyncWithDesktop;} 139 bool syncWithDesktop () { return mSyncWithDesktop;}
135 QString getCurrentSyncDevice() { return mCurrentSyncDevice; } 140 QString getCurrentSyncDevice() { return mCurrentSyncDevice; }
136 QString getCurrentSyncName() { return mCurrentSyncName; } 141 QString getCurrentSyncName() { return mCurrentSyncName; }
137 142
138 void showProgressBar(int percentage, QString caption = QString::null, int total=100); 143 void showProgressBar(int percentage, QString caption = QString::null, int total=100);
139 void hideProgressBar(); 144 void hideProgressBar();
140 bool isProgressBarCanceled(); 145 bool isProgressBarCanceled();
141 146
142 // sync stuff 147 // sync stuff
143 QString mLocalMachineName; 148 QString mLocalMachineName;
144 QStringList mExternSyncProfiles; 149 QStringList mExternSyncProfiles;
145 QStringList mSyncProfileNames; 150 QStringList mSyncProfileNames;
146 bool mAskForPreferences; 151 bool mAskForPreferences;
147 bool mShowSyncSummary; 152 bool mShowSyncSummary;
148 bool mIsKapiFile; 153 bool mIsKapiFile;
149 bool mWriteBackExistingOnly; 154 bool mWriteBackExistingOnly;
150 int mSyncAlgoPrefs; 155 int mSyncAlgoPrefs;
151 bool mWriteBackFile; 156 bool mWriteBackFile;
152 int mWriteBackInFuture; 157 int mWriteBackInFuture;
153 int mWriteBackInPast; 158 int mWriteBackInPast;
154 QString mPhoneDevice; 159 QString mPhoneDevice;
155 QString mPhoneConnection; 160 QString mPhoneConnection;
156 QString mPhoneModel; 161 QString mPhoneModel;
157 QString mPassWordPiSync; 162 QString mPassWordPiSync;
158 QString mActiveSyncPort; 163 QString mActiveSyncPort;
159 QString mActiveSyncIP ; 164 QString mActiveSyncIP ;
160 QString mFilterInCal; 165 QString mFilterInCal;
161 QString mFilterOutCal; 166 QString mFilterOutCal;
162 QString mFilterInAB; 167 QString mFilterInAB;
163 QString mFilterOutAB; 168 QString mFilterOutAB;
164 static QDateTime mRequestedSyncEvent; 169 static QDateTime mRequestedSyncEvent;
165 170
166 signals: 171 signals:
167 void save(); 172 void save();
168 void request_file(); 173 void request_file();
169 void getFile( bool ); 174 void getFile( bool );
170 175
171 public slots: 176 public slots:
172 void slotSyncMenu( int ); 177 void slotSyncMenu( int );
173 void slotClearMenu( int action ); 178 void slotClearMenu( int action );
174 void deleteCommandSocket(KCommandSocket*s, int state); 179 void deleteCommandSocket(KCommandSocket*s, int state);
175 void readFileFromSocket(); 180 void readFileFromSocket();
176 void fillSyncMenu(); 181 void fillSyncMenu();
177 182
178 private: 183 private:
179 void syncPi(); 184 void syncPi();
180 KServerSocket * mServerSocket; 185 KServerSocket * mServerSocket;
181 KPimPrefs* mPrefs; 186 KPimPrefs* mPrefs;
182 QString mDefFileName; 187 QString mDefFileName;
183 QString mCurrentSyncDevice; 188 QString mCurrentSyncDevice;
184 QString mCurrentSyncName; 189 QString mCurrentSyncName;
185 void quickSyncLocalFile(); 190 void quickSyncLocalFile();
186 bool syncWithFile( QString fn , bool quick ); 191 bool syncWithFile( QString fn , bool quick );
187 void syncLocalFile(); 192 void syncLocalFile();
188 void syncPhone(); 193 void syncPhone();
189 void syncSharp(); 194 void syncSharp();
190 void syncKDE(); 195 void syncKDE();
191 bool syncExternalApplication(QString); 196 bool syncExternalApplication(QString);
192 int mCurrentSyncProfile ; 197 int mCurrentSyncProfile ;
193 void syncRemote( KSyncProfile* prof, bool ask = true); 198 void syncRemote( KSyncProfile* prof, bool ask = true);
194 bool edit_sync_options(); 199 bool edit_sync_options();
195 bool edit_pisync_options(); 200 bool edit_pisync_options();
196 int ringSync(); 201 int ringSync();
197 QString getPassword( ); 202 QString getPassword( );
198 bool mPisyncFinished; 203 bool mPisyncFinished;
199 bool mBlockSaveFlag; 204 bool mBlockSaveFlag;
200 QWidget* mParent; 205 QWidget* mParent;
201 KSyncInterface* mImplementation; 206 KSyncInterface* mImplementation;
202 TargetApp mTargetApp; 207 TargetApp mTargetApp;
203 QPopupMenu* mSyncMenu; 208 QPopupMenu* mSyncMenu;
204 QProgressBar* bar; 209 QProgressBar* bar;
205 bool mSyncWithDesktop; 210 bool mSyncWithDesktop;
206 211
207private slots: 212private slots:
213 void displayErrorPort();
208 void confSync(); 214 void confSync();
209 215
210 216
211}; 217};
212 218
213 219
214class KSyncInterface 220class KSyncInterface
215{ 221{
216 public : 222 public :
217 virtual void removeSyncInfo( QString syncProfile) = 0; 223 virtual void removeSyncInfo( QString syncProfile) = 0;
218 virtual bool sync(KSyncManager* manager, QString filename, int mode) = 0; 224 virtual bool sync(KSyncManager* manager, QString filename, int mode) = 0;
219 virtual bool syncExternal(KSyncManager* manager, QString resource) 225 virtual bool syncExternal(KSyncManager* manager, QString resource)
220 { 226 {
221 // empty implementation, because some syncable applications do not 227 // empty implementation, because some syncable applications do not
222 // have an external(sharpdtm) syncmode, like pwmanager. 228 // have an external(sharpdtm) syncmode, like pwmanager.
223 return false; 229 return false;
224 } 230 }
225 231
226 232
227}; 233};
228 234
229 235
230#endif 236#endif