mirror of
https://github.com/KnugiHK/WhatsApp-Chat-Exporter.git
synced 2026-04-10 21:35:32 +00:00
Refactor
This commit is contained in:
@@ -1,7 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Union
|
from typing import Union
|
||||||
from Whatsapp_Chat_Exporter.utility import Device
|
|
||||||
|
|
||||||
|
|
||||||
class ChatStore():
|
class ChatStore():
|
||||||
@@ -12,6 +11,7 @@ class ChatStore():
|
|||||||
self.messages = {}
|
self.messages = {}
|
||||||
self.type = type
|
self.type = type
|
||||||
if media is not None:
|
if media is not None:
|
||||||
|
from Whatsapp_Chat_Exporter.utility import Device
|
||||||
if self.type == Device.IOS:
|
if self.type == Device.IOS:
|
||||||
self.my_avatar = os.path.join(media, "Media/Profile/Photo.jpg")
|
self.my_avatar = os.path.join(media, "Media/Profile/Photo.jpg")
|
||||||
elif self.type == Device.ANDROID:
|
elif self.type == Device.ANDROID:
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ from mimetypes import MimeTypes
|
|||||||
from hashlib import sha256
|
from hashlib import sha256
|
||||||
from base64 import b64decode, b64encode
|
from base64 import b64decode, b64encode
|
||||||
from Whatsapp_Chat_Exporter.data_model import ChatStore, Message
|
from Whatsapp_Chat_Exporter.data_model import ChatStore, Message
|
||||||
from Whatsapp_Chat_Exporter.utility import MAX_SIZE, ROW_SIZE, Device, determine_metadata
|
from Whatsapp_Chat_Exporter.utility import MAX_SIZE, ROW_SIZE, determine_metadata, get_status_location
|
||||||
from Whatsapp_Chat_Exporter.utility import rendering, sanitize_except, determine_day, Crypt, get_file_name
|
from Whatsapp_Chat_Exporter.utility import rendering, Crypt, Device, get_file_name, setup_template
|
||||||
from Whatsapp_Chat_Exporter.utility import brute_force_offset, CRYPT14_OFFSETS
|
from Whatsapp_Chat_Exporter.utility import brute_force_offset, CRYPT14_OFFSETS
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -639,20 +639,7 @@ def create_html(
|
|||||||
maximum_size=None,
|
maximum_size=None,
|
||||||
no_avatar=False
|
no_avatar=False
|
||||||
):
|
):
|
||||||
if template is None:
|
template = setup_template(template, no_avatar)
|
||||||
template_dir = os.path.dirname(__file__)
|
|
||||||
template_file = "whatsapp.html"
|
|
||||||
else:
|
|
||||||
template_dir = os.path.dirname(template)
|
|
||||||
template_file = os.path.basename(template)
|
|
||||||
template_loader = jinja2.FileSystemLoader(searchpath=template_dir)
|
|
||||||
template_env = jinja2.Environment(loader=template_loader, autoescape=True)
|
|
||||||
template_env.globals.update(
|
|
||||||
determine_day=determine_day,
|
|
||||||
no_avatar=no_avatar
|
|
||||||
)
|
|
||||||
template_env.filters['sanitize_except'] = sanitize_except
|
|
||||||
template = template_env.get_template(template_file)
|
|
||||||
|
|
||||||
total_row_number = len(data)
|
total_row_number = len(data)
|
||||||
print(f"\nGenerating chats...(0/{total_row_number})", end="\r")
|
print(f"\nGenerating chats...(0/{total_row_number})", end="\r")
|
||||||
@@ -660,17 +647,7 @@ def create_html(
|
|||||||
if not os.path.isdir(output_folder):
|
if not os.path.isdir(output_folder):
|
||||||
os.mkdir(output_folder)
|
os.mkdir(output_folder)
|
||||||
|
|
||||||
w3css = "https://www.w3schools.com/w3css/4/w3.css"
|
w3css = get_status_location(output_folder, offline_static)
|
||||||
if offline_static:
|
|
||||||
import urllib.request
|
|
||||||
static_folder = os.path.join(output_folder, offline_static)
|
|
||||||
if not os.path.isdir(static_folder):
|
|
||||||
os.mkdir(static_folder)
|
|
||||||
w3css_path = os.path.join(static_folder, "w3.css")
|
|
||||||
if not os.path.isfile(w3css_path):
|
|
||||||
with urllib.request.urlopen(w3css) as resp:
|
|
||||||
with open(w3css_path, "wb") as f: f.write(resp.read())
|
|
||||||
w3css = os.path.join(offline_static, "w3.css")
|
|
||||||
|
|
||||||
for current, contact in enumerate(data):
|
for current, contact in enumerate(data):
|
||||||
chat = data[contact]
|
chat = data[contact]
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
|
import jinja2
|
||||||
import json
|
import json
|
||||||
|
import os
|
||||||
from bleach import clean as sanitize
|
from bleach import clean as sanitize
|
||||||
from markupsafe import Markup
|
from markupsafe import Markup
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
@@ -254,5 +256,36 @@ def determine_metadata(content, init_msg):
|
|||||||
return msg
|
return msg
|
||||||
|
|
||||||
|
|
||||||
|
def get_status_location(output_folder, offline_static):
|
||||||
|
w3css = "https://www.w3schools.com/w3css/4/w3.css"
|
||||||
|
if not offline_static:
|
||||||
|
return w3css
|
||||||
|
import urllib.request
|
||||||
|
static_folder = os.path.join(output_folder, offline_static)
|
||||||
|
if not os.path.isdir(static_folder):
|
||||||
|
os.mkdir(static_folder)
|
||||||
|
w3css_path = os.path.join(static_folder, "w3.css")
|
||||||
|
if not os.path.isfile(w3css_path):
|
||||||
|
with urllib.request.urlopen(w3css) as resp:
|
||||||
|
with open(w3css_path, "wb") as f: f.write(resp.read())
|
||||||
|
w3css = os.path.join(offline_static, "w3.css")
|
||||||
|
|
||||||
|
|
||||||
|
def setup_template(template, no_avatar):
|
||||||
|
if template is None:
|
||||||
|
template_dir = os.path.dirname(__file__)
|
||||||
|
template_file = "whatsapp.html"
|
||||||
|
else:
|
||||||
|
template_dir = os.path.dirname(template)
|
||||||
|
template_file = os.path.basename(template)
|
||||||
|
template_loader = jinja2.FileSystemLoader(searchpath=template_dir)
|
||||||
|
template_env = jinja2.Environment(loader=template_loader, autoescape=True)
|
||||||
|
template_env.globals.update(
|
||||||
|
determine_day=determine_day,
|
||||||
|
no_avatar=no_avatar
|
||||||
|
)
|
||||||
|
template_env.filters['sanitize_except'] = sanitize_except
|
||||||
|
return template_env.get_template(template_file)
|
||||||
|
|
||||||
# iOS Specific
|
# iOS Specific
|
||||||
APPLE_TIME = datetime.timestamp(datetime(2001, 1, 1))
|
APPLE_TIME = datetime.timestamp(datetime(2001, 1, 1))
|
||||||
|
|||||||
Reference in New Issue
Block a user