sticker-convert 2.1.6__py3-none-any.whl → 2.1.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- sticker_convert/__init__.py +1 -1
- sticker_convert/__main__.py +7 -4
- sticker_convert/cli.py +39 -31
- sticker_convert/converter.py +432 -0
- sticker_convert/downloaders/download_base.py +40 -16
- sticker_convert/downloaders/download_kakao.py +103 -136
- sticker_convert/downloaders/download_line.py +16 -6
- sticker_convert/downloaders/download_signal.py +48 -32
- sticker_convert/downloaders/download_telegram.py +71 -26
- sticker_convert/gui.py +78 -129
- sticker_convert/{gui_frames → gui_components/frames}/comp_frame.py +2 -3
- sticker_convert/{gui_frames → gui_components/frames}/config_frame.py +3 -4
- sticker_convert/{gui_frames → gui_components/frames}/control_frame.py +2 -2
- sticker_convert/{gui_frames → gui_components/frames}/cred_frame.py +4 -4
- sticker_convert/{gui_frames → gui_components/frames}/input_frame.py +4 -4
- sticker_convert/{gui_frames → gui_components/frames}/output_frame.py +3 -3
- sticker_convert/{gui_frames → gui_components/frames}/progress_frame.py +1 -1
- sticker_convert/{utils → gui_components}/gui_utils.py +38 -21
- sticker_convert/{gui_windows → gui_components/windows}/advanced_compression_window.py +3 -2
- sticker_convert/{gui_windows → gui_components/windows}/base_window.py +3 -2
- sticker_convert/{gui_windows → gui_components/windows}/kakao_get_auth_window.py +3 -3
- sticker_convert/{gui_windows → gui_components/windows}/line_get_auth_window.py +2 -2
- sticker_convert/{gui_windows → gui_components/windows}/signal_get_auth_window.py +2 -2
- sticker_convert/{flow.py → job.py} +91 -102
- sticker_convert/job_option.py +301 -0
- sticker_convert/resources/compression.json +1 -1
- sticker_convert/uploaders/compress_wastickers.py +95 -74
- sticker_convert/uploaders/upload_base.py +16 -4
- sticker_convert/uploaders/upload_signal.py +100 -62
- sticker_convert/uploaders/upload_telegram.py +168 -128
- sticker_convert/uploaders/xcode_imessage.py +202 -132
- sticker_convert/{auth → utils/auth}/get_kakao_auth.py +7 -5
- sticker_convert/{auth → utils/auth}/get_line_auth.py +3 -3
- sticker_convert/{auth → utils/auth}/get_signal_auth.py +1 -1
- sticker_convert/utils/fake_cb_msg.py +5 -2
- sticker_convert/utils/{cache_store.py → files/cache_store.py} +7 -3
- sticker_convert/utils/files/dir_utils.py +64 -0
- sticker_convert/utils/{json_manager.py → files/json_manager.py} +5 -4
- sticker_convert/utils/files/metadata_handler.py +226 -0
- sticker_convert/utils/files/run_bin.py +58 -0
- sticker_convert/utils/{apple_png_normalize.py → media/apple_png_normalize.py} +23 -20
- sticker_convert/utils/{codec_info.py → media/codec_info.py} +41 -35
- sticker_convert/utils/media/decrypt_kakao.py +68 -0
- sticker_convert/utils/media/format_verify.py +184 -0
- sticker_convert/utils/url_detect.py +16 -14
- {sticker_convert-2.1.6.dist-info → sticker_convert-2.1.7.dist-info}/METADATA +8 -9
- {sticker_convert-2.1.6.dist-info → sticker_convert-2.1.7.dist-info}/RECORD +52 -50
- {sticker_convert-2.1.6.dist-info → sticker_convert-2.1.7.dist-info}/WHEEL +1 -1
- sticker_convert/utils/converter.py +0 -407
- sticker_convert/utils/curr_dir.py +0 -70
- sticker_convert/utils/format_verify.py +0 -188
- sticker_convert/utils/metadata_handler.py +0 -190
- sticker_convert/utils/run_bin.py +0 -46
- /sticker_convert/{gui_frames → gui_components/frames}/right_clicker.py +0 -0
- {sticker_convert-2.1.6.dist-info → sticker_convert-2.1.7.dist-info}/LICENSE +0 -0
- {sticker_convert-2.1.6.dist-info → sticker_convert-2.1.7.dist-info}/entry_points.txt +0 -0
- {sticker_convert-2.1.6.dist-info → sticker_convert-2.1.7.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,184 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
import os
|
3
|
+
import unicodedata
|
4
|
+
import re
|
5
|
+
from typing import Optional, Union
|
6
|
+
|
7
|
+
from .codec_info import CodecInfo # type: ignore
|
8
|
+
from ...job_option import CompOption # type: ignore
|
9
|
+
|
10
|
+
|
11
|
+
class FormatVerify:
|
12
|
+
@staticmethod
|
13
|
+
def check_file(file: str, spec: CompOption) -> bool:
|
14
|
+
return (
|
15
|
+
FormatVerify.check_presence(file)
|
16
|
+
and FormatVerify.check_file_res(file, res=spec.res, square=spec.square)
|
17
|
+
and FormatVerify.check_file_fps(file, fps=spec.fps)
|
18
|
+
and FormatVerify.check_file_size(file, size=spec.size_max)
|
19
|
+
and FormatVerify.check_animated(file, animated=spec.animated)
|
20
|
+
and FormatVerify.check_format(file, fmt=spec.format)
|
21
|
+
and FormatVerify.check_duration(file, duration=spec.duration)
|
22
|
+
)
|
23
|
+
|
24
|
+
@staticmethod
|
25
|
+
def check_presence(file: str) -> bool:
|
26
|
+
return os.path.isfile(file)
|
27
|
+
|
28
|
+
@staticmethod
|
29
|
+
def check_file_res(
|
30
|
+
file: str,
|
31
|
+
res: Optional[list[list[int]]] = None,
|
32
|
+
square: Optional[bool] = None
|
33
|
+
) -> bool:
|
34
|
+
file_width, file_height = CodecInfo.get_file_res(file)
|
35
|
+
|
36
|
+
if res:
|
37
|
+
if res[0][0] and file_width < res[0][0]:
|
38
|
+
return False
|
39
|
+
if res[0][1] and file_width > res[0][1]:
|
40
|
+
return False
|
41
|
+
if res[1][0] and file_height < res[1][0]:
|
42
|
+
return False
|
43
|
+
if res[1][1] and file_height > res[1][1]:
|
44
|
+
return False
|
45
|
+
if square and file_height != file_width:
|
46
|
+
return False
|
47
|
+
|
48
|
+
return True
|
49
|
+
|
50
|
+
@staticmethod
|
51
|
+
def check_file_fps(file: str, fps: Optional[list[int]]) -> bool:
|
52
|
+
file_fps = CodecInfo.get_file_fps(file)
|
53
|
+
|
54
|
+
if fps and fps[0] and file_fps < fps[0]:
|
55
|
+
return False
|
56
|
+
if fps and fps[1] and file_fps > fps[1]:
|
57
|
+
return False
|
58
|
+
|
59
|
+
return True
|
60
|
+
|
61
|
+
@staticmethod
|
62
|
+
def check_file_size(file: str, size: Optional[list[int]] = None) -> bool:
|
63
|
+
file_size = os.path.getsize(file)
|
64
|
+
file_animated = CodecInfo.is_anim(file)
|
65
|
+
|
66
|
+
if (
|
67
|
+
file_animated == True
|
68
|
+
and size
|
69
|
+
and size[1] != None
|
70
|
+
and file_size > size[1]
|
71
|
+
):
|
72
|
+
return False
|
73
|
+
if (
|
74
|
+
file_animated == False
|
75
|
+
and size
|
76
|
+
and size[0] != None
|
77
|
+
and file_size > size[0]
|
78
|
+
):
|
79
|
+
return False
|
80
|
+
|
81
|
+
return True
|
82
|
+
|
83
|
+
@staticmethod
|
84
|
+
def check_animated(file: str, animated: Optional[bool] = None) -> bool:
|
85
|
+
if animated != None and CodecInfo.is_anim(file) != animated:
|
86
|
+
return False
|
87
|
+
|
88
|
+
return True
|
89
|
+
|
90
|
+
@staticmethod
|
91
|
+
def check_format(
|
92
|
+
file: str,
|
93
|
+
fmt: list[Union[list[str], str, None]] = None
|
94
|
+
):
|
95
|
+
compat_ext = {
|
96
|
+
".jpg": ".jpeg",
|
97
|
+
".jpeg": ".jpg",
|
98
|
+
".png": ".apng",
|
99
|
+
".apng": ".png",
|
100
|
+
}
|
101
|
+
|
102
|
+
formats: list[str] = []
|
103
|
+
|
104
|
+
if fmt == [None, None]:
|
105
|
+
return True
|
106
|
+
|
107
|
+
if FormatVerify.check_animated(file):
|
108
|
+
if isinstance(fmt[1], list):
|
109
|
+
formats = fmt[1].copy()
|
110
|
+
else:
|
111
|
+
formats.append(fmt[1])
|
112
|
+
else:
|
113
|
+
if isinstance(fmt[0], list):
|
114
|
+
formats = fmt[0].copy()
|
115
|
+
else:
|
116
|
+
formats.append(fmt[0])
|
117
|
+
|
118
|
+
for f in formats.copy():
|
119
|
+
if f in compat_ext:
|
120
|
+
formats.append(compat_ext.get(f)) # type: ignore[arg-type]
|
121
|
+
|
122
|
+
if CodecInfo.get_file_ext(file) not in formats:
|
123
|
+
return False
|
124
|
+
|
125
|
+
return True
|
126
|
+
|
127
|
+
@staticmethod
|
128
|
+
def check_duration(file: str, duration: Optional[list[str]] = None) -> bool:
|
129
|
+
file_duration = CodecInfo.get_file_duration(file)
|
130
|
+
if duration and duration[0] and file_duration < duration[0]:
|
131
|
+
return False
|
132
|
+
if duration and duration[1] and file_duration > duration[1]:
|
133
|
+
return False
|
134
|
+
|
135
|
+
return True
|
136
|
+
|
137
|
+
@staticmethod
|
138
|
+
def sanitize_filename(filename: str) -> str:
|
139
|
+
# Based on https://gitlab.com/jplusplus/sanitize-filename/-/blob/master/sanitize_filename/sanitize_filename.py
|
140
|
+
# Replace illegal character with '_'
|
141
|
+
"""Return a fairly safe version of the filename.
|
142
|
+
|
143
|
+
We don't limit ourselves to ascii, because we want to keep municipality
|
144
|
+
names, etc, but we do want to get rid of anything potentially harmful,
|
145
|
+
and make sure we do not exceed Windows filename length limits.
|
146
|
+
Hence a less safe blacklist, rather than a whitelist.
|
147
|
+
"""
|
148
|
+
blacklist = ["\\", "/", ":", "*", "?", '"', "<", ">", "|", "\0"]
|
149
|
+
reserved = [
|
150
|
+
"CON", "PRN", "AUX", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5",
|
151
|
+
"COM6", "COM7", "COM8", "COM9", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5",
|
152
|
+
"LPT6", "LPT7", "LPT8", "LPT9",
|
153
|
+
] # Reserved words on Windows
|
154
|
+
filename = "".join(c if c not in blacklist else "_" for c in filename)
|
155
|
+
# Remove all charcters below code point 32
|
156
|
+
filename = "".join(c if 31 < ord(c) else "_" for c in filename)
|
157
|
+
filename = unicodedata.normalize("NFKD", filename)
|
158
|
+
filename = filename.rstrip(". ") # Windows does not allow these at end
|
159
|
+
filename = filename.strip()
|
160
|
+
if all([x == "." for x in filename]):
|
161
|
+
filename = "__" + filename
|
162
|
+
if filename in reserved:
|
163
|
+
filename = "__" + filename
|
164
|
+
if len(filename) == 0:
|
165
|
+
filename = "__"
|
166
|
+
if len(filename) > 255:
|
167
|
+
parts = re.split(r"/|\\", filename)[-1].split(".")
|
168
|
+
if len(parts) > 1:
|
169
|
+
ext = "." + parts.pop()
|
170
|
+
filename = filename[: -len(ext)]
|
171
|
+
else:
|
172
|
+
ext = ""
|
173
|
+
if filename == "":
|
174
|
+
filename = "__"
|
175
|
+
if len(ext) > 254:
|
176
|
+
ext = ext[254:]
|
177
|
+
maxl = 255 - len(ext)
|
178
|
+
filename = filename[:maxl]
|
179
|
+
filename = filename + ext
|
180
|
+
# Re-check last character (if there was no extension)
|
181
|
+
filename = filename.rstrip(". ")
|
182
|
+
if len(filename) == 0:
|
183
|
+
filename = "__"
|
184
|
+
return filename
|
@@ -3,27 +3,29 @@ import string
|
|
3
3
|
from urllib.parse import urlparse
|
4
4
|
from typing import Optional
|
5
5
|
|
6
|
+
|
6
7
|
class UrlDetect:
|
7
8
|
@staticmethod
|
8
9
|
def detect(url: str) -> Optional[str]:
|
9
10
|
domain = urlparse(url).netloc
|
10
11
|
|
11
|
-
if domain ==
|
12
|
-
return
|
13
|
-
|
14
|
-
elif domain in ('telegram.me', 't.me'):
|
15
|
-
return 'telegram'
|
16
|
-
|
17
|
-
elif (domain in ('store.line.me', 'line.me') or
|
18
|
-
url.startswith('line://shop/detail/') or
|
19
|
-
(len(url) == 24 and all(c in string.hexdigits for c in url))):
|
12
|
+
if domain == "signal.art":
|
13
|
+
return "signal"
|
20
14
|
|
21
|
-
|
15
|
+
elif domain in ("telegram.me", "t.me"):
|
16
|
+
return "telegram"
|
22
17
|
|
23
|
-
elif (
|
24
|
-
|
18
|
+
elif (
|
19
|
+
domain in ("store.line.me", "line.me")
|
20
|
+
or url.startswith("line://shop/detail/")
|
21
|
+
or (len(url) == 24 and all(c in string.hexdigits for c in url))
|
22
|
+
):
|
23
|
+
return "line"
|
25
24
|
|
26
|
-
|
25
|
+
elif domain in ("e.kakao.com", "emoticon.kakao.com") or url.startswith(
|
26
|
+
"kakaotalk://store/emoticon/"
|
27
|
+
):
|
28
|
+
return "kakao"
|
27
29
|
|
28
30
|
else:
|
29
|
-
return None
|
31
|
+
return None
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: sticker-convert
|
3
|
-
Version: 2.1.
|
3
|
+
Version: 2.1.7
|
4
4
|
Summary: Convert (animated) stickers to/from WhatsApp, Telegram, Signal, Line, Kakao, iMessage. Written in Python.
|
5
5
|
Author-email: laggykiller <chaudominic2@gmail.com>
|
6
6
|
Maintainer-email: laggykiller <chaudominic2@gmail.com>
|
@@ -365,19 +365,18 @@ Requires-Python: >=3.7
|
|
365
365
|
Description-Content-Type: text/markdown
|
366
366
|
License-File: LICENSE
|
367
367
|
Requires-Dist: apngasm-python ~=1.2.1
|
368
|
-
Requires-Dist: pyav ~=11.
|
368
|
+
Requires-Dist: pyav ~=11.4.1
|
369
369
|
Requires-Dist: beautifulsoup4 ~=4.12.2
|
370
|
-
Requires-Dist: rookiepy ~=0.
|
371
|
-
Requires-Dist: imageio ~=2.
|
370
|
+
Requires-Dist: rookiepy ~=0.3.3
|
371
|
+
Requires-Dist: imageio ~=2.33.1
|
372
372
|
Requires-Dist: memory-tempfile ~=2.2.3
|
373
|
-
Requires-Dist:
|
374
|
-
Requires-Dist:
|
375
|
-
Requires-Dist:
|
376
|
-
Requires-Dist: pyoxipng ~=8.0.1
|
373
|
+
Requires-Dist: numpy ~=1.26.2
|
374
|
+
Requires-Dist: Pillow ~=10.1.0
|
375
|
+
Requires-Dist: pyoxipng ~=9.0.0
|
377
376
|
Requires-Dist: python-telegram-bot ~=20.5
|
378
377
|
Requires-Dist: requests ~=2.31.0
|
379
378
|
Requires-Dist: rlottie-python ~=1.2.1
|
380
|
-
Requires-Dist: selenium ~=4.
|
379
|
+
Requires-Dist: selenium ~=4.16.0
|
381
380
|
Requires-Dist: signalstickers-client ~=3.3.0
|
382
381
|
Requires-Dist: tqdm ~=4.66.1
|
383
382
|
Requires-Dist: ttkbootstrap-fork-laggykiller ~=1.5.1
|
@@ -1,29 +1,29 @@
|
|
1
|
-
sticker_convert/__init__.py,sha256=
|
2
|
-
sticker_convert/__main__.py,sha256=
|
3
|
-
sticker_convert/cli.py,sha256=
|
4
|
-
sticker_convert/
|
5
|
-
sticker_convert/gui.py,sha256=
|
6
|
-
sticker_convert/
|
7
|
-
sticker_convert/
|
8
|
-
sticker_convert/
|
9
|
-
sticker_convert/downloaders/
|
10
|
-
sticker_convert/downloaders/
|
11
|
-
sticker_convert/downloaders/
|
12
|
-
sticker_convert/downloaders/
|
13
|
-
sticker_convert/
|
14
|
-
sticker_convert/
|
15
|
-
sticker_convert/
|
16
|
-
sticker_convert/
|
17
|
-
sticker_convert/
|
18
|
-
sticker_convert/
|
19
|
-
sticker_convert/
|
20
|
-
sticker_convert/
|
21
|
-
sticker_convert/
|
22
|
-
sticker_convert/
|
23
|
-
sticker_convert/
|
24
|
-
sticker_convert/
|
25
|
-
sticker_convert/
|
26
|
-
sticker_convert/
|
1
|
+
sticker_convert/__init__.py,sha256=NnqW7pbvkP5AqwtqG8v2g4EipYnPQMyEhvLSH0CEwvY,66
|
2
|
+
sticker_convert/__main__.py,sha256=W3n9SprqoDQxaWDAqLVA7DiavMdbPLVdtbASTKSpZS0,546
|
3
|
+
sticker_convert/cli.py,sha256=21D5lAghcB3f5V7vk_qS6Di-NtGlH1ilAqDCPpzVUak,16534
|
4
|
+
sticker_convert/converter.py,sha256=k4wy8nYtUFaEFxQ6QRPWPUyAorGgRIWQ0WLElsnKTXw,16780
|
5
|
+
sticker_convert/gui.py,sha256=AXNPOgES0lyp-nhc5HRQMTr69xSAeUqEW1ehXCIadt0,27484
|
6
|
+
sticker_convert/job.py,sha256=NrJHq2Sjo2tCYcvaKmH2mp9TZmGygB56lrWyDfWThnc,17434
|
7
|
+
sticker_convert/job_option.py,sha256=0W97v-39FFMyFUqIx4f8ClOqQjvnVNdcvS6MbWQA7Jo,10803
|
8
|
+
sticker_convert/downloaders/download_base.py,sha256=TYC6bod0IHUApPBLltsOg9zUOMJRScUp7RMwUG8nF78,2572
|
9
|
+
sticker_convert/downloaders/download_kakao.py,sha256=Dnu-KfrfBMVHFkxt0Lg1IvoqT0K0pTk_bpIRImI6FOU,8081
|
10
|
+
sticker_convert/downloaders/download_line.py,sha256=71m5IbmHDBdIAVHkY8D5n7Yx1g6DKoyrmc12VM_BL_U,16485
|
11
|
+
sticker_convert/downloaders/download_signal.py,sha256=oV2WaCRgZk-vM6hOyWy0BlUpfMw7Q3xKYEBi2ATVLrE,2881
|
12
|
+
sticker_convert/downloaders/download_telegram.py,sha256=jMJBrXLYW_pKP5w3Azi3dweFBS1tE9BHXA8Q4uqdJ4o,4119
|
13
|
+
sticker_convert/gui_components/gui_utils.py,sha256=_34tJMrwL44CM4N0hVvxZ8o16l2jYau7p7Ew0L1daJ4,3177
|
14
|
+
sticker_convert/gui_components/frames/comp_frame.py,sha256=XdQBti5fL92wJtBuDtWGcpq3n3am1alxaBxvYD0637s,6416
|
15
|
+
sticker_convert/gui_components/frames/config_frame.py,sha256=JXvyIwl74PviErMK6V8yS8a3lMdRpSOGWlxFgN-ZDuw,3826
|
16
|
+
sticker_convert/gui_components/frames/control_frame.py,sha256=jwm1kBwLFxDp-wgfJwDEpBXpcx_84r26L-Ep0T4azfE,748
|
17
|
+
sticker_convert/gui_components/frames/cred_frame.py,sha256=UD3q5fJgbZ9Q4f3YgqJvptwmJy9w094OcU4P-T2hzns,5534
|
18
|
+
sticker_convert/gui_components/frames/input_frame.py,sha256=N_xphGfy2EsuSK_OTUkHdFHD8Fp0ldI8kIeG8nvYAdo,4298
|
19
|
+
sticker_convert/gui_components/frames/output_frame.py,sha256=fdJyNFjN8Y_qrtTFJeX-BVr3VaXUBmpiEPDnT7TcD3I,3698
|
20
|
+
sticker_convert/gui_components/frames/progress_frame.py,sha256=LC-Bf9kR3hTMQSTbZIgfUAIYYaRJenqOfUHDHfnUJYw,3124
|
21
|
+
sticker_convert/gui_components/frames/right_clicker.py,sha256=037pLjg_ZLQ6XF3MrGy9ljBiXTqkhfmfGFuqYfyrf3Y,633
|
22
|
+
sticker_convert/gui_components/windows/advanced_compression_window.py,sha256=IUuS9iLVvVzR7PPaQVHErMVdSLEjuxMOoWwSrZ3ify0,24036
|
23
|
+
sticker_convert/gui_components/windows/base_window.py,sha256=zsWxW2hs_wQ4dQ9dZMDhyjnQBC1i_7gKCJ_rVqb_quE,1032
|
24
|
+
sticker_convert/gui_components/windows/kakao_get_auth_window.py,sha256=iMSrpslItfo43n0QrTO74XDbLEX3MmA0Hb8uyuhOygw,5964
|
25
|
+
sticker_convert/gui_components/windows/line_get_auth_window.py,sha256=qX73KYpQ5nLH89R2mj2Rh07mzhjIUKUnSuDy0RFZR4E,2986
|
26
|
+
sticker_convert/gui_components/windows/signal_get_auth_window.py,sha256=a7PSTr788Oeh5PLmL_26HeW5BljST7jUwWEHLsWgkHQ,2949
|
27
27
|
sticker_convert/ios-message-stickers-template/.gitignore,sha256=4uuTph_9eHfqXHUavLOmGOji6aIHOif2bUEU_hCBn4Y,9
|
28
28
|
sticker_convert/ios-message-stickers-template/README.md,sha256=oN0FvJkCWWjSZ3PMrCvY3T1zCsdkZYFgGHAoFh0Kmt8,467
|
29
29
|
sticker_convert/ios-message-stickers-template/.github/FUNDING.yml,sha256=3LlmdSAGDsBA2o_C1iBYTNLwkABnyZuN0zxgPPyd-f8,70
|
@@ -60,31 +60,33 @@ sticker_convert/resources/NotoColorEmoji.ttf,sha256=LurIVaCIA8bSCfjrdO1feYr0bhKL
|
|
60
60
|
sticker_convert/resources/appicon.icns,sha256=FB2DVTOQcFfQNZ9RcyG3z9c9k7eOiI1qw0IJhXMRFg4,5404
|
61
61
|
sticker_convert/resources/appicon.ico,sha256=-ldugcl2Yq2pBRTktnhGKWInpKyWzRjCiPvMr3XPTlc,38078
|
62
62
|
sticker_convert/resources/appicon.png,sha256=6XBEQz7PnerqS43aRkwpWolFG4WvKMuQ-st1ly-_JPg,5265
|
63
|
-
sticker_convert/resources/compression.json,sha256=
|
63
|
+
sticker_convert/resources/compression.json,sha256=2hS_mInf7XvyY3FDnIejN8pH_jVsMcM4HnNUkpq4Nmc,7843
|
64
64
|
sticker_convert/resources/emoji.json,sha256=vIRB-0ICtH8ZvyWhUPqc4VU5po-G-z8bTMrfCLBPPdM,408777
|
65
65
|
sticker_convert/resources/help.json,sha256=tTklI3neTDZ7YisQLf3QlXzmUcjqE29zdjLrwVwQKOs,4625
|
66
66
|
sticker_convert/resources/input.json,sha256=ca-S5o4Yt2Qke7iNf_RR18MAg5HKDoXd6j9Gs57Kt6k,2211
|
67
67
|
sticker_convert/resources/output.json,sha256=0k8J3z0nPRkyIZj4DvXI4FPvlFuYFoYgA2ldVaMtF0Y,1131
|
68
|
-
sticker_convert/uploaders/compress_wastickers.py,sha256=
|
69
|
-
sticker_convert/uploaders/upload_base.py,sha256=
|
70
|
-
sticker_convert/uploaders/upload_signal.py,sha256=
|
71
|
-
sticker_convert/uploaders/upload_telegram.py,sha256=
|
72
|
-
sticker_convert/uploaders/xcode_imessage.py,sha256=
|
73
|
-
sticker_convert/utils/
|
74
|
-
sticker_convert/utils/
|
75
|
-
sticker_convert/utils/
|
76
|
-
sticker_convert/utils/
|
77
|
-
sticker_convert/utils/
|
78
|
-
sticker_convert/utils/
|
79
|
-
sticker_convert/utils/
|
80
|
-
sticker_convert/utils/
|
81
|
-
sticker_convert/utils/
|
82
|
-
sticker_convert/utils/
|
83
|
-
sticker_convert/utils/
|
84
|
-
sticker_convert/utils/
|
85
|
-
sticker_convert
|
86
|
-
sticker_convert
|
87
|
-
sticker_convert-2.1.
|
88
|
-
sticker_convert-2.1.
|
89
|
-
sticker_convert-2.1.
|
90
|
-
sticker_convert-2.1.
|
68
|
+
sticker_convert/uploaders/compress_wastickers.py,sha256=shud-hWoAJTj7yJYBNZ1FnerHpHO1K8-8g4f3InOMbg,5393
|
69
|
+
sticker_convert/uploaders/upload_base.py,sha256=KQMtzb1vIY8SLzLkUInVNssC1EMsynsxMHT6gpz2Xp8,816
|
70
|
+
sticker_convert/uploaders/upload_signal.py,sha256=O6bTFo-MOpulvEqBgPDpaJ3HRWhEnPosXn2oOnDdc_k,5807
|
71
|
+
sticker_convert/uploaders/upload_telegram.py,sha256=w3-z2G9PdfF8ip0UQSDs8xzzogNCtbeWuKuIPCiSp9c,10385
|
72
|
+
sticker_convert/uploaders/xcode_imessage.py,sha256=dW-8WoWioaHR7ZcniQlk3zwKpe6j_1E6dBVDNNrfDWU,13321
|
73
|
+
sticker_convert/utils/fake_cb_msg.py,sha256=LYHWKqjL4GdNG2HUCbvVNsRjQOErJBXsJS-kRVQqJ5k,289
|
74
|
+
sticker_convert/utils/url_detect.py,sha256=x163bVIH4rEimozvFHMC-XBmxyecf3qpBjJIBt8WPeE,793
|
75
|
+
sticker_convert/utils/auth/get_kakao_auth.py,sha256=Q3CxzDqzoo9vf_bsbmpKZXeQODEXQ5leijKjjMt2Gv8,9306
|
76
|
+
sticker_convert/utils/auth/get_line_auth.py,sha256=pKe2N3QLTyB0wWBpkD9rlDBqHK7LZ5hnAmfPH7XVmFI,1211
|
77
|
+
sticker_convert/utils/auth/get_signal_auth.py,sha256=Q68aJdO6FQBr8Q5anHnktgjvNLyijiWCFsQ5nN_Sy3g,12066
|
78
|
+
sticker_convert/utils/files/cache_store.py,sha256=lNS6ItZ3lwNa7NipkDo7n0wIoAf728dcRV0r0ohmM3s,730
|
79
|
+
sticker_convert/utils/files/dir_utils.py,sha256=_jDyyPTVQXiVr4dJhPFaXqaKvch_MWLngwH7eZfezv4,1861
|
80
|
+
sticker_convert/utils/files/json_manager.py,sha256=BBndjSY5kvjxurOpnDI2DRsKoLrNBTf5HoGfUqlf-4Y,503
|
81
|
+
sticker_convert/utils/files/metadata_handler.py,sha256=t3vqbsrB-Rf43bGYvvdFsKPMcfTREC8DocBmMH0rkNI,8338
|
82
|
+
sticker_convert/utils/files/run_bin.py,sha256=4c8y5c_2wUfm0hbJSOGFcezpW5BVqM5_e9aliPbxvwo,1632
|
83
|
+
sticker_convert/utils/media/apple_png_normalize.py,sha256=YGrZ8pZvgfhw8dW-0gf7XcXk_R82lJTX-oTo6SsB7uY,3719
|
84
|
+
sticker_convert/utils/media/codec_info.py,sha256=PjUPlyKKXRW57mteGQMvTlVVB2S7eHGiTfgtMrFbVK4,3690
|
85
|
+
sticker_convert/utils/media/decrypt_kakao.py,sha256=gMz64vIGEIPAl4FFWuUbPMHE7vExr46ZFpzMoukvwws,1918
|
86
|
+
sticker_convert/utils/media/format_verify.py,sha256=7WvvDSFDkyG1WlkXKqVbmPjKiyEedtqivZcCqSNziD8,6179
|
87
|
+
sticker_convert-2.1.7.dist-info/LICENSE,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
|
88
|
+
sticker_convert-2.1.7.dist-info/METADATA,sha256=VcqJRNpLptWSphB0SvnRm9rx63EGaLME36CCKoaEw_w,44696
|
89
|
+
sticker_convert-2.1.7.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
90
|
+
sticker_convert-2.1.7.dist-info/entry_points.txt,sha256=MNJ7XyC--ugxi5jS1nzjDLGnxCyLuaGdsVLnJhDHCqs,66
|
91
|
+
sticker_convert-2.1.7.dist-info/top_level.txt,sha256=r9vfnB0l1ZnH5pTH5RvkobnK3Ow9m0RsncaOMAtiAtk,16
|
92
|
+
sticker_convert-2.1.7.dist-info/RECORD,,
|