Private Sub Application_RemoteNotification (Message As Map, CompletionHandler As CompletionHandler)
Nachrichten_verarbeiten(Message, True)
'This inits a servers-synch after push-notification:
If manager.GetString("Anmeldung")="aktiv" Then CallSubDelayed(LadeService, "DeviceDownloadMap_laden")
CompletionHandler.Complete
End Sub
'This sub does everything i need after a push-notification or after a server-synch:
Sub Nachrichten_verarbeiten(Message As Map, PlaySound As Boolean)
Dim Intent As Map = Message
If Intent.Get("steuerbefehl")="" Then
Dim AllSpeicher, KonferenzSpeicher, AbsenderSpeicher, SenderSpeicher, FilenameSpeicher, DatenSpeicher, ZeitstempelSpeicher, GroessenSpeicher As String
KonferenzSpeicher = Intent.Get("konferenz")
AbsenderSpeicher = Intent.Get("absender")
SenderSpeicher = Intent.Get("sender")
FilenameSpeicher = Intent.Get("filename")
DatenSpeicher = Intent.Get("daten")
ZeitstempelSpeicher = Intent.Get("zeitstempel")
GroessenSpeicher = Intent.Get("groesse")
If SenderSpeicher="Kontakte" Then
AllSpeicher=AbsenderSpeicher
Else
AllSpeicher=KonferenzSpeicher
End If
If File.Exists(File.DirLibrary, AllSpeicher & ".eis")=True Then
Dim Dokumentdatei As RandomAccessFile
Dokumentdatei.Initialize(File.DirLibrary, AllSpeicher & ".eis", False)
ListeDokumente2=Dokumentdatei.Readb4xObject(0)
Dokumentdatei.Close
Else
ListeDokumente2.Initialize
End If
'Jede Notification und jeder Download vom Server im Rahmen der Synchronisierung werden wie eine Notifikation verarbeitet.
'Zuvor word allerdings immer geprüft, ob das Dokument mit dem Namen bereits vorhanden ist, um dopplete Einträge zu verhindern.
Dim ts As Boolean=False
For i=0 To ListeDokumente2.Size-1
Dim dok As Dokumententyp = ListeDokumente2.Get(i)
If dok.Name=FilenameSpeicher Then
ts=True
Exit
End If
Next
'Ist noch kein Dokument mit dem Namen vorhanden, wird es als Notification abgearbeitet.
If ts=False Then
'Verzeichnis hier schon erstellen, weil ansonsten die App abstürzen kann, wenn Verzeichnis noch nicht erstellt wurde'
If File.Exists(File.DirDocuments & "/EIS/" & SenderSpeicher & "/" & AllSpeicher, "")=False Then File.MakeDir(File.DirDocuments, "/EIS/" & SenderSpeicher & "/" & AllSpeicher)
Dim Dokument As Dokumententyp
Dokument.Name=FilenameSpeicher
Dokument.Groesse=GroessenSpeicher
'Mit Zeitstempelspeicher wird die Zeit vom Server genommen. Da diese aber gegeüber der Zeit des Geräts abweichen kann, kommt es nach der Sortierung der Dokumentenliste oft zu Verschiebungen,
'weil die eigenen Dokumente mit DateTime.now eingefügt werden. Aus diesem Grund wird jetzt für ankommende Dokumente auch die Geräte- und nicht die Serverzeit genommen'
'Im Bedarfsfall kann somit in den Logs des Servers die Eingangszeit nachträglich bestimmt und über das Gerät die tatsächliche Empfangszeit bestimmt werden. Über das Sendegerät kann die Versendezeit eingesehen weden,'
'so dass eine lückenlose Dokumentation möglich wäre.'
Dokument.Zeitstempel=ZeitstempelSpeicher
'Dokument.Zeitstempel=DateTime.Now
'Datenspeicher ist verschlüsselt, Dokument.text soll entschlüsselten Text halten, wenn es eine Textdatei ist
If FilenameSpeicher.ToLowerCase.EndsWith(".txt") Then
Dim KeySpeicher As String
KeySpeicher=VerifyKey(SenderSpeicher, AllSpeicher)
If KeySpeicher<>"" Then
Dokument.Text=Wandler.decrypt(DatenSpeicher, VerifyKey(SenderSpeicher, AllSpeicher))
Else
Dokument.Text=KeySpeicher
End If
Else
Dokument.text=DatenSpeicher
End If
Dokument.Absender=AbsenderSpeicher
'##########################
'Hier liegt wahrscheinlich der Fehler beim Schreiben in die falsche Map. Das könnte auch zu dem falschen Nachricjtenschlüssel führen.'
If KonferenzAktiv=True And SenderSpeicher=Verzeichnis And AllSpeicher=Konferenznummer Then '########Konferenzaktiv dazu gekommen!!!
'If SenderSpeicher=Verzeichnis And AllSpeicher=Konferenznummer Then
ListeDokumente.Add(Dokument)
Dim Dokumentdatei As RandomAccessFile
Dokumentdatei.Initialize(File.DirLibrary, AllSpeicher & ".eis", False)
Dokumentdatei.Writeb4xObject(ListeDokumente, 0)
Dokumentdatei.Close
Else
ListeDokumente2.Add(Dokument)
Dim Dokumentdatei As RandomAccessFile
Dokumentdatei.Initialize(File.DirLibrary, AllSpeicher & ".eis", False)
Dokumentdatei.Writeb4xObject(ListeDokumente2, 0)
Dokumentdatei.Close
End If
' '###############################
If FilenameSpeicher.ToLowerCase.EndsWith(".txt") Then
File.WriteString(File.DirDocuments & "/EIS/" & SenderSpeicher & "/" & AllSpeicher & "/" , Dokument.Name, DatenSpeicher)
Else
' 'Hier wird der automatische Download angestoßen, falls die Option in den Einstellungen aktiviert wurde'
If manager.GetBoolean("Bilder")=True Then
If FilenameSpeicher.ToLowerCase.EndsWith(".png") Or FilenameSpeicher.ToLowerCase.EndsWith(".jpg") Or FilenameSpeicher.ToLowerCase.EndsWith(".jpeg") Or FilenameSpeicher.ToLowerCase.EndsWith(".bmp") Or FilenameSpeicher.ToLowerCase.EndsWith(".gif") Or FilenameSpeicher.ToLowerCase.EndsWith(".tif") Then
Dim dd As DownloadData
dd.Verz=SenderSpeicher
dd.Konferenznr=AllSpeicher
dd.DokName=FilenameSpeicher
CallSubDelayed2(LadeService, "Dokument_downloaden", dd)
End If
End If
End If
'
' 'Wenn Konferenz oder Kontakt geöffnet ist, Daten in die ULV eintragen'
If SenderSpeicher=Verzeichnis And AllSpeicher=Konferenznummer And KonferenzAktiv=True Then
If FilenameSpeicher.ToLowerCase.EndsWith(".png") Or FilenameSpeicher.ToLowerCase.EndsWith(".jpg") Or FilenameSpeicher.ToLowerCase.EndsWith(".jpeg") Or FilenameSpeicher.ToLowerCase.EndsWith(".bmp") Or FilenameSpeicher.ToLowerCase.EndsWith(".gif") Or FilenameSpeicher.ToLowerCase.EndsWith(".tif") Then
'Fremdes_Bild_einfuegen(AllSpeicher, Dokument.Zeitstempel, Dokument.Name)
Fremdes_Bild_einfuegen(AbsenderSpeicher, Dokument.Zeitstempel, Dokument.Name, Dokument.Groesse)
clv.JumpToItem(clv.GetSize-1)
Else
If FilenameSpeicher.ToLowerCase.EndsWith(".txt") Then
'Fremdes_Dokument_einfuegen(AllSpeicher, Dokument.Text, False, Dokument.Zeitstempel, Dokument.Name)
Fremdes_Dokument_einfuegen(AbsenderSpeicher, Dokument.Text, False, Dokument.Zeitstempel, Dokument.Name, Dokument.Groesse)
Else
'Fremdes_Dokument_einfuegen(AllSpeicher, Dokument.Text, True, Dokument.Zeitstempel, Dokument.Name)
Fremdes_Dokument_einfuegen(AbsenderSpeicher, Dokument.Text, True, Dokument.Zeitstempel, Dokument.Name, Dokument.Groesse)
End If
clv.JumpToItem(clv.GetSize-1)
End If
SoundChat.Play
ZeitstempelMap.Put(AllSpeicher, Dokument.Zeitstempel)
Else
Notification_sound(AllSpeicher, PlaySound)
ZeitstempelMap.Put(AllSpeicher, Dokument.Zeitstempel)
Ungelesen.Put(AllSpeicher, "True")
CallSub(Konferenz, "ListeKonferenz_erstellen")
End If
'Löschen der Kontaktgruppe vom Gerät, wenn die Kontaktgruppe bearbeitet wurde, um sie beim nächsten Ausruf der Konferenz neu zu laden
'Die Löschung wird auch gemacht, wenn Push-Empfang ausgeschaltet ist!
If SenderSpeicher="Konferenzen" Then
If FilenameSpeicher.EndsWith(".txt") Then
If Dokument.Text="Kontaktgruppe bearbeitet!" Then
If File.Exists(File.DirLibrary, "KG_" & KonferenzSpeicher & ".eis")=True Then File.Delete(File.DirLibrary, "KG_" & KonferenzSpeicher & ".eis")
If SchluesselDB2.ContainsKey(KonferenzSpeicher) Then SchluesselDB2.Remove(KonferenzSpeicher)
End If
End If
End If
End If
Else
Dim Steuerbefehl, Filename As String
Steuerbefehl=Intent.Get("steuerbefehl")
Filename=Intent.get("filename")
'Kontaktgruppe löschen, wenn der entsprechende Steuerbefehl gesendet wurde. Dieser Fall tritt auf, wenn das Gerät aus der Kontaktgruppe genommen wurde'
If Steuerbefehl="verlassen" Then
If File.Exists(File.DirLibrary, Filename)=True Then
File.Delete(File.DirLibrary, Filename)
End If
Else
If Steuerbefehl="schlagzeile" Or Steuerbefehl="schlagzeileserver" Then
Dim DatenSpeicher, AbsenderSpeicher As String
If Intent.ContainsKey("daten") Then DatenSpeicher=Intent.Get("daten")
If Intent.ContainsKey("absender") Then AbsenderSpeicher = Intent.Get("absender")
Schlagzeile_anzeigen(DatenSpeicher, AbsenderSpeicher)
Else
Steuerbefehl_ausfuehren(Steuerbefehl)
End If
End If
End If
End Sub