public async Task Execute(CancellationToken cancellationToken, IProgress <double> progress)
        {
            try
            {
                foreach (var syncProfile in Plugin.Instance.Configuration.SyncList)
                {
                    var syncToUser   = UserManager.GetUserById(syncProfile.SyncToAccount);   //Sync To
                    var syncFromUser = UserManager.GetUserById(syncProfile.SyncFromAccount); //Sync From

                    var queryResultIds = LibraryManager.GetInternalItemIds(new InternalItemsQuery()
                    {
                        IncludeItemTypes = new[] { "Movie", "Episode" }
                    });

                    for (var i = 0; i <= queryResultIds.Count() - 1; i++)
                    {
                        var item = LibraryManager.GetItemById(queryResultIds[i]);

                        Synchronize.SynchronizePlayState(syncToUser, syncFromUser, item);

                        progress.Report(queryResultIds.Count() - (queryResultIds.Count() - i) / 100);
                    }
                }
            }
            catch
            {
            }

            progress.Report(100.0);
        }
        private void SessionManager_PlaybackStopped(object sender, PlaybackStopEventArgs e)
        {
            if (!Plugin.Instance.Configuration.SyncList.Exists(user => user.SyncFromAccount == e.Session.UserId))
            {
                return;
            }

            var sync = Plugin.Instance.Configuration.SyncList.FirstOrDefault(user => user.SyncFromAccount == e.Session.UserId);

            var syncToUser = UserManager.GetUserById(sync.SyncToAccount);

            Synchronize.SynchronizePlayState(syncToUser, e.Item, e.PlaybackPositionTicks.Value);
        }