moins de plantage sur EOF et n'ecrase le fichier que si le nouveau est plus gros
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"bufio"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
@@ -60,6 +61,17 @@ func timerToBytes(timer float64) int64 {
|
||||
return int64(128000. / 8. * timer)
|
||||
}
|
||||
|
||||
func isWriteMp3(filename string, newSize int64) bool {
|
||||
fileInfo, err := os.Stat(filename)
|
||||
// si le fichier n'existe pasn on peut ecrire le mp3
|
||||
if os.IsNotExist(err) {
|
||||
return true
|
||||
}
|
||||
// si le fichier existant est plus petit que le fichier qu'on souhaite créer, on l'ecrase
|
||||
fileSize := fileInfo.Size()
|
||||
return fileSize < newSize
|
||||
}
|
||||
|
||||
func cutAndSave(mp3File string, timerDebut float64, timerFin float64, artiste string, titre string) {
|
||||
octetDebut := timerToBytes(timerDebut)
|
||||
octetsFin := timerToBytes(timerFin)
|
||||
@@ -69,18 +81,22 @@ func cutAndSave(mp3File string, timerDebut float64, timerFin float64, artiste st
|
||||
// ouvrir le fichier
|
||||
f, err := os.Open(mp3File)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Erreur d'ouverture du fichier mp3 : %v", err)
|
||||
fmt.Fprintf(os.Stderr, "Erreur d'ouverture du fichier mp3 : %v\n", err)
|
||||
panic(err)
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
bufferSize := octetsFin - octetDebut
|
||||
|
||||
// créer un tampon pour stocker les octets lus
|
||||
tampon := make([]byte, octetsFin-octetDebut)
|
||||
tampon := make([]byte, bufferSize)
|
||||
|
||||
// lire les octets spécifiés à partir de la position spécifiée
|
||||
n, err := f.ReadAt(tampon, int64(octetDebut))
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Erreur de lecture du fichier mp3 de %d a %d soit %d octets: %v", octetDebut, octetsFin, n, err)
|
||||
// en cas d'erreur EOF, on continue comme si de rien n'était (il est possible qu'on tente
|
||||
//d'accedeer un pu plus loin que la fin du fichier avec le delaiFin, ce n'est pas grave ça passera la fois d'apres )
|
||||
if err != nil && !errors.Is(err, io.EOF) {
|
||||
fmt.Fprintf(os.Stderr, "Erreur de lecture du fichier mp3 de %d a %d soit %d octets: %v\n", octetDebut, octetsFin, n, err)
|
||||
panic(err)
|
||||
}
|
||||
|
||||
@@ -92,19 +108,20 @@ func cutAndSave(mp3File string, timerDebut float64, timerFin float64, artiste st
|
||||
titre = strings.ReplaceAll(titre, "/", "_")
|
||||
|
||||
var outputFile string = fmt.Sprintf("%s.__.%s.mp3", artiste, titre)
|
||||
err = os.WriteFile(outputFile, tampon, 0644)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Erreur d'écriture du fichier mp3 du morceau: %v", err)
|
||||
panic(err)
|
||||
if isWriteMp3(outputFile, bufferSize) {
|
||||
err = os.WriteFile(outputFile, tampon, 0644)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Erreur d'écriture du fichier mp3 du morceau: %v\n", err)
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func Cut(mp3File string, indexFile string) {
|
||||
// Ouvrir le fichier index en lecture
|
||||
fichier, err := os.Open(indexFile)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Erreur d'ouverture du fichier index : %v", err)
|
||||
fmt.Fprintf(os.Stderr, "Erreur d'ouverture du fichier index : %v\n", err)
|
||||
panic(err)
|
||||
}
|
||||
defer fichier.Close()
|
||||
@@ -121,7 +138,7 @@ func Cut(mp3File string, indexFile string) {
|
||||
ligne := scanner.Text()
|
||||
timer, artiste, titre, err := GetInfo(ligne)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Erreur de récupération des infos de la ligne %s : %v", ligne, err)
|
||||
fmt.Fprintf(os.Stderr, "Erreur de récupération des infos de la ligne %s : %v\n", ligne, err)
|
||||
panic(err)
|
||||
}
|
||||
|
||||
@@ -138,7 +155,7 @@ func Cut(mp3File string, indexFile string) {
|
||||
|
||||
// Vérifier s'il y a eu une erreur lors de la lecture du fichier
|
||||
if err := scanner.Err(); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Erreur de lecture du fichier index : %v", err)
|
||||
fmt.Fprintf(os.Stderr, "Erreur de lecture du fichier index : %v\n", err)
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user