Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add missing context menu items #1951

Closed
wants to merge 30 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
f124bdc
feat: add media info and refresh metadata context menu
noaione Apr 13, 2023
79f9171
feat: add copy stream and file download
noaione Apr 13, 2023
04c3295
cleanup
noaione Apr 13, 2023
0d1658c
change URL in file-download
noaione Apr 13, 2023
e99d1b4
feat: add download all and fix missing context menu on home screen
noaione Apr 13, 2023
b414d0b
feat: add delete media button
noaione Apr 13, 2023
971b848
cleanup console log usages
noaione Apr 13, 2023
6d29232
fix: track-list item-menu not using the actual track item
noaione Apr 13, 2023
2877ccf
feat: add Instant mix
noaione Apr 13, 2023
65442ec
chore: cleanup legacy code and i18n strings
noaione Apr 13, 2023
6c706cd
refactor: handle clipboard and download with native Tauri API for Tau…
noaione Apr 14, 2023
3fc935f
refactor: cleanup copyDownload code
noaione Apr 14, 2023
f6dd577
refactor: split mediainfo to utils and component
noaione Apr 14, 2023
53d0821
fix: clipboard not working as intended
noaione Apr 14, 2023
4951efe
Merge branch 'master' into feat/more-context-menu
noaione Apr 14, 2023
3057959
fix: build problems after upgrading
noaione Apr 14, 2023
19969c4
chore: half revert "refactor: handle clipboard and download with nati…
noaione Apr 15, 2023
4ac2be3
fix: removed check when reverting commit
noaione Apr 15, 2023
28225c7
feat: add EmbeddedImage to Media info
noaione Apr 15, 2023
3db6081
feat: add Identify context menu
noaione Apr 15, 2023
95e45c1
refactor: move some functions to utils/items
noaione Apr 15, 2023
8dd6711
refactor: remove duplicate css attribute
noaione Apr 15, 2023
f1962a4
fix: identify result not searched properly
noaione Apr 15, 2023
172e4da
fix: image aspect ratio for identify result
noaione Apr 15, 2023
6e57b40
fix: do not include Year search if type is BoxSet and Person
noaione Apr 15, 2023
fb43ba5
refactor: remove template usage in IdentifyTab
noaione Apr 16, 2023
0797928
feat: use i18n for Media Info codec titles
noaione Apr 16, 2023
1f5788b
refactor: use MediaSources for media info button check
noaione Apr 16, 2023
0615e97
refactor: more refactor and add collection/playlist helper
noaione Apr 16, 2023
524d268
feat: support multiple streams for all the context menu
noaione Apr 16, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
109 changes: 95 additions & 14 deletions frontend/locales/en-US.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
{
"auto": "Automatic",
"3DFormat": "3D format",
"NoMediaSourcesAvailable": "No media sources available",
"actor": "Actor",
Expand All @@ -25,6 +24,7 @@
"aspectRatio": "Aspect ratio",
"audio": "Audio",
"audioCodecNotSupported": "The audio codec is not supported",
"auto": "Automatic",
"badRequest": "Bad request. Try again",
"books": "Books",
"browserNotSupported": "Your browser is not supported for playing this file.",
Expand All @@ -34,17 +34,24 @@
"byArtist": "By {artist}",
"cancel": "Cancel",
"castAndCrew": "Cast & crew",
"clipboardFail": "Failed to copy to clipboard",
"clipboardSuccess": "Copied to clipboard",
"close": "Close",
"collectionEmpty": "This collection is empty",
"collections": "Collections",
"communityRating": "Community rating",
"confirm": "Confirm",
"connect": "Connect",
"contentType": "Content type",
"continueListening": "Continue listening",
"continueWatching": "Continue watching",
"criticRating": "Critic rating",
"customRating": "Custom rating",
"darkModeToggle": "Toggle dark mode",
"dateAdded": "Date added",
"delete": "Delete",
"deleteItem": "Delete media",
"deleteItemDescription": "Deleting this item will delete it from both the file system and your media library. Are you sure you wish to continue?",
"details": "Details",
"dialog": {
"upNext": {
Expand All @@ -58,6 +65,11 @@
"disabled": "Disabled",
"discNumber": "Disc {discNumber}",
"dislikes": "Dislikes",
"download": {
"copyStreamUrl": "Copy Stream URL",
"download": "Download",
"downloadAll": "Download all"
},
"edit": "Edit",
"editMetadata": "Edit metadata",
"editPerson": "Edit person",
Expand All @@ -79,6 +91,8 @@
},
"failedRetrievingDisplayPreferences": "Unable to get display preferences. Using last known settings.",
"failedSettingDisplayPreferences": "Unable to update display preferences.",
"failedToDeleteItem": "Failed to delete item",
"failedToGetDownloadUrl": "Failed to get URL for selected Item",
"failedToRefreshItems": "Failed to refresh items",
"favorite": "Favorite",
"features": "Features",
Expand All @@ -98,6 +112,12 @@
"recentlyAdded": "Recently added"
}
},
"identify": {
"applyError": "Failed to apply selected search result",
"instructResult": "You can click on one of these cards to apply the result",
"searchError": "Failed to search to remote providers",
"title": "Identify"
},
"imageType": {
"art": "Art",
"backdrop": "Backdrop",
Expand Down Expand Up @@ -196,24 +216,79 @@
"name": "Audio channels:"
},
"audioCodec": {
"name": "Audio codec:"
},
"bitrate": {
"name": "Bitrate:"
},
"container": {
"name": "Container:"
"channels": "Channels:",
"layout": "Layout:",
"name": "Audio codec:",
"sampleRate": "Sample rate:",
"titles": "Audio | Audio {0}"
},
"embeddedImageCodec": {
"name": "Image codec:",
"titles": "Image | Image {0}"
},
"generic": {
"bitrate": "Bitrate:",
"codec": "Codec:",
"codecTag": "Codec tag:",
"container": "Container:",
"default": "Default:",
"external": "External:",
"forced": "Forced:",
"language": "Language:",
"path": "Path:",
"profile": "Profile:",
"size": "Size:",
"title": "Title:"
},
"name": "Media",
"subtitleCodec": {
"name": "Subtitle codec:"
"name": "Subtitle codec:",
"titles": "Subtitle | Subtitle {0}"
},
"title": "Media Info",
"videoCodec": {
"name": "Video codec:"
"DoVi": {
"blPresent": "DV bl preset flag:",
"blSignalCompatibilityId": "DV bl signal compatibility ID:",
"elPresent": "DV el preset flag:",
"level": "DV level:",
"majorVersion": "DV version major:",
"minorVersion": "DV version minor:",
"profile": "DV profile:",
"rpuPresent": "DV rpu preset flag:",
"title": "DV title:"
},
"aspectRatio": "Aspect ratio:",
"bitdepth": "Bit depth:",
"colorPrimaries": "Color primaries:",
"colorRange": "Color range:",
"colorSpace": "Color space:",
"colorTransfer": "Color transfer:",
"frameRate": "Framerate:",
"isAnamorphic": "Anamorphic:",
"isAvc": "AVC:",
"isInterlaced": "Interlaced:",
"level": "Level:",
"name": "Video codec:",
"pixelFormat": "Pixel format:",
"refFrames": "Ref frames:",
"resolution": "Resolution:",
"titles": "Video | Video {0}",
"videoRange": "Video range:",
"videoRangeType": "Video range type:"
}
},
"menu": "Menu",
"metadata": {
"refresh": {
"all": "Replace all metadata",
"methodHint": "Metadata is refreshed based on settings and internet services that are enabled in the Dashboard.",
"missing": "Search for missing metadata",
"replaceImage": "Replace existing images",
"scan": "Scan for new and updated files",
"success": "Metadata refresh enqueued",
"title": "Refresh metadata"
},
"source": "Source",
"sourceAll": "All",
"title": "Title",
Expand Down Expand Up @@ -247,6 +322,7 @@
"playback": {
"addToQueue": "Add to queue",
"clearQueue": "Clear queue and stop playback",
"instantMix": "Instant mix",
"playAll": "Play all",
"playNext": "Play next",
"playbackSource": {
Expand Down Expand Up @@ -303,6 +379,7 @@
"quality": "Quality",
"queue": "Queue",
"rating": "Rating",
"refresh": "Refresh",
"refreshLibrary": "Refresh library",
"releaseDate": "Release date",
"remoteDevices": "Remote devices",
Expand All @@ -313,6 +390,8 @@
"saved": "Saved",
"search": {
"name": "Search",
"noResults": "No results found",
"results": "Results",
"topResults": "Top results"
},
"seasonEpisode": "Season {seasonNumber}, Episode {episodeNumber}",
Expand All @@ -335,9 +414,9 @@
"refreshKeysFailure": "Error refreshing API keys",
"revoke": "Revoke",
"revokeAll": "Revoke all API keys",
"revokeConfirm": "Confirm API key revocation",
"revokeAllFailure": "Error revoking all API keys",
"revokeAllSuccess": "Successfully revoked all API keys",
"revokeConfirm": "Confirm API key revocation",
"revokeFailure": "Error revoking API key",
"revokeSuccess": "Successfully revoked API key"
},
Expand All @@ -346,9 +425,9 @@
"appVersion": "App version",
"delete": "Delete",
"deleteAll": "Delete all",
"deleteConfirm": "Confirm device deletion",
"deleteAllDevicesError": "Error deleting all devices",
"deleteAllDevicesSuccess": "All devices deleted successfully",
"deleteConfirm": "Confirm device deletion",
"deleteDeviceError": "Error deleting device",
"deleteDeviceSuccess": "Device deleted successfully",
"deviceName": "Device name",
Expand Down Expand Up @@ -442,6 +521,8 @@
"signIn": "Sign in",
"snackbar": {
"addedToQueue": "Added to queue",
"instantMixFailed": "Failed to add Instant mix to queue",
"instantMixQueued": "Instant mix added to queue",
"playNext": "The selected item will be played after the current one",
"routeValidationError": "The specified routeId in route params is not correct"
},
Expand All @@ -463,9 +544,9 @@
"themeVideo": "Theme Video",
"tooltips": {
"changeLanguage": "Language",
"switchToAuto": "Follow system theme",
"switchToDarkMode": "Switch to dark mode",
"switchToLightMode": "Switch to light mode",
"switchToAuto": "Follow system theme"
"switchToLightMode": "Switch to light mode"
},
"trailer": "Trailer",
"transcodingInfo": {
Expand Down
2 changes: 1 addition & 1 deletion frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -98,4 +98,4 @@
"npm": ">=8.19.2",
"yarn": "Yarn is not supported. Please use NPM."
}
}
}
86 changes: 86 additions & 0 deletions frontend/src/components/Item/ConfirmDialog.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
<template>
<v-dialog
class="confirm-dialog"
content-class="confirm-dialog"
:model-value="dialog"
:fullscreen="$vuetify.display.mobile"
@update:model-value="close">
<v-card height="100%" class="d-flex width-90">
<v-card-title class="text-center font-weight-light mt-4">
{{ title }}
</v-card-title>
<v-card-subtitle v-if="subtitle" class="pb-3 text-center">
{{ subtitle }}
</v-card-subtitle>

