diff --git a/src/components/SelectionManager.vue b/src/components/SelectionManager.vue
index 62d13df0..cf6dfa99 100644
--- a/src/components/SelectionManager.vue
+++ b/src/components/SelectionManager.vue
@@ -413,17 +413,7 @@ export default class SelectionManager extends Mixins(GlobalMixin, UserConfig) {
*/
private async viewInFolder(selection: Selection) {
if (selection.size !== 1) return;
-
- const photo: IPhoto = selection.values().next().value;
- const f = await dav.getFiles([photo]);
- if (f.length === 0) return;
-
- const file = f[0];
- const dirPath = file.filename.split("/").slice(0, -1).join("/");
- const url = generateUrl(
- `/apps/files/?dir=${dirPath}&scrollto=${file.fileid}&openfile=${file.fileid}`
- );
- window.open(url, "_blank");
+ dav.viewInFolder(selection.values().next().value);
}
/**
diff --git a/src/components/Viewer.vue b/src/components/Viewer.vue
index bc3cd8e0..b1e5f5b3 100644
--- a/src/components/Viewer.vue
+++ b/src/components/Viewer.vue
@@ -7,7 +7,7 @@
>
-
+
+
+ {{ t("memories", "View in folder") }}
+
+
+
+
@@ -79,6 +89,7 @@ import StarIcon from "vue-material-design-icons/Star.vue";
import StarOutlineIcon from "vue-material-design-icons/StarOutline.vue";
import DownloadIcon from "vue-material-design-icons/Download.vue";
import InfoIcon from "vue-material-design-icons/InformationOutline.vue";
+import OpenInNewIcon from "vue-material-design-icons/OpenInNew.vue";
@Component({
components: {
@@ -89,6 +100,7 @@ import InfoIcon from "vue-material-design-icons/InformationOutline.vue";
StarOutlineIcon,
DownloadIcon,
InfoIcon,
+ OpenInNewIcon,
},
})
export default class Viewer extends Mixins(GlobalMixin) {
@@ -544,6 +556,14 @@ export default class Viewer extends Mixins(GlobalMixin) {
this.openSidebar();
}
}
+
+ /**
+ * Open the files app with the current file.
+ */
+ private async viewInFolder() {
+ const photo = this.getCurrentPhoto();
+ if (photo) dav.viewInFolder(photo);
+ }
}
diff --git a/src/services/DavRequests.ts b/src/services/DavRequests.ts
index 00332907..c9b2420c 100644
--- a/src/services/DavRequests.ts
+++ b/src/services/DavRequests.ts
@@ -7,3 +7,4 @@ export * from "./dav/favorites";
export * from "./dav/folders";
export * from "./dav/onthisday";
export * from "./dav/tags";
+export * from "./dav/other";
diff --git a/src/services/Utils.ts b/src/services/Utils.ts
index 8f1962c1..1d8a9217 100644
--- a/src/services/Utils.ts
+++ b/src/services/Utils.ts
@@ -94,6 +94,8 @@ export function hashCode(str: string): number {
* @param key Key to use for comparison
*/
export function binarySearch(arr: any, elem: any, key?: string) {
+ if (arr.length === 0) return 0;
+
const desc = key
? arr[0][key] > arr[arr.length - 1][key]
: arr[0] > arr[arr.length - 1];
diff --git a/src/services/dav/other.ts b/src/services/dav/other.ts
new file mode 100644
index 00000000..3e6a3fea
--- /dev/null
+++ b/src/services/dav/other.ts
@@ -0,0 +1,19 @@
+import { getFiles } from "./base";
+import { generateUrl } from "@nextcloud/router";
+import { IPhoto } from "../../types";
+
+/**
+ * Open the files app with the given photo
+ * Opens a new window.
+ */
+export async function viewInFolder(photo: IPhoto) {
+ const f = await getFiles([photo]);
+ if (f.length === 0) return;
+
+ const file = f[0];
+ const dirPath = file.filename.split("/").slice(0, -1).join("/");
+ const url = generateUrl(
+ `/apps/files/?dir=${dirPath}&scrollto=${file.fileid}&openfile=${file.fileid}`
+ );
+ window.open(url, "_blank");
+}