diff --git a/src/main/java/de/fabianonline/telegram_backup/Database.java b/src/main/java/de/fabianonline/telegram_backup/Database.java index 864a43d..a5dbe28 100644 --- a/src/main/java/de/fabianonline/telegram_backup/Database.java +++ b/src/main/java/de/fabianonline/telegram_backup/Database.java @@ -36,8 +36,10 @@ import java.io.IOException; import java.util.LinkedList; import java.util.LinkedHashMap; import java.util.HashMap; +import java.util.Date; import java.nio.file.Files; import java.nio.file.StandardCopyOption; +import java.text.SimpleDateFormat; import de.fabianonline.telegram_backup.mediafilemanager.AbstractMediaFileManager; import de.fabianonline.telegram_backup.mediafilemanager.FileManagerFactory; @@ -586,20 +588,36 @@ public class Database { private LinkedList> getMessagesForExport(String type, Integer id) { try { - ResultSet rs = stmt.executeQuery("SELECT messages.id as mid, text, time*1000 as t, has_media, " + - "media_type, media_file, media_size, users.first_name, users.last_name, users.username, " + - "users_fwd.first_name, users_fwd.last_name, users_fwd.username " + + ResultSet rs = stmt.executeQuery("SELECT messages.id as message_id, text, time*1000 as time, has_media, " + + "media_type, media_file, media_size, users.first_name as user_first_name, users.last_name as user_last_name, " + + "users.username as user_username, users.id as user_id, " + + "users_fwd.first_name as user_fwd_first_name, users_fwd.last_name as user_fwd_last_name, users_fwd.username as user_fwd_username " + "FROM messages, users LEFT JOIN users AS users_fwd ON users_fwd.id=fwd_from_id WHERE " + "users.id=messages.sender_id AND " + type + "=" + id + " " + "ORDER BY messages.id"); + SimpleDateFormat format_time = new SimpleDateFormat("HH:mm:ss"); + SimpleDateFormat format_date = new SimpleDateFormat("d MMM yy"); ResultSetMetaData meta = rs.getMetaData(); int columns = meta.getColumnCount(); LinkedList> list = new LinkedList>(); + String old_date = null; while (rs.next()) { HashMap h = new HashMap(columns); for (int i=1; i<=columns; i++) { h.put(meta.getColumnName(i), rs.getObject(i)); } + // Additional values to make up for Mustache's inability to format dates + Date d = rs.getTime("time"); + String date = format_date.format(d); + h.put("formatted_time", format_time.format(d)); + h.put("formatted_date", date); + if (rs.getString("media_type")!=null) { + h.put("media_" + rs.getString("media_type"), true); + } + h.put("from_me", rs.getInt("user_id")==user_manager.getUser().getId()); + h.put("is_new_date", !date.equals(old_date)); + old_date = date; + list.add(h); } rs.close(); diff --git a/src/main/java/de/fabianonline/telegram_backup/exporter/HTMLExporter.java b/src/main/java/de/fabianonline/telegram_backup/exporter/HTMLExporter.java index bf29eeb..1239bd7 100644 --- a/src/main/java/de/fabianonline/telegram_backup/exporter/HTMLExporter.java +++ b/src/main/java/de/fabianonline/telegram_backup/exporter/HTMLExporter.java @@ -56,25 +56,32 @@ public class HTMLExporter { mustache.execute(w, scope); w.close(); + mustache = mf.compile("templates/html/chat.mustache"); + for (Database.Dialog d : dialogs) { - //LinkedList> messages = db.getMessagesForTemplate(dialog); + LinkedList> messages = db.getMessagesForExport(d); + scope.clear(); + scope.put("dialog", d); + scope.put("messages", messages); + + w = new FileWriter(base + "dialogs" + File.separatorChar + "user_" + d.id + ".html"); + mustache.execute(w, scope); + w.close(); + } + + for (Database.Chat c : chats) { + LinkedList> messages = db.getMessagesForExport(c); + scope.clear(); + scope.put("chat", c); + scope.put("messages", messages); + + w = new FileWriter(base + "dialogs" + File.separatorChar + "chat_" + c.id + ".html"); + mustache.execute(w, scope); + w.close(); } - System.exit(0); - /* - String filename = base + "dialogs" + File.separatorChar + "user_" + dialog.id + ".html"; - final PrintWriter chatfile = new PrintWriter(new BufferedWriter(new FileWriter(filename))); - db.getMessagesForExport(dialog, new ChatLineWriter(chatfile)); - chatfile.close(); - - String filename = base + "dialogs" + File.separatorChar + "chat_" + chat.id + ".html"; - final PrintWriter chatfile = new PrintWriter(new BufferedWriter(new FileWriter(filename))); - db.getMessagesForExport(chat, new ChatLineWriter(chatfile)); - chatfile.close(); - */ } catch (IOException e) { e.printStackTrace(); throw new RuntimeException("Exception above!"); } } -// w.println("" + String.format("%1$tF %1$tT", msg.time) + " - " + msg.text + "
"); } diff --git a/src/main/resources/templates/html/chat.mustache b/src/main/resources/templates/html/chat.mustache new file mode 100644 index 0000000..8bb9dec --- /dev/null +++ b/src/main/resources/templates/html/chat.mustache @@ -0,0 +1,39 @@ + + + + Telegram Backup for {{user.getUserString}} + + + +

Telegram Backup

+ {{#dialog}} +

Dialog with {{first_name}} {{last_name}} {{#username}}(@{{username}}){{/username}}

+ {{/dialog}} + {{#chat}} +

Chat {{name}}

+ {{/chat}} + + Back to the overview + +
    + {{#messages}} + {{#is_new_date}} +
  • + {{formatted_date}} +
  • + {{/is_new_date}} +
  • + {{user_first_name}} + {{formatted_time}} + {{#text}}{{text}}{{/text}} + {{#media_sticker}}{{/media_sticker}} + {{#media_photo}}{{/media_photo}} + {{#media_document}}{{media_file}}{{/media_document}} +
  • + {{/messages}} +
+ + Back to the overview + + +