@@ -43,17 +43,20 @@ func NewSyncer(ctx context.Context, conf *appconfig.Config) (*Syncer, error) {
4343 logger : log ,
4444 imdbClient : imdbClient ,
4545 traktClient : traktClient ,
46- user : & user {
47- imdbLists : make (map [string ]entities.IMDbList , len (* conf .IMDb .Lists )),
48- imdbRatings : make (map [string ]entities.IMDbItem ),
49- traktLists : make (map [string ]entities.TraktList , len (* conf .IMDb .Lists )),
50- traktRatings : make (map [string ]entities.TraktItem ),
51- },
52- conf : conf .Sync ,
53- authless : * conf .IMDb .Auth == appconfig .IMDbAuthMethodNone ,
46+ user : & user {},
47+ conf : conf .Sync ,
48+ authless : * conf .IMDb .Auth == appconfig .IMDbAuthMethodNone ,
5449 }
55- for _ , lid := range * conf .IMDb .Lists {
56- syncer .user .imdbLists [lid ] = entities.IMDbList {ListID : lid }
50+ if * conf .Sync .Ratings {
51+ syncer .user .imdbRatings = make (map [string ]entities.IMDbItem )
52+ syncer .user .traktRatings = make (map [string ]entities.TraktItem )
53+ }
54+ if * conf .Sync .Lists || * conf .Sync .Watchlist {
55+ syncer .user .imdbLists = make (map [string ]entities.IMDbList , len (* conf .IMDb .Lists ))
56+ syncer .user .traktLists = make (map [string ]entities.TraktList , len (* conf .IMDb .Lists ))
57+ for _ , lid := range * conf .IMDb .Lists {
58+ syncer .user .imdbLists [lid ] = entities.IMDbList {ListID : lid }
59+ }
5760 }
5861 return syncer , nil
5962}
@@ -81,11 +84,9 @@ func (s *Syncer) Sync() error {
8184}
8285
8386func (s * Syncer ) hydrate () error {
84- lids := make ([]string , len (s .user .imdbLists ))
85- var i int
87+ lids := make ([]string , 0 , len (s .user .imdbLists ))
8688 for lid := range s .user .imdbLists {
87- lids [i ] = lid
88- i ++
89+ lids = append (lids , lid )
8990 }
9091 if * s .conf .Ratings {
9192 if err := s .imdbClient .RatingsExport (); err != nil {
@@ -183,52 +184,54 @@ func (s *Syncer) syncLists() error {
183184 }
184185 if ! * s .conf .Lists {
185186 s .logger .Info ("skipping lists sync" )
187+ }
188+ if ! * s .conf .Watchlist && ! * s .conf .Lists {
186189 return nil
187190 }
188- for _ , list := range s .user .imdbLists {
189- traktListSlug := entities .InferTraktListSlug (list .ListName )
190- diff := entities .ListDifference (list , s .user .traktLists [list .ListID ])
191- if list .IsWatchlist {
192- if len (diff ["add" ]) > 0 {
191+ for _ , imdbList := range s .user .imdbLists {
192+ diff := entities .ListDiff (imdbList , s .user .traktLists [imdbList .ListID ])
193+ if imdbList .IsWatchlist {
194+ if len (diff .Add ) > 0 {
193195 if syncMode := * s .conf .Mode ; syncMode == appconfig .SyncModeDryRun {
194- msg := fmt .Sprintf ("sync mode %s would have added %d trakt list item(s)" , syncMode , len (diff [ "add" ] ))
195- s .logger .Info (msg , slog .Any ("watchlist" , diff [ "add" ] ))
196+ msg := fmt .Sprintf ("sync mode %s would have added %d trakt list item(s)" , syncMode , len (diff . Add ))
197+ s .logger .Info (msg , slog .Any ("watchlist" , diff . Add ))
196198 continue
197199 }
198- if err := s .traktClient .WatchlistItemsAdd (diff [ "add" ] ); err != nil {
200+ if err := s .traktClient .WatchlistItemsAdd (diff . Add ); err != nil {
199201 return fmt .Errorf ("failure adding items to trakt watchlist: %w" , err )
200202 }
201203 }
202- if len (diff [ "remove" ] ) > 0 {
204+ if len (diff . Remove ) > 0 {
203205 if syncMode := * s .conf .Mode ; syncMode == appconfig .SyncModeDryRun || syncMode == appconfig .SyncModeAddOnly {
204- msg := fmt .Sprintf ("sync mode %s would have deleted %d trakt list item(s)" , syncMode , len (diff [ "remove" ] ))
205- s .logger .Info (msg , slog .Any ("watchlist" , diff [ "remove" ] ))
206+ msg := fmt .Sprintf ("sync mode %s would have deleted %d trakt list item(s)" , syncMode , len (diff . Remove ))
207+ s .logger .Info (msg , slog .Any ("watchlist" , diff . Remove ))
206208 continue
207209 }
208- if err := s .traktClient .WatchlistItemsRemove (diff [ "remove" ] ); err != nil {
210+ if err := s .traktClient .WatchlistItemsRemove (diff . Remove ); err != nil {
209211 return fmt .Errorf ("failure removing items from trakt watchlist: %w" , err )
210212 }
211213 }
212214 continue
213215 }
214- if len (diff ["add" ]) > 0 {
216+ slug := entities .InferTraktListSlug (imdbList .ListName )
217+ if len (diff .Add ) > 0 {
215218 if syncMode := * s .conf .Mode ; syncMode == appconfig .SyncModeDryRun {
216- msg := fmt .Sprintf ("sync mode %s would have added %d trakt list item(s)" , syncMode , len (diff [ "add" ] ))
217- s .logger .Info (msg , slog .Any (traktListSlug , diff [ "add" ] ))
219+ msg := fmt .Sprintf ("sync mode %s would have added %d trakt list item(s)" , syncMode , len (diff . Add ))
220+ s .logger .Info (msg , slog .Any (slug , diff . Add ))
218221 continue
219222 }
220- if err := s .traktClient .ListItemsAdd (traktListSlug , diff [ "add" ] ); err != nil {
221- return fmt .Errorf ("failure adding items to trakt list %s: %w" , traktListSlug , err )
223+ if err := s .traktClient .ListItemsAdd (slug , diff . Add ); err != nil {
224+ return fmt .Errorf ("failure adding items to trakt list %s: %w" , slug , err )
222225 }
223226 }
224- if len (diff [ "remove" ] ) > 0 {
227+ if len (diff . Remove ) > 0 {
225228 if syncMode := * s .conf .Mode ; syncMode == appconfig .SyncModeDryRun || syncMode == appconfig .SyncModeAddOnly {
226- msg := fmt .Sprintf ("sync mode %s would have deleted %d trakt list item(s)" , syncMode , len (diff [ "remove" ] ))
227- s .logger .Info (msg , slog .Any (traktListSlug , diff [ "remove" ] ))
229+ msg := fmt .Sprintf ("sync mode %s would have deleted %d trakt list item(s)" , syncMode , len (diff . Remove ))
230+ s .logger .Info (msg , slog .Any (slug , diff . Remove ))
228231 continue
229232 }
230- if err := s .traktClient .ListItemsRemove (traktListSlug , diff [ "remove" ] ); err != nil {
231- return fmt .Errorf ("failure removing items from trakt list %s: %w" , traktListSlug , err )
233+ if err := s .traktClient .ListItemsRemove (slug , diff . Remove ); err != nil {
234+ return fmt .Errorf ("failure removing items from trakt list %s: %w" , slug , err )
232235 }
233236 }
234237 }
@@ -245,22 +248,22 @@ func (s *Syncer) syncRatings() error {
245248 return nil
246249 }
247250 diff := entities .ItemsDifference (s .user .imdbRatings , s .user .traktRatings )
248- if len (diff [ "add" ] ) > 0 {
251+ if len (diff . Add ) > 0 {
249252 if syncMode := * s .conf .Mode ; syncMode == appconfig .SyncModeDryRun {
250- msg := fmt .Sprintf ("sync mode %s would have added %d trakt rating item(s)" , syncMode , len (diff [ "add" ] ))
251- s .logger .Info (msg , slog .Any ("ratings" , diff [ "add" ] ))
253+ msg := fmt .Sprintf ("sync mode %s would have added %d trakt rating item(s)" , syncMode , len (diff . Add ))
254+ s .logger .Info (msg , slog .Any ("ratings" , diff . Add ))
252255 } else {
253- if err := s .traktClient .RatingsAdd (diff [ "add" ] ); err != nil {
256+ if err := s .traktClient .RatingsAdd (diff . Add ); err != nil {
254257 return fmt .Errorf ("failure adding trakt ratings: %w" , err )
255258 }
256259 }
257260 }
258- if len (diff [ "remove" ] ) > 0 {
261+ if len (diff . Remove ) > 0 {
259262 if syncMode := * s .conf .Mode ; syncMode == appconfig .SyncModeDryRun || syncMode == appconfig .SyncModeAddOnly {
260- msg := fmt .Sprintf ("sync mode %s would have deleted %d trakt rating item(s)" , syncMode , len (diff [ "remove" ] ))
261- s .logger .Info (msg , slog .Any ("ratings" , diff [ "remove" ] ))
263+ msg := fmt .Sprintf ("sync mode %s would have deleted %d trakt rating item(s)" , syncMode , len (diff . Remove ))
264+ s .logger .Info (msg , slog .Any ("ratings" , diff . Remove ))
262265 } else {
263- if err := s .traktClient .RatingsRemove (diff [ "remove" ] ); err != nil {
266+ if err := s .traktClient .RatingsRemove (diff . Remove ); err != nil {
264267 return fmt .Errorf ("failure removing trakt ratings: %w" , err )
265268 }
266269 }
@@ -281,21 +284,21 @@ func (s *Syncer) syncHistory() error {
281284 // the syncer will assume a user to have watched an item if they've submitted a rating for it
282285 // if the above is satisfied and the user's history for this item is empty, a new history entry is added!
283286 diff := entities .ItemsDifference (s .user .imdbRatings , s .user .traktRatings )
284- if len (diff [ "add" ] ) > 0 {
287+ if len (diff . Add ) > 0 {
285288 var historyToAdd entities.TraktItems
286- for i := range diff [ "add" ] {
287- traktItemID , err := diff [ "add" ] [i ].GetItemID ()
289+ for i := range diff . Add {
290+ traktItemID , err := diff . Add [i ].GetItemID ()
288291 if err != nil {
289292 return fmt .Errorf ("failure fetching trakt item id: %w" , err )
290293 }
291- history , err := s .traktClient .HistoryGet (diff [ "add" ] [i ].Type , * traktItemID )
294+ history , err := s .traktClient .HistoryGet (diff . Add [i ].Type , * traktItemID )
292295 if err != nil {
293- return fmt .Errorf ("failure fetching trakt history for %s %s: %w" , diff [ "add" ] [i ].Type , * traktItemID , err )
296+ return fmt .Errorf ("failure fetching trakt history for %s %s: %w" , diff . Add [i ].Type , * traktItemID , err )
294297 }
295298 if len (history ) > 0 {
296299 continue
297300 }
298- historyToAdd = append (historyToAdd , diff [ "add" ] [i ])
301+ historyToAdd = append (historyToAdd , diff . Add [i ])
299302 }
300303 if len (historyToAdd ) > 0 {
301304 if syncMode := * s .conf .Mode ; syncMode == appconfig .SyncModeDryRun {
@@ -308,21 +311,21 @@ func (s *Syncer) syncHistory() error {
308311 }
309312 }
310313 }
311- if len (diff [ "remove" ] ) > 0 {
314+ if len (diff . Remove ) > 0 {
312315 var historyToRemove entities.TraktItems
313- for i := range diff [ "remove" ] {
314- traktItemID , err := diff [ "remove" ] [i ].GetItemID ()
316+ for i := range diff . Remove {
317+ traktItemID , err := diff . Remove [i ].GetItemID ()
315318 if err != nil {
316319 return fmt .Errorf ("failure fetching trakt item id: %w" , err )
317320 }
318- history , err := s .traktClient .HistoryGet (diff [ "remove" ] [i ].Type , * traktItemID )
321+ history , err := s .traktClient .HistoryGet (diff . Remove [i ].Type , * traktItemID )
319322 if err != nil {
320- return fmt .Errorf ("failure fetching trakt history for %s %s: %w" , diff [ "remove" ] [i ].Type , * traktItemID , err )
323+ return fmt .Errorf ("failure fetching trakt history for %s %s: %w" , diff . Remove [i ].Type , * traktItemID , err )
321324 }
322325 if len (history ) == 0 {
323326 continue
324327 }
325- historyToRemove = append (historyToRemove , diff [ "remove" ] [i ])
328+ historyToRemove = append (historyToRemove , diff . Remove [i ])
326329 }
327330 if len (historyToRemove ) > 0 {
328331 if syncMode := * s .conf .Mode ; syncMode == appconfig .SyncModeDryRun || syncMode == appconfig .SyncModeAddOnly {
0 commit comments