Git Product home page Git Product logo

epistolaire's Introduction

Epistolaire

Epistolaire is an Android app to backup SMSes AND MMSes (unlike most "SMS backup" apps), in a nutshell.

Get it on F-Droid

Why use it?

  • saves SMS/MMSes to a JSON file that's very close to a dump of Android's message database
  • also saves images etc. from MMSes
  • includes a JSON to pretty-HTML converter
  • free and open-source, no ads

Why not use it?

  • cannot restore messages from the JSON file to Android SMS/MMSes
  • UI is ugly because it's my first Android app

JSON format

  • the output file is a JSON object having a "conversations" key (value is a JSON array)
  • a conversation is a list of messages (JSON objects)
  • a message is either a SMS or an MMS
  • a SMS has all the keys a SMS message has in the content://sms/ context
    • examples: _id, thread_id, address, date, date_sent, type, body
  • a MMS has all the keys a MMS message has in the content://mms/ context plus extra keys
    • examples: _id, thread_id, date, msg_box
  • extra MMS keys are "addresses" (a list of strings being the sender then the recipients) and "parts"
  • each MMS part is a JSON object having all the keys a part has in the content://mms/part/ context
    • examples: _id, mid, text, ct, name
  • MMS parts having a binary file have the content encoded as base64 in the "my_content" key

See backup.schema.json file for a JSON-schema description.

JSON to HTML

The JSON to HTML converter is a separate Python script in the "viewer" directory. It will create an HTML file per conversation.

cd viewer
./converter.py path/to/backup.json

If your JSON file is very big, Python might not be able to load the whole file in RAM and thus crash. Installing ijson (with sudo apt install python3-ijson or pip install ijson) will make the converter able to process the JSON data without loading everything in memory at once.

Privacy

Epistolaire doesn't upload your messages anywhere. It just dumps a JSON file on your device. Make sure any third-party app doesn't harvest your device's files though.

Why isn't Epistolaire on google-play

I don't use google-play, and I don't intend to ever do, so I won't upload Epistolaire on it.

License

Epistolaire is licensed under the Unlicense, which is basically public domain.

epistolaire's People

Contributors

hydrargyrum avatar natorator avatar somini avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

epistolaire's Issues

Include Contacts backup

Thank you so much for epistolaire!
It would be great if also contacts could be backed up (like it is possible in proprietary swiftbackup).

PS: Maybe you could call the metadata in F-Droid "Epistolaire Backup" โ€” maybe it's easier to find if it has backup in its name and not just in the description

NullPointerException

Installed using Fdroid version 0.3.4.
When opening Epistolaire it crashes with the following text on the screen:

SMS and MMS backup app

Please wait, backup is in progress. It can take a while if you have a lot of SMSes or MMSes.
Encountered an error :( java.lang.NullPointerException:
Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference

Here is the relevant output from adb logcat.

03-11 19:53:26.471 2411 2488 I WindowManager: SURFACE show Surface(name=Splash Screen re.indigo.epistolaire)/@0x6ef495c: Splash Screen re.indigo.epistolaire
03-11 19:53:26.554 3079 20735 E DatabaseUtils: Writing exception to parcel
03-11 19:53:26.554 3079 20735 E DatabaseUtils: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
03-11 19:53:26.554 3079 20735 E DatabaseUtils: at android.database.sqlite.SQLiteQueryBuilder.buildUnionSubQuery(SQLiteQueryBuilder.java:696)
03-11 19:53:26.554 3079 20735 E DatabaseUtils: at com.android.providers.telephony.MmsSmsProvider.getConversations(MmsSmsProvider.java:918)
03-11 19:53:26.554 3079 20735 E DatabaseUtils: at com.android.providers.telephony.MmsSmsProvider.query(MmsSmsProvider.java:394)
03-11 19:53:26.554 3079 20735 E DatabaseUtils: at android.content.ContentProvider.query(ContentProvider.java:1057)
03-11 19:53:26.554 3079 20735 E DatabaseUtils: at android.content.ContentProvider.query(ContentProvider.java:1149)
03-11 19:53:26.554 3079 20735 E DatabaseUtils: at android.content.ContentProvider$Transport.query(ContentProvider.java:241)
03-11 19:53:26.554 3079 20735 E DatabaseUtils: at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:102)
03-11 19:53:26.554 3079 20735 E DatabaseUtils: at android.os.Binder.execTransact(Binder.java:746)
03-11 19:53:26.577 2411 29823 V WindowManager: Focus changed from null to Window{25a853a u0 re.indigo.epistolaire/re.indigo.epistolaire.MainActivity}
03-11 19:53:26.629 2411 2488 I WindowManager: Window drawn AppWindowToken{9d3b7fb token=Token{545a58a ActivityRecord{ca1a3f5 u0 re.indigo.epistolaire/.MainActivity t4014}}}
03-11 19:53:26.630 2411 2488 I WindowManager: SURFACE show Surface(name=re.indigo.epistolaire/re.indigo.epistolaire.MainActivity)/@0x9fe95eb: re.indigo.epistolaire/re.indigo.epistolaire.MainActivity
03-11 19:53:26.655 2411 2439 I LaunchCheckinHandler: Displayed re.indigo.epistolaire/.MainActivity,wp,ca,240
03-11 19:53:26.672 2411 2439 I ActivityManager: Displayed re.indigo.epistolaire/.MainActivity: +214ms
03-11 19:53:26.816 891 2199 W SurfaceFlinger: Attempting to set client state on removed layer: Splash Screen re.indigo.epistolaire#0
03-11 19:53:26.816 891 2199 W SurfaceFlinger: Attempting to destroy on removed layer: Splash Screen re.indigo.epistolaire#0

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.