definitions.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. # -*- coding: utf-8 -*-
  2. import process as md
  3. import re
  4. from os.path import normpath
  5. from ..monitor.pure import format_length, file_md5, is_airtime_recorded, \
  6. no_extension_basename
  7. defs_loaded = False
  8. MAX_SIGNED_INT = 2**31-1
  9. def is_defs_loaded():
  10. global defs_loaded
  11. return defs_loaded
  12. def load_definitions():
  13. with md.metadata('MDATA_KEY_DURATION') as t:
  14. t.default(u'0.0')
  15. t.depends('length')
  16. t.translate(lambda k: format_length(k['length']))
  17. with md.metadata('MDATA_KEY_CUE_IN') as t:
  18. t.default(u'0.0')
  19. t.depends('cuein')
  20. t.translate(lambda k: format_length(k['cuein']))
  21. with md.metadata('MDATA_KEY_CUE_OUT') as t:
  22. t.default(u'0.0')
  23. t.depends('cueout')
  24. t.translate(lambda k: format_length(k['cueout']))
  25. with md.metadata('MDATA_KEY_MIME') as t:
  26. t.default(u'')
  27. t.depends('mime')
  28. # Is this necessary?
  29. t.translate(lambda k: k['mime'].replace('audio/vorbis','audio/ogg'))
  30. with md.metadata('MDATA_KEY_BITRATE') as t:
  31. t.default(u'')
  32. t.depends('bitrate')
  33. t.translate(lambda k: k['bitrate'])
  34. t.max_value(MAX_SIGNED_INT)
  35. with md.metadata('MDATA_KEY_SAMPLERATE') as t:
  36. t.default(u'0')
  37. t.depends('sample_rate')
  38. t.translate(lambda k: k['sample_rate'])
  39. t.max_value(MAX_SIGNED_INT)
  40. with md.metadata('MDATA_KEY_FTYPE') as t:
  41. t.depends('ftype') # i don't think this field even exists
  42. t.default(u'audioclip')
  43. t.translate(lambda k: k['ftype']) # but just in case
  44. with md.metadata("MDATA_KEY_CREATOR") as t:
  45. t.depends("artist")
  46. # A little kludge to make sure that we have some value for when we parse
  47. # MDATA_KEY_TITLE
  48. t.default(u"")
  49. t.max_length(512)
  50. with md.metadata("MDATA_KEY_SOURCE") as t:
  51. t.depends("album")
  52. t.max_length(512)
  53. with md.metadata("MDATA_KEY_GENRE") as t:
  54. t.depends("genre")
  55. t.max_length(64)
  56. with md.metadata("MDATA_KEY_MOOD") as t:
  57. t.depends("mood")
  58. t.max_length(64)
  59. with md.metadata("MDATA_KEY_TRACKNUMBER") as t:
  60. t.depends("tracknumber")
  61. t.max_value(MAX_SIGNED_INT)
  62. with md.metadata("MDATA_KEY_BPM") as t:
  63. t.depends("bpm")
  64. t.max_value(MAX_SIGNED_INT)
  65. with md.metadata("MDATA_KEY_LABEL") as t:
  66. t.depends("organization")
  67. t.max_length(512)
  68. with md.metadata("MDATA_KEY_COMPOSER") as t:
  69. t.depends("composer")
  70. t.max_length(512)
  71. with md.metadata("MDATA_KEY_ENCODER") as t:
  72. t.depends("encodedby")
  73. t.max_length(512)
  74. with md.metadata("MDATA_KEY_CONDUCTOR") as t:
  75. t.depends("conductor")
  76. t.max_length(512)
  77. with md.metadata("MDATA_KEY_YEAR") as t:
  78. t.depends("date")
  79. t.max_length(16)
  80. with md.metadata("MDATA_KEY_URL") as t:
  81. t.depends("website")
  82. with md.metadata("MDATA_KEY_ISRC") as t:
  83. t.depends("isrc")
  84. t.max_length(512)
  85. with md.metadata("MDATA_KEY_COPYRIGHT") as t:
  86. t.depends("copyright")
  87. t.max_length(512)
  88. with md.metadata("MDATA_KEY_ORIGINAL_PATH") as t:
  89. t.depends('path')
  90. t.translate(lambda k: unicode(normpath(k['path'])))
  91. with md.metadata("MDATA_KEY_MD5") as t:
  92. t.depends('path')
  93. t.optional(False)
  94. t.translate(lambda k: file_md5(k['path'], max_length=100))
  95. # owner is handled differently by (by events.py)
  96. # MDATA_KEY_TITLE is the annoying special case b/c we sometimes read it
  97. # from file name
  98. # must handle 3 cases:
  99. # 1. regular case (not recorded + title is present)
  100. # 2. title is absent (read from file)
  101. # 3. recorded file
  102. def tr_title(k):
  103. #unicode_unknown = u"unknown"
  104. new_title = u""
  105. if is_airtime_recorded(k) or k['title'] != u"":
  106. new_title = k['title']
  107. else:
  108. default_title = no_extension_basename(k['path'])
  109. default_title = re.sub(r'__\d+\.',u'.', default_title)
  110. # format is: track_number-title-123kbps.mp3
  111. m = re.match(".+?-(?P<title>.+)-(\d+kbps|unknown)$", default_title)
  112. if m: new_title = m.group('title')
  113. else: new_title = re.sub(r'-\d+kbps$', u'', default_title)
  114. return new_title
  115. with md.metadata('MDATA_KEY_TITLE') as t:
  116. # Need to know MDATA_KEY_CREATOR to know if show was recorded. Value is
  117. # defaulted to "" from definitions above
  118. t.depends('title','MDATA_KEY_CREATOR','path')
  119. t.optional(False)
  120. t.translate(tr_title)
  121. t.max_length(512)
  122. with md.metadata('MDATA_KEY_LABEL') as t:
  123. t.depends('label')
  124. t.max_length(512)