From 04ee6b8be27fe5d02f3c0c1690254137b6403671 Mon Sep 17 00:00:00 2001 From: Philipp Heckel Date: Wed, 9 Mar 2022 15:58:21 -0500 Subject: [PATCH] Embed resources --- web/.gitignore | 27 ----------- web/public/index.html | 4 +- web/public/static/img/basic-notification.png | Bin 25063 -> 0 bytes web/src/app/Notifier.js | 4 +- web/src/app/Prefs.js | 2 +- web/src/app/utils.js | 20 +++++++- web/src/components/ActionBar.js | 9 ++-- web/src/components/Notifications.js | 43 ++++++++++++------ web/src/components/Preferences.js | 8 ++-- web/{public/static => src}/img/file-app.svg | 0 web/{public/static => src}/img/file-audio.svg | 0 .../static => src}/img/file-document.svg | 0 web/{public/static => src}/img/file-image.svg | 0 web/{public/static => src}/img/file-video.svg | 0 .../static => src}/img/ntfy-outline.svg | 0 web/src/img/ntfy.png | Bin 0 -> 4701 bytes web/{public/static => src}/img/ntfy.svg | 0 web/{public/static => src}/img/priority-1.svg | 0 web/{public/static => src}/img/priority-2.svg | 0 web/{public/static => src}/img/priority-4.svg | 0 web/{public/static => src}/img/priority-5.svg | 0 web/{public/static => src}/sounds/beep.mp3 | Bin .../sounds/dadum.mp3} | Bin .../sounds/ding.mp3} | Bin web/{public/static => src}/sounds/juntos.mp3 | Bin .../sounds/pop-swoosh.mp3} | Bin .../sounds/pop.mp3} | Bin .../static => src}/sounds/pristine.mp3 | Bin 28 files changed, 60 insertions(+), 57 deletions(-) delete mode 100644 web/.gitignore delete mode 100644 web/public/static/img/basic-notification.png rename web/{public/static => src}/img/file-app.svg (100%) rename web/{public/static => src}/img/file-audio.svg (100%) rename web/{public/static => src}/img/file-document.svg (100%) rename web/{public/static => src}/img/file-image.svg (100%) rename web/{public/static => src}/img/file-video.svg (100%) rename web/{public/static => src}/img/ntfy-outline.svg (100%) create mode 100644 web/src/img/ntfy.png rename web/{public/static => src}/img/ntfy.svg (100%) rename web/{public/static => src}/img/priority-1.svg (100%) rename web/{public/static => src}/img/priority-2.svg (100%) rename web/{public/static => src}/img/priority-4.svg (100%) rename web/{public/static => src}/img/priority-5.svg (100%) rename web/{public/static => src}/sounds/beep.mp3 (100%) rename web/{public/static/sounds/mixkit-software-interface-start.mp3 => src/sounds/dadum.mp3} (100%) rename web/{public/static/sounds/mixkit-correct-answer-tone.mp3 => src/sounds/ding.mp3} (100%) rename web/{public/static => src}/sounds/juntos.mp3 (100%) rename web/{public/static/sounds/mixkit-message-pop-alert.mp3 => src/sounds/pop-swoosh.mp3} (100%) rename web/{public/static/sounds/mixkit-long-pop.mp3 => src/sounds/pop.mp3} (100%) rename web/{public/static => src}/sounds/pristine.mp3 (100%) diff --git a/web/.gitignore b/web/.gitignore deleted file mode 100644 index 8d8e757e..00000000 --- a/web/.gitignore +++ /dev/null @@ -1,27 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# production -/build - -# IDEs and editors -/.idea -/.vscode - -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* diff --git a/web/public/index.html b/web/public/index.html index b992636c..232b0cf9 100644 --- a/web/public/index.html +++ b/web/public/index.html @@ -15,7 +15,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/web/public/static/img/basic-notification.png b/web/public/static/img/basic-notification.png deleted file mode 100644 index 3a8a245d95bbe79e0e4699ed4d34f9581c86da6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25063 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 RuX2Du)RZ*fwThNu{|6j=)S& openUrl(notification.click); @@ -32,7 +33,6 @@ class Notifier { await playSound(sound); } catch (e) { console.log(`[Notifier, ${shortUrl}] Error playing audio`, e); - // FIXME show no sound allowed popup } } } diff --git a/web/src/app/Prefs.js b/web/src/app/Prefs.js index 6acc8f96..b444c6f8 100644 --- a/web/src/app/Prefs.js +++ b/web/src/app/Prefs.js @@ -7,7 +7,7 @@ class Prefs { async sound() { const sound = await db.prefs.get('sound'); - return (sound) ? sound.value : "mixkit-correct-answer-tone"; + return (sound) ? sound.value : "ding"; } async setMinPriority(minPriority) { diff --git a/web/src/app/utils.js b/web/src/app/utils.js index 64dd9bea..08979fb2 100644 --- a/web/src/app/utils.js +++ b/web/src/app/utils.js @@ -1,4 +1,11 @@ import {rawEmojis} from "./emojis"; +import beep from "../sounds/beep.mp3"; +import juntos from "../sounds/juntos.mp3"; +import pristine from "../sounds/pristine.mp3"; +import ding from "../sounds/ding.mp3"; +import dadum from "../sounds/dadum.mp3"; +import pop from "../sounds/pop.mp3"; +import popSwoosh from "../sounds/pop-swoosh.mp3"; export const topicUrl = (baseUrl, topic) => `${baseUrl}/${topic}`; export const topicUrlWs = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/ws` @@ -34,7 +41,6 @@ const toEmojis = (tags) => { else return tags.filter(tag => tag in emojis).map(tag => emojis[tag]); } - export const formatTitleWithDefault = (m, fallback) => { if (m.title) { return formatTitle(m); @@ -123,8 +129,18 @@ export const subscriptionRoute = (subscription) => { return `/${subscription.topic}`; } +export const sounds = { + "beep": beep, + "juntos": juntos, + "pristine": pristine, + "ding": ding, + "dadum": dadum, + "pop": pop, + "pop-swoosh": popSwoosh +}; + export const playSound = async (sound) => { - const audio = new Audio(`/static/sounds/${sound}.mp3`); + const audio = new Audio(sounds[sound]); return audio.play(); }; diff --git a/web/src/components/ActionBar.js b/web/src/components/ActionBar.js index 32b32d98..0dcf6963 100644 --- a/web/src/components/ActionBar.js +++ b/web/src/components/ActionBar.js @@ -20,6 +20,7 @@ import NotificationsIcon from '@mui/icons-material/Notifications'; import NotificationsOffIcon from '@mui/icons-material/NotificationsOff'; import api from "../app/Api"; import subscriptionManager from "../app/SubscriptionManager"; +import logo from "../img/ntfy.svg" const ActionBar = (props) => { const location = useLocation(); @@ -44,7 +45,7 @@ const ActionBar = (props) => { > - { > - + Send test notification Clear all notifications Unsubscribe diff --git a/web/src/components/Notifications.js b/web/src/components/Notifications.js index 4ee471bb..652a40c5 100644 --- a/web/src/components/Notifications.js +++ b/web/src/components/Notifications.js @@ -21,6 +21,16 @@ import Box from "@mui/material/Box"; import Button from "@mui/material/Button"; import subscriptionManager from "../app/SubscriptionManager"; import InfiniteScroll from "react-infinite-scroll-component"; +import fileApp from "../img/file-app.svg"; +import fileAudio from "../img/file-audio.svg"; +import fileDocument from "../img/file-document.svg"; +import fileImage from "../img/file-image.svg"; +import fileVideo from "../img/file-video.svg"; +import priority1 from "../img/priority-1.svg"; +import priority2 from "../img/priority-2.svg"; +import priority4 from "../img/priority-4.svg"; +import priority5 from "../img/priority-5.svg"; +import logoOutline from "../img/ntfy-outline.svg"; const Notifications = (props) => { if (props.mode === "all") { @@ -113,7 +123,7 @@ const NotificationItem = (props) => { {date} {[1,2,4,5].includes(notification.priority) && {`Priority} @@ -139,6 +149,13 @@ const NotificationItem = (props) => { ); } +const priorityFiles = { + 1: priority1, + 2: priority2, + 4: priority4, + 5: priority5 +}; + const Attachment = (props) => { const attachment = props.attachment; const expired = attachment.expires && attachment.expires < Date.now()/1000; @@ -218,7 +235,7 @@ const Image = (props) => { <> setOpen(true)} sx={{ @@ -239,7 +256,7 @@ const Image = (props) => { { const type = props.type; let imageFile; if (!type) { - imageFile = 'file-document.svg'; + imageFile = fileDocument; } else if (type.startsWith('image/')) { - imageFile = 'file-image.svg'; + imageFile = fileImage; } else if (type.startsWith('video/')) { - imageFile = 'file-video.svg'; + imageFile = fileVideo; } else if (type.startsWith('audio/')) { - imageFile = 'file-audio.svg'; + imageFile = fileAudio; } else if (type === "application/vnd.android.package-archive") { - imageFile = 'file-app.svg'; + imageFile = fileApp; } else { - imageFile = 'file-document.svg'; + imageFile = fileDocument; } return ( { return ( - No notifications
+ No notifications
You haven't received any notifications for this topic yet.
@@ -317,7 +334,7 @@ const NoNotificationsWithoutSubscription = (props) => { return ( - No notifications
+ No notifications
You haven't received any notifications.
@@ -342,7 +359,7 @@ const NoSubscriptions = () => { return ( - No topics
+ No topics
It looks like you don't have any subscriptions yet.
diff --git a/web/src/components/Preferences.js b/web/src/components/Preferences.js index a9b4e874..ef4b7fcb 100644 --- a/web/src/components/Preferences.js +++ b/web/src/components/Preferences.js @@ -75,12 +75,12 @@ const Sound = () => { diff --git a/web/public/static/img/file-app.svg b/web/src/img/file-app.svg similarity index 100% rename from web/public/static/img/file-app.svg rename to web/src/img/file-app.svg diff --git a/web/public/static/img/file-audio.svg b/web/src/img/file-audio.svg similarity index 100% rename from web/public/static/img/file-audio.svg rename to web/src/img/file-audio.svg diff --git a/web/public/static/img/file-document.svg b/web/src/img/file-document.svg similarity index 100% rename from web/public/static/img/file-document.svg rename to web/src/img/file-document.svg diff --git a/web/public/static/img/file-image.svg b/web/src/img/file-image.svg similarity index 100% rename from web/public/static/img/file-image.svg rename to web/src/img/file-image.svg diff --git a/web/public/static/img/file-video.svg b/web/src/img/file-video.svg similarity index 100% rename from web/public/static/img/file-video.svg rename to web/src/img/file-video.svg diff --git a/web/public/static/img/ntfy-outline.svg b/web/src/img/ntfy-outline.svg similarity index 100% rename from web/public/static/img/ntfy-outline.svg rename to web/src/img/ntfy-outline.svg diff --git a/web/src/img/ntfy.png b/web/src/img/ntfy.png new file mode 100644 index 0000000000000000000000000000000000000000..92312feac6a3c9effe8323e76a6d30f2ce88d724 GIT binary patch literal 4701 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 Zdu`HC4VjGyX*2{dxMQmGUfU`5e*gp9@R9%k literal 0 HcmV?d00001 diff --git a/web/public/static/img/ntfy.svg b/web/src/img/ntfy.svg similarity index 100% rename from web/public/static/img/ntfy.svg rename to web/src/img/ntfy.svg diff --git a/web/public/static/img/priority-1.svg b/web/src/img/priority-1.svg similarity index 100% rename from web/public/static/img/priority-1.svg rename to web/src/img/priority-1.svg diff --git a/web/public/static/img/priority-2.svg b/web/src/img/priority-2.svg similarity index 100% rename from web/public/static/img/priority-2.svg rename to web/src/img/priority-2.svg diff --git a/web/public/static/img/priority-4.svg b/web/src/img/priority-4.svg similarity index 100% rename from web/public/static/img/priority-4.svg rename to web/src/img/priority-4.svg diff --git a/web/public/static/img/priority-5.svg b/web/src/img/priority-5.svg similarity index 100% rename from web/public/static/img/priority-5.svg rename to web/src/img/priority-5.svg diff --git a/web/public/static/sounds/beep.mp3 b/web/src/sounds/beep.mp3 similarity index 100% rename from web/public/static/sounds/beep.mp3 rename to web/src/sounds/beep.mp3 diff --git a/web/public/static/sounds/mixkit-software-interface-start.mp3 b/web/src/sounds/dadum.mp3 similarity index 100% rename from web/public/static/sounds/mixkit-software-interface-start.mp3 rename to web/src/sounds/dadum.mp3 diff --git a/web/public/static/sounds/mixkit-correct-answer-tone.mp3 b/web/src/sounds/ding.mp3 similarity index 100% rename from web/public/static/sounds/mixkit-correct-answer-tone.mp3 rename to web/src/sounds/ding.mp3 diff --git a/web/public/static/sounds/juntos.mp3 b/web/src/sounds/juntos.mp3 similarity index 100% rename from web/public/static/sounds/juntos.mp3 rename to web/src/sounds/juntos.mp3 diff --git a/web/public/static/sounds/mixkit-message-pop-alert.mp3 b/web/src/sounds/pop-swoosh.mp3 similarity index 100% rename from web/public/static/sounds/mixkit-message-pop-alert.mp3 rename to web/src/sounds/pop-swoosh.mp3 diff --git a/web/public/static/sounds/mixkit-long-pop.mp3 b/web/src/sounds/pop.mp3 similarity index 100% rename from web/public/static/sounds/mixkit-long-pop.mp3 rename to web/src/sounds/pop.mp3 diff --git a/web/public/static/sounds/pristine.mp3 b/web/src/sounds/pristine.mp3 similarity index 100% rename from web/public/static/sounds/pristine.mp3 rename to web/src/sounds/pristine.mp3