From 10c5fa7cda1264677693e8e88968f3192c21c476 Mon Sep 17 00:00:00 2001 From: Sander Vocke Date: Thu, 16 Jan 2020 16:19:16 +0100 Subject: [PATCH] Add a photo table line with simple CSS --- public/resources/no_image_available.png | Bin 0 -> 9655 bytes public/resources/no_thumb_available.png | Bin 0 -> 9655 bytes src/PhotoTableLine.css | 32 ++++++++++++++++++++++ src/index.js | 17 ++++++------ src/media.js | 35 +++++++++++++++++++++++- src/queries.js | 25 +++++++++++++++++ 6 files changed, 99 insertions(+), 10 deletions(-) create mode 100644 public/resources/no_image_available.png create mode 100644 public/resources/no_thumb_available.png create mode 100644 src/PhotoTableLine.css create mode 100644 src/queries.js diff --git a/public/resources/no_image_available.png b/public/resources/no_image_available.png new file mode 100644 index 0000000000000000000000000000000000000000..55d198036ab61ab744018b697e658914637dbadd GIT binary patch literal 9655 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 { - var photo = new Photo; - var imagepath = process.env.PUBLIC_URL + "/test_photos_thumbs/" + res[0]["uniqueHash"] + ".jpg"; - photo.state.path = imagepath; - this.setState({ done: true, photo: photo }); - }); + find_photos("", this.props.database, "/test_photos", "/test_photos_thumbs").then(photos => { + this.setState({ done: true, photo: photos[0] }); + }); } render() { return ( <> - {this.state.done && } + {this.state.photo && } ); } @@ -59,7 +56,9 @@ const TestDBFetch = ({ sqlite_file }) => ( {loading && } {error && } {done && } +

DB Query Console

{done && } +

Example photo from DB

{done && } )} diff --git a/src/media.js b/src/media.js index 90406d5..8415639 100644 --- a/src/media.js +++ b/src/media.js @@ -1,12 +1,45 @@ import React from 'react'; +import './PhotoTableLine.css'; export class Media {} export class Photo extends Media { state = { + id: false, + name: false, path: false, thumbnailpath: false } } -export const PhotoView = ({ photo }) => ; +export function create_photo(maybe_id, maybe_name, maybe_path, maybe_thumbnail_path) { + var p = new Photo; + if(maybe_id) { p.state.id = maybe_id; } + if(maybe_name) { p.state.name = maybe_name; } + if(maybe_path) { p.state.path = maybe_path; } + if(maybe_thumbnail_path) { p.state.thumbnailpath = maybe_thumbnail_path; } + return p; +} + +export const PhotoView = ({ photo }) => ; + +export class PhotoThumbView extends React.Component { + render() { + return ( + <> + + + + + ); + } +} + +export const PhotoTableLine = ({ photo }) => ( + <> +
+
+

{photo.state.name ? photo.state.name : "Unknown"}

+
+ +) \ No newline at end of file diff --git a/src/queries.js b/src/queries.js new file mode 100644 index 0000000..35bb1e4 --- /dev/null +++ b/src/queries.js @@ -0,0 +1,25 @@ + +import { Photo, PhotoView, PhotoThumbView, create_photo } from './media.js'; + +// This query will return database entries with the fields "id", "uniqueHash", "relativePath" (of the album) and "name" for each matching image. +export function images_query(maybe_where) { + return "SELECT Images.id, Images.name, Images.uniqueHash, Albums.relativePath FROM Images INNER JOIN Albums ON Images.album=Albums.id " + (maybe_where ? maybe_where : "") + ";"; +} + +export function find_photos(maybe_where, database, collection_path, collection_thumbs_path) { + return new Promise(function (resolve, reject) { + var queries = []; + queries.push(images_query(maybe_where)); + database.queries_async(queries).then(res => { + var photos = []; + if (res && Array.isArray(res)) { + res.forEach(row => { + var imagepath = process.env.PUBLIC_URL + collection_path + "/" + res[0]["relativePath"] + "/" + res[0]["name"]; + var thumbpath = process.env.PUBLIC_URL + collection_thumbs_path + "/" + res[0]["uniqueHash"] + ".jpg"; + photos.push(create_photo(res[0]["id"], res[0]["name"], imagepath, thumbpath)); + }); + } + resolve(photos); + }); + }); +} \ No newline at end of file