Telefon-Treff
Telefon-Treff

Pages:1



iPhone Anrufhistorie auf 30 Tage erweitern, so geht's!

(Hier klicken um zum Original-Thema zu gelangen)



Geschrieben von: harlekyn

Servus,

das iPhone zeigt ja nur die letzten 100 ein- und ausgehenden Verbindungen in der Anrufhistorie an.

Kennt jemand eine Moeglichkeit, diese zu erweitern? Es gab mal fuer eine uralte OS-Version einen Patch, aber ich suche eine Loesung fuer iOS4 / iPhone 4.

Danke!



Geschrieben von: harlekyn

Selbst ist der Mann ;)

Die Anrufhistorie wird in der call_history.db gespeichert, unter iOS 4 liegt sie in "/private/var/wireless/Library/CallHistory/".

Das ist eine normale SQLite Datenbank. SQLite unterstuetzt Trigger. Und einen solchen hab ich nun auf die call-Tabelle gelegt, sodass ich kontrollieren kann, ob ein Datensatz geloescht wird.

Mein Trigger hier sorgt dafuer, dass die Anrufe der letzten 30 Tage erhalten bleiben:

Code:
CREATE TRIGGER keep_call_history DELETE ON call WHEN ( datetime(old.date, 'unixepoch', 'localtime') > datetime('now', 'localtime', '-30 days') ) BEGIN SELECT RAISE(FAIL, 'not older than 30 days'); END;

Dieser Ansatz hat den Vorteil, dass einfach nur das delete nicht ausgefuehrt wird. Das Telephony-Framework setzt fuer alle Datensatze, die ueber die standardmaessigen 100 hinausgehen, nach jedem Anruf ein delete ab. Was man sonst so an Loesungen findet, fuegt die geloeschten Datensaetze einfach wieder in die call-Tabelle ein. Dies fuehrt aber zu einer deutlich hoeheren Last, und man hat keine echte Kontrolle darueber, dass immer nur die neuesten Datensaetze erhalten bleiben.

Diese Modifikation bleibt auch nach einem Restore erhalten, solange man ein Backup einspielt.

Wenn man den Trigger wieder loswerden moechte, genuegt ein

Code:
drop trigger keep_call_history;


Schritt-fuer-Schritt Anleitung:
- Voraussetzung: Jailbreak, SSH-Zugang, APT 0.7 (ueber Cydia).
1. per SSH mit dem iPhone verbinden, dazu muss das iPhone per WLAN im gleichen Netz wie der Rechner sein.
2. sqlite3 installieren, falls nicht schon vorhanden: apt-get update; apt-get install sqlite3
3. Backup der Call History DB anfertigen: cp /private/var/wireless/Library/CallHistory/call_history.db /var/root/call_history.db.backup
4. Call History DB oeffnen: sqlite3 /private/var/wireless/Library/CallHistory/call_history.db
5. Am sqlite> prompt das Statement fuer den Trigger (siehe oben) per copy & paste einfuegen, Zeile fuer Zeile.
6. Mit STRG+D den sqlite3 Client beenden
7. Fertig!



Geschrieben von: belinea

Guter Tip.

Danke. :top:



Geschrieben von: knooby

Hast du noch mehr so Klasse Tips?


Nutze zwar seit 2 Jahren nen iPhone mit jailbreak. Aber deine Tipps sind immer gigantisch und auf solche kleinen angenehmen Sachen kommt man selbst nicht :).



Geschrieben von: harlekyn

Danke fuer die Blumen :) Aber soviele Threads eroeffne ich doch garnicht...

Ich hab das inzwischen alles mal als .deb zusammengepackt, mit ein wenig Glueck erscheint es demnaechst im BigBoss Repository.



Geschrieben von: harlekyn

Hat hier noch jemand ein Geraet mit Jailbreak und iOS < 4.0? Falls ja wuerde mich der Speicherort der call_history.db interessieren. Per SSH als root geht das mit diesem Einzeiler:

Code:
find / -name call_history.db

Bitte die Ausgabe incl. Firmware-Version hier posten. Danke!



Geschrieben von: knooby

