diff options
author | lookshe <github@lookshe.org> | 2016-02-11 10:45:27 +0100 |
---|---|---|
committer | lookshe <github@lookshe.org> | 2016-02-11 10:45:27 +0100 |
commit | 3824eb172ba9a4a6b9ea84b0d1045591bc4fa0e3 (patch) | |
tree | 0286423f053440a5900732032e35810d6cc076c6 /src/main/java/eu/siacs/conversations/services/ExportLogsService.java | |
parent | cec1b0f1f8d3976ab6a437ff4584ac039b64fa9a (diff) | |
parent | ae83efe4a6c1b3349147904eee200f0b617741c3 (diff) |
Merge tag '1.9.3' into trz/merge_1.9.3
Conflicts:
.travis.yml
CHANGELOG.md
README.md
art/render.rb
build.gradle
libs/openpgp-api-lib/build.gradle
settings.gradle
src/main/AndroidManifest.xml
src/main/java/eu/siacs/conversations/Config.java
src/main/java/eu/siacs/conversations/crypto/OtrService.java
src/main/java/eu/siacs/conversations/crypto/PgpEngine.java
src/main/java/eu/siacs/conversations/entities/Account.java
src/main/java/eu/siacs/conversations/entities/Contact.java
src/main/java/eu/siacs/conversations/entities/Conversation.java
src/main/java/eu/siacs/conversations/entities/DownloadableFile.java
src/main/java/eu/siacs/conversations/entities/Message.java
src/main/java/eu/siacs/conversations/entities/MucOptions.java
src/main/java/eu/siacs/conversations/entities/Transferable.java
src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java
src/main/java/eu/siacs/conversations/generator/IqGenerator.java
src/main/java/eu/siacs/conversations/generator/MessageGenerator.java
src/main/java/eu/siacs/conversations/generator/PresenceGenerator.java
src/main/java/eu/siacs/conversations/http/HttpConnectionManager.java
src/main/java/eu/siacs/conversations/http/HttpDownloadConnection.java
src/main/java/eu/siacs/conversations/http/HttpUploadConnection.java
src/main/java/eu/siacs/conversations/parser/AbstractParser.java
src/main/java/eu/siacs/conversations/parser/IqParser.java
src/main/java/eu/siacs/conversations/parser/MessageParser.java
src/main/java/eu/siacs/conversations/parser/PresenceParser.java
src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java
src/main/java/eu/siacs/conversations/persistance/FileBackend.java
src/main/java/eu/siacs/conversations/services/AbstractConnectionManager.java
src/main/java/eu/siacs/conversations/services/AvatarService.java
src/main/java/eu/siacs/conversations/services/MessageArchiveService.java
src/main/java/eu/siacs/conversations/services/NotificationService.java
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java
src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java
src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java
src/main/java/eu/siacs/conversations/ui/ConversationActivity.java
src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java
src/main/java/eu/siacs/conversations/ui/ManageAccountActivity.java
src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java
src/main/java/eu/siacs/conversations/ui/SettingsActivity.java
src/main/java/eu/siacs/conversations/ui/ShareWithActivity.java
src/main/java/eu/siacs/conversations/ui/XmppActivity.java
src/main/java/eu/siacs/conversations/ui/adapter/AccountAdapter.java
src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java
src/main/java/eu/siacs/conversations/ui/adapter/ListItemAdapter.java
src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java
src/main/java/eu/siacs/conversations/utils/CryptoHelper.java
src/main/java/eu/siacs/conversations/utils/DNSHelper.java
src/main/java/eu/siacs/conversations/utils/ExceptionHelper.java
src/main/java/eu/siacs/conversations/utils/MimeUtils.java
src/main/java/eu/siacs/conversations/utils/PhoneHelper.java
src/main/java/eu/siacs/conversations/utils/UIHelper.java
src/main/java/eu/siacs/conversations/utils/Xmlns.java
src/main/java/eu/siacs/conversations/xml/XmlReader.java
src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java
src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnection.java
src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnectionManager.java
src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java
src/main/java/eu/siacs/conversations/xmpp/jingle/JingleSocks5Transport.java
src/main/java/eu/siacs/conversations/xmpp/stanzas/MessagePacket.java
src/main/res/drawable-hdpi/ic_launcher.png
src/main/res/drawable-hdpi/ic_notification.png
src/main/res/drawable-mdpi/ic_launcher.png
src/main/res/drawable-mdpi/ic_notification.png
src/main/res/drawable-xhdpi/ic_launcher.png
src/main/res/drawable-xhdpi/ic_notification.png
src/main/res/drawable-xxhdpi/ic_launcher.png
src/main/res/drawable-xxhdpi/ic_notification.png
src/main/res/drawable-xxxhdpi/ic_launcher.png
src/main/res/drawable-xxxhdpi/ic_notification.png
src/main/res/layout/account_row.xml
src/main/res/layout/activity_about.xml
src/main/res/layout/activity_change_password.xml
src/main/res/layout/activity_contact_details.xml
src/main/res/layout/activity_edit_account.xml
src/main/res/layout/activity_muc_details.xml
src/main/res/layout/activity_publish_profile_picture.xml
src/main/res/layout/activity_verify_otr.xml
src/main/res/layout/contact.xml
src/main/res/layout/contact_key.xml
src/main/res/layout/conversation_list_row.xml
src/main/res/layout/enter_jid_dialog.xml
src/main/res/layout/fragment_conversation.xml
src/main/res/layout/join_conference_dialog.xml
src/main/res/layout/message_received.xml
src/main/res/layout/message_sent.xml
src/main/res/layout/message_status.xml
src/main/res/layout/quickedit.xml
src/main/res/values-ar-rEG/strings.xml
src/main/res/values-bg/strings.xml
src/main/res/values-ca/strings.xml
src/main/res/values-cs/strings.xml
src/main/res/values-de/strings.xml
src/main/res/values-el/strings.xml
src/main/res/values-es/strings.xml
src/main/res/values-eu/strings.xml
src/main/res/values-fa-rIR/strings.xml
src/main/res/values-fr/strings.xml
src/main/res/values-id/strings.xml
src/main/res/values-it/strings.xml
src/main/res/values-iw/strings.xml
src/main/res/values-ja/strings.xml
src/main/res/values-ko/strings.xml
src/main/res/values-nl/strings.xml
src/main/res/values-pl/strings.xml
src/main/res/values-pt/strings.xml
src/main/res/values-ru/strings.xml
src/main/res/values-sk/strings.xml
src/main/res/values-sr/strings.xml
src/main/res/values-sv/strings.xml
src/main/res/values-v21/themes.xml
src/main/res/values-zh-rCN/strings.xml
src/main/res/values/arrays.xml
src/main/res/values/colors.xml
src/main/res/values/dimens.xml
src/main/res/values/strings.xml
src/main/res/values/themes.xml
src/main/res/xml/preferences.xml
Diffstat (limited to 'src/main/java/eu/siacs/conversations/services/ExportLogsService.java')
-rw-r--r-- | src/main/java/eu/siacs/conversations/services/ExportLogsService.java | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/src/main/java/eu/siacs/conversations/services/ExportLogsService.java b/src/main/java/eu/siacs/conversations/services/ExportLogsService.java new file mode 100644 index 00000000..76983a90 --- /dev/null +++ b/src/main/java/eu/siacs/conversations/services/ExportLogsService.java @@ -0,0 +1,146 @@ +package eu.siacs.conversations.services; + +import android.app.NotificationManager; +import android.app.Service; +import android.content.Context; +import android.content.Intent; +import android.os.IBinder; +import android.support.v4.app.NotificationCompat; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; + +import eu.siacs.conversations.R; +import eu.siacs.conversations.entities.Account; +import eu.siacs.conversations.entities.Conversation; +import eu.siacs.conversations.entities.Message; +import eu.siacs.conversations.persistance.DatabaseBackend; +import eu.siacs.conversations.persistance.FileBackend; +import eu.siacs.conversations.xmpp.jid.Jid; + +public class ExportLogsService extends Service { + + private static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); + private static final String DIRECTORY_STRING_FORMAT = FileBackend.getConversationsFileDirectory() + "/logs/%s"; + private static final String MESSAGE_STRING_FORMAT = "(%s) %s: %s\n"; + private static final int NOTIFICATION_ID = 1; + private static AtomicBoolean running = new AtomicBoolean(false); + private DatabaseBackend mDatabaseBackend; + private List<Account> mAccounts; + + @Override + public void onCreate() { + mDatabaseBackend = DatabaseBackend.getInstance(getBaseContext()); + mAccounts = mDatabaseBackend.getAccounts(); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + if (running.compareAndSet(false, true)) { + new Thread(new Runnable() { + @Override + public void run() { + running.set(false); + export(); + stopForeground(true); + stopSelf(); + } + }).start(); + } + return START_NOT_STICKY; + } + + private void export() { + List<Conversation> conversations = mDatabaseBackend.getConversations(Conversation.STATUS_AVAILABLE); + conversations.addAll(mDatabaseBackend.getConversations(Conversation.STATUS_ARCHIVED)); + NotificationManager mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getBaseContext()); + mBuilder.setContentTitle(getString(R.string.notification_export_logs_title)) + .setSmallIcon(R.drawable.ic_import_export_white_24dp) + .setProgress(conversations.size(), 0, false); + startForeground(NOTIFICATION_ID, mBuilder.build()); + + int progress = 0; + for (Conversation conversation : conversations) { + writeToFile(conversation); + progress++; + mBuilder.setProgress(conversations.size(), progress, false); + mNotifyManager.notify(NOTIFICATION_ID, mBuilder.build()); + } + } + + private void writeToFile(Conversation conversation) { + Jid accountJid = resolveAccountUuid(conversation.getAccountUuid()); + Jid contactJid = conversation.getJid(); + + File dir = new File(String.format(DIRECTORY_STRING_FORMAT,accountJid.toBareJid().toString())); + dir.mkdirs(); + + BufferedWriter bw = null; + try { + for (Message message : mDatabaseBackend.getMessagesIterable(conversation)) { + if (message.getType() == Message.TYPE_TEXT || message.hasFileOnRemoteHost()) { + String date = simpleDateFormat.format(new Date(message.getTimeSent())); + if (bw == null) { + bw = new BufferedWriter(new FileWriter( + new File(dir, contactJid.toBareJid().toString() + ".txt"))); + } + String jid = null; + switch (message.getStatus()) { + case Message.STATUS_RECEIVED: + jid = getMessageCounterpart(message); + break; + case Message.STATUS_SEND: + case Message.STATUS_SEND_RECEIVED: + case Message.STATUS_SEND_DISPLAYED: + jid = accountJid.toBareJid().toString(); + break; + } + if (jid != null) { + String body = message.hasFileOnRemoteHost() ? message.getFileParams().url.toString() : message.getBody(); + bw.write(String.format(MESSAGE_STRING_FORMAT, date, jid, + body.replace("\\\n", "\\ \n").replace("\n", "\\ \n"))); + } + } + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (bw != null) { + bw.close(); + } + } catch (IOException e1) { + e1.printStackTrace(); + } + } + } + + private Jid resolveAccountUuid(String accountUuid) { + for (Account account : mAccounts) { + if (account.getUuid().equals(accountUuid)) { + return account.getJid(); + } + } + return null; + } + + private String getMessageCounterpart(Message message) { + String trueCounterpart = (String) message.getContentValues().get(Message.TRUE_COUNTERPART); + if (trueCounterpart != null) { + return trueCounterpart; + } else { + return message.getCounterpart().toString(); + } + } + + @Override + public IBinder onBind(Intent intent) { + return null; + } +}
\ No newline at end of file |