86 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package render
 | 
						|
 | 
						|
import (
 | 
						|
	"github.com/aditya-K2/gomp/utils"
 | 
						|
	"os"
 | 
						|
	"strings"
 | 
						|
 | 
						|
	"github.com/bogem/id3v2"
 | 
						|
	"github.com/mewkiz/flac"
 | 
						|
	"github.com/mewkiz/flac/meta"
 | 
						|
	"github.com/spf13/viper"
 | 
						|
)
 | 
						|
 | 
						|
func GetMp3Image(songPath, imagePath string) string {
 | 
						|
	tag, err := id3v2.Open(songPath, id3v2.Options{Parse: true})
 | 
						|
	if err != nil {
 | 
						|
		return ""
 | 
						|
	}
 | 
						|
	defer tag.Close()
 | 
						|
	if err != nil {
 | 
						|
		return ""
 | 
						|
	}
 | 
						|
	// Read tags.
 | 
						|
	Frames := tag.GetFrames(tag.CommonID("Attached picture"))
 | 
						|
	var ImageData []byte
 | 
						|
	for _, er := range Frames {
 | 
						|
		pic, ok := er.(id3v2.PictureFrame)
 | 
						|
		if ok {
 | 
						|
			for _, i := range pic.Picture {
 | 
						|
				ImageData = append(ImageData, byte(i))
 | 
						|
			}
 | 
						|
			imageHandler, err := os.Create(imagePath)
 | 
						|
			if err != nil {
 | 
						|
				return ""
 | 
						|
			} else {
 | 
						|
				imageHandler.Write(ImageData)
 | 
						|
				return imagePath
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return ""
 | 
						|
}
 | 
						|
 | 
						|
func GetFlacImage(songPath, imagePath string) string {
 | 
						|
	stream, err := flac.ParseFile(songPath)
 | 
						|
	if err != nil {
 | 
						|
		return ""
 | 
						|
	}
 | 
						|
	defer stream.Close()
 | 
						|
	for _, block := range stream.Blocks {
 | 
						|
		if block.Type == meta.TypePicture {
 | 
						|
			pic := block.Body.(*meta.Picture)
 | 
						|
			if pic.Type == 3 {
 | 
						|
				imageHandler, err := os.Create(imagePath)
 | 
						|
				if err != nil {
 | 
						|
					return ""
 | 
						|
				}
 | 
						|
				imageHandler.Write(pic.Data)
 | 
						|
				return imagePath
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return ""
 | 
						|
}
 | 
						|
 | 
						|
func ExtractImageFromFile(uri string, imagePath string) string {
 | 
						|
	_i := imagePath
 | 
						|
	if strings.HasSuffix(uri, ".mp3") {
 | 
						|
		imagePath := GetMp3Image(uri, imagePath)
 | 
						|
		if imagePath == "" {
 | 
						|
			utils.Copy(viper.GetString("DEFAULT_IMAGE_PATH"), _i)
 | 
						|
			return viper.GetString("DEFAULT_IMAGE_PATH")
 | 
						|
		}
 | 
						|
	} else if strings.HasSuffix(uri, ".flac") {
 | 
						|
		imagePath := GetFlacImage(uri, imagePath)
 | 
						|
		if imagePath == "" {
 | 
						|
			utils.Copy(viper.GetString("DEFAULT_IMAGE_PATH"), _i)
 | 
						|
			return viper.GetString("DEFAULT_IMAGE_PATH")
 | 
						|
		}
 | 
						|
	} else {
 | 
						|
		utils.Copy(viper.GetString("DEFAULT_IMAGE_PATH"), _i)
 | 
						|
		return viper.GetString("DEFAULT_IMAGE_PATH")
 | 
						|
	}
 | 
						|
	return imagePath
 | 
						|
}
 |