From 10a66adb7cc2dc88fe57e27d9641a14427ca28ce Mon Sep 17 00:00:00 2001 From: Tangent Date: Wed, 17 Apr 2019 22:08:09 -0700 Subject: [PATCH] adding new fields --- .gitignore | 1 + app.moon | 19 +++++++++++++++++++ import/.nomedia | 0 migrations.moon | 16 +++++++++++++++- models/Tracks.moon | 23 +++++++++++++++++++++++ static/links/.nomedia | 0 views/index.moon | 16 ++++++++-------- views/tracks.moon | 43 +++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 109 insertions(+), 9 deletions(-) create mode 100644 import/.nomedia create mode 100644 static/links/.nomedia create mode 100644 views/tracks.moon diff --git a/.gitignore b/.gitignore index 77879d0..d150a74 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ *_temp/ logs/ import/ +static/links/ nginx.conf.compiled diff --git a/app.moon b/app.moon index b9e3790..47cb4f9 100644 --- a/app.moon +++ b/app.moon @@ -7,6 +7,25 @@ import Tracks from require "models" class extends lapis.Application "/console": console.make! + [tracks: "/tracks(/:order[%a])(/:asc_desc[%u])(/:page[%d])"]: => + @order = tostring(@params.order)\lower! + -- validate order field + @order = "id" unless Tracks.fields[@order] + @asc_desc = tostring(@params.asc_desc)\upper! + -- descending or ascending only, ascending default + @asc_desc = "ASC" if @asc_desc != "DESC" + @page = tonumber(@params.page) or 1 + + tracks = Tracks\paginated "* ORDER BY ? ?", @order, @asc_desc, per_page: 32 + @last_page = tracks\num_pages! + -- validate page + if @page < 1 + return redirect_to: @url_for "tracks", order: @order, asc_desc: @asc_desc, page: 1 + if @page > @last_page + return redirect_to: @url_for "tracks", order: @order, asc_desc: @asc_desc, page: @last_page + @tracks = tracks\get_page @page + return render: true + [index: "/(:page[%d])"]: respond_to { GET: => tracks = Tracks\paginated "* ORDER BY id", per_page: 32 diff --git a/import/.nomedia b/import/.nomedia new file mode 100644 index 0000000..e69de29 diff --git a/migrations.moon b/migrations.moon index 1a03221..712409d 100644 --- a/migrations.moon +++ b/migrations.moon @@ -1,4 +1,4 @@ -import create_table, types from require "lapis.db.schema" +import create_table, rename_column, add_column, types from require "lapis.db.schema" { [1]: => @@ -9,4 +9,18 @@ import create_table, types from require "lapis.db.schema" { "url", types.text null: true } { "status", types.integer default: 1 } } + [2]: => + rename_column "tracks", "name", "title" + rename_column "tracks", "url", "link" + for column in *{ + { "art_url", types.text null: true } + { "file_url", types.text null: true } + { "file_size", types.integer null: true } + { "album", types.text null: true } + { "genre", types.text null: true } + { "tags", types.text default: " untagged " } + { "quality", types.integer default: 1 } + { "mood", types.text null: true } + } + add_column "tracks", unpack column } diff --git a/models/Tracks.moon b/models/Tracks.moon index 5c7af1b..3e0ac9e 100644 --- a/models/Tracks.moon +++ b/models/Tracks.moon @@ -9,3 +9,26 @@ class Tracks extends Model ignored: 5 imported: 6 } + @qualities: enum { + not_available: 1 + lossless: 2 + high: 3 + acceptable: 4 + low: 5 + unacceptable: 6 + } + + @fields = { + id: true + artist: true + title: true + link: true + status: true + art_url: true + file_url: true + file_size: true + album: true + genre: true + tags: true + quality: true + } diff --git a/static/links/.nomedia b/static/links/.nomedia new file mode 100644 index 0000000..e69de29 diff --git a/views/index.moon b/views/index.moon index 1489c1e..9a74975 100644 --- a/views/index.moon +++ b/views/index.moon @@ -11,8 +11,8 @@ class extends Widget element "table", -> tr -> th "Artist" - th "Name" - th "URL" + th "Title" + th "Link" th "Status" th "✓" @@ -24,14 +24,14 @@ class extends Widget enctype: "multipart/form-data" }, -> td -> input type: "text", name: "artist", value: track.artist - td -> input type: "text", name: "name", value: track.name + td -> input type: "text", name: "title", value: track.title td -> - if track.url and #track.url > 0 - a href: track.url, "*" + if track.link and #track.link > 0 + a href: track.link, "*" else text "+" text " " - input type: "text", name: "url", value: track.url + input type: "text", name: "link", value: track.link td -> element "select", name: "status", -> for status in *Tracks.statuses @@ -50,10 +50,10 @@ class extends Widget enctype: "multipart/form-data" }, -> td -> input type: "text", name: "artist", placeholder: "artist" - td -> input type: "text", name: "name", placeholder: "name" + td -> input type: "text", name: "title", placeholder: "title" td -> raw "   " - input type: "text", name: "url", placeholder: "url" + input type: "text", name: "link", placeholder: "link" td -> element "select", name: "status", -> for status in *Tracks.statuses diff --git a/views/tracks.moon b/views/tracks.moon new file mode 100644 index 0000000..7b84108 --- /dev/null +++ b/views/tracks.moon @@ -0,0 +1,43 @@ +import Widget from require "lapis.html" + +import Tracks from require "models" + +class extends Widget + @menu: => + div -> + if @page != 1 + a href: @url_for("tracks", order: @order, asc_desc: @asc_desc, page: 1), "<<" + raw " " + a href: @url_for("tracks", order: @order, asc_desc: @asc_desc, page: @page - 1), "<" + raw " " + if @page != @last_page + a href: @url_for("tracks", order: @order, asc_desc: @asc_desc, page: @page + 1), ">" + raw " " + a href: @url_for("tracks", order: @order, asc_desc: @asc_desc, page: @last_page), ">>" + content: => + @menu! + div -> + element "table", -> + tr -> + th "Title" + th "Artist" + th "Genre" + th "Mood" + th "Album" + th "Link" + th "Status" + th "Quality" + + for track in *@tracks + tr -> + td track.title + td track.artist + td track.genre + td track.mood + td track.album + td -> + if track.link and #track.link > 0 + a href: track.link, track.link + td Tracks.statuses[track.status] + td Tracks.qualities[track.quality] + @menu!