Kann's dir vom iPad sagen 3.21
/private/var/mobile/Library/CallHistory/call_history.db


Puh copy Paste iPad nervt:D



Geschrieben von: harlekyn

Danke! Das passt zu den Infos die ich ueber die Firmware 3.x gefunden habe. Wobei ich mich ja frage, was das iPad mit einer Anrufhistorie will... ;)



Geschrieben von: harlekyn

Um das alles ein wenig zu vereinfachen habe ich die Aenderungen in einem Cydia Package namens "Extended Call History" zusammengefasst. Das Paket tut das gleiche wie hier bereits beschrieben; sollte die call_history.db bereits manuell angepasst worden sein, empfehle ich, den Trigger erst manuell zu entfernen, bevor das Paket installiert wird.

Das Paket ist ueber das Repository apt.17z.de zu beziehen. Das Repository muss ggf. erst noch zu Cydia hinzugefuegt werden, das geht ueber "Verwalten" -> "Quellen".

Wer's ausprobieren moechte: Nur zu, ich freu' mich ueber ein kurzes Feedback :) Bitte aber vorher ein Backup ueber iTunes machen, sicher ist sicher.

Wenn das Paket wieder ueber Cydia entfernt wird, wird auch die Erweiterung der Anruf-Historie rueckgaengig gemacht. Eintraege in der Anrufliste jenseits der Standardgrenze von 100 Stueck werden automatisch entfernt, sobald der naechste Anruf getaetigt wird.



Geschrieben von: Macgerhard

Zitat:
Original geschrieben von harlekyn
Danke! Das passt zu den Infos die ich ueber die Firmware 3.x gefunden habe. Wobei ich mich ja frage, was das iPad mit einer Anrufhistorie will... ;)


Na, die Anrufe protokollieren, die man per Headset damit führt.


Gerhard



Geschrieben von: harlekyn

Zitat:
Original geschrieben von Macgerhard
Na, die Anrufe protokollieren, die man per Headset damit führt.
Man kann mit dem iPad 3G ganz normal ueber GSM/UMTS telefonieren?



Geschrieben von: knooby

Zitat:
Original geschrieben von harlekyn
Um das alles ein wenig zu vereinfachen habe ich die Aenderungen in einem Cydia Package namens "Extended Call History" zusammengefasst. Das Paket tut das gleiche wie hier bereits beschrieben; sollte die call_history.db bereits manuell angepasst worden sein, empfehle ich, den Trigger erst manuell zu entfernen, bevor das Paket installiert wird.

Das Paket ist ueber das Repository apt.17z.de zu beziehen. Das Repository muss ggf. erst noch zu Cydia hinzugefuegt werden, das geht ueber "Verwalten" -> "Quellen".

Wer's ausprobieren moechte: Nur zu, ich freu' mich ueber ein kurzes Feedback :) Bitte aber vorher ein Backup ueber iTunes machen, sicher ist sicher.

Wenn das Paket wieder ueber Cydia entfernt wird, wird auch die Erweiterung der Anruf-Historie rueckgaengig gemacht. Eintraege in der Anrufliste jenseits der Standardgrenze von 100 Stueck werden automatisch entfernt, sobald der naechste Anruf getaetigt wird.


work fine with rock



Geschrieben von: Macgerhard

Zitat:
Original geschrieben von harlekyn
Man kann mit dem iPad 3G ganz normal ueber GSM/UMTS telefonieren?

Da ich keines habe, kann ich das nicht garantieren.
Aber so weit ich mich erinnere, wurde das mal in einem frühen Test von teltarif.de erwähnt.
Kann aber auch sein, daß das „nur“ Internet-Telefonie war.


Gerhard



Geschrieben von: harlekyn

Zitat:
Original geschrieben von knooby
work fine with rock
Danke fuer die Rueckmeldung!
Zitat:
Original geschrieben von Macgerhard
Da ich keines habe, kann ich das nicht garantieren.
Aber so weit ich mich erinnere, wurde das mal in einem frühen Test von teltarif.de erwähnt.
Ich hab auch keins, hab aber auch noch nirgends gelesen, dass das funktioniert. Telefonie ist mWn ebensowenig moeglich wie SMS (3rd Party Apps natuerlich ausgenommen).



