Skip to content
Snippets Groups Projects
Select Git revision
  • ce3928f7e64d4b09d05f0bd1810266e30a1d710f
  • master default protected
  • v1.4.5
  • v1.4.4
  • v1.4.3
  • v1.4.2
  • v1.4.1
  • v1.4.0
  • v1.3.10
  • v1.3.9
  • v1.3.8
  • v1.3.7
  • v1.3.6
  • v1.3.5
  • v1.3.4
  • v1.3.3
  • v1.3.2
  • v1.3.1
  • v1.3.0
  • v1.2.9
  • v1.2.8
  • v1.2.7
22 results

image.go

Blame
  • image.go 13.02 KiB
    package store
    
    import (
    	"bytes"
    	"crypto/sha256"
    	"encoding/json"
    	"fmt"
    	"github.com/nfnt/resize"
    	log "github.com/sirupsen/logrus"
    	"image"
    	_ "image/gif"
    	"image/jpeg"
    	_ "image/png"
    	"os"
    )
    
    const ImageRootPageVariant = "root"
    
    // Image represents metadata of an image.
    type Image struct {
    	Snowflake             string `json:"snowflake"`
    	Hash                  string `json:"hash"`
    	Type                  string `json:"type"`
    	User                  string `json:"user"`
    	Source                string `json:"source"`
    	Parent                string `json:"parent"`
    	Child                 string `json:"child"`
    	Commentary            string `json:"commentary"`
    	CommentaryTranslation string `json:"commentary_translation"`
    }
    
    // Images returns a slice of image hashes.
    func (s *Store) Images() []string {
    	var images []string
    	if entries, err := os.ReadDir(s.ImagesDir()); err != nil {
    		s.fatalClose(fmt.Sprintf("Error reading first level image directory, %s", err))
    	} else {
    		for _, entry := range entries {
    			if entry.IsDir() {
    				var subEntries []os.DirEntry
    				if subEntries, err = os.ReadDir(s.ImagesDir() + "/" + entry.Name()); err != nil {
    					s.fatalClose(fmt.Sprintf("Error reading second level image directory %s, %s", entry.Name(), err))
    				} else {
    					for _, subEntry := range subEntries {
    						images = append(images, entry.Name()+subEntry.Name())
    					}
    				}
    			}
    		}
    	}
    	return images
    }
    
    // Image returns an image with specific hash.
    func (s *Store) Image(hash string) Image {
    	if !sha256Regex.MatchString(hash) || !s.file(s.ImageMetadataPath(hash)) {
    		return Image{}
    	}
    
    	s.getLock(hash).RLock()
    	defer s.getLock(hash).RUnlock()
    	return s.ImageMetadataRead(s.ImageMetadataPath(hash))
    }
    
    // ImageMetadataRead reads an image metadata file.
    func (s *Store) ImageMetadataRead(path string) Image {
    	var metadata Image
    	if payload, err := os.ReadFile(path); err != nil {
    		if os.IsNotExist(err) {
    			return Image{}