123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- package movies
- import (
- "encoding/json"
- "strconv"
- "strings"
- )
- type Movie struct {
- Title string
- Director string
- Poster string
- Rating *Rating
- IMDBID string
- Country string
- Year string
- Runtime string
- Files []string
- MovieFile string
- Subtitles string
- OMDB OMDBMovie
- }
- type Rating struct {
- Note float64
- Votes int64
- }
- type OMDBMovie struct {
- Title string
- Year string
- Rated string
- Released string
- Runtime string
- Genre string
- Director string
- Writer string
- Actors string
- Plot string
- Language string
- Country string
- Awards string
- Poster string
- Ratings []OMDBRating
- Metascore string
- IMDBRating string `json: "imdbRating"`
- IMDBVotes string `json: "imdbVotes"`
- IMDBID string `json: "imdbID"`
- Type string
- DVD string
- BoxOffice string
- Production string
- Website string
- Response string
- }
- type OMDBRating struct {
- Source, Value string
- }
- func Unmarshal(b []byte) (*Movie, error) {
- var m Movie
- if err := json.Unmarshal(b, &m); err != nil {
- return nil, err
- }
- if err := m.FillFromOMDB(); err != nil {
- return nil, err
- }
- return &m, nil
- }
- func UnmarshalFromOMDB(b []byte) (*Movie, error) {
- var omdb OMDBMovie
- if err := json.Unmarshal(b, &omdb); err != nil {
- return nil, err
- }
- m := &Movie{
- OMDB: omdb,
- }
- if err := m.FillFromOMDB(); err != nil {
- return nil, err
- }
- return m, nil
- }
- func (m *Movie) FillFromOMDB() error {
- if m.Title == "" {
- m.Title = m.OMDB.Title
- }
- if m.Director == "" {
- m.Director = m.OMDB.Director
- }
- if m.Poster == "" {
- m.Poster = m.OMDB.Poster
- }
- if m.IMDBID == "" {
- m.IMDBID = m.OMDB.IMDBID
- }
- if m.Country == "" {
- m.Country = m.OMDB.Country
- }
- if m.Year == "" {
- m.Year = m.OMDB.Year
- }
- if m.Runtime == "" {
- m.Runtime = m.OMDB.Runtime
- }
- if m.Rating == nil {
- m.Rating = &Rating{}
- if note, err := strconv.ParseFloat(m.OMDB.IMDBRating, 64); err == nil {
- m.Rating.Note = note
- }
- if votes, err := strconv.ParseInt(strings.ReplaceAll(m.OMDB.IMDBVotes, ",", ""), 10, 64); err == nil {
- m.Rating.Votes = votes
- }
- }
- return nil
- }
|