2
2
import json
3
3
import requests
4
4
5
+ from slacker .task import Task , execute_tasks
5
6
from slacker .commands .command import Command
6
7
from slacker .commands .argument_parser import ArgumentParser
7
8
9
+ class EmojiDownloadTask (Task ):
10
+ def __init__ (self , emoji_name , url , save_path ):
11
+ self .emoji_name = emoji_name
12
+ self .__url = url
13
+ self .save_path = save_path
14
+ self .logs = []
15
+
16
+ def run (self ):
17
+ self .logs .append ("Downloading {}" .format (self .__url ))
18
+
19
+ res = requests .get (self .__url , stream = True )
20
+ if res .status_code != 200 :
21
+ self .logs .append ("Unable to download {}: {}" .format (self .emoji_name , self .__url ))
22
+ return False
23
+
24
+ image_type = res .headers ["Content-Type" ].split ("/" )[1 ]
25
+ content_length = res .headers ["Content-Length" ]
26
+
27
+ emoji_file = "{}.{}" .format (self .emoji_name , image_type )
28
+ self .save_path = os .path .join (self .save_path , emoji_file )
29
+
30
+ self .logs .append ("Writing to disk {}({}) -> {}" .format (self .__url , content_length ,
31
+ self .save_path ))
32
+ with open (self .save_path , "wb" ) as f :
33
+ for chunk in res .iter_content (1024 ):
34
+ f .write (chunk )
35
+
36
+ return self
37
+
8
38
class EmojiListCommand (Command ):
9
39
def name (self ):
10
40
return "emoji.list"
@@ -29,45 +59,35 @@ def make_parser(self):
29
59
def print_emojis (self , emojis ):
30
60
total = 0
31
61
for emoji in emojis :
32
- print ("{:<25} {:<50}" .format (emoji , emojis [emoji ]))
62
+ self . logger . info ("{:<25} {:<50}" .format (emoji , emojis [emoji ]))
33
63
total += 1
34
64
35
- print ("{} custom emojis" .format (total ))
65
+ self . logger . info ("{} custom emojis" .format (total ))
36
66
37
67
def __download_emojis (self , emojis ):
38
68
save_data = {}
69
+ download_tasks = []
39
70
40
71
for emoji in emojis :
41
72
emoji_url = emojis [emoji ]
42
73
if emoji_url .startswith ("alias" ):
43
74
save_data [emoji ] = emoji_url
44
75
continue
45
76
46
- saved_file_path = self .__download_emoji (emoji , emojis [emoji ])
47
- save_data [emoji ] = saved_file_path
77
+ # queue the downloads
78
+ task = EmojiDownloadTask (emoji , emoji_url , self .local_save_path )
79
+ download_tasks .append (task )
48
80
49
- self .__write_save_file (save_data )
50
-
51
- def __download_emoji (self , emoji_name , url ):
52
- self .logger .debug ("Downloading {}" .format (url ))
53
-
54
- res = requests .get (url , stream = True )
55
- if res .status_code != 200 :
56
- self .logger .warning ("Unable to download {}: {}" .format (emoji_name , url ))
81
+ # Start the downloads
82
+ results = execute_tasks (download_tasks )
83
+ for r in results :
84
+ if r :
85
+ for log in r .logs :
86
+ self .logger .info (log )
57
87
58
- image_type = res .headers ["Content-Type" ].split ("/" )[1 ]
59
- content_length = res .headers ["Content-Length" ]
88
+ save_data [r .emoji_name ] = r .save_path
60
89
61
- emoji_file = "{}.{}" .format (emoji_name , image_type )
62
- local_save_path = os .path .join (self .local_save_path , emoji_file )
63
-
64
- self .logger .debug ("Writing to disk {}({}) -> {}" .format (url , content_length ,
65
- self .local_save_path ))
66
- with open (local_save_path , "wb" ) as f :
67
- for chunk in res .iter_content (1024 ):
68
- f .write (chunk )
69
-
70
- return local_save_path
90
+ self .__write_save_file (save_data )
71
91
72
92
def __write_save_file (self , save_data ):
73
93
with open (self .save_data_file , "w" ) as f :
0 commit comments