made it so clicking Start Server actually starts the server, and made the URL fields hide/show appropriately, and the Copy URL button work

This commit is contained in:
Micah Lee 2014-08-27 19:07:15 -07:00
parent 349ca67cc9
commit 5325b7b173
4 changed files with 78 additions and 26 deletions

View File

@ -34,6 +34,7 @@ class OnionShare(object):
os.remove(filename)
elif os.path.isdir(filename):
shutil.rmtree(filename)
self.cleanup_filenames = []
def choose_port(self):
# let the OS choose a port

View File

@ -9,7 +9,6 @@
"filename": "Filename",
"size": "Size",
"sha1_checksum": "SHA1 checksum",
"copied_url": "Copied URL to clipboard",
"download_page_loaded": "Download page loaded",
"download_started": "Download started",
"download_finished": "Download finished",
@ -35,7 +34,8 @@
"gui_start_server": "Start Server",
"gui_stop_server": "Stop Server",
"gui_copy_url": "Copy URL",
"gui_downloads": "Downloads:"
"gui_downloads": "Downloads:",
"gui_copied_url": "Copied URL to clipboard"
}, "no": {
"calculating_sha1": "Kalkulerer SHA1 sjekksum.",
"connecting_ctrlport": "Kobler til Tors kontroll-port for å sette opp en gjemt tjeneste på port {0}.",
@ -45,7 +45,7 @@
"not_a_file": "{0} er ikke en fil.",
"filesize": "Filstørrelse",
"sha1_checksum": "SHA1 sjekksum",
"copied_url": "Kopierte URL-en til utklippstavlen",
"gui_copied_url": "Kopierte URL-en til utklippstavlen",
"download_page_loaded": "Nedlastingsside lastet",
"download_started": "Nedlasting startet",
"download_finished": "Nedlasting fullført",
@ -63,7 +63,7 @@
"not_a_file": "{0} no es un archivo.",
"filesize": "Tamaño del archivo",
"sha1_checksum": "Suma de verificación SHA1",
"copied_url": "Copiar URL en el portapapeles",
"gui_copied_url": "Copiar URL en el portapapeles",
"download_page_loaded": "Descargar página cargada.",
"download_started": "Descarga comenzó",
"download_finished": "Descarga terminado",
@ -90,7 +90,7 @@
"not_a_file": "{0} non è un file.",
"filesize": "Grandezza del file",
"sha1_checksum": "Firma SHA1",
"copied_url": "URL copiato negli appunti",
"gui_copied_url": "URL copiato negli appunti",
"download_page_loaded": "Pagina di download caricata",
"download_started": "Download iniziato",
"download_finished": "Download finito",
@ -108,7 +108,7 @@
"not_a_file": "{0} is geen bestand.",
"filesize": "Bestandsgrootte",
"sha1_checksum": "SHA1 controlecijfer",
"copied_url": "URL gekopieerd naar klembord",
"gui_copied_url": "URL gekopieerd naar klembord",
"download_page_loaded": "Download pagina geladen",
"download_started": "Download gestart",
"download_finished": "Download voltooid",
@ -135,7 +135,7 @@
"not_a_file": "{0} não é um arquivo.",
"filesize": "Tamanho de arquivo",
"sha1_checksum": "Checksum SHA1",
"copied_url": "URL foi copiado para área de transferência",
"gui_copied_url": "URL foi copiado para área de transferência",
"download_page_loaded": "Página de download carregada",
"download_started": "Começou o download",
"download_finished": "Terminou o download",
@ -153,7 +153,7 @@
"not_a_file": "{0} не является файлом.",
"filesize": "Размер файла",
"sha1_checksum": "SHA1 хешсумма",
"copied_url": "Ссылка скопирована в буфер обмена",
"gui_copied_url": "Ссылка скопирована в буфер обмена",
"download_page_loaded": "Страница закачки загружена",
"download_started": "Загрузка начата",
"download_finished": "Загрузка закончена",
@ -172,7 +172,7 @@
"not_a_file": "{0} ist keine Datei.",
"filesize": "Dateigröße",
"sha1_checksum": "SHA1 Checksumme",
"copied_url": "URL in die Zwischenablage kopiert",
"gui_copied_url": "URL in die Zwischenablage kopiert",
"download_page_loaded": "Download-Seite geladen",
"download_started": "Download gestartet",
"download_finished": "Download abgeschlossen",
@ -192,7 +192,7 @@
"not_a_file": "{0} dosya değil.",
"filesize": "Dosya boyutu",
"sha1_checksum": "SHA1 özeti",
"copied_url": "Panoya kopyalanan URL",
"gui_copied_url": "Panoya kopyalanan URL",
"download_page_loaded": "İndirme sayfası yüklendi",
"download_started": "İndirme başladı",
"download_finished": "İndirme bitti",

View File

@ -24,8 +24,9 @@ class Application(QtGui.QApplication):
QtGui.QApplication.__init__(self, sys.argv)
class OnionShareGui(QtGui.QWidget):
def __init__(self, app):
def __init__(self, qtapp, app):
super(OnionShareGui, self).__init__()
self.qtapp = qtapp
self.app = app
self.setWindowTitle('OnionShare')
@ -33,18 +34,18 @@ class OnionShareGui(QtGui.QWidget):
def send_files(self, filenames=None):
# file selection
file_selection = FileSelection()
self.file_selection = FileSelection()
if filenames:
for filename in filenames:
file_selection.file_list.add_file(filename)
self.file_selection.file_list.add_file(filename)
# server status
self.server_status = ServerStatus(file_selection)
self.server_status.server_started.connect(file_selection.server_started)
self.server_status = ServerStatus(self.qtapp, self.app, web, self.file_selection)
self.server_status.server_started.connect(self.file_selection.server_started)
self.server_status.server_started.connect(self.start_server)
self.server_status.server_stopped.connect(file_selection.server_stopped)
self.server_status.server_stopped.connect(self.file_selection.server_stopped)
self.server_status.server_stopped.connect(self.stop_server)
file_selection.file_list.files_updated.connect(self.server_status.update)
self.file_selection.file_list.files_updated.connect(self.server_status.update)
# downloads
downloads = Downloads()
@ -54,7 +55,7 @@ class OnionShareGui(QtGui.QWidget):
# main layout
self.layout = QtGui.QVBoxLayout()
self.layout.addLayout(file_selection)
self.layout.addLayout(self.file_selection)
self.layout.addLayout(self.server_status)
self.layout.addLayout(downloads)
self.layout.addLayout(options)
@ -79,9 +80,18 @@ class OnionShareGui(QtGui.QWidget):
t.daemon = True
t.start()
# prepare the files for sending
web.set_file_info(self.file_selection.file_list.filenames)
self.app.cleanup_filenames.append(web.zip_filename)
self.server_status.start_server_finished()
def stop_server(self):
# to stop flask, load http://127.0.0.1:<port>/<shutdown_slug>/shutdown
urllib2.urlopen('http://127.0.0.1:{0}/{1}/shutdown'.format(self.app.port, web.shutdown_slug)).read()
self.app.cleanup()
self.server_status.stop_server_finished()
def alert(msg, icon=QtGui.QMessageBox.NoIcon):
dialog = QtGui.QMessageBox()
@ -139,7 +149,7 @@ def main():
qtapp.connect(qtapp, QtCore.SIGNAL("aboutToQuit()"), shutdown)
# launch the gui
gui = OnionShareGui(app)
gui = OnionShareGui(qtapp, app)
gui.send_files(filenames)
# all done

View File

@ -1,3 +1,4 @@
import platform
from PyQt4 import QtCore, QtGui
import common
@ -11,13 +12,19 @@ class ServerStatus(QtGui.QVBoxLayout):
STATUS_WORKING = 1
STATUS_STARTED = 2
def __init__(self, file_selection):
def __init__(self, qtapp, app, web, file_selection):
super(ServerStatus, self).__init__()
self.status = self.STATUS_STOPPED
self.addSpacing(10)
self.qtapp = qtapp
self.app = app
self.web = web
self.file_selection = file_selection
# system tray icon (for notifications)
self.systray = QtGui.QSystemTrayIcon()
# server layout
self.status_image_stopped = QtGui.QImage('{0}/server_stopped.png'.format(common.onionshare_gui_dir))
self.status_image_working = QtGui.QImage('{0}/server_working.png'.format(common.onionshare_gui_dir))
@ -46,9 +53,6 @@ class ServerStatus(QtGui.QVBoxLayout):
url_layout = QtGui.QHBoxLayout()
url_layout.addWidget(self.url_label)
url_layout.addWidget(self.copy_url_button)
# url fields start hidden, until there's a URL
self.url_label.hide()
self.copy_url_button.hide()
# add the widgets
self.addLayout(server_layout)
@ -65,6 +69,15 @@ class ServerStatus(QtGui.QVBoxLayout):
elif self.status == self.STATUS_STARTED:
self.status_image_label.setPixmap(QtGui.QPixmap.fromImage(self.status_image_started))
# set the URL fields
if self.status == self.STATUS_STARTED:
self.url_label.setText('http://{0}/ {1}'.format(self.app.onion_host, self.web.slug))
self.url_label.show()
self.copy_url_button.show()
else:
self.url_label.hide()
self.copy_url_button.hide()
# buttons enabled
if self.file_selection.get_num_files() == 0:
self.start_server_button.setEnabled(False)
@ -82,11 +95,39 @@ class ServerStatus(QtGui.QVBoxLayout):
self.update()
self.server_started.emit()
def start_server_finished(self):
self.status = self.STATUS_STARTED
self.update()
def stop_server(self):
self.status = self.STATUS_STOPPED
self.status = self.STATUS_WORKING
self.update()
self.server_stopped.emit()
def copy_url(self):
pass
def stop_server_finished(self):
self.status = self.STATUS_STOPPED
self.update()
def copy_url(self):
url = 'http://{0}/{1}'.format(self.app.onion_host, self.web.slug)
if platform.system() == 'Windows':
# Qt's QClipboard isn't working in Windows
# https://github.com/micahflee/onionshare/issues/46
import ctypes
GMEM_DDESHARE = 0x2000
ctypes.windll.user32.OpenClipboard(None)
ctypes.windll.user32.EmptyClipboard()
hcd = ctypes.windll.kernel32.GlobalAlloc(GMEM_DDESHARE, len(bytes(url))+1)
pch_data = ctypes.windll.kernel32.GlobalLock(hcd)
ctypes.cdll.msvcrt.strcpy(ctypes.c_char_p(pch_data), bytes(url))
ctypes.windll.kernel32.GlobalUnlock(hcd)
ctypes.windll.user32.SetClipboardData(1, hcd)
ctypes.windll.user32.CloseClipboard()
else:
clipboard = self.qtapp.clipboard()
clipboard.setText(url)
# todo: make this systray popup work
self.systray.showMessage(QtCore.QString("OnionShare"), QtCore.QString(strings._('gui_copied_url')))