Geschrieben von: Macgerhard

Zitat:
Original geschrieben von harlekyn
Danke fuer die Rueckmeldung!
Ich hab auch keins, hab aber auch noch nirgends gelesen, dass das funktioniert. Telefonie ist mWn ebensowenig moeglich wie SMS (3rd Party Apps natuerlich ausgenommen).

Wäre strategisch auch dumm von Apple, mit dem iPad das iPhone zu kannibalisieren. :D


Gerhard



Geschrieben von: lukasraederschei

Hallo,

erstmal danke an harlekyn für die ausführliche Anleitung, ich habe zwar nichts an meiner Anrufliste geändert, die Anleitung hat mich aber erst auf die Idee gebracht, dass unter iOS 4 die call_history.db im wireless-Ordner gespeichert ist...

Nun zu meinem Problem: Bereits zum zweiten Mal ist meine Anrufliste "von selbst" kaputt gegangen und speichert keinerlei Anrufe mehr ab. Einen zeitlichen Zusammenhang zu Jailbreak/iOS-Update/SSH-Fummelei o.ä. gibt es nicht. Über Google habe ich nur diesen Thread bei hackint0sh.org gefunden, der mir jedoch auch nur bedingt weiterhilft.
Als das Problem zum ersten Mal aufgetreten ist, habe ich es durch den veränderten Speicherort unter iOS 4 und die korrekte Anpassung der Rechte (Besitzer und Gruppe habe ich damals glaube ich mittels chown auf wireless:wireless angepasst) noch in den Griff bekommen. Dieses Mal bin ich jedoch absolut ratlos, da die Rechte identisch zu denen bei hackint0sh sind, Benutzer und Gruppe jedoch fest auf "mobile:mobile" eingestellt sind und sich trotz root-Rechten nicht auf wireless:wireless ändern lassen.

Kennt noch jemand dieses Problem oder hat sogar eine Idee zur Lösung? Ich würde ungern mein iPhone wiederherstellen und ohne Backup einrichten, da ich die SMS etc. nicht verlieren möchte (ich weiß, die kann man auch manuell wieder einspielen, aber wer sagt, dass ich dann nicht vor einem ähnlichen Problem stehe :D ).

Kann evtl. jemand mit iOS 4 unter Angabe von FW- und iPhone-Version den Speicherort und die Rechte seiner call_history.db posten?
Der Speicherort sollte ja /private/var/wireless/Library/CallHistory/call_history.db sein, die Rechte lassen sich wie folgt herausfinden:


Code:
ls -l /private/var/wireless/Library/CallHistory/


Vielen Danke schonmal! :top:

Lukas



Geschrieben von: lukasraederschei

Problem vollständig gelöst:

Eigentlich wollte ich die Einträge in der Anrufliste behalten, habe also zuerst eine Sicherungskopie angelegt.
Da mir keine Alternative mehr eingefallen ist, habe ich eben die Liste gelöscht (über SSH) und das iPhone neugestartet. Dabei hat das iPhone erwartungsgemäß eine neue (und leere) Liste angelegt, Benutzer und Gruppe waren aber nicht (wie in meiner Erinnerung ;) ) wireless:wireless, sondern _wireless:_wireless...

Da ich damit das Problem gefunden hatte, habe ich einfach wieder die Sicherungskopie zurückgespielt, diesmal musste ich Benutzer/Gruppe gar nicht mehr manuell anpassen.

Jetzt habe ich wieder eine funktionierende Anrufliste inkl. der Einträge bis zum 11.08..

Warum sich die Anrufliste aber - scheinbar ohne Fremdeinwirkung - selbst zerschossen hat (bzw. auf einmal mobile:mobile statt _wireless:_wireless in den Rechten steht), weiß ich immer noch nicht.



Geschrieben von: DrunkenBoxer

Zitat:
Original geschrieben von harlekyn
...
Das Paket ist ueber das Repository apt.17z.de zu beziehen.
...

