void commentsWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            AnimeSeriesVM ser = e.Argument as AnimeSeriesVM;
            List<Trakt_CommentUserVM> tempComments = new List<Trakt_CommentUserVM>();

            try
            {
                System.Windows.Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, (Action)delegate ()
                {
                    Comments.Clear();
                });

                // get comments from trakt
                List<JMMServerBinary.Contract_Trakt_CommentUser> rawComments = JMMServerVM.Instance.clientBinaryHTTP.GetTraktCommentsForAnime(ser.AniDB_ID);
                foreach (JMMServerBinary.Contract_Trakt_CommentUser contract in rawComments)
                {
                    Trakt_CommentUserVM comment = new Trakt_CommentUserVM(contract);

                    System.Windows.Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, (Action)delegate ()
                    {
                        Comments.Add(comment);
                    });

                }

                // get recommendations from AniDB
                List<JMMServerBinary.Contract_AniDB_Recommendation> rawRecs = JMMServerVM.Instance.clientBinaryHTTP.GetAniDBRecommendations(ser.AniDB_ID);
                foreach (JMMServerBinary.Contract_AniDB_Recommendation contract in rawRecs)
                {
                    AniDB_RecommendationVM rec = new AniDB_RecommendationVM(contract);

                    System.Windows.Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, (Action)delegate ()
                    {
                        Comments.Add(rec);
                    });
                }

            }
            catch (Exception ex)
            {
                logger.ErrorException(ex.ToString(), ex);
            }
        }
        void refreshDataWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            List<object> tempComments = new List<object>();

            try
            {
                AnimeSeriesVM animeSeries = (AnimeSeriesVM)e.Argument;
                if (animeSeries == null) return;

                // get comments from Trakt
                List<JMMServerBinary.Contract_Trakt_CommentUser> rawComments = JMMServerVM.Instance.clientBinaryHTTP.GetTraktCommentsForAnime(animeSeries.AniDB_ID);
                foreach (JMMServerBinary.Contract_Trakt_CommentUser contract in rawComments)
                {
                    Trakt_CommentUserVM traktComment = new Trakt_CommentUserVM(contract);
                    tempComments.Add(traktComment);
                }

                // get comments from AniDB
                // get recommendations from AniDB
                List<JMMServerBinary.Contract_AniDB_Recommendation> rawRecs = JMMServerVM.Instance.clientBinaryHTTP.GetAniDBRecommendations(animeSeries.AniDB_ID);
                foreach (JMMServerBinary.Contract_AniDB_Recommendation contract in rawRecs)
                {
                    AniDB_RecommendationVM rec = new AniDB_RecommendationVM(contract);
                    tempComments.Add(rec);
                }
            }
            catch (Exception ex)
            {
                Utils.ShowErrorMessage(ex);
            }

            e.Result = tempComments;
        }