all repos — artbound-go @ 90a9728820c8f5aa00e6e1243de7fce39e2e9558

The official administration panel for ArtBound, by EarthBound Café.

show original filename
Marco Andronaco andronacomarco@gmail.com
Sat, 02 Mar 2024 16:07:12 +0100
commit

90a9728820c8f5aa00e6e1243de7fce39e2e9558

parent

7831364a6988baad6f2f276d483268519f9bc82a

4 files changed, 43 insertions(+), 22 deletions(-)

jump to
M cache/api.gocache/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.gocache/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.jsstatic/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.htmltemplates/index.html

@@ -74,16 +74,16 @@ </main>

<footer> <div class="container"> <p>&copy; <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>