mirror of
https://github.com/RobinLinus/snapdrop.git
synced 2025-05-19 17:11:06 -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",
|
"sizes": "512x512",
|
||||||
"type": "image/png"
|
"type": "image/png"
|
||||||
}],
|
}],
|
||||||
"background_color": "#3367d6",
|
"background_color": "#efefef",
|
||||||
"start_url": "/",
|
"start_url": "/",
|
||||||
"display": "minimal-ui",
|
"display": "minimal-ui",
|
||||||
"theme_color": "#3367d6"
|
"theme_color": "#3367d6"
|
||||||
|
@ -163,9 +163,19 @@ class PeerUI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_onTouchStart(e) {
|
_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._touchStart = Date.now();
|
||||||
this._touchTimer = setTimeout(_ => this._onTouchEnd(), 610);
|
this._touchTimer = setTimeout(_ => this._onTouchEnd(), 610);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_onTouchEnd(e) {
|
_onTouchEnd(e) {
|
||||||
if (Date.now() - this._touchStart < 500) {
|
if (Date.now() - this._touchStart < 500) {
|
||||||
@ -280,8 +290,18 @@ class SendTextDialog extends Dialog {
|
|||||||
this.$text.setSelectionRange(0, this.$text.value.length)
|
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) {
|
_send(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
if (!this.$text.value) return;
|
||||||
Events.fire('send-text', {
|
Events.fire('send-text', {
|
||||||
to: this._recipient,
|
to: this._recipient,
|
||||||
text: this.$text.value
|
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 {
|
class Snapdrop {
|
||||||
constructor() {
|
constructor() {
|
||||||
const server = new ServerConnection();
|
const server = new ServerConnection();
|
||||||
@ -425,6 +467,10 @@ class Snapdrop {
|
|||||||
const receiveTextDialog = new ReceiveTextDialog();
|
const receiveTextDialog = new ReceiveTextDialog();
|
||||||
const toast = new Toast();
|
const toast = new Toast();
|
||||||
const notifications = new Notifications();
|
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');
|
console.log('Service Worker registered');
|
||||||
window.serviceWorker = serviceWorker
|
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
|
// 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