<v-divider />

<v-card-text class="text-center font-weight-normal px-4">
{{ text }}
</v-card-text>

<v-divider />

<v-card-actions class="d-flex flex-row align-center justify-center mb-4">
<v-btn variant="flat" width="8em" color="secondary" @click="close">
{{ t('cancel') }}
</v-btn>

<v-btn
variant="flat"
width="8em"
:color="confirmColor ?? 'error'"
@click="closeAndConfirm">
{{ confirmText }}
</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
</template>

<script setup lang="ts">
import { useI18n } from 'vue-i18n';

defineProps<{
dialog: boolean;
title: string;
text: string;
confirmText: string;
subtitle?: string;
confirmColor?: string;
}>();

const emit = defineEmits<{
(e: 'update:dialog', isOpen: boolean): void;
(e: 'onConfirm'): void;
}>();

const { t } = useI18n();

/**
* Close the dialog
*/
function close(): void {
emit('update:dialog', false);
}

/**
* Close the dialog and send confirmation event
*/
function closeAndConfirm(): void {
close();
emit('onConfirm');
}
</script>

<style lang="scss" scoped>
.confirm-dialog {
max-width: 100vw;
}

@media screen and (min-width: 600px) {
.confirm-dialog {
max-width: 70vw;
}
}
</style>
33 changes: 33 additions & 0 deletions frontend/src/components/Item/Identify/IdentifyDialog.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<template>
<v-dialog
content-class="identify-dialog"
:model-value="dialog"
:fullscreen="$vuetify.display.mobile"
@update:model-value="close">
<identify-tab
:item-id="itemId"
:media-source-index="mediaSourceIndex"
@close="close" />
</v-dialog>
</template>

<script setup lang="ts">
defineProps<{ dialog: boolean; itemId: string; mediaSourceIndex?: number }>();

const emit = defineEmits<{
(e: 'update:dialog', isOpen: boolean): void;
}>();

/**
* Close the dialog
*/
function close(): void {
emit('update:dialog', false);
}
</script>

<style lang="scss" scoped>
.identify-dialog {
height: 60vh;
}
</style>