movies.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package movies
  2. import (
  3. "encoding/json"
  4. "strconv"
  5. "strings"
  6. )
  7. type Movie struct {
  8. Title string
  9. Director string
  10. Poster string
  11. Rating *Rating
  12. IMDBID string
  13. Country string
  14. Year string
  15. Runtime string
  16. Files []string
  17. MovieFile string
  18. Subtitles string
  19. OMDB OMDBMovie
  20. }
  21. type Rating struct {
  22. Note float64
  23. Votes int64
  24. }
  25. type OMDBMovie struct {
  26. Title string
  27. Year string
  28. Rated string
  29. Released string
  30. Runtime string
  31. Genre string
  32. Director string
  33. Writer string
  34. Actors string
  35. Plot string
  36. Language string
  37. Country string
  38. Awards string
  39. Poster string
  40. Ratings []OMDBRating
  41. Metascore string
  42. IMDBRating string `json: "imdbRating"`
  43. IMDBVotes string `json: "imdbVotes"`
  44. IMDBID string `json: "imdbID"`
  45. Type string
  46. DVD string
  47. BoxOffice string
  48. Production string
  49. Website string
  50. Response string
  51. }
  52. type OMDBRating struct {
  53. Source, Value string
  54. }
  55. func Unmarshal(b []byte) (*Movie, error) {
  56. var m Movie
  57. if err := json.Unmarshal(b, &m); err != nil {
  58. return nil, err
  59. }
  60. if err := m.FillFromOMDB(); err != nil {
  61. return nil, err
  62. }
  63. return &m, nil
  64. }
  65. func UnmarshalFromOMDB(b []byte) (*Movie, error) {
  66. var omdb OMDBMovie
  67. if err := json.Unmarshal(b, &omdb); err != nil {
  68. return nil, err
  69. }
  70. m := &Movie{
  71. OMDB: omdb,
  72. }
  73. if err := m.FillFromOMDB(); err != nil {
  74. return nil, err
  75. }
  76. return m, nil
  77. }
  78. func (m *Movie) FillFromOMDB() error {
  79. if m.Title == "" {
  80. m.Title = m.OMDB.Title
  81. }
  82. if m.Director == "" {
  83. m.Director = m.OMDB.Director
  84. }
  85. if m.Poster == "" {
  86. m.Poster = m.OMDB.Poster
  87. }
  88. if m.IMDBID == "" {
  89. m.IMDBID = m.OMDB.IMDBID
  90. }
  91. if m.Country == "" {
  92. m.Country = m.OMDB.Country
  93. }
  94. if m.Year == "" {
  95. m.Year = m.OMDB.Year
  96. }
  97. if m.Runtime == "" {
  98. m.Runtime = m.OMDB.Runtime
  99. }
  100. if m.Rating == nil {
  101. m.Rating = &Rating{}
  102. if note, err := strconv.ParseFloat(m.OMDB.IMDBRating, 64); err == nil {
  103. m.Rating.Note = note
  104. }
  105. if votes, err := strconv.ParseInt(strings.ReplaceAll(m.OMDB.IMDBVotes, ",", ""), 10, 64); err == nil {
  106. m.Rating.Votes = votes
  107. }
  108. }
  109. return nil
  110. }