diff --git a/backend/images/locations/lanxess-arena-outdoor.jpg b/backend/images/locations/lanxess-arena-outdoor.jpg index 4a7693c..f2fae21 100644 Binary files a/backend/images/locations/lanxess-arena-outdoor.jpg and b/backend/images/locations/lanxess-arena-outdoor.jpg differ diff --git a/backend/routes/files.routes.ts b/backend/routes/files.routes.ts index 379a6ce..cecfb20 100644 --- a/backend/routes/files.routes.ts +++ b/backend/routes/files.routes.ts @@ -24,7 +24,9 @@ files.get("/folders", async (req: Request, res: Response) => { /** - * Get all uploaded file names by file name + * Get all uploaded file names by folder name + * + * @param folder Name of folder on server */ files.get("/:folder", async (req: Request, res: Response) => { let result = [] @@ -34,11 +36,13 @@ files.get("/:folder", async (req: Request, res: Response) => { fileNames.forEach(file => { let resData = fs.readFileSync("./backend/images/" + req.params.folder + "/" + file, "utf8") + // todo License, Author, URL result.push({ name: file, size: fs.statSync("./backend/images/" + req.params.folder + "/" + file).size, content: resData, - url: "http://localhost:3000/static/" + req.params.folder + "/" + file + url: "http://localhost:3000/static/" + req.params.folder + "/" + file, + }) }) diff --git a/package-lock.json b/package-lock.json index 6e06bad..033c2ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,8 @@ "axios": "^1.7.7", "body-parser": "^1.20.2", "cors": "^2.8.5", + "exif-js": "^2.3.0", + "exifreader": "^4.25.0", "express": "^4.21.1", "jsonwebtoken": "^9.0.2", "jspdf": "^2.5.2", @@ -5023,6 +5025,32 @@ "node": ">= 0.6" } }, + "node_modules/exif-js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/exif-js/-/exif-js-2.3.0.tgz", + "integrity": "sha512-1Og9pAzG2FZRVlaavH8bB8BTeHcjMdJhKmeQITkX+uLRCD0xPtKAdZ2clZmQdJ56p9adXtJ8+jwrGp/4505lYg==", + "license": "MIT" + }, + "node_modules/exifreader": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/exifreader/-/exifreader-4.25.0.tgz", + "integrity": "sha512-lPyPXWTUuYgoKdKf3rw2EDoE9Zl7xHoy/ehPNeQ4gFVNLzfLyNMP4oEI+sP0/Czp5r/2i7cFhqg5MHsl4FYtyw==", + "hasInstallScript": true, + "license": "MPL-2.0", + "optionalDependencies": { + "@xmldom/xmldom": "^0.9.4" + } + }, + "node_modules/exifreader/node_modules/@xmldom/xmldom": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.9.5.tgz", + "integrity": "sha512-6g1EwSs8cr8JhP1iBxzyVAWM6BIDvx9Y3FZRIQiMDzgG43Pxi8YkWOZ0nQj2NHgNzgXDZbJewFx/n+YAvMZrfg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14.6" + } + }, "node_modules/expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", diff --git a/package.json b/package.json index 5ff3fd6..ad289ed 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,8 @@ "axios": "^1.7.7", "body-parser": "^1.20.2", "cors": "^2.8.5", + "exif-js": "^2.3.0", + "exifreader": "^4.25.0", "express": "^4.21.1", "jsonwebtoken": "^9.0.2", "jspdf": "^2.5.2", diff --git a/src/components/basics/cardViewTopImage.vue b/src/components/basics/cardViewTopImage.vue index cdb535e..9b67ce6 100644 --- a/src/components/basics/cardViewTopImage.vue +++ b/src/components/basics/cardViewTopImage.vue @@ -1,5 +1,8 @@ + \ No newline at end of file diff --git a/src/pages/admin/filesAdminPage/index.vue b/src/pages/admin/filesAdminPage/index.vue index 0a71014..275410c 100644 --- a/src/pages/admin/filesAdminPage/index.vue +++ b/src/pages/admin/filesAdminPage/index.vue @@ -50,7 +50,7 @@ filesStore.getStaticFolders() - + {{ filesStore.selectedFile.url }} diff --git a/src/pages/misc/imageLicensePage/index.vue b/src/pages/misc/imageLicensePage/index.vue new file mode 100644 index 0000000..185b1af --- /dev/null +++ b/src/pages/misc/imageLicensePage/index.vue @@ -0,0 +1,12 @@ + + + \ No newline at end of file diff --git a/src/router/routes.ts b/src/router/routes.ts index 354d8a8..17b5587 100644 --- a/src/router/routes.ts +++ b/src/router/routes.ts @@ -15,6 +15,7 @@ import LoginPage from "@/pages/account/loginPage/index.vue" import PreferencesPage from "@/pages/misc/preferencesPage/index.vue"; import HelpPage from "@/pages/misc/helpPage/index.vue" import ErrorPage from "@/pages/misc/errorPage/index.vue" +import ImageLicensePage from "@/pages/misc/imageLicensePage/index.vue" const routes = [ // Main page @@ -52,6 +53,7 @@ const routes = [ { path: '/basket', component: BasketPage }, { path: '/preferences', component: PreferencesPage }, { path: '/help', component: HelpPage }, + { path: '/license', component: ImageLicensePage }, // Error Page { path: "/404", component: ErrorPage } diff --git a/src/scripts/imageScripts.ts b/src/scripts/imageScripts.ts new file mode 100644 index 0000000..e6521cc --- /dev/null +++ b/src/scripts/imageScripts.ts @@ -0,0 +1,13 @@ +import { load } from "exifreader" + +export async function loadLicense(url: string){ + let result = "" + + await load(url) + .then(tags => { + result = tags["Copyright"]["description"] + " by " + tags["Artist"]["description"] + }) + .catch(e => {}) + + return result +} \ No newline at end of file diff --git a/src/stores/files.store.ts b/src/stores/files.store.ts index 9f04d63..82fb528 100644 --- a/src/stores/files.store.ts +++ b/src/stores/files.store.ts @@ -35,7 +35,7 @@ export const useFilesStore = defineStore('filesStore', { }, /** - * Request all available static files on server + * Request static files on server by selected folder */ async getStaticFiles() { this.fetchInProgress = true diff --git a/src/stores/location.store.ts b/src/stores/location.store.ts index e43eca7..c24a173 100644 --- a/src/stores/location.store.ts +++ b/src/stores/location.store.ts @@ -6,6 +6,7 @@ import { CityModel } from "../data/models/locations/cityModel"; import { fetchAllCities } from "../data/api/cityApi"; import { LocationDetailsApiModel } from "@/data/models/locations/locationDetailsApiModel"; import { useFeedbackStore } from "./feedback.store"; +import { getData, getTag } from "exif-js"; export const useLocationStore = defineStore("locationStore", { state: () => ({