''' BaseValues 7.1.2 iPad 2.7.5 2.1 Original WarnedValues ''' import cgi, console, editor, os, platform, plistlib, ui, urlparse, urllib from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer class CaptureMedia(ui.View): def __init__(self): console.hide_output() self._make_self() self._do_warnings() self._make_wv() self._make_bi() self.did_load() self.layout() self.present('popover') ui.delay(self._start, 0.5) self.https.serve_forever() def did_load(self): self._wv.hidden = True self._wv.load_url('http://localhost:' + str(self.https.server_address[1])) def layout(self): self.width = 320 self.height = 160 def _start(self): self._wv.evaluate_javascript(''' document.getElementById("file").click(); function f(){ if (document.forms["form"]["file"].value == '') { setTimeout(function(){f()}, 500); } else { document.getElementById("submit").click(); } } setTimeout(function(){f()}, 500); ''') def _make_self(self): global gcm gcm = self self.version = '2.1' self.source = 'Original posted on Pythonista forum' self.name = 'Capture' self.message = None self.file_name = None self.https = HTTPServer(('', 0), TransferRequestHandler) def _do_warnings(self): s = Settings().open_settings() lB = s.get_setting('BaseValues')['value'].split() lW = s.get_setting('WarnedValues')['value'].split() sN = platform.mac_ver()[0] + ' ' + platform.mac_ver()[2][0:4] + ' ' + platform.python_version() + ' ' + self.version + ' ' + self.source[0:8] lN = sN.split() if lN != lW: if platform.mac_ver()[0] != lB[0]: console.hud_alert('Warning: only tested on iOS ' + lB[0]) if platform.mac_ver()[2][0:4] != lB[1]: console.hud_alert('Warning: only tested on ' + lB[1]) if platform.python_version() != lB[2]: console.hud_alert('Warning: only tested on Python ' + lB[2]) if self.version != lB[3]: console.hud_alert('Warning: update to version ' + lB[3]) if self.source[0:8] != lB[4]: console.hud_alert('Warning: not original source') s.set_setting('WarnedValues', sN) s.close_settings() def _make_wv(self): self._wv = ui.WebView() self.add_subview(self._wv) def _make_bi(self): self.left_button_items = [ui.ButtonItem(image = ui.Image.named('ionicons-ios7-close-outline-32'), action = lambda sender: self.close())] def will_close(self): self.https.shutdown() def close(self): self.will_close() super(CaptureMedia, self).close() class Settings (object): def open_settings(self): self.version = '1.0' self.source = 'Original posted on Pythonista forum' with open(os.path.split(__file__)[1], 'r') as fS: self._sA = fS.read() self._iS = self._sA.find('') + 8 self.plSettings = plistlib.readPlistFromString(self._sA[self._iS:self._iF]) return self def get_setting(self, sK): return {'setting': sK , 'value': self.plSettings[sK]} def set_setting(self, sK, sV): self.plSettings[sK] = sV def close_settings(self): sPl = plistlib.writePlistToString(self.plSettings) sN = self._sA[0:self._iS] + sPl[:-1] + self._sA[self._iF:-1] with open(self._f, 'w') as fS: fS.write(sN) if os.path.split(editor.get_path())[1] == self._f: editor.replace_text(0, len(editor.get_text()), sN) class TransferRequestHandler(BaseHTTPRequestHandler): '''--------from OMZ's File Transfer script--------''' # global TEMPLATE HTML = ('' + # '' + # '
' + # '

Upload File

{{ALERT}}' '
' + # '
' + '' + '' + # '


' + '') def get_unused_filename(self, filename): if not os.path.exists(filename): return filename basename, ext = os.path.splitext(filename) suffix_n = 1 while True: alt_name = basename + '-' + str(suffix_n) + ext if not os.path.exists(alt_name): return alt_name suffix_n += 1 def do_GET(self): # parsed_path = urlparse.urlparse(self.path) # path = parsed_path.path # if path == '/': # html = TEMPLATE # html = html.replace('{{ALERT}}', '') self.send_response(200) self.send_header('Content-Type', 'text/html') self.end_headers() self.wfile.write(HTML) # return # file_path = urllib.unquote(path)[1:] # if os.path.isfile(file_path): # self.send_response(200) # self.send_header('Content-Type', 'application/x-python') # self.send_header('Content-Disposition', # 'attachment; filename=%s' % file_path) # self.end_headers() # with open(file_path, 'r') as f: # data = f.read() # self.wfile.write(data) # else: # self.send_response(404) # self.send_header('Content-Type', 'text/html') # self.end_headers() # self.wfile.write(html) def do_POST(self): form = cgi.FieldStorage(fp=self.rfile, headers=self.headers, environ={'REQUEST_METHOD':'POST', 'CONTENT_TYPE':self.headers['Content-Type']}) self.send_response(200) self.send_header('Content-Type', 'text/html') self.end_headers() field_item = form['file'] uploaded_filename = None dest_filename = None file_data = field_item.file.read() # file_len = len(file_data) uploaded_filename = field_item.filename dest_filename = self.get_unused_filename(uploaded_filename) with open(dest_filename, 'w') as f: f.write(file_data) editor.reload_files() del file_data # html = TEMPLATE if uploaded_filename != dest_filename: message = '%s uploaded (renamed to %s).' % (uploaded_filename, dest_filename) else: message = '%s uploaded.' % (uploaded_filename) '''--------end omz--------''' gcm.message = message gcm.file_name = dest_filename ui.delay(gcm.close, 0) def log_message(self, format, *args): pass class MyCaptureMedia (CaptureMedia): def did_load(self): self.name = 'My Capture Media' self.lHelp = ui.Label(frame=(30, 10, 180, 30)) self.lHelp.text = 'Please choose media...' self.add_subview(self.lHelp) super(MyCaptureMedia, self).did_load() def layout(self): self.width = 320 self.height = 200 # self.lHelp.x = 30 # self.lHelp.y = 10 # self.lHelp.width = 180 # self.lHelp.height = 30 if __name__ == "__main__": mcm = MyCaptureMedia() mcm.wait_modal() console.hud_alert(str(mcm.message))