Hi harlekyn,

im iPhone-notes.de Repo ist noch eine ältere Version (0.3) zu finden, kannst ja mal geradeziehen...

Grüße,
DB



Geschrieben von: gio2000

Gibt es auch schon eine Lösung für IOS 4.1 ???


Grüße

gio



Geschrieben von: harlekyn

Eigentlich duerfte das auch unter iOS 4.1 funktionieren. Hab ich aber mangels Jailbreak noch nicht testen koennen. Hast du ein iPhone mit JB und iOS 4.1? Was passiert, wenn du das Paket zu installieren versuchst?



Geschrieben von: gio2000

Kann mir jemand die Rechte sagen die die call_dc auf dem Iphone haben muss ?



Geschrieben von: lukasraederschei

Auf meinem iPhone 4 (gestern auf 4.1 aktualisiert, JB mit GP) kann ich die Datei nicht finden (find / -name call_dc).
In welchem Verzeichnis befindet sich die Datei denn bei Dir?



Geschrieben von: harlekyn

Die Datei heisst "call_history.db". Kannst du mal schauen, wo sie unter iOS4.1 liegt?



Geschrieben von: lukasraederschei

Speicherort: /private/var/wireless/Library/CallHistory/call_history.db

Rechte/Besitzer sind "-rw-r--r-- 1 _wireless _wireless", wobei ich damit (s. ein paar Posts weiter oben) schon Probleme hatte, also kann ich nicht garantieren, dass die Rechte mit denen einer OOTB-4.1 übereinstimmen.



Geschrieben von: harlekyn

Danke! Sieht bei mir unter der 4.0.1 genauso aus, incl. Owner _wireless:_wireless.



Geschrieben von: gio2000

weis man schon mehr, ??



Geschrieben von: denisxp

Hallo,

zuerst einmal: danke für den Tip!
Funktioniert wunderbar unter iOS 4.1!

Leider jedoch verträgt sich das Programm nicht mit den zahlreichen Programmen die das Löschen einzelner Anrufe aus der Liste ermöglichen, so z.B. Call/Log Delete oder CallDelete...

Ist dies generell nicht möglich oder weißt du vlt wo das Problem liegen könnte?

Vielen Dank!

mfg, Denis



Geschrieben von: harlekyn

Das funktioniert generell nicht. Die Modifikation die ich hier durchfuehre verhindert, dass Anrufe aus der Historie geloescht werden. Dabei kann ich nicht unterscheiden, ob dies absichtlich (d.h. manuell durch den Benutzer) oder automatisch (durch die Phone-App) geschieht.



Geschrieben von: denisxp

Vielen Dank für die schnelle Antwort!

Dann muss ich mir jetzt überlegen welche Funtkion für mich wichtiger ist...

Trotzdem super Erweiterung!

mfg, Denis



Geschrieben von: Macgerhard

Zitat:
Original geschrieben von harlekyn

Mein Trigger hier sorgt dafuer, dass die Anrufe der letzten 30 Tage erhalten bleiben:



Git das unter iOS 4.3.3 immer noch?
Was muß ich ändern, um 60, 90 oder unendlich viele Tage Call History zu bekommen?


Gerhard



Geschrieben von: harlekyn

Zitat:
Original geschrieben von Macgerhard
Git das unter iOS 4.3.3 immer noch?
Klar. Auch unter iOS 5 so wie mir scheint, allerdings hab ich's da noch nicht selbst neu installiert. Problem dort ist allerdings: Man kann inzwischen Eintraege in der Call History loeschen. Die Anrufliste geht aber nicht gut damit um, wenn der Commit fehlschlaegt, d.h. sie stuetzt ab.
Zitat:
Was muß ich ändern, um 60, 90 oder unendlich viele Tage Call History zu bekommen?
Du machst aus der 30 im Beispielcode oben die gewuenschte Anzahl von Tagen.



Geschrieben von: Macgerhard

Zitat:
Original geschrieben von harlekyn
Klar. Auch unter iOS 5 so wie mir scheint, allerdings hab ich's da noch nicht selbst neu installiert.


