From 40cfff339615d4a4af98db403ca334eff8e005b0 Mon Sep 17 00:00:00 2001
From: qwertyforce <44163887+qwertyforce@users.noreply.github.com>
Date: Sat, 21 Nov 2020 10:53:34 +0300
Subject: [PATCH] visually similar images
---
pages/image/[id].tsx | 14 +++++
pages/visually_similar/[id].tsx | 99 +++++++++++++++++++++++++++++++++
2 files changed, 113 insertions(+)
create mode 100644 pages/visually_similar/[id].tsx
diff --git a/pages/image/[id].tsx b/pages/image/[id].tsx
index 7d5d2b1..97dcbd3 100644
--- a/pages/image/[id].tsx
+++ b/pages/image/[id].tsx
@@ -12,6 +12,7 @@ import ErrorPage from 'next/error'
import CreateIcon from '@material-ui/icons/Create';
import Chip from '@material-ui/core/Chip';
import { useRouter } from 'next/router'
+import {promises as fs } from 'fs'
const useStyles = makeStyles((theme) => ({
root: {
@@ -90,6 +91,10 @@ export default function Image(props: any) {
Similar by color
+
@@ -113,6 +118,14 @@ export default function Image(props: any) {
export const getStaticProps: GetStaticProps = async (context) => {
if (context.params?.id) {
const img = await db_ops.image_ops.find_image_by_id(parseInt((context.params.id as string)))
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ let all_images_similaties:any= await fs.readFile("find_visually_similar_images/data.txt","utf-8")
+ all_images_similaties=JSON.parse(all_images_similaties)
+ let visually_similar_link=""
+ // console.log(all_images_similaties[(context.params.id as string)])
+ if(all_images_similaties[(context.params.id as string)]!==undefined){
+ visually_similar_link=`/visually_similar/${img[0].id}`
+ }
if (img.length === 1) {
const date = new Date(img[0].created_at)
const date_str = `${date.getDate()}.${date.getMonth() + 1}.${date.getFullYear()}`
@@ -130,6 +143,7 @@ export const getStaticProps: GetStaticProps = async (context) => {
date: date_str,
similar_by_tags_link:`/similar_by_tags/${img[0].id}`,
similar_by_color_link:`/similar_by_color/${img[0].id}`,
+ visually_similar_link:visually_similar_link,
upscaled:upscaled
},
revalidate: 5*60 //5 min
diff --git a/pages/visually_similar/[id].tsx b/pages/visually_similar/[id].tsx
new file mode 100644
index 0000000..185fdca
--- /dev/null
+++ b/pages/visually_similar/[id].tsx
@@ -0,0 +1,99 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+import React from "react";
+import Gallery from "react-photo-gallery";
+import { makeStyles } from '@material-ui/core/styles';
+import AppBar from '../../components/AppBar'
+import { GetStaticPaths } from 'next'
+import { useRouter } from 'next/router'
+import Photo from '../../components/Photo'
+import Link from '../../components/Link'
+import ErrorPage from 'next/error'
+import db_ops from '../../server/helpers/db_ops'
+import {promises as fs } from 'fs'
+
+const useStyles = makeStyles(() => ({
+ pagination: {
+ display: "flex",
+ justifyContent: 'center'
+ },
+ footer: {
+ display: "flex",
+ justifyContent: "center"
+ }
+}));
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+const MainPage = (props: any) => {
+ const classes = useStyles();
+ const router = useRouter()
+ if (router.isFallback) {
+ return
+ }
+ if (props.err) {
+ return
+ }
+ return (
+
+
+ {/*
+ // @ts-ignore */ }
+
{/* FIX THIS SHIT */}
+
+ About
+ Stats
+ Tags
+
+
+
+ )
+}
+
+export async function getStaticProps(context: any) {
+ const photos = []
+ if (context.params.id) {
+ let all_images_similaties: any = await fs.readFile("find_visually_similar_images/data.txt", "utf-8")
+ all_images_similaties = JSON.parse(all_images_similaties)
+ const similar_images_ids = all_images_similaties[(context.params.id as string)]
+ if (similar_images_ids) {
+ const similar_images = []
+ for (const image_id of similar_images_ids) {
+ const img = (await db_ops.image_ops.find_image_by_id(parseInt(image_id)))[0]
+ if(img){
+ similar_images.push({ id: img.id, width: img.width, height: img.height })
+ }
+ }
+ for (const image of similar_images) {
+ photos.push({
+ src: `/thumbnails/${image.id}.jpg`,
+ key: `/image/${image.id}`,
+ width: image.width,
+ height: image.height
+ })
+ }
+ return {
+ props: {
+ photos: photos
+ },
+ revalidate: 5 * 60 //5 min
+ }
+ }
+ }
+
+ return {
+ props: { err: true },
+ revalidate: 5 * 60 //5 min
+ }
+}
+
+export const getStaticPaths: GetStaticPaths = async () => {
+ const images = await db_ops.image_ops.get_all_images()
+ const paths = []
+ for (const image of images) {
+ paths.push({ params: { id: image.id.toString() } })
+ }
+ return {
+ paths: paths,
+ fallback: true
+ };
+}
+export default MainPage
+