|
| 1 | +import sublime, sublime_plugin, urllib, urllib.request, json |
| 2 | + |
| 3 | +class InsertContentCommand(sublime_plugin.TextCommand): |
| 4 | + |
| 5 | + # To do: |
| 6 | + # Threading |
| 7 | + # Getting |
| 8 | + # Warning if user accidentally hits the shortcut twice and tries to re-send the resulting snippet |
| 9 | + |
| 10 | + def run(self, edit): |
| 11 | + |
| 12 | + # Load settings |
| 13 | + settings = sublime.load_settings("em.sublime-settings") |
| 14 | + |
| 15 | + # Get variables from settings |
| 16 | + |
| 17 | + urls = sublime.active_window().active_view().settings().get('em_urls', settings.get("em_urls")) |
| 18 | + em_create_url = urls['create'] |
| 19 | + |
| 20 | + authentication_token = sublime.active_window().active_view().settings().get('em_authentication_token', settings.get("em_authentication_token")) |
| 21 | + |
| 22 | + default_snippet_template = sublime.active_window().active_view().settings().get('em_default_snippet_template', settings.get("em_default_snippet_template")) |
| 23 | + snippet_templates = sublime.active_window().active_view().settings().get('em_snippet_templates', settings.get("em_snippet_templates")) |
| 24 | + snippet_template = snippet_templates[default_snippet_template] |
| 25 | + |
| 26 | + # Get selected text |
| 27 | + selections = self.view.sel() |
| 28 | + |
| 29 | + # The following code needs to be made threadsafe |
| 30 | + for selection in selections: |
| 31 | + |
| 32 | + # Get selected text |
| 33 | + content = self.view.substr(selection) |
| 34 | + |
| 35 | + data = { |
| 36 | + "bit" : { |
| 37 | + "content" : content |
| 38 | + }, |
| 39 | + "authentication_token" : authentication_token |
| 40 | + } |
| 41 | + |
| 42 | + # Urllib only accepts encoded data |
| 43 | + params = json.dumps(data).encode('utf8') |
| 44 | + |
| 45 | + request = urllib.request.Request( |
| 46 | + em_create_url, |
| 47 | + data=params, |
| 48 | + headers={'Content-Type': 'application/json','User-Agent': 'Mozilla/5.0' } |
| 49 | + ) |
| 50 | + |
| 51 | + try: |
| 52 | + response = urllib.request.urlopen(request) |
| 53 | + response_as_string = response.read().decode('utf8') |
| 54 | + response_as_json = json.loads(response_as_string) |
| 55 | + |
| 56 | + bit_info = response_as_json["bit"] |
| 57 | + |
| 58 | + bit_identifier = bit_info['identifier'] |
| 59 | + bit_content = bit_info['content'] |
| 60 | + |
| 61 | + shortened_original_content = bit_content[:10] + (bit_content[10:] and '..') |
| 62 | + |
| 63 | + replacement_text = snippet_template.replace("{identifier}", bit_identifier) |
| 64 | + replacement_text = replacement_text.replace("{label}", shortened_original_content) |
| 65 | + |
| 66 | + # Make the replacement |
| 67 | + self.view.replace(edit, selection, replacement_text ) |
| 68 | + |
| 69 | + except urllib.error.HTTPError as e: |
| 70 | + |
| 71 | + response_as_string = e.read().decode('utf8') |
| 72 | + response_as_json = json.loads(response_as_string) |
| 73 | + message = response_as_json['message'] |
| 74 | + |
| 75 | + sublime.error_message(message) |
| 76 | + |
| 77 | + |
0 commit comments