Supi, dann ist der Schwenk zu CoreData mal zu was nütze.
Hab mich bislang immer geärgert, aß ich an sachen, die früher in simplen Logfiles steckten, nicht mehr rankam.
Zitat:
Problem dort ist allerdings: Man kann inzwischen Eintraege in der Call History loeschen. Die Anrufliste geht aber nicht gut damit um, wenn der Commit fehlschlaegt, d.h. sie stuetzt ab.


Ist also ein Schweineprogramm™. :D
Zitat:

Du machst aus der 30 im Beispielcode oben die gewuenschte Anzahl von Tagen.


Etwa so?


PHP:

CREATE TRIGGER keep_call_history DELETE ON call
WHEN 
datetime(old.date'unixepoch''localtime') > datetime('now''localtime''-oo days') )
BEGIN 
  SELECT RAISE
(FAIL'not older than 30 days');
END;


;-)


Gerhard


Nachtrag: Ich probiere es erstmal mit 100 Jahren.



Geschrieben von: harlekyn

Du willst "unendlich" durch eine angemessen grosse Zahl von Tagen ersetzen, z.B. 1000 ;)



Geschrieben von: Macgerhard

Zitat:
Original geschrieben von harlekyn
Du willst "unendlich" durch eine angemessen grosse Zahl von Tagen ersetzen, z.B. 1000 ;)


Ich probiere es erstmal mit 100 Jahren.


Gerhard


PS: Meine neues Hobby: http://www.sqlite.org/lang_datefunc.html :D



Geschrieben von: harlekyn

Du kannst aus der Bedingung auch einfach einen wahren Ausdruck machen. Sowas wie "when (1=1)". ;)



Geschrieben von: Macgerhard

Zitat:
Original geschrieben von harlekyn
Du kannst aus der Bedingung auch einfach einen wahren Ausdruck machen. Sowas wie "when (1=1)". ;)


Hmm.
Auch wieder wahr.

Wie bearbeite ich einen bestehenden Trigger?


Gerhard


Nachtrag: Kann ich die WHEN-Geschichte dann nicht gleich ganz weglassen?



Geschrieben von: harlekyn

Zitat:
Original geschrieben von Macgerhard
Wie bearbeite ich einen bestehenden Trigger?
Ich wuerde ihn droppen und neu anlegen. Ob auch ein alter geht verraet die SQLite Doku, hab ich nicht im Kopf.
Zitat:
Kann ich die WHEN-Geschichte dann nicht gleich ganz weglassen?
Auch da empfehle ich einen Blick in die Dokumentation, ich denke das ist moeglich.



Geschrieben von: Macgerhard

Zitat:
Original geschrieben von harlekyn
Wenn das Paket wieder ueber Cydia entfernt wird, wird auch die Erweiterung der Anruf-Historie rueckgaengig gemacht. Eintraege in der Anrufliste jenseits der Standardgrenze von 100 Stueck werden automatisch entfernt, sobald der naechste Anruf getaetigt wird.


Oder sobald jemand anklingelt. :D


Gerhard



Geschrieben von: Macgerhard

Ich überlege, ob man nicht was ähnliches mit der notes.db machen könnte.

Ich regelmäßig 4 Notizen pro Woche an als Kopien der Exemplare der Vorwoche.

Die erste Zeile enthält dabei immer Datum und Wochentag:

YYYY-MM-DD Wochentag

Könnte man das nicht auch über einen Trigger automatisieren?



Geschrieben von: harlekyn

Was genau, dass alte Versionen geloescht werden? Die Notizen haben ja auch einen Zeitstempel, der duerfte ebenfalls als separates Feld in der DB abgelegt sein.



Geschrieben von: Macgerhard

Zitat:
Original geschrieben von harlekyn
Was genau, dass alte Versionen geloescht werden? Die Notizen haben ja auch einen Zeitstempel, der duerfte ebenfalls als separates Feld in der DB abgelegt sein.

Eigentlich wollte ich eher erreichen, daß automatisch am Sonntag abend die Einträge der Vorwoche dupliziert und mit den Daten der kommenden Woche versehen werden.


Gerhard