show original filename
Marco Andronaco andronacomarco@gmail.com
Sat, 02 Mar 2024 16:07:12 +0100
4 files changed,
43 insertions(+),
22 deletions(-)
M
cache/api.go
→
cache/api.go
@@ -30,6 +30,7 @@ type Entry struct {
FileID string `json:"id"` Month string `json:"date"` Name string `json:"name"` + FileName string `json:"filename"` FilePath string `json:"content"` }@@ -126,7 +127,13 @@ if err != nil {
log.Println("Error while parsing the following time and date string:", dateString) date = time.Now() } - rows[i] = Entry{row[3].(string)[33:], date.Format("2006-01"), row[1].(string), ""} + rows[i] = Entry{ + FileID: row[3].(string)[33:], + Month: date.Format("2006-01"), + Name: row[1].(string), + FileName: "", + FilePath: "", + } } return rows, nil }@@ -141,9 +148,8 @@ fileInfo, err := srv.Files.Get(fileID).Fields("name").Do()
if err != nil { return "", err } - fileExt := filepath.Ext(fileInfo.Name) - fileName := fileID + fileExt + fileName := fileID + filenameSeparator + fileInfo.Name filePath := filepath.Join(CachePath, fileName) out, err := os.Create(filePath) if err != nil {@@ -162,5 +168,5 @@ if err != nil {
return "", err } - return fileExt, nil + return fileName, nil }
M
cache/cache.go
→
cache/cache.go
@@ -9,7 +9,10 @@ "strings"
"time" ) -const CachePath = "art" +const ( + CachePath = "art" + filenameSeparator = "-_-_-_-_-_" +) type UpdateDBPayload struct { LastUpdated string `json:"timestamp"`@@ -24,8 +27,9 @@ googleApi GoogleAPI
} type fileDetails struct { - FileName string - Extension string + FileName string + OriginalFileName string + Extension string } func filter[T any](ss []T, test func(T) bool) (ret []T) {@@ -52,10 +56,12 @@
fileName := info.Name() extension := filepath.Ext(fileName) fileNameWithoutExt := strings.TrimSuffix(fileName, extension) + originalFileName := strings.Split(fileNameWithoutExt, filenameSeparator)[1] file := fileDetails{ - FileName: fileNameWithoutExt, - Extension: extension, + FileName: fileNameWithoutExt, + OriginalFileName: originalFileName, + Extension: extension, } files = append(files, file)@@ -71,26 +77,27 @@ }
func isCached(cachedEntries []fileDetails, target string) (bool, string) { for _, file := range cachedEntries { - if file.FileName == target { - return true, file.Extension + fileId := strings.Split(file.FileName, filenameSeparator)[0] + if fileId == target { + return true, file.FileName + file.Extension } } return false, "" } func handleEntry(entry *Entry, db *DB) string { - isFileCached, ext := isCached(db.cachedEntries, entry.FileID) + isFileCached, fileName := isCached(db.cachedEntries, entry.FileID) if isFileCached { log.Println(entry.FileID, "is cached.") - return ext + return fileName } log.Println(entry.FileID, "is not cached. Downloading.") - ext, err := getFile(&db.googleApi, entry.FileID, CachePath) + fileName, err := getFile(&db.googleApi, entry.FileID, CachePath) if err != nil { log.Println("Could not download file", entry.FileID) } - return ext + return fileName } func InitDB(spreadsheetId string, spreadsheetRange string) *DB {@@ -135,8 +142,9 @@ }
for i := range res { e := &res[i] - ext := handleEntry(e, db) - e.FilePath = filepath.Join(CachePath, e.FileID+ext) + fileName := handleEntry(e, db) + e.FilePath = filepath.Join(CachePath, fileName) + e.FileName = strings.Split(fileName, filenameSeparator)[1] } return res, nil
M
static/script.js
→
static/script.js
@@ -62,13 +62,14 @@ return div.firstChild;
} function getNewCardHtml(element) { + originalFileName = element.filename.split const id = element.id, index = element.index, name = element.name, content = element.content, - filename = `${('0' + element.index).slice(-2)} - ${element.name}.png`, + text = `${element.name} → “${element.filename}”`, disabled = element.enabled == 0 ? " entry-disabled" : ""; - const html_string = Mustache.render("{{={| |}=}}" + fanart_template, { id, index, name, content, filename, disabled }); + const html_string = Mustache.render("{{={| |}=}}" + fanart_template, { id, index, name, content, text, disabled }); element.div = createElementFromHTML(html_string); element.canvas = element.div.getElementsByTagName("canvas")[0]; const ctx = element.canvas.getContext("2d");@@ -303,3 +304,9 @@ new_entries += data.new;
last_updated_link.innerText += ` (+${ new_entries })`; }); } + +function toClipBoard(id) { + const fanart = getFanart(id); + const clipboard_filename = `${('0' + fanart.index).slice(-2)} - ${fanart.name}.png`; + navigator.clipboard.writeText(clipboard_filename); +}
M
templates/index.html
→
templates/index.html
@@ -74,16 +74,16 @@ </main>
<footer> <div class="container"> <p>© <a href="https://linktr.ee/earthboundcafe">Earthbound Café</a>, realizzato da <a - href="https://birabittoh.github.io/">BiRabittoh</a>.</p> + href="https://birabittoh.is-a.dev/">BiRabittoh</a>.</p> </div> </footer> <template id="fanart-template"> <div class="col-lg-4 entry{| disabled |}" id="{| id |}" data-index="{| index |}"> <div class="card mb-4 box-shadow my-card"> <canvas class="card-img-top entry-img" id="{| id |}" data-name="{| name |}" data-content="{| content |}" - data-filename="{| filename |}"></canvas> + data-text="{| text |}"></canvas> <div class="card-body"> - <a class="card-text" title="Clicca per copiare." onclick="navigator.clipboard.writeText(this.innerText);">{| filename |}</a> + <a class="card-text" title="Clicca per copiare." onclick="toClipBoard('{| id |}');">{| text |}</a> <div class="d-flex justify-content-between align-items-center card-controls"> <div class="btn-group"> <button class="btn btn-sm btn-outline-secondary" onclick="moveUpDown('{| id |}', -1);">{{ .Emoji.Prev }}</button>