mirror of
https://github.com/schlagmichdoch/PairDrop.git
synced 2026-04-22 07:04:53 +08:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ab08091f5d | ||
|
|
19a78a5239 | ||
|
|
d0b2c81582 | ||
|
|
10a0aaf896 | ||
|
|
34ebd60304 | ||
|
|
251df2fbff |
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "pairdrop",
|
"name": "pairdrop",
|
||||||
"version": "1.5.1",
|
"version": "1.5.2",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "pairdrop",
|
"name": "pairdrop",
|
||||||
"version": "1.5.1",
|
"version": "1.5.2",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"express": "^4.18.2",
|
"express": "^4.18.2",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "pairdrop",
|
"name": "pairdrop",
|
||||||
"version": "1.5.1",
|
"version": "1.5.2",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -1607,27 +1607,33 @@ class WebShareTargetUI {
|
|||||||
let shareTargetText;
|
let shareTargetText;
|
||||||
|
|
||||||
if (url) {
|
if (url) {
|
||||||
shareTargetText = url; // We share only the Link - no text. Because link-only text becomes clickable.
|
shareTargetText = url; // we share only the link - no text.
|
||||||
} else if (title && text) {
|
} else if (title && text) {
|
||||||
shareTargetText = title + '\r\n' + text;
|
shareTargetText = title + '\r\n' + text;
|
||||||
} else {
|
} else {
|
||||||
shareTargetText = title + text;
|
shareTargetText = title + text;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('Shared Target Text:', '"' + shareTargetText + '"');
|
|
||||||
Events.fire('activate-paste-mode', {files: [], text: shareTargetText})
|
Events.fire('activate-paste-mode', {files: [], text: shareTargetText})
|
||||||
} else if (share_target_type === "files") {
|
} else if (share_target_type === "files") {
|
||||||
const openRequest = window.indexedDB.open('pairdrop_store')
|
let openRequest = window.indexedDB.open('pairdrop_store')
|
||||||
openRequest.onsuccess( db => {
|
openRequest.onsuccess = e => {
|
||||||
|
const db = e.target.result;
|
||||||
const tx = db.transaction('share_target_files', 'readwrite');
|
const tx = db.transaction('share_target_files', 'readwrite');
|
||||||
const store = tx.objectStore('share_target_files');
|
const store = tx.objectStore('share_target_files');
|
||||||
const request = store.getAll();
|
const request = store.getAll();
|
||||||
request.onsuccess = _ => {
|
request.onsuccess = _ => {
|
||||||
Events.fire('activate-paste-mode', {files: request.result, text: ""})
|
const fileObjects = request.result;
|
||||||
|
let filesReceived = [];
|
||||||
|
for (let i=0; i<fileObjects.length; i++) {
|
||||||
|
filesReceived.push(new File([fileObjects[i].buffer], fileObjects[i].name));
|
||||||
|
}
|
||||||
const clearRequest = store.clear()
|
const clearRequest = store.clear()
|
||||||
clearRequest.onsuccess = _ => db.close();
|
clearRequest.onsuccess = _ => db.close();
|
||||||
|
|
||||||
|
Events.fire('activate-paste-mode', {files: filesReceived, text: ""})
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
}
|
}
|
||||||
window.history.replaceState({}, "Rewrite URL", '/');
|
window.history.replaceState({}, "Rewrite URL", '/');
|
||||||
}
|
}
|
||||||
@@ -1684,7 +1690,7 @@ class PersistentStorage {
|
|||||||
PersistentStorage.logBrowserNotCapable();
|
PersistentStorage.logBrowserNotCapable();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const DBOpenRequest = window.indexedDB.open('pairdrop_store', 2);
|
const DBOpenRequest = window.indexedDB.open('pairdrop_store', 3);
|
||||||
DBOpenRequest.onerror = (e) => {
|
DBOpenRequest.onerror = (e) => {
|
||||||
PersistentStorage.logBrowserNotCapable();
|
PersistentStorage.logBrowserNotCapable();
|
||||||
console.log('Error initializing database: ');
|
console.log('Error initializing database: ');
|
||||||
@@ -1710,7 +1716,10 @@ class PersistentStorage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
db.createObjectStore('share_target_files');
|
if (db.objectStoreNames.contains('share_target_files')) {
|
||||||
|
db.deleteObjectStore('share_target_files');
|
||||||
|
}
|
||||||
|
db.createObjectStore('share_target_files', {autoIncrement: true});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log("Object store named 'share_target_files' already exists")
|
console.log("Object store named 'share_target_files' already exists")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const cacheVersion = 'v1.5.1';
|
const cacheVersion = 'v1.5.2';
|
||||||
const cacheTitle = `pairdrop-cache-${cacheVersion}`;
|
const cacheTitle = `pairdrop-cache-${cacheVersion}`;
|
||||||
const urlsToCache = [
|
const urlsToCache = [
|
||||||
'index.html',
|
'index.html',
|
||||||
@@ -71,30 +71,11 @@ const update = request =>
|
|||||||
self.addEventListener('fetch', function(event) {
|
self.addEventListener('fetch', function(event) {
|
||||||
if (event.request.method === "POST") {
|
if (event.request.method === "POST") {
|
||||||
// Requests related to Web Share Target.
|
// Requests related to Web Share Target.
|
||||||
event.respondWith(
|
event.respondWith((async () => {
|
||||||
(async () => {
|
let share_url = await evaluateRequestData(event.request);
|
||||||
const formData = await event.request.formData();
|
share_url = event.request.url + share_url;
|
||||||
const title = formData.get("title");
|
return Response.redirect(encodeURI(share_url), 302);
|
||||||
const text = formData.get("text");
|
})());
|
||||||
const url = formData.get("url");
|
|
||||||
const files = formData.get("files");
|
|
||||||
let share_url = "/";
|
|
||||||
if (files.length > 0) {
|
|
||||||
share_url = "/?share-target=files";
|
|
||||||
const db = await window.indexedDB.open('pairdrop_store');
|
|
||||||
const tx = db.transaction('share_target_files', 'readwrite');
|
|
||||||
const store = tx.objectStore('share_target_files');
|
|
||||||
for (let i=0; i<files.length; i++) {
|
|
||||||
await store.add(files[i]);
|
|
||||||
}
|
|
||||||
await tx.complete
|
|
||||||
db.close()
|
|
||||||
} else if (title.length > 0 || text.length > 0 || url.length) {
|
|
||||||
share_url = `/?share-target=text&title=${title}&text=${text}&url=${url}`;
|
|
||||||
}
|
|
||||||
return Response.redirect(encodeURI(share_url), 303);
|
|
||||||
})()
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
// Regular requests not related to Web Share Target.
|
// Regular requests not related to Web Share Target.
|
||||||
event.respondWith(
|
event.respondWith(
|
||||||
@@ -119,3 +100,49 @@ self.addEventListener('activate', evt =>
|
|||||||
})
|
})
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const evaluateRequestData = async function (request) {
|
||||||
|
const formData = await request.formData();
|
||||||
|
const title = formData.get("title");
|
||||||
|
const text = formData.get("text");
|
||||||
|
const url = formData.get("url");
|
||||||
|
const files = formData.getAll("allfiles");
|
||||||
|
|
||||||
|
|
||||||
|
return new Promise(async (resolve) => {
|
||||||
|
if (files && files.length > 0) {
|
||||||
|
let fileObjects = [];
|
||||||
|
for (let i=0; i<files.length; i++) {
|
||||||
|
fileObjects.push({
|
||||||
|
name: files[i].name,
|
||||||
|
buffer: await files[i].arrayBuffer()
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const DBOpenRequest = indexedDB.open('pairdrop_store');
|
||||||
|
DBOpenRequest.onsuccess = e => {
|
||||||
|
const db = e.target.result;
|
||||||
|
for (let i = 0; i < fileObjects.length; i++) {
|
||||||
|
const transaction = db.transaction('share_target_files', 'readwrite');
|
||||||
|
const objectStore = transaction.objectStore('share_target_files');
|
||||||
|
|
||||||
|
const objectStoreRequest = objectStore.add(fileObjects[i]);
|
||||||
|
objectStoreRequest.onsuccess = _ => {
|
||||||
|
if (i === fileObjects.length - 1) resolve('?share-target=files');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DBOpenRequest.onerror = _ => {
|
||||||
|
resolve('');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let share_url = '?share-target=text';
|
||||||
|
|
||||||
|
if (title) share_url += `&title=${title}`;
|
||||||
|
if (text) share_url += `&text=${text}`;
|
||||||
|
if (url) share_url += `&url=${url}`;
|
||||||
|
|
||||||
|
resolve(share_url);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|||||||
@@ -1608,27 +1608,33 @@ class WebShareTargetUI {
|
|||||||
let shareTargetText;
|
let shareTargetText;
|
||||||
|
|
||||||
if (url) {
|
if (url) {
|
||||||
shareTargetText = url; // We share only the Link - no text. Because link-only text becomes clickable.
|
shareTargetText = url; // we share only the link - no text.
|
||||||
} else if (title && text) {
|
} else if (title && text) {
|
||||||
shareTargetText = title + '\r\n' + text;
|
shareTargetText = title + '\r\n' + text;
|
||||||
} else {
|
} else {
|
||||||
shareTargetText = title + text;
|
shareTargetText = title + text;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('Shared Target Text:', '"' + shareTargetText + '"');
|
|
||||||
Events.fire('activate-paste-mode', {files: [], text: shareTargetText})
|
Events.fire('activate-paste-mode', {files: [], text: shareTargetText})
|
||||||
} else if (share_target_type === "files") {
|
} else if (share_target_type === "files") {
|
||||||
const openRequest = window.indexedDB.open('pairdrop_store')
|
let openRequest = window.indexedDB.open('pairdrop_store')
|
||||||
openRequest.onsuccess( db => {
|
openRequest.onsuccess = e => {
|
||||||
|
const db = e.target.result;
|
||||||
const tx = db.transaction('share_target_files', 'readwrite');
|
const tx = db.transaction('share_target_files', 'readwrite');
|
||||||
const store = tx.objectStore('share_target_files');
|
const store = tx.objectStore('share_target_files');
|
||||||
const request = store.getAll();
|
const request = store.getAll();
|
||||||
request.onsuccess = _ => {
|
request.onsuccess = _ => {
|
||||||
Events.fire('activate-paste-mode', {files: request.result, text: ""})
|
const fileObjects = request.result;
|
||||||
|
let filesReceived = [];
|
||||||
|
for (let i=0; i<fileObjects.length; i++) {
|
||||||
|
filesReceived.push(new File([fileObjects[i].buffer], fileObjects[i].name));
|
||||||
|
}
|
||||||
const clearRequest = store.clear()
|
const clearRequest = store.clear()
|
||||||
clearRequest.onsuccess = _ => db.close();
|
clearRequest.onsuccess = _ => db.close();
|
||||||
|
|
||||||
|
Events.fire('activate-paste-mode', {files: filesReceived, text: ""})
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
}
|
}
|
||||||
window.history.replaceState({}, "Rewrite URL", '/');
|
window.history.replaceState({}, "Rewrite URL", '/');
|
||||||
}
|
}
|
||||||
@@ -1685,7 +1691,7 @@ class PersistentStorage {
|
|||||||
PersistentStorage.logBrowserNotCapable();
|
PersistentStorage.logBrowserNotCapable();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const DBOpenRequest = window.indexedDB.open('pairdrop_store', 2);
|
const DBOpenRequest = window.indexedDB.open('pairdrop_store', 3);
|
||||||
DBOpenRequest.onerror = (e) => {
|
DBOpenRequest.onerror = (e) => {
|
||||||
PersistentStorage.logBrowserNotCapable();
|
PersistentStorage.logBrowserNotCapable();
|
||||||
console.log('Error initializing database: ');
|
console.log('Error initializing database: ');
|
||||||
@@ -1711,7 +1717,10 @@ class PersistentStorage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
db.createObjectStore('share_target_files');
|
if (db.objectStoreNames.contains('share_target_files')) {
|
||||||
|
db.deleteObjectStore('share_target_files');
|
||||||
|
}
|
||||||
|
db.createObjectStore('share_target_files', {autoIncrement: true});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log("Object store named 'share_target_files' already exists")
|
console.log("Object store named 'share_target_files' already exists")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const cacheVersion = 'v1.5.1';
|
const cacheVersion = 'v1.5.2';
|
||||||
const cacheTitle = `pairdrop-included-ws-fallback-cache-${cacheVersion}`;
|
const cacheTitle = `pairdrop-included-ws-fallback-cache-${cacheVersion}`;
|
||||||
const urlsToCache = [
|
const urlsToCache = [
|
||||||
'index.html',
|
'index.html',
|
||||||
@@ -71,30 +71,11 @@ const update = request =>
|
|||||||
self.addEventListener('fetch', function(event) {
|
self.addEventListener('fetch', function(event) {
|
||||||
if (event.request.method === "POST") {
|
if (event.request.method === "POST") {
|
||||||
// Requests related to Web Share Target.
|
// Requests related to Web Share Target.
|
||||||
event.respondWith(
|
event.respondWith((async () => {
|
||||||
(async () => {
|
let share_url = await evaluateRequestData(event.request);
|
||||||
const formData = await event.request.formData();
|
share_url = event.request.url + share_url;
|
||||||
const title = formData.get("title");
|
return Response.redirect(encodeURI(share_url), 302);
|
||||||
const text = formData.get("text");
|
})());
|
||||||
const url = formData.get("url");
|
|
||||||
const files = formData.get("files");
|
|
||||||
let share_url = "/";
|
|
||||||
if (files.length > 0) {
|
|
||||||
share_url = "/?share-target=files";
|
|
||||||
const db = await window.indexedDB.open('pairdrop_store');
|
|
||||||
const tx = db.transaction('share_target_files', 'readwrite');
|
|
||||||
const store = tx.objectStore('share_target_files');
|
|
||||||
for (let i=0; i<files.length; i++) {
|
|
||||||
await store.add(files[i]);
|
|
||||||
}
|
|
||||||
await tx.complete
|
|
||||||
db.close()
|
|
||||||
} else if (title.length > 0 || text.length > 0 || url.length) {
|
|
||||||
share_url = `/?share-target=text&title=${title}&text=${text}&url=${url}`;
|
|
||||||
}
|
|
||||||
return Response.redirect(encodeURI(share_url), 303);
|
|
||||||
})()
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
// Regular requests not related to Web Share Target.
|
// Regular requests not related to Web Share Target.
|
||||||
event.respondWith(
|
event.respondWith(
|
||||||
@@ -119,3 +100,49 @@ self.addEventListener('activate', evt =>
|
|||||||
})
|
})
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const evaluateRequestData = async function (request) {
|
||||||
|
const formData = await request.formData();
|
||||||
|
const title = formData.get("title");
|
||||||
|
const text = formData.get("text");
|
||||||
|
const url = formData.get("url");
|
||||||
|
const files = formData.getAll("allfiles");
|
||||||
|
|
||||||
|
|
||||||
|
return new Promise(async (resolve) => {
|
||||||
|
if (files && files.length > 0) {
|
||||||
|
let fileObjects = [];
|
||||||
|
for (let i=0; i<files.length; i++) {
|
||||||
|
fileObjects.push({
|
||||||
|
name: files[i].name,
|
||||||
|
buffer: await files[i].arrayBuffer()
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const DBOpenRequest = indexedDB.open('pairdrop_store');
|
||||||
|
DBOpenRequest.onsuccess = e => {
|
||||||
|
const db = e.target.result;
|
||||||
|
for (let i = 0; i < fileObjects.length; i++) {
|
||||||
|
const transaction = db.transaction('share_target_files', 'readwrite');
|
||||||
|
const objectStore = transaction.objectStore('share_target_files');
|
||||||
|
|
||||||
|
const objectStoreRequest = objectStore.add(fileObjects[i]);
|
||||||
|
objectStoreRequest.onsuccess = _ => {
|
||||||
|
if (i === fileObjects.length - 1) resolve('?share-target=files');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DBOpenRequest.onerror = _ => {
|
||||||
|
resolve('');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let share_url = '?share-target=text';
|
||||||
|
|
||||||
|
if (title) share_url += `&title=${title}`;
|
||||||
|
if (text) share_url += `&text=${text}`;
|
||||||
|
if (url) share_url += `&url=${url}`;
|
||||||
|
|
||||||
|
resolve(share_url);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user