Browse Source

adding new fields

Tangent 5 years ago
parent
commit
10a66adb7c
8 changed files with 109 additions and 9 deletions
  1. 1
    0
      .gitignore
  2. 19
    0
      app.moon
  3. 0
    0
      import/.nomedia
  4. 15
    1
      migrations.moon
  5. 23
    0
      models/Tracks.moon
  6. 0
    0
      static/links/.nomedia
  7. 8
    8
      views/index.moon
  8. 43
    0
      views/tracks.moon

+ 1
- 0
.gitignore View File

@@ -2,4 +2,5 @@
2 2
 *_temp/
3 3
 logs/
4 4
 import/
5
+static/links/
5 6
 nginx.conf.compiled

+ 19
- 0
app.moon View File

@@ -7,6 +7,25 @@ import Tracks from require "models"
7 7
 class extends lapis.Application
8 8
   "/console": console.make!
9 9
 
10
+  [tracks: "/tracks(/:order[%a])(/:asc_desc[%u])(/:page[%d])"]: =>
11
+    @order = tostring(@params.order)\lower!
12
+    -- validate order field
13
+    @order = "id" unless Tracks.fields[@order]
14
+    @asc_desc = tostring(@params.asc_desc)\upper!
15
+    -- descending or ascending only, ascending default
16
+    @asc_desc = "ASC" if @asc_desc != "DESC"
17
+    @page = tonumber(@params.page) or 1
18
+
19
+    tracks = Tracks\paginated "* ORDER BY ? ?", @order, @asc_desc, per_page: 32
20
+    @last_page = tracks\num_pages!
21
+    -- validate page
22
+    if @page < 1
23
+      return redirect_to: @url_for "tracks", order: @order, asc_desc: @asc_desc, page: 1
24
+    if @page > @last_page
25
+      return redirect_to: @url_for "tracks", order: @order, asc_desc: @asc_desc, page: @last_page
26
+    @tracks = tracks\get_page @page
27
+    return render: true
28
+
10 29
   [index: "/(:page[%d])"]: respond_to {
11 30
     GET: =>
12 31
       tracks = Tracks\paginated "* ORDER BY id", per_page: 32

+ 0
- 0
import/.nomedia View File


+ 15
- 1
migrations.moon View File

@@ -1,4 +1,4 @@
1
-import create_table, types from require "lapis.db.schema"
1
+import create_table, rename_column, add_column, types from require "lapis.db.schema"
2 2
 
3 3
 {
4 4
   [1]: =>
@@ -9,4 +9,18 @@ import create_table, types from require "lapis.db.schema"
9 9
       { "url", types.text null: true }
10 10
       { "status", types.integer default: 1 }
11 11
     }
12
+  [2]: =>
13
+    rename_column "tracks", "name", "title"
14
+    rename_column "tracks", "url", "link"
15
+    for column in *{
16
+      { "art_url", types.text null: true }
17
+      { "file_url", types.text null: true }
18
+      { "file_size", types.integer null: true }
19
+      { "album", types.text null: true }
20
+      { "genre", types.text null: true }
21
+      { "tags", types.text default: " untagged " }
22
+      { "quality", types.integer default: 1 }
23
+      { "mood", types.text null: true }
24
+    }
25
+      add_column "tracks", unpack column
12 26
 }

+ 23
- 0
models/Tracks.moon View File

@@ -9,3 +9,26 @@ class Tracks extends Model
9 9
     ignored: 5
10 10
     imported: 6
11 11
   }
12
+  @qualities: enum {
13
+    not_available: 1
14
+    lossless: 2
15
+    high: 3
16
+    acceptable: 4
17
+    low: 5
18
+    unacceptable: 6
19
+  }
20
+
21
+  @fields = {
22
+    id: true
23
+    artist: true
24
+    title: true
25
+    link: true
26
+    status: true
27
+    art_url: true
28
+    file_url: true
29
+    file_size: true
30
+    album: true
31
+    genre: true
32
+    tags: true
33
+    quality: true
34
+  }

+ 0
- 0
static/links/.nomedia View File


+ 8
- 8
views/index.moon View File

@@ -11,8 +11,8 @@ class extends Widget
11 11
     element "table", ->
12 12
       tr ->
13 13
         th "Artist"
14
-        th "Name"
15
-        th "URL"
14
+        th "Title"
15
+        th "Link"
16 16
         th "Status"
17 17
         th "✓"
18 18
 
@@ -24,14 +24,14 @@ class extends Widget
24 24
             enctype: "multipart/form-data"
25 25
           }, ->
26 26
             td -> input type: "text", name: "artist", value: track.artist
27
-            td -> input type: "text", name: "name", value: track.name
27
+            td -> input type: "text", name: "title", value: track.title
28 28
             td ->
29
-              if track.url and #track.url > 0
30
-                a href: track.url, "*"
29
+              if track.link and #track.link > 0
30
+                a href: track.link, "*"
31 31
               else
32 32
                 text "+"
33 33
               text " "
34
-              input type: "text", name: "url", value: track.url
34
+              input type: "text", name: "link", value: track.link
35 35
             td ->
36 36
               element "select", name: "status", ->
37 37
                 for status in *Tracks.statuses
@@ -50,10 +50,10 @@ class extends Widget
50 50
           enctype: "multipart/form-data"
51 51
         }, ->
52 52
           td -> input type: "text", name: "artist", placeholder: "artist"
53
-          td -> input type: "text", name: "name", placeholder: "name"
53
+          td -> input type: "text", name: "title", placeholder: "title"
54 54
           td ->
55 55
             raw "&nbsp;&nbsp;&nbsp;"
56
-            input type: "text", name: "url", placeholder: "url"
56
+            input type: "text", name: "link", placeholder: "link"
57 57
           td ->
58 58
             element "select", name: "status", ->
59 59
               for status in *Tracks.statuses

+ 43
- 0
views/tracks.moon View File

@@ -0,0 +1,43 @@
1
+import Widget from require "lapis.html"
2
+
3
+import Tracks from require "models"
4
+
5
+class extends Widget
6
+  @menu: =>
7
+    div ->
8
+      if @page != 1
9
+        a href: @url_for("tracks", order: @order, asc_desc: @asc_desc, page: 1), "<<"
10
+        raw "&nbsp;"
11
+        a href: @url_for("tracks", order: @order, asc_desc: @asc_desc, page: @page - 1), "<"
12
+        raw "&nbsp;"
13
+      if @page != @last_page
14
+        a href: @url_for("tracks", order: @order, asc_desc: @asc_desc, page: @page + 1), ">"
15
+        raw "&nbsp;"
16
+        a href: @url_for("tracks", order: @order, asc_desc: @asc_desc, page: @last_page), ">>"
17
+  content: =>
18
+    @menu!
19
+    div ->
20
+      element "table", ->
21
+        tr ->
22
+          th "Title"
23
+          th "Artist"
24
+          th "Genre"
25
+          th "Mood"
26
+          th "Album"
27
+          th "Link"
28
+          th "Status"
29
+          th "Quality"
30
+
31
+        for track in *@tracks
32
+          tr ->
33
+            td track.title
34
+            td track.artist
35
+            td track.genre
36
+            td track.mood
37
+            td track.album
38
+            td ->
39
+              if track.link and #track.link > 0
40
+                a href: track.link, track.link
41
+            td Tracks.statuses[track.status]
42
+            td Tracks.qualities[track.quality]
43
+    @menu!