mirror of
https://github.com/RobinLinus/snapdrop.git
synced 2025-05-19 09:00:29 -07:00
Basic File Share Target implementation
This commit is contained in:
parent
ba69167a76
commit
2cdb78019c
Binary file not shown.
@ -22,7 +22,7 @@
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}],
|
||||
"background_color": "#3367d6",
|
||||
"background_color": "#efefef",
|
||||
"start_url": "/",
|
||||
"display": "minimal-ui",
|
||||
"theme_color": "#3367d6"
|
||||
|
@ -163,9 +163,19 @@ class PeerUI {
|
||||
}
|
||||
|
||||
_onTouchStart(e) {
|
||||
if (window.shareTargetFile) {
|
||||
// this is a ShareTarget flow
|
||||
Events.fire('files-selected', {
|
||||
files: [window.shareTargetFile],
|
||||
to: this._peer.id
|
||||
});
|
||||
window.shareTargetFile = null;
|
||||
e.preventDefault();
|
||||
} else {
|
||||
this._touchStart = Date.now();
|
||||
this._touchTimer = setTimeout(_ => this._onTouchEnd(), 610);
|
||||
}
|
||||
}
|
||||
|
||||
_onTouchEnd(e) {
|
||||
if (Date.now() - this._touchStart < 500) {
|
||||
@ -280,8 +290,18 @@ class SendTextDialog extends Dialog {
|
||||
this.$text.setSelectionRange(0, this.$text.value.length)
|
||||
}
|
||||
|
||||
<<<<<<< Updated upstream
|
||||
=======
|
||||
_handleShareTargetText() {
|
||||
if (!window.shareTargetText) return;
|
||||
this.$text.value = window.shareTargetText;
|
||||
window.shareTargetText = '';
|
||||
}
|
||||
|
||||
>>>>>>> Stashed changes
|
||||
_send(e) {
|
||||
e.preventDefault();
|
||||
if (!this.$text.value) return;
|
||||
Events.fire('send-text', {
|
||||
to: this._recipient,
|
||||
text: this.$text.value
|
||||
@ -414,6 +434,28 @@ class Notifications {
|
||||
}
|
||||
}
|
||||
|
||||
<<<<<<< Updated upstream
|
||||
=======
|
||||
|
||||
class NetworkStatusUI {
|
||||
|
||||
constructor() {
|
||||
window.addEventListener('offline', e => this._showOfflineMessage(), false);
|
||||
window.addEventListener('online', e => this._showOnlineMessage(), false);
|
||||
if (!navigator.onLine) this._showOfflineMessage();
|
||||
}
|
||||
|
||||
_showOfflineMessage() {
|
||||
Events.fire('notify-user', 'You are offline');
|
||||
}
|
||||
|
||||
_showOnlineMessage() {
|
||||
Events.fire('notify-user', 'You are back online');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
>>>>>>> Stashed changes
|
||||
class Snapdrop {
|
||||
constructor() {
|
||||
const server = new ServerConnection();
|
||||
@ -425,6 +467,10 @@ class Snapdrop {
|
||||
const receiveTextDialog = new ReceiveTextDialog();
|
||||
const toast = new Toast();
|
||||
const notifications = new Notifications();
|
||||
<<<<<<< Updated upstream
|
||||
=======
|
||||
const networkStatusUI = new NetworkStatusUI();
|
||||
>>>>>>> Stashed changes
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -471,6 +517,26 @@ if ('serviceWorker' in navigator && !window.iOS) {
|
||||
console.log('Service Worker registered');
|
||||
window.serviceWorker = serviceWorker
|
||||
});
|
||||
<<<<<<< Updated upstream
|
||||
=======
|
||||
|
||||
// don't display install banner when installed
|
||||
window.addEventListener('beforeinstallprompt', e => {
|
||||
if (window.matchMedia('(display-mode: standalone)').matches) {
|
||||
return event.preventDefault();
|
||||
}
|
||||
});
|
||||
|
||||
navigator.serviceWorker.onmessage = (event) => {
|
||||
const shareTargetText = event.data.shareTargetText;
|
||||
window.shareTargetText = shareTargetText;
|
||||
console.log(shareTargetText);
|
||||
|
||||
const shareTargetFile = event.data.shareTargetFile;
|
||||
window.shareTargetFile = shareTargetFile;
|
||||
console.log(shareTargetFile);
|
||||
};
|
||||
>>>>>>> Stashed changes
|
||||
}
|
||||
|
||||
// Background Animation
|
||||
|
@ -0,0 +1,63 @@
|
||||
<<<<<<< Updated upstream
|
||||
=======
|
||||
var CACHE_NAME = 'snapdrop-cache-v1.042';
|
||||
var urlsToCache = [
|
||||
'/',
|
||||
'/styles.css',
|
||||
'/scripts/network.js',
|
||||
'/scripts/ui.js',
|
||||
'/sounds/blop.mp3',
|
||||
'/images/favicon-96x96.png'
|
||||
];
|
||||
|
||||
self.addEventListener('install', function(event) {
|
||||
// Perform install steps
|
||||
event.waitUntil(
|
||||
caches.open(CACHE_NAME)
|
||||
.then(function(cache) {
|
||||
console.log('Opened cache');
|
||||
return cache.addAll(urlsToCache);
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
self.addEventListener('fetch', function(event) {
|
||||
event.respondWith(
|
||||
caches.match(event.request)
|
||||
.then(function(response) {
|
||||
// Cache hit - return response
|
||||
if (response) {
|
||||
return response;
|
||||
}
|
||||
return fetch(event.request);
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
self.addEventListener('fetch', function(event) {
|
||||
if (event.request.method !== 'POST') return;
|
||||
|
||||
event.respondWith(Response.redirect('./'));
|
||||
|
||||
event.waitUntil(async function() {
|
||||
const data = await event.request.formData();
|
||||
const client = await self.clients.get(event.resultingClientId);
|
||||
const shareTargetFile = data.get('file');
|
||||
|
||||
const title = data.get('title');
|
||||
const text = data.get('text');
|
||||
const url = data.get('url');
|
||||
|
||||
let shareTargetText = title ? title : '';
|
||||
shareTargetText += text ? shareTargetText ? ' ' + text : text : '';
|
||||
shareTargetText += url ? shareTargetText ? ' ' + url : url : '';
|
||||
if (!shareTargetText) return;
|
||||
history.pushState({}, 'URL Rewrite', '/');
|
||||
|
||||
console.log('Shared Target Text:', '"' + shareTargetText + '"');
|
||||
|
||||
|
||||
client.postMessage({ shareTargetFile, shareTargetText });
|
||||
}());
|
||||
});
|
||||
>>>>>>> Stashed changes
|
49
devserver/server.pem
Normal file
49
devserver/server.pem
Normal file
@ -0,0 +1,49 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDAsAjoETQkrh6o
|
||||
AK96vKJsbI0Cxnc7qoPNHf1troWzOulC+TWOmfnoV1j3R9R+9mfXQ/ka0PqmJOfl
|
||||
mtRaEPtwQu/jwsYg26OssqaWtqA4vfiPLEfzUylr/zYAbSpKuD1s8ytOS/DJVkF1
|
||||
uZFD92y811AJqoaLrdxHLEKxLQOsuSOk/AYidtTV/LewGt4DCWUCRBKU/G3bIQdY
|
||||
Z48oO6U8cuO7fONgObMFZzxGxQYU8u/xly4najq4i/LcOG7MQUUpFk/qBUbM0Igp
|
||||
hfLEdexz4b75B/Jf4afEAcBjAtLK9Cun1nVMWVC/BW3w/lmwx+UJ6EHF5qjH1MuV
|
||||
s3nYTkcPAgMBAAECggEACjnNXzN6hu/OpK/UoDjejc589Ua/ESWNdRdAWc/HPKnF
|
||||
s04yb2zwfEoWaJkhR9Of0ybCU4//nU2cGO1Mk7MPBPgobvfpN9kwKHwapyjt+9Tp
|
||||
GgAJmXoyWo7iuMcSVYDNkbid9bvF/YlcU/kTIn5BAQyULM8l8Me7RvOsXma7KTFa
|
||||
fkwpDdnooj8hOIHvtsTvwQFnN/q4eOK0y5VCKpWedi21M/U/4XbFMwaRMqLwFPmy
|
||||
3iXl40hGyGHGfUrVVRE29d8HD24HOy5JKkJVbwzr3P+0CtZXdYZG9fvSmEQEDmiu
|
||||
5sYd6iTiQnF26cn7ZtEavJ2nbpmu9cHjZdjHdErIcQKBgQDppzC7EGL5WLrcCpJU
|
||||
mhWc8DQ0uJ6oapwLJzW4QFz5sZksWHA5abqhiRbB6ak8EV8spXK8jGMC4ZyHk7Se
|
||||
7oSz40fC1YpcU/tcAKtIuJxgStf6afFGADyjX/ePZH62Pi8TVAfjT+1XprPKoxQG
|
||||
HNroNzRlUpzxuHxDjFEKlXVo8wKBgQDTHdaHbSFddxeAG6icyjX87HAgTGX7WQaz
|
||||
mIhrAvjxoTbMnCJQ2QGYfj7L1HyZ4eHL2NHbEasPKS9kSSdRRaCYZ/XvYiCge6pP
|
||||
Aiyu8xeachY0QJjJPKC2WYe4Rk9i4q/M2RrsD1ps2jdVocJ96nLV1S0o1Yr2QTAc
|
||||
TDSOZBlwdQKBgQDNOkkXRgFpOoKGm9KD9QNe4a05UaAqFdoSAdKxj/caauA7j0Kj
|
||||
aza+hAc1M+OuGyQZtwjcjAK7mSc//oD7yE1PJCb3/1CUYD+8Q+ou6diQy6yBC2Ud
|
||||
M0AP0E9F5+NUd7Ipq/lxs9ao0ofBSRRheh7dMQAYr0OjHYQoYKsePMDv+QKBgF7Z
|
||||
VPzbJtZbHw/LXWGz57WOdIHOUTMvuDcQHJoXZ8kHaRtcOn6gQHtGnOfuu1xXg56V
|
||||
9xK5SWUyV7xysVtuMMzISFIYgBgZ91Yv3+tqA/y7rQYkz3/54SqL5tH/pMMEnX8n
|
||||
O1U7QKEPGTU7y6nOn3E6qWNjLV+dwgO0qRggGN3RAoGBAJ6Kv1UbOIHRbGl0RJJR
|
||||
nsOPeDDhTepkS3zs3BD1DxuVmsiPLFL56SE4PZjfVDSBYI9euJmDXYj2qEOrLFNt
|
||||
Cx8vBAiU8fZbOIUaFmt4QsWTWyLyE4HvzN4m3v1p04KdPkxev+1SmOZFfR8RJsNx
|
||||
IzLRIdllpD3oq4nwt66ViLGv
|
||||
-----END PRIVATE KEY-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDcTCCAlmgAwIBAgIJAMfOBmp8lWsMMA0GCSqGSIb3DQEBCwUAME8xCzAJBgNV
|
||||
BAYTAlhYMQ8wDQYDVQQIDAZhc2Rhc2QxDDAKBgNVBAcMA2FzZDEhMB8GA1UECgwY
|
||||
SW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMB4XDTE3MDEyMjIyMDgyNFoXDTE4MDEy
|
||||
MjIyMDgyNFowTzELMAkGA1UEBhMCWFgxDzANBgNVBAgMBmFzZGFzZDEMMAoGA1UE
|
||||
BwwDYXNkMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggEiMA0G
|
||||
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDAsAjoETQkrh6oAK96vKJsbI0Cxnc7
|
||||
qoPNHf1troWzOulC+TWOmfnoV1j3R9R+9mfXQ/ka0PqmJOflmtRaEPtwQu/jwsYg
|
||||
26OssqaWtqA4vfiPLEfzUylr/zYAbSpKuD1s8ytOS/DJVkF1uZFD92y811AJqoaL
|
||||
rdxHLEKxLQOsuSOk/AYidtTV/LewGt4DCWUCRBKU/G3bIQdYZ48oO6U8cuO7fONg
|
||||
ObMFZzxGxQYU8u/xly4najq4i/LcOG7MQUUpFk/qBUbM0IgphfLEdexz4b75B/Jf
|
||||
4afEAcBjAtLK9Cun1nVMWVC/BW3w/lmwx+UJ6EHF5qjH1MuVs3nYTkcPAgMBAAGj
|
||||
UDBOMB0GA1UdDgQWBBSYz0SbFs+YqMF8SpgIiK+iE5cq9zAfBgNVHSMEGDAWgBSY
|
||||
z0SbFs+YqMF8SpgIiK+iE5cq9zAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUA
|
||||
A4IBAQB4K0bbzcsPzWo6BVbh4IJ/OqHCpZ3a3Othdkm3TF4fHg4tpNZWp/6vNklN
|
||||
d365znGxhS9pS7mBvzFQVUrcCS7AI2gZhk/84QyC0FWTTAvsThz9G4jIgV96hu00
|
||||
CNwCuJvBxCDVkGELXZkHilQ+J8VkDLrXN44AuWx0t7YgONwawDttzIQv2JjdzY2E
|
||||
t6tlXpCJuuR/jmqXkz3+iBkn0D5acTJ8ViH/Wb457FkioqMEsjbrRmesI7rOxdzT
|
||||
869H9azHqXQXFus0Kc5UMHTZgdF2F9sxg7L8cKUCrwN4P8epICGTxq+LPQvk1srr
|
||||
L8xU+IwS2z4qx6rzrWqSdv9NACdr
|
||||
-----END CERTIFICATE-----
|
7
devserver/simple-https-server.py
Normal file
7
devserver/simple-https-server.py
Normal file
@ -0,0 +1,7 @@
|
||||
import BaseHTTPServer, SimpleHTTPServer
|
||||
import ssl
|
||||
|
||||
httpd = BaseHTTPServer.HTTPServer(('0.0.0.0', 4443), SimpleHTTPServer.SimpleHTTPRequestHandler)
|
||||
httpd.socket = ssl.wrap_socket (httpd.socket, certfile='../devserver/server.pem', server_side=True)
|
||||
print('Server running on https://localhost:4443 \n(Cert is self-signed. Your browser will warn you)')
|
||||
httpd.serve_forever()
|
BIN
devserver/snapdrop-cert.crt
Normal file
BIN
devserver/snapdrop-cert.crt
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user