I intend to use this privately for music organization.

helpers.moon 1.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import trim from require "lapis.util"
  2. import Tracks from require "models"
  3. process_tags = (tags_str) ->
  4. -- split into a table to garuntee uniqueness
  5. unique = {}
  6. for tag in tags_str\gmatch "%S+"
  7. unique[tag\lower!] = true
  8. -- place back into an array
  9. taglist = {}
  10. for tag in pairs unique
  11. table.insert taglist, tag
  12. table.sort taglist
  13. return " #{table.concat taglist, " "} "
  14. update_track = (user_input) ->
  15. updates = {}
  16. -- automatic tags
  17. for field in *{"artist", "mood", "link", "genre"}
  18. if user_input[field] and #user_input[field] > 0
  19. if user_input.tags
  20. user_input.tags ..= " #{field}:#{user_input[field]\gsub "%s+", "_"}"
  21. else
  22. user_input.tags = "#{field}:#{user_input[field]\gsub "%s+", "_"}"
  23. -- update all fields
  24. for field in pairs Tracks.fields
  25. if user_input[field]
  26. switch field
  27. when "status"
  28. updates.status = tonumber user_input.status
  29. when "quality"
  30. updates.quality = tonumber user_input.quality
  31. when "tags"
  32. updates.tags = process_tags user_input.tags
  33. when "id"
  34. nil -- IDs cannot be modified
  35. else
  36. updates[field] = trim user_input[field]
  37. if user_input.id
  38. if track = Tracks\find id: tonumber user_input.id
  39. return track\update updates
  40. else
  41. return Tracks\create updates
  42. return {
  43. :process_tags
  44. :update_track
  45. create_track: update_track
  46. }