author | zautrix <zautrix> | 2004-10-10 16:00:04 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2004-10-10 16:00:04 (UTC) |
commit | ee6e29a5092d32165b7bf6b39069bd8a1dcd5b0a (patch) (side-by-side diff) | |
tree | 1d908bfc23b8a49d43a58bbeadd82c4e08faeff6 /gammu/emb | |
parent | 213a9d993e5a4751b64e18320cfbebb000681d13 (diff) | |
download | kdepimpi-ee6e29a5092d32165b7bf6b39069bd8a1dcd5b0a.zip kdepimpi-ee6e29a5092d32165b7bf6b39069bd8a1dcd5b0a.tar.gz kdepimpi-ee6e29a5092d32165b7bf6b39069bd8a1dcd5b0a.tar.bz2 |
many phone AB sync fixes
-rw-r--r-- | gammu/emb/common/service/gsmmisc.c | 4 | ||||
-rw-r--r-- | gammu/emb/common/service/gsmpbk.c | 17 | ||||
-rw-r--r-- | gammu/emb/gammu/gammu.c | 2 |
3 files changed, 12 insertions, 11 deletions
diff --git a/gammu/emb/common/service/gsmmisc.c b/gammu/emb/common/service/gsmmisc.c index 6959a22..1c6ec8b 100644 --- a/gammu/emb/common/service/gsmmisc.c +++ b/gammu/emb/common/service/gsmmisc.c @@ -157,101 +157,101 @@ void GSM_IdentifyFileFormat(GSM_File *File) File->Type = GSM_File_Image_JPG; } else if (memcmp(File->Buffer, "MThd",4)==0) { File->Type = GSM_File_Sound_MIDI; } else if (File->Buffer[0] == 0x00 && File->Buffer[1] == 0x02) { File->Type = GSM_File_Sound_NRT; } } } void SaveVCALDateTime(char *Buffer, int *Length, GSM_DateTime *Date, char *Start) { if (Start != NULL) { *Length+=sprintf(Buffer+(*Length), "%s:",Start); } *Length+=sprintf(Buffer+(*Length), "%04d%02d%02dT%02d%02d%02d%c%c", Date->Year, Date->Month, Date->Day, Date->Hour, Date->Minute, Date->Second,13,10); } void ReadVCALDateTime(char *Buffer, GSM_DateTime *dt) { char year[5]="", month[3]="", day[3]="", hour[3]="", minute[3]="", second[3]=""; memset(dt,0,sizeof(dt)); strncpy(year, Buffer, 4); strncpy(month, Buffer+4, 2); strncpy(day, Buffer+6, 2); strncpy(hour, Buffer+9, 2); strncpy(minute, Buffer+11, 2); strncpy(second, Buffer+13, 2); /* FIXME: Should check ranges... */ dt->Year = atoi(year); dt->Month = atoi(month); dt->Day = atoi(day); dt->Hour = atoi(hour); dt->Minute = atoi(minute); dt->Second = atoi(second); /* FIXME */ dt->Timezone = 0; } void SaveVCALText(char *Buffer, int *Length, char *Text, char *Start) { char buffer[1000]; if (UnicodeLength(Text) != 0) { - EncodeUTF8QuotedPrintable(buffer,Text); + EncodeUTF8(buffer,Text); if (UnicodeLength(Text)==strlen(buffer)) { *Length+=sprintf(Buffer+(*Length), "%s:%s%c%c",Start,DecodeUnicodeString(Text),13,10); } else { - *Length+=sprintf(Buffer+(*Length), "%s;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:%s%c%c",Start,buffer,13,10); + *Length+=sprintf(Buffer+(*Length), "%s:%s%c%c",Start,buffer,13,10); } } } bool ReadVCALText(char *Buffer, char *Start, char *Value) { unsigned char buff[200]; Value[0] = 0x00; Value[1] = 0x00; strcpy(buff,Start); strcat(buff,":"); if (!strncmp(Buffer,buff,strlen(buff))) { EncodeUnicode(Value,Buffer+strlen(Start)+1,strlen(Buffer)-(strlen(Start)+1)); dbgprintf("ReadVCalText is \"%s\"\n",DecodeUnicodeConsole(Value)); return true; } /* SE T68i */ strcpy(buff,Start); strcat(buff,";ENCODING=QUOTED-PRINTABLE:"); if (!strncmp(Buffer,buff,strlen(buff))) { DecodeUTF8QuotedPrintable(Value,Buffer+strlen(Start)+27,strlen(Buffer)-(strlen(Start)+27)); dbgprintf("ReadVCalText is \"%s\"\n",DecodeUnicodeConsole(Value)); return true; } strcpy(buff,Start); strcat(buff,";CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:"); if (!strncmp(Buffer,buff,strlen(buff))) { DecodeUTF8QuotedPrintable(Value,Buffer+strlen(Start)+41,strlen(Buffer)-(strlen(Start)+41)); dbgprintf("ReadVCalText is \"%s\"\n",DecodeUnicodeConsole(Value)); return true; } strcpy(buff,Start); strcat(buff,";CHARSET=UTF-8:"); if (!strncmp(Buffer,buff,strlen(buff))) { DecodeUTF8(Value,Buffer+strlen(Start)+15,strlen(Buffer)-(strlen(Start)+15)); dbgprintf("ReadVCalText is \"%s\"\n",DecodeUnicodeConsole(Value)); return true; } strcpy(buff,Start); strcat(buff,";CHARSET=UTF-7:"); if (!strncmp(Buffer,buff,strlen(buff))) { DecodeUTF7(Value,Buffer+strlen(Start)+15,strlen(Buffer)-(strlen(Start)+15)); dbgprintf("ReadVCalText is \"%s\"\n",DecodeUnicodeConsole(Value)); return true; } return false; diff --git a/gammu/emb/common/service/gsmpbk.c b/gammu/emb/common/service/gsmpbk.c index 05e5cb9..f7cf7d7 100644 --- a/gammu/emb/common/service/gsmpbk.c +++ b/gammu/emb/common/service/gsmpbk.c @@ -86,144 +86,145 @@ void GSM_PhonebookFindDefaultNameNumberGroup(GSM_MemoryEntry *entry, int *Name, if ((*Name) == -1) { for (i = 0; i < entry->EntriesNum; i++) { if (entry->Entries[i].EntryType != PBK_Text_LastName) continue; *Name = i; break; } } if ((*Name) == -1) { for (i = 0; i < entry->EntriesNum; i++) { if (entry->Entries[i].EntryType != PBK_Text_FirstName) continue; *Name = i; break; } } } void GSM_EncodeVCARD(char *Buffer, int *Length, GSM_MemoryEntry *pbk, bool header, GSM_VCardVersion Version) { int Name, Number, Group, i; bool ignore; GSM_PhonebookFindDefaultNameNumberGroup(pbk, &Name, &Number, &Group); if (Version == Nokia_VCard10) { if (header) *Length+=sprintf(Buffer+(*Length),"BEGIN:VCARD%c%c",13,10); if (Name != -1) { *Length+=sprintf(Buffer+(*Length),"N:%s%c%c",DecodeUnicodeString(pbk->Entries[Name].Text),13,10); } if (Number != -1) { *Length +=sprintf(Buffer+(*Length),"TEL:%s%c%c",DecodeUnicodeString(pbk->Entries[Number].Text),13,10); } if (header) *Length+=sprintf(Buffer+(*Length),"END:VCARD%c%c",13,10); } else if (Version == Nokia_VCard21) { if (header) *Length+=sprintf(Buffer+(*Length),"BEGIN:VCARD%c%cVERSION:2.1%c%c",13,10,13,10); if (Name != -1) { SaveVCALText(Buffer, Length, pbk->Entries[Name].Text, "N"); } for (i=0; i < pbk->EntriesNum; i++) { if (i != Name) { ignore = false; switch(pbk->Entries[i].EntryType) { case PBK_Text_Name : case PBK_Date : case PBK_Caller_Group : ignore = true; break; case PBK_Number_General : *Length+=sprintf(Buffer+(*Length),"TEL"); - if (Number == i) (*Length)+=sprintf(Buffer+(*Length),";PREF"); + (*Length)+=sprintf(Buffer+(*Length),";PREF"); break; case PBK_Number_Mobile : *Length+=sprintf(Buffer+(*Length),"TEL"); - if (Number == i) (*Length)+=sprintf(Buffer+(*Length),";PREF"); + //if (Number == i) (*Length)+=sprintf(Buffer+(*Length),";PREF"); *Length+=sprintf(Buffer+(*Length),";CELL"); break; case PBK_Number_Work : *Length+=sprintf(Buffer+(*Length),"TEL"); - if (Number == i) (*Length)+=sprintf(Buffer+(*Length),";PREF"); - *Length+=sprintf(Buffer+(*Length),";WORK;VOICE"); + //if (Number == i) (*Length)+=sprintf(Buffer+(*Length),";PREF"); + *Length+=sprintf(Buffer+(*Length),";WORK"); break; case PBK_Number_Fax : *Length+=sprintf(Buffer+(*Length),"TEL"); - if (Number == i) (*Length)+=sprintf(Buffer+(*Length),";PREF"); + //if (Number == i) (*Length)+=sprintf(Buffer+(*Length),";PREF"); *Length+=sprintf(Buffer+(*Length),";FAX"); break; case PBK_Number_Home : *Length+=sprintf(Buffer+(*Length),"TEL"); - if (Number == i) (*Length)+=sprintf(Buffer+(*Length),";PREF"); - *Length+=sprintf(Buffer+(*Length),";HOME;VOICE"); + //if (Number == i) (*Length)+=sprintf(Buffer+(*Length),";PREF"); + *Length+=sprintf(Buffer+(*Length),";HOME"); break; case PBK_Text_Note : *Length+=sprintf(Buffer+(*Length),"NOTE"); break; case PBK_Text_Postal : /* Don't ask why. Nokia phones save postal address * double - once like LABEL, second like ADR */ - SaveVCALText(Buffer, Length, pbk->Entries[i].Text, "LABEL"); + //SaveVCALText(Buffer, Length, pbk->Entries[i].Text, "LABEL"); *Length+=sprintf(Buffer+(*Length),"ADR"); break; case PBK_Text_Email : case PBK_Text_Email2 : *Length+=sprintf(Buffer+(*Length),"EMAIL"); break; case PBK_Text_URL : *Length+=sprintf(Buffer+(*Length),"URL"); break; default : ignore = true; break; } if (!ignore) { SaveVCALText(Buffer, Length, pbk->Entries[i].Text, ""); } } } + *Length+=sprintf(Buffer+(*Length), "X-KADDRESSBOOK-X-ExternalID:%d%c%c",pbk->Location,13,10); if (header) *Length+=sprintf(Buffer+(*Length),"END:VCARD%c%c",13,10); } } GSM_Error GSM_DecodeVCARD(unsigned char *Buffer, int *Pos, GSM_MemoryEntry *Pbk, GSM_VCardVersion Version) { unsigned char Line[2000],Buff[2000]; int Level = 0; Buff[0] = 0; Pbk->EntriesNum = 0; while (1) { MyGetLine(Buffer, Pos, Line, strlen(Buffer)); if (strlen(Line) == 0) break; switch (Level) { case 0: if (strstr(Line,"BEGIN:VCARD")) Level = 1; break; case 1: if (strstr(Line,"END:VCARD")) { if (Pbk->EntriesNum == 0) return ERR_EMPTY; return ERR_NONE; } if (ReadVCALText(Line, "N", Buff)) { CopyUnicodeString(Pbk->Entries[Pbk->EntriesNum].Text,Buff); Pbk->Entries[Pbk->EntriesNum].EntryType = PBK_Text_Name; Pbk->EntriesNum++; } if (ReadVCALText(Line, "TEL", Buff) || ReadVCALText(Line, "TEL;VOICE", Buff) || ReadVCALText(Line, "TEL;PREF", Buff) || ReadVCALText(Line, "TEL;PREF;VOICE", Buff)) { CopyUnicodeString(Pbk->Entries[Pbk->EntriesNum].Text,Buff); Pbk->Entries[Pbk->EntriesNum].EntryType = PBK_Number_General; Pbk->EntriesNum++; } if (ReadVCALText(Line, "TEL;CELL", Buff) || ReadVCALText(Line, "TEL;CELL;VOICE", Buff) || ReadVCALText(Line, "TEL;PREF;CELL", Buff) || ReadVCALText(Line, "TEL;PREF;CELL;VOICE", Buff)) { CopyUnicodeString(Pbk->Entries[Pbk->EntriesNum].Text,Buff); Pbk->Entries[Pbk->EntriesNum].EntryType = PBK_Number_Mobile; Pbk->EntriesNum++; } if (ReadVCALText(Line, "TEL;WORK", Buff) || ReadVCALText(Line, "TEL;PREF;WORK", Buff) || ReadVCALText(Line, "TEL;WORK;VOICE", Buff) || diff --git a/gammu/emb/gammu/gammu.c b/gammu/emb/gammu/gammu.c index 8db9afb..684e67c 100644 --- a/gammu/emb/gammu/gammu.c +++ b/gammu/emb/gammu/gammu.c @@ -4641,97 +4641,97 @@ static void Restore(int argc, char *argv[]) GSM_CalendarEntry Calendar; GSM_Bitmap Bitmap; GSM_Ringtone Ringtone; GSM_MemoryEntry Pbk; GSM_MemoryStatus MemStatus; GSM_ToDoEntry ToDo; GSM_ToDoStatus ToDoStatus; GSM_Profile Profile; GSM_MultiWAPSettings Settings; GSM_GPRSAccessPoint GPRSPoint; GSM_WAPBookmark Bookmark; int i, used, max = 0; bool Past = true; bool Found, DoRestore; error=GSM_ReadBackupFile(argv[2],&Backup); if (error!=ERR_NOTIMPLEMENTED) { Print_Error(error); } else { printmsgerr("WARNING: Some data not read from file. It can be damaged or restoring some settings from this file format not implemented (maybe higher Gammu required ?)\n"); } signal(SIGINT, interrupt); printmsgerr("Press Ctrl+C to break...\n"); if (Backup.DateTimeAvailable) printmsgerr("Time of backup : %s\n",OSDateTime(Backup.DateTime,false)); if (Backup.Model[0]!=0) printmsgerr("Phone : %s\n",Backup.Model); if (Backup.IMEI[0]!=0) printmsgerr("IMEI : %s\n",Backup.IMEI); if (Backup.Creator[0]!=0) printmsgerr("File created by : %s\n",Backup.Creator); if (Backup.MD5Calculated[0]!=0) { dbgprintf("\"%s\"\n",Backup.MD5Original); dbgprintf("\"%s\"\n",Backup.MD5Calculated); if (strcmp(Backup.MD5Original,Backup.MD5Calculated)) { if (!answer_yes("Checksum in backup file do not match. Continue")) return; } } GSM_Init(true); DoRestore = false; if (Backup.PhonePhonebook[0] != NULL) { MemStatus.MemoryType = MEM_ME; error=Phone->GetMemoryStatus(&s, &MemStatus); if (error==ERR_NONE) { max = 0; while (Backup.PhonePhonebook[max]!=NULL) max++; printmsgerr("%i entries in backup file\n",max); - if (answer_yes("Restore phone phonebook")) DoRestore = true; + /* LR if (answer_yes("Restore phone phonebook")) */DoRestore = true; } } if (DoRestore) { used = 0; for (i=0;i<MemStatus.MemoryUsed+MemStatus.MemoryFree;i++) { Pbk.MemoryType = MEM_ME; Pbk.Location = i + 1; Pbk.EntriesNum = 0; if (used<max) { if (Backup.PhonePhonebook[used]->Location == Pbk.Location) { Pbk = *Backup.PhonePhonebook[used]; used++; dbgprintf("Location %i\n",Pbk.Location); if (Pbk.EntriesNum != 0) error=Phone->SetMemory(&s, &Pbk); } } if (Pbk.EntriesNum == 0) error=Phone->DeleteMemory(&s, &Pbk); Print_Error(error); printmsgerr("%cWriting: %i percent",13,(i+1)*100/(MemStatus.MemoryUsed+MemStatus.MemoryFree)); if (gshutdown) { GSM_Terminate(); exit(0); } } printmsgerr("\n"); } DoRestore = false; if (Backup.SIMPhonebook[0] != NULL) { MemStatus.MemoryType = MEM_SM; error=Phone->GetMemoryStatus(&s, &MemStatus); if (error==ERR_NONE) { max = 0; while (Backup.SIMPhonebook[max]!=NULL) max++; printmsgerr("%i entries in backup file\n",max); if (answer_yes("Restore SIM phonebook")) DoRestore = true; } } if (DoRestore) { used = 0; for (i=0;i<MemStatus.MemoryUsed+MemStatus.MemoryFree;i++) { Pbk.MemoryType = MEM_SM; Pbk.Location = i + 1; Pbk.EntriesNum = 0; if (used<max) { if (Backup.SIMPhonebook[used]->Location == Pbk.Location) { Pbk = *Backup.SIMPhonebook[used]; used++; |