Unit3Dup 0.8.18__py3-none-any.whl → 0.8.20__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.
- common/external_services/imageHost.py +20 -0
- common/settings.py +8 -2
- common/utility.py +4 -1
- unit3dup/__main__.py +1 -1
- unit3dup/duplicate.py +1 -1
- unit3dup/media_manager/ContentManager.py +5 -3
- unit3dup/media_manager/common.py +1 -1
- unit3dup/pvtTracker.py +18 -17
- unit3dup/upload.py +18 -7
- {unit3dup-0.8.18.dist-info → unit3dup-0.8.20.dist-info}/METADATA +24 -2
- {unit3dup-0.8.18.dist-info → unit3dup-0.8.20.dist-info}/RECORD +15 -15
- {unit3dup-0.8.18.dist-info → unit3dup-0.8.20.dist-info}/WHEEL +0 -0
- {unit3dup-0.8.18.dist-info → unit3dup-0.8.20.dist-info}/entry_points.txt +0 -0
- {unit3dup-0.8.18.dist-info → unit3dup-0.8.20.dist-info}/licenses/LICENSE +0 -0
- {unit3dup-0.8.18.dist-info → unit3dup-0.8.20.dist-info}/top_level.txt +0 -0
|
@@ -179,6 +179,21 @@ class PassIMA(ImageUploader):
|
|
|
179
179
|
return 'source'
|
|
180
180
|
|
|
181
181
|
|
|
182
|
+
class ImaRide(ImageUploader):
|
|
183
|
+
|
|
184
|
+
priority= config_settings.user_preferences.IMARIDE_PRIORITY
|
|
185
|
+
def get_endpoint(self) -> str:
|
|
186
|
+
return "https://www.imageride.net/api/1/upload"
|
|
187
|
+
|
|
188
|
+
def get_data(self) -> dict:
|
|
189
|
+
return {
|
|
190
|
+
"key": self.key,
|
|
191
|
+
"title": self.image_name,
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
def get_field_name(self) -> str:
|
|
195
|
+
return 'source'
|
|
196
|
+
|
|
182
197
|
class ImageUploaderFallback:
|
|
183
198
|
def __init__(self, uploader):
|
|
184
199
|
self.uploader = uploader
|
|
@@ -231,6 +246,9 @@ class ImageUploaderFallback:
|
|
|
231
246
|
if uploader_host == "PassIMA":
|
|
232
247
|
return response['image']['url']
|
|
233
248
|
|
|
249
|
+
if uploader_host == "ImaRide":
|
|
250
|
+
return response['image']['url']
|
|
251
|
+
|
|
234
252
|
return None
|
|
235
253
|
|
|
236
254
|
class Build:
|
|
@@ -251,6 +269,7 @@ class Build:
|
|
|
251
269
|
self.PTSCREENS_KEY= config_settings.tracker_config.PTSCREENS_KEY
|
|
252
270
|
self.IMGFI_KEY = config_settings.tracker_config.IMGFI_KEY
|
|
253
271
|
self.PASSIMA_KEY = config_settings.tracker_config.PASSIMA_KEY
|
|
272
|
+
self.IMARIDE_KEY = config_settings.tracker_config.IMARIDE_KEY
|
|
254
273
|
self.extracted_frames = extracted_frames
|
|
255
274
|
|
|
256
275
|
|
|
@@ -271,6 +290,7 @@ class Build:
|
|
|
271
290
|
LensDump(img_bytes, self.LENSDUMP_KEY,image_name=image_name),
|
|
272
291
|
ImgFi(img_bytes, self.IMGFI_KEY,image_name=image_name),
|
|
273
292
|
PassIMA(img_bytes, self.PASSIMA_KEY, image_name=image_name),
|
|
293
|
+
ImaRide(img_bytes, self.IMARIDE_KEY, image_name=image_name),
|
|
274
294
|
]
|
|
275
295
|
|
|
276
296
|
# Sorting list based on priority
|
common/settings.py
CHANGED
|
@@ -13,7 +13,7 @@ from common.utility import ManageTitles
|
|
|
13
13
|
from common import trackers
|
|
14
14
|
|
|
15
15
|
config_file = "Unit3Dbot.json"
|
|
16
|
-
version = "0.8.
|
|
16
|
+
version = "0.8.20"
|
|
17
17
|
|
|
18
18
|
if os.name == "nt":
|
|
19
19
|
PW_TORRENT_ARCHIVE_PATH: Path = Path(os.getenv("LOCALAPPDATA", ".")) / "Unit3Dup_config" / "pw_torrent_archive"
|
|
@@ -69,6 +69,7 @@ class TrackerConfig(BaseModel):
|
|
|
69
69
|
PTSCREENS_KEY: str | None = None
|
|
70
70
|
IMGFI_KEY: str | None = None
|
|
71
71
|
PASSIMA_KEY: str | None = None
|
|
72
|
+
IMARIDE_KEY: str | None = None
|
|
72
73
|
YOUTUBE_KEY: str | None = None
|
|
73
74
|
IGDB_CLIENT_ID: str | None = None
|
|
74
75
|
IGDB_ID_SECRET: str | None = None
|
|
@@ -102,6 +103,8 @@ class UserPreferences(BaseModel):
|
|
|
102
103
|
IMGBB_PRIORITY: int = 3
|
|
103
104
|
IMGFI_PRIORITY: int = 4
|
|
104
105
|
PASSIMA_PRIORITY: int = 5
|
|
106
|
+
IMARIDE_PRIORITY: int = 6
|
|
107
|
+
|
|
105
108
|
NUMBER_OF_SCREENSHOTS: int = 4
|
|
106
109
|
YOUTUBE_FAV_CHANNEL_ID: str | None = None
|
|
107
110
|
YOUTUBE_CHANNEL_ENABLE: bool = False
|
|
@@ -429,7 +432,8 @@ class Config(BaseModel):
|
|
|
429
432
|
section[field] = Validate.string(value=section[field], field_name=field)
|
|
430
433
|
|
|
431
434
|
if field in ['NUMBER_OF_SCREENSHOTS','COMPRESS_SCSHOT','IMGBB_PRIORITY','FREE_IMAGE_PRIORITY',
|
|
432
|
-
'LENSDUMP_PRIORITY','PASSIMA_PRIORITY','WATCHER_INTERVAL','SIZE_TH',
|
|
435
|
+
'LENSDUMP_PRIORITY','PASSIMA_PRIORITY','IMARIDE_PRIORITY', 'WATCHER_INTERVAL','SIZE_TH',
|
|
436
|
+
'FAST_LOAD']:
|
|
433
437
|
section[field] = Validate.integer(value=section[field], field_name=field)
|
|
434
438
|
|
|
435
439
|
if field == 'PREFERRED_LANG':
|
|
@@ -531,6 +535,7 @@ class Load:
|
|
|
531
535
|
"PTSCREENS_KEY": "no_key",
|
|
532
536
|
"IMGFI_KEY": "no_key",
|
|
533
537
|
"PASSIMA_KEY": "no_key",
|
|
538
|
+
"IMARIDE_KEY": "no_key",
|
|
534
539
|
"YOUTUBE_KEY": "no_key",
|
|
535
540
|
"IGDB_CLIENT_ID": "no_key",
|
|
536
541
|
"IGDB_ID_SECRET": "no_key",
|
|
@@ -562,6 +567,7 @@ class Load:
|
|
|
562
567
|
"IMGBB_PRIORITY": 3,
|
|
563
568
|
"IMGFI_PRIORITY": 4,
|
|
564
569
|
"PASSIMA_PRIORITY": 5,
|
|
570
|
+
"IMARIDE_PRIORITY": 6,
|
|
565
571
|
"NUMBER_OF_SCREENSHOTS": 4,
|
|
566
572
|
"YOUTUBE_FAV_CHANNEL_ID": "UCGCbxpnt25hWPFLSbvwfg_w",
|
|
567
573
|
"YOUTUBE_CHANNEL_ENABLE": "False",
|
common/utility.py
CHANGED
|
@@ -189,6 +189,9 @@ class ManageTitles:
|
|
|
189
189
|
(r'\b7 \b1\b', '7.1'),
|
|
190
190
|
(r'\b5 \b1\b', '5.1'),
|
|
191
191
|
(r'\bDDP5 \b1\b', 'DDP5.1'),
|
|
192
|
+
(r'\bDDP2 \b1\b', 'DDP2.0'),
|
|
193
|
+
(r'\bDD5 \b1\b', 'DD5.1'),
|
|
194
|
+
(r'\bDD2 \b1\b', 'DD2.0'),
|
|
192
195
|
(r'\b2 \b0\b', '2.0'),
|
|
193
196
|
(r'\bWEB \bDL\b', 'WEB-DL'),
|
|
194
197
|
(r'\bWEB \bDLMUX\b', 'WEB-DLMUX'),
|
|
@@ -197,7 +200,7 @@ class ManageTitles:
|
|
|
197
200
|
(r'\bHEVC \bFHC\b', 'HEVC-FHC'),
|
|
198
201
|
(r'\bCBR \bCBZ\b', 'CBR-CBZ'),
|
|
199
202
|
(r'\bH \b264\b', 'H.264'),
|
|
200
|
-
|
|
203
|
+
(r'\bH \b265\b', 'H.265'),
|
|
201
204
|
]
|
|
202
205
|
|
|
203
206
|
for tag, replacement in replacements:
|
unit3dup/__main__.py
CHANGED
unit3dup/duplicate.py
CHANGED
|
@@ -139,7 +139,7 @@ class Duplicate:
|
|
|
139
139
|
return self.search(torrent=self.torrent_info.search(self.query.guessit_title))
|
|
140
140
|
|
|
141
141
|
|
|
142
|
-
def process_dead_torrents(self, tmdb_id: int)-> list[requests] | None:
|
|
142
|
+
def process_dead_torrents(self, tmdb_id: int)-> list[requests.Response] | None:
|
|
143
143
|
# Get the dead torrents
|
|
144
144
|
torrents = self.torrent_info.get_by_tmdb_id(tmdb_id=tmdb_id)
|
|
145
145
|
dead_torrents = []
|
|
@@ -90,13 +90,15 @@ class ContentManager:
|
|
|
90
90
|
media.display_name = self.display_name
|
|
91
91
|
|
|
92
92
|
# Add language to the title from the media file when it's absent
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
93
|
+
if media.category == 'tv':
|
|
94
|
+
for found_languages in media.audio_languages:
|
|
95
|
+
if found_languages not in media.display_name.upper():
|
|
96
|
+
media.display_name = f"{media.display_name} {found_languages}"
|
|
96
97
|
return media
|
|
97
98
|
else:
|
|
98
99
|
return False
|
|
99
100
|
|
|
101
|
+
|
|
100
102
|
def search_ids(self):
|
|
101
103
|
_id = re.findall(r"\{(imdb-\d+|tmdb-\d+|igdb-\d+)}", self.file_name, re.IGNORECASE)
|
|
102
104
|
if _id:
|
unit3dup/media_manager/common.py
CHANGED
|
@@ -166,7 +166,7 @@ class UserContent:
|
|
|
166
166
|
return False
|
|
167
167
|
|
|
168
168
|
@staticmethod
|
|
169
|
-
def can_ressed(content: Media, tracker_name: str, cli: argparse.Namespace, tmdb_id :int) -> list[requests]:
|
|
169
|
+
def can_ressed(content: Media, tracker_name: str, cli: argparse.Namespace, tmdb_id :int) -> list[requests.Response]:
|
|
170
170
|
"""
|
|
171
171
|
Search for a duplicate and compare with the user content. Delta = config.SIZE_TH
|
|
172
172
|
|
unit3dup/pvtTracker.py
CHANGED
|
@@ -97,21 +97,10 @@ class Tracker(Myhttp):
|
|
|
97
97
|
exit(1)
|
|
98
98
|
|
|
99
99
|
def _post(self, file: dict, data: dict, params: dict):
|
|
100
|
-
with open(file['torrent'], "rb") as torrent:
|
|
101
|
-
|
|
102
|
-
# // Send content and mime type
|
|
103
|
-
file_ = {
|
|
104
|
-
"torrent": ("filename.torrent", torrent, "application/octet-stream"),
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
# // Send nfo
|
|
108
|
-
if file.get('nfo', None):
|
|
109
|
-
file_.update({"nfo": ("filename.nfo", file['nfo'], "text/plain")})
|
|
110
|
-
|
|
111
100
|
try:
|
|
112
101
|
return requests.post(
|
|
113
102
|
url=self.upload_url,
|
|
114
|
-
files=
|
|
103
|
+
files=file,
|
|
115
104
|
data=data,
|
|
116
105
|
headers=self.headers,
|
|
117
106
|
params=params,
|
|
@@ -327,12 +316,24 @@ class Torrents(Tracker):
|
|
|
327
316
|
|
|
328
317
|
|
|
329
318
|
class Uploader(Tracker):
|
|
330
|
-
def upload_t(self, data: dict,
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
319
|
+
def upload_t(self, data: dict, torrent_archive_path: str, nfo_path=None) -> requests.Response:
|
|
320
|
+
files = {}
|
|
321
|
+
# Binary mode
|
|
322
|
+
with open(torrent_archive_path, 'rb') as torrent_file:
|
|
323
|
+
files['torrent'] = ('upload.torrent', torrent_file, 'application/x-bittorrent')
|
|
324
|
+
|
|
325
|
+
# Add the info file
|
|
326
|
+
if nfo_path:
|
|
327
|
+
with open(nfo_path, 'rb') as nfo_file:
|
|
328
|
+
files['nfo'] = ('file.nfo', nfo_file, 'text/plain')
|
|
329
|
+
# Post both
|
|
330
|
+
response = self._post(file=files, data=data, params=self.params)
|
|
331
|
+
else:
|
|
332
|
+
# Post the torrent
|
|
333
|
+
response = self._post(file=files, data=data, params=self.params)
|
|
334
|
+
|
|
335
|
+
return response
|
|
334
336
|
|
|
335
|
-
return self._post(file=file_torrent, data=data, params=self.params)
|
|
336
337
|
|
|
337
338
|
@staticmethod
|
|
338
339
|
def encode_utf8(file_path:str) -> bytes | io.BytesIO:
|
unit3dup/upload.py
CHANGED
|
@@ -15,9 +15,6 @@ from view import custom_console
|
|
|
15
15
|
|
|
16
16
|
class UploadBot:
|
|
17
17
|
def __init__(self, content: Media, tracker_name: str, cli: argparse):
|
|
18
|
-
|
|
19
|
-
self.API_TOKEN = config_settings.tracker_config.ITT_APIKEY
|
|
20
|
-
self.BASE_URL = config_settings.tracker_config.ITT_URL
|
|
21
18
|
self.cli = cli
|
|
22
19
|
self.content = content
|
|
23
20
|
self.tracker_name = tracker_name
|
|
@@ -26,7 +23,7 @@ class UploadBot:
|
|
|
26
23
|
self.sign = (f"[url=https://github.com/31December99/Unit3Dup][code][color=#00BFFF][size=14]Uploaded with Unit3Dup"
|
|
27
24
|
f" {Load.version}[/size][/color][/code][/url]")
|
|
28
25
|
|
|
29
|
-
def message(self,tracker_response: requests.Response) -> (requests, dict):
|
|
26
|
+
def message(self,tracker_response: requests.Response, torrent_archive: str) -> (requests, dict):
|
|
30
27
|
|
|
31
28
|
name_error = ''
|
|
32
29
|
info_hash_error = ''
|
|
@@ -38,6 +35,10 @@ class UploadBot:
|
|
|
38
35
|
tracker_response_body = json.loads(tracker_response.text)
|
|
39
36
|
custom_console.bot_log(f"\n[RESPONSE]-> '{self.tracker_name}'.....{tracker_response_body['message'].upper()}\n\n")
|
|
40
37
|
custom_console.rule()
|
|
38
|
+
# https://github.com/HDInnovations/UNIT3D/pull/4910/files
|
|
39
|
+
# 08/09/2025
|
|
40
|
+
# We have to download the torrent file to get the new random info_hash generated
|
|
41
|
+
self.download_file(url=tracker_response_body["data"],destination_path=torrent_archive)
|
|
41
42
|
return tracker_response_body["data"],{}
|
|
42
43
|
|
|
43
44
|
elif tracker_response.status_code == 401:
|
|
@@ -110,7 +111,17 @@ class UploadBot:
|
|
|
110
111
|
|
|
111
112
|
def send(self, torrent_archive: str, nfo_path = None) -> (requests, dict):
|
|
112
113
|
|
|
113
|
-
tracker_response=self.tracker.upload_t(data=self.tracker.data,
|
|
114
|
-
|
|
115
|
-
return self.message(tracker_response)
|
|
114
|
+
tracker_response=self.tracker.upload_t(data=self.tracker.data,torrent_archive_path = torrent_archive,
|
|
115
|
+
nfo_path=nfo_path)
|
|
116
|
+
return self.message(tracker_response=tracker_response, torrent_archive=torrent_archive)
|
|
117
|
+
|
|
116
118
|
|
|
119
|
+
@staticmethod
|
|
120
|
+
def download_file(url: str, destination_path: str) -> bool:
|
|
121
|
+
download = requests.get(url)
|
|
122
|
+
if download.status_code == 200:
|
|
123
|
+
# File archived
|
|
124
|
+
with open(destination_path, "wb") as file:
|
|
125
|
+
file.write(download.content)
|
|
126
|
+
return True
|
|
127
|
+
return False
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: Unit3Dup
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.20
|
|
4
4
|
Summary: An uploader for the Unit3D torrent tracker
|
|
5
5
|
Author: Parzival
|
|
6
6
|
License-Expression: MIT
|
|
@@ -112,6 +112,28 @@ DOC
|
|
|
112
112
|
Link `Unit3DUP <https://unit3dup.readthedocs.io/en/latest/index.html#>`_
|
|
113
113
|
|
|
114
114
|
|
|
115
|
+
ImageHost
|
|
116
|
+
=========
|
|
117
|
+
|
|
118
|
+
The bot can upload images to the following image hosting platforms:
|
|
119
|
+
|
|
120
|
+
+------------------+----------------------------+
|
|
121
|
+
| **Image Host** | **URL** |
|
|
122
|
+
+==================+============================+
|
|
123
|
+
| ``ImgBB`` | https://imgbb.com |
|
|
124
|
+
+------------------+----------------------------+
|
|
125
|
+
| ``FreeImage`` | https://freeimage.host |
|
|
126
|
+
+------------------+----------------------------+
|
|
127
|
+
| ``PtScreens`` | https://ptscreens.com |
|
|
128
|
+
+------------------+----------------------------+
|
|
129
|
+
| ``LensDump`` | https://lensdump.com |
|
|
130
|
+
+------------------+----------------------------+
|
|
131
|
+
| ``ImgFI`` | https://imgfi.com |
|
|
132
|
+
+------------------+----------------------------+
|
|
133
|
+
| ``PassIMA`` | https://passtheima.ge |
|
|
134
|
+
+------------------+----------------------------+
|
|
135
|
+
| ``ImaRide`` | https://www.imageride.net |
|
|
136
|
+
+------------------+----------------------------+
|
|
115
137
|
|
|
116
138
|
Trackers
|
|
117
139
|
========
|
|
@@ -131,7 +153,7 @@ united by a shared passion for torrents and more
|
|
|
131
153
|
:alt: Unisciti su Telegram
|
|
132
154
|
|
|
133
155
|
.. image:: https://img.shields.io/discord/1214696147600408698?label=Discord&logo=discord&style=flat
|
|
134
|
-
:target: https://discord.gg/
|
|
156
|
+
:target: https://discord.gg/Skvune9P
|
|
135
157
|
:alt: Discord Server
|
|
136
158
|
|
|
137
159
|
|
|
@@ -8,12 +8,12 @@ common/extractor.py,sha256=WKZwt2kQfKO2VJ1rtwE_j6Zl84zICnowZq_Ql16wmRc,4564
|
|
|
8
8
|
common/frames.py,sha256=p_jsaXII5tZTVt5ymu-w1hk2c_UMeOn3PZeuVR-wXWY,7973
|
|
9
9
|
common/mediainfo.py,sha256=U2r1jJejBsV8GP3iPk4O8_NkHO5RQ9Kkh2bKwVNUBmg,6229
|
|
10
10
|
common/mediainfo_string.py,sha256=8vuWlF2bqWRKpDbn81bV2fPA7hbl7RwOnxN2i4E3zNE,3958
|
|
11
|
-
common/settings.py,sha256=
|
|
11
|
+
common/settings.py,sha256=9mpP39TF_xvX05ZS66COmj3klUh1xkWqOvPYNQBD2HQ,32983
|
|
12
12
|
common/title.py,sha256=nFainfUBTYW9ML4Y-CB9ZFD_Es-OZXcAMPUo6D09u3k,3793
|
|
13
13
|
common/torrent_clients.py,sha256=NOIpYtLG_bA19HwcH9ahGFmGNtRkoMO6nAjma-JzDfs,12040
|
|
14
|
-
common/utility.py,sha256=
|
|
14
|
+
common/utility.py,sha256=8uvLzMk-1keX2grxgzhqeS5VV6EKrmocSESihU8xzhY,8971
|
|
15
15
|
common/external_services/__init__.py,sha256=rU7HPEcZ7WQFD8eqDzuye2xHPBjxXPwPqpt7IT08mkM,178
|
|
16
|
-
common/external_services/imageHost.py,sha256=
|
|
16
|
+
common/external_services/imageHost.py,sha256=00sVVmSFQD0AE1I8batCJQUxNn734NpNz8p1qDWyzHc,10215
|
|
17
17
|
common/external_services/imdb.py,sha256=AIo8CO-SfP_uNocDeNY08hpvCAnuotoI7hYUytDiMQA,579
|
|
18
18
|
common/external_services/mediaresult.py,sha256=Yz-h7QROkfNHwaSSXZ1JRDSmG2YIZkmtQO5vmpkYWZ4,677
|
|
19
19
|
common/external_services/ftpx/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -63,19 +63,19 @@ common/trackers/itt.py,sha256=cB0D5ZpMbGgEOAKloET9dS_fAFclhzwPPwRFt-LStX0,4019
|
|
|
63
63
|
common/trackers/sis.py,sha256=AahQH-FxAqS19vgEFylOJzeY0_SHr27_Tibs7lraSdI,3480
|
|
64
64
|
common/trackers/trackers.py,sha256=sts5l_x27V2Op1Y6Au5FoQujspSkWMPWyEYMfcmVYLA,1467
|
|
65
65
|
unit3dup/__init__.py,sha256=seXz3lHgdrUBiOnhC6Je47npS66UZ0c62VFuoH3z5Mk,78
|
|
66
|
-
unit3dup/__main__.py,sha256=
|
|
66
|
+
unit3dup/__main__.py,sha256=9Jd80f9JxWf6TC6uztz_Q-qgbCUXcXsqmtFxXGdTqXE,9100
|
|
67
67
|
unit3dup/automode.py,sha256=JbHIvK5mHbNxpq_m5o26FEpqEUlL9XbTyUUPvKD6EqQ,4412
|
|
68
68
|
unit3dup/bot.py,sha256=2P24z_8UM58binKqrM0eIXxPTiWEduyK2bdfVkmxPEQ,8759
|
|
69
|
-
unit3dup/duplicate.py,sha256=
|
|
69
|
+
unit3dup/duplicate.py,sha256=0soPxYGTB6P5tb-iIUbZTdcI0-8CJntzoG5PnKNJ1vg,10437
|
|
70
70
|
unit3dup/exceptions.py,sha256=DhlcbbZEuvEYk5VSZTnle8oRg5I8Pq6Y6fxXTdOOOfo,4078
|
|
71
71
|
unit3dup/media.py,sha256=u0N2Wu4yt_oCUq_FPwnFq0oV8_lHDYAeXW4uhqpgJAI,13677
|
|
72
72
|
unit3dup/pvtDocu.py,sha256=ZLMaal2fn6ZcFPLtET0LTmYEPjhJmLitEjkICHrm9CQ,4594
|
|
73
73
|
unit3dup/pvtTorrent.py,sha256=cItlsCpcUJL23iXQHy0YzrrvV3JSl54UlBgm8_UROAs,2559
|
|
74
|
-
unit3dup/pvtTracker.py,sha256=
|
|
74
|
+
unit3dup/pvtTracker.py,sha256=HqrXq3kmkuXOPQSw-11PdY_HsmzZpc5osYswh5_3UEY,18690
|
|
75
75
|
unit3dup/pvtVideo.py,sha256=w_T6wEeGrsHkuR3KObJc4mNpJgg9hhHh_9LoxFlaqjM,3900
|
|
76
76
|
unit3dup/torrent.py,sha256=surV0royo_GCEvdlPIP1S9gvFvJb1u26XM11rZOGVEg,20064
|
|
77
|
-
unit3dup/upload.py,sha256=
|
|
78
|
-
unit3dup/media_manager/ContentManager.py,sha256=
|
|
77
|
+
unit3dup/upload.py,sha256=qGn9L-l2gL2K8hbU97c-fnWZFNe2vehFaPgDiQHUxfU,6612
|
|
78
|
+
unit3dup/media_manager/ContentManager.py,sha256=8oibia1wQGY2M1e1WYJPpEKbDIFVkoyOdzbAwtEz020,7489
|
|
79
79
|
unit3dup/media_manager/DocuManager.py,sha256=oFt7jlxj-gIUty9PADBQV5a24bsv3yhjKhwI6niOhf4,3116
|
|
80
80
|
unit3dup/media_manager/GameManager.py,sha256=9EmPeNrirOwaVOj-vkLr29Xo7daIA4ssqrrt0WyMl30,4090
|
|
81
81
|
unit3dup/media_manager/MediaInfoManager.py,sha256=0NO9dgD7seJM67B3DRnwvRIdoy7bfquBUox-PnHInK8,1081
|
|
@@ -83,15 +83,15 @@ unit3dup/media_manager/SeedManager.py,sha256=Vqpf_xpGbxsJHg0C3-kL0_tdF4f2FRPlZH7
|
|
|
83
83
|
unit3dup/media_manager/TorrentManager.py,sha256=qqM1d1TyfBuruXtKLRbQ8gFk3_2JNH9dOa6Yg-QnDCw,6507
|
|
84
84
|
unit3dup/media_manager/VideoManager.py,sha256=O1NzGnWiWPfMgjyV6h9_b9b8M5tzFtpje9cvI2g6Nc0,5437
|
|
85
85
|
unit3dup/media_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
86
|
-
unit3dup/media_manager/common.py,sha256=
|
|
86
|
+
unit3dup/media_manager/common.py,sha256=EDsD1FVNiWPS9teHs5vyGkYkC92gzFdSanMyMAR5vpU,10147
|
|
87
87
|
unit3dup/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
88
88
|
unit3dup/web/main.py,sha256=BzjKDgAjKZMnoQwx7nDDbs_64kCrFO1VYpbHmsGiFVc,1267
|
|
89
|
-
unit3dup-0.8.
|
|
89
|
+
unit3dup-0.8.20.dist-info/licenses/LICENSE,sha256=GNAZDLhU0xz8QPbIyHAOYlVnQYDvKWk2N9fZJMhqaG8,1090
|
|
90
90
|
view/__init__.py,sha256=XIzb6rl58HmYPnksD73cYMFF88dn6FHa3u7bOHFbChk,81
|
|
91
91
|
view/custom_console.py,sha256=OITmkEoQH9N_uE5ElPaSdc8XvaLzE9wcwTbOHtcMvrI,5629
|
|
92
92
|
view/web_console.py,sha256=YkxutJK5GqswMKEF77EllphPYQW0eb8OIBlplucHhvM,7697
|
|
93
|
-
unit3dup-0.8.
|
|
94
|
-
unit3dup-0.8.
|
|
95
|
-
unit3dup-0.8.
|
|
96
|
-
unit3dup-0.8.
|
|
97
|
-
unit3dup-0.8.
|
|
93
|
+
unit3dup-0.8.20.dist-info/METADATA,sha256=coV9AlZNj15u_x7sZ-znoweTOOAkfs_V-dxKnqxj-cw,5826
|
|
94
|
+
unit3dup-0.8.20.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
95
|
+
unit3dup-0.8.20.dist-info/entry_points.txt,sha256=fxXSyI6-r6jy9_v-C5ZHm03q1aC3tE9EvCQZxC1NQnI,52
|
|
96
|
+
unit3dup-0.8.20.dist-info/top_level.txt,sha256=19NVMnQNkJxBUKebRNaYCRs56A5CO4U1L67GMQCPiLU,21
|
|
97
|
+
unit3dup-0.8.20.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|