public RemoteRepositoryController(LocalRepository repo)
     : base(repo)
 {
     HttpEncoder.Current = HttpEncoder.Default;
     connection = new S3Connection ();
     physicalController = new PhysicalRepositoryController (repo);
 }
 public override void Create(LocalRepository repo, string path)
 {
     if (!All(repo).Exists(ri => ri.Path.Equals(path)))
     {
         database.ExecuteNonQuery(string.Format("INSERT INTO RepositoryIgnore (RepositoryId, Path) VALUES ('{0}', '{1}')", repo.Id, path));
     }
 }
Esempio n. 3
0
 public SynchronizerUnit(LocalRepository repo)
 {
     this.repo = repo;
     synchronizerResolver = SynchronizerResolver.NewInstance (this.repo, this);
     recoverySynchronizer = RecoverySynchronizer.NewInstance (this.repo, this);
     remoteSynchronizer = RemoteEventsSynchronizer.NewInstance (this.repo, this);
     localSynchronizer = LocalEventsSynchronizer.NewInstance (this.repo, this);
 }
Esempio n. 4
0
 public Event(LocalRepository repo)
 {
     this.Repository = repo;
     User = Credential.Username;
     Application = GlobalSettings.FullApplicationName;
     ApplicationVersion = GlobalSettings.RunningVersion;
     DeviceId = GlobalSettings.MachineName;
     OS = GlobalSettings.OSVersion;
     Bucket = RuntimeSettings.DefaultBucketName;
 }
Esempio n. 5
0
        public frmMain()
        {
            InitializeComponent();
            // Load repo list
            myRepo = new LocalRepository();
            loadRepos();

            // Load installed mods
            refreshAll();

            // Check for updates
        }
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.Settings);
            settings = this.GetSharedPreferences("jeegoordah.settings");
            var repositoryAdapter = new ActivityRepositoryAdapter(this);
            repo = new LocalRepository(new HttpRepository(), repositoryAdapter, repositoryAdapter);

            currencies = repo.GetCurencies();
            events = repo.GetEvents();

            SetupEvents();
            SetupCurrencies();
        }
 public LocalRepository FindOrCreate(string root, string remoteFolder)
 {
     List<LocalRepository> repos = Select(string.Format("SELECT * FROM REPOSITORY WHERE PATH == '{0}' AND RemoteFolder == '{1}'", root, remoteFolder));
     LocalRepository repo;
     if (repos.Count > 0) {
         repo = repos.First ();
     } else {
         repo = new LocalRepository (root, remoteFolder);
         repo.Recovering = true;
         repo.Active = true;
         Create (repo);
         return FindOrCreate (root, remoteFolder);
     }
     return repos.First();
 }
        public QloudSyncFileSystemWatcher(LocalRepository repo)
        {
            this.repo = repo;
            ignoreBag = new ArrayList();
            //Passar no construtor o param repo.....
            physicalController = new PhysicalRepositoryController (repo);
            string watchedFolder = this.repo.Path;
            this.callback = this.Callback;

            IntPtr path = CFStringCreateWithCString (IntPtr.Zero, watchedFolder, 0);
            IntPtr paths = CFArrayCreate (IntPtr.Zero, new IntPtr [1] { path }, 1, IntPtr.Zero);

            stream = FSEventStreamCreate (IntPtr.Zero, this.callback, IntPtr.Zero, paths, FSEventStreamEventIdSinceNow, 0, FSEventStreamCreateFlags.WatchRoot | FSEventStreamCreateFlags.FileEvents);

            CFRelease (paths);
            CFRelease (path);
        }
Esempio n. 9
0
		protected async override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

			var repositoryAdapter = new ActivityRepositoryAdapter(this);
			repository = new LocalRepository(new HttpRepository(), repositoryAdapter, repositoryAdapter);
			await TryUpdateFromWeb();

			var lastRefresh = repository.LastRefresh;
			if (!lastRefresh.HasValue)
			{
				Toast.MakeText(this, "Need connection for the first run", ToastLength.Long).Show();
				return;
			}

			SetContentView(Resource.Layout.Main);
			SetNavigation();
			FindViewById<TextView>(Resource.Id.LastRefresh).Text = "Last sync: {0}".F(lastRefresh);
			UpdatePendingTransactionCount();
        }
 private void CreateIgnoredList(List<string> ignoreKeys, LocalRepository repo)
 {
     SQLiteRepositoryIgnoreDAO repoIgnoreDao = new SQLiteRepositoryIgnoreDAO();
     foreach (string ignore in ignoreKeys)
     {
         repoIgnoreDao.Create(repo, ignore);
     }
 }
Esempio n. 11
0
 public RepositoryItem(LocalRepository repo)
 {
     this.Repository = repo;
 }
Esempio n. 12
0
 public void SetCurrentRepository(LocalRepository repository) => _current = repository;
Esempio n. 13
0
 public RepositoryIgnore(LocalRepository localRepository, string path = null)
 {
     this.Repository = localRepository;
     this.Path = path;
 }
 //OLD
 public PhysicalRepositoryController(LocalRepository repo)
     : base(repo)
 {
 }
Esempio n. 15
0
 public IList <IPackage> GetPackagesInstalled(IEnumerable <string> packageIds)
 {
     return(LocalRepository.GetPackages().Where(p => packageIds.Any(x => x == p.Id)).OrderByDescending(p => p.Version).ToArray());
 }
Esempio n. 16
0
        private IPackage FindLocalPackage(IProjectManager projectManager,
                                          string packageId,
                                          Version version,
                                          Func <IProjectManager, IList <IPackage>, Exception> getAmbiguousMatchException,
                                          out bool appliesToProject)
        {
            IPackage package         = null;
            bool     existsInProject = false;

            appliesToProject = false;

            if (projectManager != null)
            {
                // Try the project repository first
                package = projectManager.LocalRepository.FindPackage(packageId, version);

                existsInProject = package != null;
            }

            // Fallback to the solution repository (it might be a solution only package)
            if (package == null)
            {
                if (version != null)
                {
                    // Get the exact package
                    package = LocalRepository.FindPackage(packageId, version);
                }
                else
                {
                    // Get all packages by this name to see if we find an ambiguous match
                    var packages = LocalRepository.FindPackagesById(packageId).ToList();
                    if (packages.Count > 1)
                    {
                        throw getAmbiguousMatchException(projectManager, packages);
                    }

                    // Pick the only one of default if none match
                    package = packages.SingleOrDefault();
                }
            }

            // Can't find the package in the solution or in the project then fail
            if (package == null)
            {
                throw new InvalidOperationException(
                          String.Format(CultureInfo.CurrentCulture,
                                        VsResources.UnknownPackage, packageId));
            }

            appliesToProject = IsProjectLevel(package);

            if (appliesToProject)
            {
                if (!existsInProject)
                {
                    if (_sharedRepository.IsReferenced(package.Id, package.Version))
                    {
                        // If the package doesn't exist in the project and is referenced by other projects
                        // then fail.
                        if (projectManager != null)
                        {
                            throw new InvalidOperationException(
                                      String.Format(CultureInfo.CurrentCulture,
                                                    VsResources.UnknownPackageInProject,
                                                    package.GetFullName(),
                                                    projectManager.Project.ProjectName));
                        }
                    }
                    else
                    {
                        // The operation applies to solution level since it's not installed in the current project
                        // but it is installed in some other project
                        appliesToProject = false;
                    }
                }
            }

            // Can't have a project level operation if no project was specified
            if (appliesToProject && projectManager == null)
            {
                throw new InvalidOperationException(VsResources.ProjectNotSpecified);
            }

            return(package);
        }
Esempio n. 17
0
        public override bool ImportSelectedTests(string importDestinationPath, IEnumerable <Object> selectedTestSets)
        {
            if (selectedTestSets != null && selectedTestSets.Count() > 0)
            {
                ObservableList <QCTestSetTreeItem> testSetsItemsToImport = new ObservableList <QCTestSetTreeItem>();
                bool bfsWereDeleted = false;
                foreach (QCTestSetTreeItem testSetItem in selectedTestSets)
                {
                    //check if some of the Test Set was already imported
                    if (testSetItem.AlreadyImported == true)
                    {
                        MessageBoxResult userSelection = Reporter.ToUser(eUserMsgKeys.TestSetExists, testSetItem.TestSetName);
                        if (userSelection == MessageBoxResult.Yes)
                        {
                            //Delete the mapped BF
                            File.Delete(testSetItem.MappedBusinessFlow.FileName);
                            bfsWereDeleted = true;
                            testSetsItemsToImport.Add(testSetItem);
                        }
                    }
                    else
                    {
                        testSetsItemsToImport.Add(testSetItem);
                    }
                }
                if (bfsWereDeleted)
                {
                    App.MainWindow.RefreshSolutionPage();
                }

                if (testSetsItemsToImport.Count == 0)
                {
                    return(false);                                  //noting to import
                }
                //Refresh Ginger repository and allow GingerQC to use it

                ALMIntegration.Instance.AlmCore.GingerActivitiesGroupsRepo = App.LocalRepository.GetSolutionRepoActivitiesGroups(false);
                ALMIntegration.Instance.AlmCore.GingerActivitiesGroupsRepo = App.LocalRepository.GetSolutionRepoActivitiesGroups(false);
                ALMIntegration.Instance.AlmCore.GingerActivitiesRepo       = App.LocalRepository.GetSolutionRepoActivities(false);

                foreach (QCTestSetTreeItem testSetItemtoImport in testSetsItemsToImport)
                {
                    try
                    {
                        //import test set data
                        Reporter.ToGingerHelper(eGingerHelperMsgKey.ALMTestSetImport, null, testSetItemtoImport.TestSetName);
                        QCTestSet TS = new QCTestSet();
                        TS.TestSetID   = testSetItemtoImport.TestSetID;
                        TS.TestSetName = testSetItemtoImport.TestSetName;
                        TS.TestSetPath = testSetItemtoImport.Path;
                        TS             = ((QCCore)ALMIntegration.Instance.AlmCore).ImportTestSetData(TS);

                        //convert test set into BF
                        BusinessFlow tsBusFlow = ((QCCore)ALMIntegration.Instance.AlmCore).ConvertQCTestSetToBF(TS);

                        //Set BF/Activities target application
                        //if (App.UserProfile.Solution.MainApplication != null)
                        //{
                        //    if (tsBusFlow.TargetApplications.Count == 0)
                        //    {
                        //        tsBusFlow.TargetApplications.Add(new TargetApplication() { AppName = App.UserProfile.Solution.MainApplication });
                        //        if (tsBusFlow.TargetApplications.Count > 0)
                        //            foreach (Activity activ in tsBusFlow.Activities)
                        //                activ.TargetApplication = tsBusFlow.TargetApplications[0].AppName;
                        //    }
                        //}
                        if (App.UserProfile.Solution.MainApplication != null)
                        {
                            //add the applications mapped to the Activities
                            foreach (Activity activ in tsBusFlow.Activities)
                            {
                                if (string.IsNullOrEmpty(activ.TargetApplication) == false)
                                {
                                    if (tsBusFlow.TargetApplications.Where(x => x.AppName == activ.TargetApplication).FirstOrDefault() == null)
                                    {
                                        ApplicationPlatform appAgent = App.UserProfile.Solution.ApplicationPlatforms.Where(x => x.AppName == activ.TargetApplication).FirstOrDefault();
                                        if (appAgent != null)
                                        {
                                            tsBusFlow.TargetApplications.Add(new TargetApplication()
                                            {
                                                AppName = appAgent.AppName
                                            });
                                        }
                                    }
                                }
                            }
                            //handle non mapped Activities
                            if (tsBusFlow.TargetApplications.Count == 0)
                            {
                                tsBusFlow.TargetApplications.Add(new TargetApplication()
                                {
                                    AppName = App.UserProfile.Solution.MainApplication
                                });
                            }
                            foreach (Activity activ in tsBusFlow.Activities)
                            {
                                if (string.IsNullOrEmpty(activ.TargetApplication))
                                {
                                    activ.TargetApplication = tsBusFlow.MainApplication;
                                }
                            }
                        }
                        else
                        {
                            foreach (Activity activ in tsBusFlow.Activities)
                            {
                                activ.TargetApplication = null; // no app configured on solution level
                            }
                        }

                        //save bf
                        tsBusFlow.FileName = LocalRepository.GetRepoItemFileName(tsBusFlow, importDestinationPath);
                        tsBusFlow.SaveToFile(tsBusFlow.FileName);
                        //add to cach
                        App.LocalRepository.AddItemToCache(tsBusFlow);
                        Reporter.CloseGingerHelper();
                    }
                    catch (Exception ex)
                    {
                        Reporter.ToUser(eUserMsgKeys.ErrorInTestsetImport, testSetItemtoImport.TestSetName, ex.Message);
                        Reporter.ToLog(eLogLevel.ERROR, "Error importing from QC", ex);
                    }
                }

                //Refresh the solution tree
                App.MainWindow.RefreshSolutionPage();

                Reporter.ToUser(eUserMsgKeys.TestSetsImportedSuccessfully);

                Reporter.ToLog(eLogLevel.INFO, "Imported from QC successfully");
                return(true);
            }
            Reporter.ToLog(eLogLevel.ERROR, "Error importing from QC");
            return(false);
        }
        public void CanGetNewAccessTokenIfNotValidInDbOrForcedForNew()
        {
            var restClient = new Mock <IRestClient>();
            var externalTokenRepository = new LocalRepository <ExternalToken>();
            var serverTime    = new Mock <IServerTime>();
            var jsonConverter = new Mock <IJsonConverter>();

            var api = new GoogleAuthentication(restClient.Object,
                                               externalTokenRepository,
                                               serverTime.Object,
                                               jsonConverter.Object);

            var now = new DateTime(2014, 12, 17, 10, 0, 0);

            serverTime.Setup(st => st.RequestStarted).Returns(now);
            var validRefreshToken = new ExternalToken
            {
                AccessToken    = "RefreshToken",
                ExpirationDate = now.AddYears(100),
                Type           = "Google_Refresh_Token"
            };

            var inValidAccessToken = new ExternalToken
            {
                AccessToken    = "AccessToken",
                ExpirationDate = now.AddHours(-2),
                Type           = "Google_Access_Token"
            };

            externalTokenRepository.Add(validRefreshToken);
            externalTokenRepository.Add(inValidAccessToken);

            var restResponse = new RestResponse();

            restResponse.Content = "{ \"access_token\" : \"NewAccessToken\", \"token_type\" : \"Bearer\", \"expires_in\" : 3600}";
            restClient.Setup(rc => rc.Execute(It.IsAny <RestRequest>()))
            .Returns(restResponse);

            var googleApiTokenResponse = new GoogleApiTokenResponse
            {
                access_token = "NewAccessToken",
                expires_in   = 3600,
                token_type   = "Bearer"
            };

            jsonConverter.Setup(
                jc =>
                jc.Deserilize <GoogleApiTokenResponse>(
                    "{ \"access_token\" : \"NewAccessToken\", \"token_type\" : \"Bearer\", \"expires_in\" : 3600}"))
            .Returns(googleApiTokenResponse);

            var hasValidTokenInDb = externalTokenRepository.Any(t => t.Type == "Google_Access_Token" && t.ExpirationDate > now);

            Assert.AreEqual(false, hasValidTokenInDb);

            var token = api.GetAccessToken();

            var gotNewValidToken = externalTokenRepository.Any(t => t.Type == "Google_Access_Token" && t.ExpirationDate > now);

            Assert.AreEqual(true, gotNewValidToken);

            Assert.AreEqual("NewAccessToken", token.AccessToken);
            Assert.AreEqual("Google_Access_Token", token.Type);
            Assert.AreEqual(11, token.ExpirationDate.Hour);
        }
Esempio n. 19
0
 public IPackage GetLatestPackageInstalled(string packageId)
 {
     return(LocalRepository.GetPackages().Where(p => p.Id == packageId).OrderByDescending(p => p.Version).FirstOrDefault());
 }
Esempio n. 20
0
        static async Task <DownloadResult> DownloadFilesAsync(BuildConfig config, string buildFolder)
        {
            using (ISourceController ctrl = GetController(config))
            {
                using (LocalRepository rep = new LocalRepository(buildFolder, config.SiteId))
                {
                    ctrl.Initialize(config);

                    SourceRepository r = await ctrl.FetchAllFiles(config);

                    List <ISourceItem> remoteItems = r.Files;
                    var changes = rep.GetChanges(remoteItems).ToList();

                    var changeTypes = changes
                                      .Where(x => !x.RepositoryFile.IsDirectory)
                                      .GroupBy(x => x.Type);
                    foreach (var item in changeTypes)
                    {
                        Console.WriteLine("Changes {0}: {1}", item.Key, item.Count());
                    }

                    var updatedFiles = changes.Where(x => x.Type == ChangeType.Added || x.Type == ChangeType.Modified)
                                       .Select(x => x.RepositoryFile).Where(x => !x.IsDirectory).ToList();

                    foreach (var item in changes.Where(x => x.Type == ChangeType.Removed))
                    {
                        string filePath = item.RepositoryFile.FilePath;
                        if (File.Exists(filePath))
                        {
                            File.Delete(filePath);
                        }
                    }

                    foreach (var slice in updatedFiles.Slice(25))
                    {
                        var downloadList = slice.Select(x =>
                        {
                            string filePath          = rep.LocalFolder + x.Folder + "/" + x.Name;
                            System.IO.FileInfo finfo = new System.IO.FileInfo(filePath);
                            if (finfo.Exists)
                            {
                                finfo.Delete();
                            }
                            else
                            {
                                if (!finfo.Directory.Exists)
                                {
                                    finfo.Directory.Create();
                                }
                            }
                            x.FilePath = filePath;
                            return(ctrl.DownloadAsync(config, x, filePath));
                        });

                        await Task.WhenAll(downloadList);

                        rep.UpdateFiles(slice);
                    }

                    return(new DownloadResult {
                        LastVersion = r.LatestVersion,
                        UpdatedFiles = updatedFiles.Count()
                    });
                }
            }
        }
        public void CreateUserSmsTaskForEveryUser()
        {
            var generationDate    = new DateTime(2013, 1, 17);
            var contactRepository = new LocalRepository <Contact>();

            var taskCreator = new Mock <ITaskManager>();
            var client      = ModelHelper.TestClient1AllDataNoReferences;

            var lableForClient = new Label()
            {
                Id   = 1,
                Name = "Helloypaket"
            };
            var contactForUser = new Contact()
            {
                Id = 1
            };

            client.Labels = new Collection <Label>();

            client.Labels.Add(lableForClient);
            contactForUser.Client = client;
            var insideUser = new InsideUser
            {
                Id         = "UserId1",
                ReceiveSms = true,
                Phone      = "0123456"
            };
            var insideUser2 = new InsideUser
            {
                Id         = "UserId2",
                ReceiveSms = true,
                Phone      = "0123456"
            };

            client.InsideUserSets = new List <InsideUser>
            {
                insideUser, insideUser2
            };
            contactRepository.Add(contactForUser);

            var serverTime          = new Mock <IServerTime>();
            var taskRepository      = new LocalRepository <InsideModel.Models.Task>();
            var taskQueueStorage    = new Mock <ITaskQueueStorage>();
            var newContactSmsSender = new SmsNotificationTaskPerformer(
                contactRepository,
                taskCreator.Object,
                serverTime.Object, taskRepository,
                taskQueueStorage.Object);

            var now = new DateTime(2013, 01, 01);

            serverTime.Setup(st => st.RequestStarted).Returns(now);
            var taskMessage = JsonConvert.SerializeObject(new SmsNotificationTaskMessage()
            {
                ContactId = contactForUser.Id
            });

            newContactSmsSender.PerformTask(new InsideModel.Models.Task()
            {
                Message = taskMessage, EarliestExecution = generationDate
            });

            taskQueueStorage.Verify(es => es.Add(It.Is <InsideModel.Models.Task>(t => t.Message == "{\"ContactId\":1,\"UserId\":\"UserId1\"}" && t.Type == "SendNewContactSmsNotificationToUser")), Times.Exactly(1));
            taskQueueStorage.Verify(es => es.Add(It.Is <InsideModel.Models.Task>(t => t.Message == "{\"ContactId\":1,\"UserId\":\"UserId2\"}" && t.Type == "SendNewContactSmsNotificationToUser")), Times.Exactly(1));
        }
Esempio n. 22
0
        private static ISessionSummaryCollection GetNewSessions()
        {
            var localRepository = new LocalRepository(Log.SessionSummary.Product);

            return(localRepository.Find(new SessionCriteriaPredicate(Log.SessionSummary.Product, null, SessionCriteria.NewSessions).Predicate));
        }
 public void StopSynchronizers(LocalRepository repo)
 {
     SynchronizerUnit unit = SynchronizerUnit.GetByRepo(repo);
     if (unit != null)
     {
         unit.StopAll();
         Logger.LogInfo("INFO STOP SYNCHRONIZERS", "Synchronizers Stoped!");
     }
     else
     {
         Logger.LogInfo("ERROR STOP SYNCHRONIZERS", "Cannot stop synchronizers! [repository not found]");
     }
 }
 public void TearDown()
 {
     LocalRepository.AddTestDocuments();
     DisposeSemaphore();
 }
 public void HandleError(LocalRepository repo)
 {
     ErrorType = ERROR_TYPE.FATAL_ERROR;
     OnError();
     KillSynchronizers(repo);
     Thread.Sleep(5000);
     InitializeSynchronizers(repo, true);
 }
Esempio n. 26
0
        public override bool ImportSelectedTests(string importDestinationPath, IEnumerable <Object> testPlanList)
        {
            if (testPlanList != null)
            {
                foreach (RallyTestPlan testPlan in testPlanList)
                {
                    //Refresh Ginger repository and allow GingerRally to use it
                    ALMIntegration.Instance.AlmCore.GingerActivitiesGroupsRepo = App.LocalRepository.GetSolutionRepoActivitiesGroups(false);
                    ALMIntegration.Instance.AlmCore.GingerActivitiesGroupsRepo = App.LocalRepository.GetSolutionRepoActivitiesGroups(false);
                    ALMIntegration.Instance.AlmCore.GingerActivitiesRepo       = App.LocalRepository.GetSolutionRepoActivities(false);

                    try
                    {
                        BusinessFlow existedBF = App.LocalRepository.GetSolutionBusinessFlows().Where(x => x.ExternalID == RallyID + "=" + testPlan.RallyID).FirstOrDefault();
                        if (existedBF != null)
                        {
                            MessageBoxResult userSelection = Reporter.ToUser(eUserMsgKeys.TestSetExists, testPlan.Name);
                            if (userSelection == MessageBoxResult.Yes)
                            {
                                File.Delete(existedBF.FileName);
                            }
                        }

                        Reporter.ToGingerHelper(eGingerHelperMsgKey.ALMTestSetImport, null, testPlan.Name);

                        // convert test set into BF
                        BusinessFlow tsBusFlow = ALMIntegration.Instance.AlmCore.ConvertRallyTestPlanToBF(testPlan);

                        if (App.UserProfile.Solution.MainApplication != null)
                        {
                            //add the applications mapped to the Activities
                            foreach (Activity activ in tsBusFlow.Activities)
                            {
                                if (string.IsNullOrEmpty(activ.TargetApplication) == false)
                                {
                                    if (tsBusFlow.TargetApplications.Where(x => x.AppName == activ.TargetApplication).FirstOrDefault() == null)
                                    {
                                        ApplicationPlatform appAgent = App.UserProfile.Solution.ApplicationPlatforms.Where(x => x.AppName == activ.TargetApplication).FirstOrDefault();
                                        if (appAgent != null)
                                        {
                                            tsBusFlow.TargetApplications.Add(new TargetApplication()
                                            {
                                                AppName = appAgent.AppName
                                            });
                                        }
                                    }
                                }
                            }
                            //handle non mapped Activities
                            if (tsBusFlow.TargetApplications.Count == 0)
                            {
                                tsBusFlow.TargetApplications.Add(new TargetApplication()
                                {
                                    AppName = App.UserProfile.Solution.MainApplication
                                });
                            }
                            foreach (Activity activ in tsBusFlow.Activities)
                            {
                                if (string.IsNullOrEmpty(activ.TargetApplication))
                                {
                                    activ.TargetApplication = tsBusFlow.MainApplication;
                                }
                            }
                        }
                        else
                        {
                            foreach (Activity activ in tsBusFlow.Activities)
                            {
                                activ.TargetApplication = null; // no app configured on solution level
                            }
                        }

                        //save bf
                        tsBusFlow.FileName = LocalRepository.GetRepoItemFileName(tsBusFlow, importDestinationPath);
                        tsBusFlow.SaveToFile(tsBusFlow.FileName);
                        //add to cach
                        App.LocalRepository.AddItemToCache(tsBusFlow);
                        Reporter.CloseGingerHelper();
                    }
                    catch (Exception ex)
                    {
                        Reporter.ToUser(eUserMsgKeys.ErrorInTestsetImport, testPlan.Name, ex.Message);
                    }

                    //Refresh the solution tree
                    App.MainWindow.RefreshSolutionPage();

                    Reporter.ToUser(eUserMsgKeys.TestSetsImportedSuccessfully);
                }
                return(true);
            }

            return(false);
        }
Esempio n. 27
0
 public static void Add(LocalRepository repo, SynchronizerUnit unit)
 {
     synchronizerUnits.Add(repo, unit);
 }
Esempio n. 28
0
        private void RemovePackageReferenceFromProject(IPackage package)
        {
            string packageFullName = package.GetFullName();
            Logger.Log(MessageLevel.Info, NuGetResources.Log_BeginRemovePackageReference, packageFullName, Project.ProjectName);

            PackageOperationEventArgs args = CreateOperation(package);
            OnPackageReferenceRemoving(args);

            if (args.Cancel)
            {
                return;
            }

            // Get other packages
            IEnumerable<IPackage> otherPackages = from p in LocalRepository.GetPackages()
                                                  where p.Id != package.Id
                                                  select p;

            // Get other references
            var otherAssemblyReferences = from p in otherPackages
                                          let assemblyReferences = GetFilteredAssembliesToDelete(p)
                                          from assemblyReference in assemblyReferences ?? Enumerable.Empty<IPackageAssemblyReference>() // This can happen if package installed left the project in a bad state
                                          select assemblyReference;

            // Get content files from other packages
            // Exclude transform files since they are treated specially
            var otherContentFiles = from p in otherPackages
                                    from file in GetCompatibleInstalledItemsForPackage(p.Id, p.GetContentFiles())
                                    where !IsTransformFile(file.Path) 
                                    select file;

            // Get the files and references for this package, that aren't in use by any other packages so we don't have to do reference counting
            var assemblyReferencesToDelete = GetFilteredAssembliesToDelete(package)
                                             .Except(otherAssemblyReferences, PackageFileComparer.Default);

            var contentFilesToDelete = GetCompatibleInstalledItemsForPackage(package.Id, package.GetContentFiles())
                                       .Except(otherContentFiles, PackageFileComparer.Default);

            var buildFilesToDelete = GetCompatibleInstalledItemsForPackage(package.Id, package.GetBuildFiles());

            // Delete the content files
            Project.DeleteFiles(contentFilesToDelete, otherPackages, _fileTransformers);

            // Remove references
            foreach (IPackageAssemblyReference assemblyReference in assemblyReferencesToDelete)
            {
                Project.RemoveReference(assemblyReference.Name);
            }

            // remove the <Import> statement from projects for the .targets and .props files
            foreach (var importFile in buildFilesToDelete)
            {
                string fullImportFilePath = Path.Combine(PathResolver.GetInstallPath(package), importFile.Path);
                Project.RemoveImport(fullImportFilePath);
            }

            // Remove package to the repository
            LocalRepository.RemovePackage(package);

            Logger.Log(MessageLevel.Info, NuGetResources.Log_SuccessfullyRemovedPackageReference, packageFullName, Project.ProjectName);
            OnPackageReferenceRemoved(args);
        }
Esempio n. 29
0
 public IPackage GetLatestPackageInstalled(IEnumerable <string> packageIds)
 {
     return(LocalRepository.GetPackages().Where(p => packageIds.Any(x => x == p.Id)).OrderByDescending(p => p.Version).FirstOrDefault());
 }
        // <summary>
        // Gets all matching installed packages for the given keyword search for which updates are available.
        // </summary>
        // <param name="searchTerms">a string of space delimited search terms</param>
        // <returns>a list of packages</returns>
        //public IQueryable<IPackage> GetPackagesWithUpdates( string searchTerms )
        //{
        //    IQueryable<IPackage> packages = LocalRepository.GetUpdates( SourceRepository.GetPackages(), includePrerelease: false, includeAllVersions: true, targetFramework: null ).AsQueryable();
        //    return GetPackages( packages, searchTerms );
        //}

        /// <summary>
        /// Gets the locally installed package for the given id.
        /// </summary>
        /// <param name="packageId">the Id of a package</param>
        /// <returns>a package</returns>
        public IPackage GetInstalledPackage(string packageId)
        {
            return(LocalRepository.FindPackage(packageId));
        }
Esempio n. 31
0
 /// <summary>
 /// Check to see if this package applies to a project based on 2 criteria:
 /// 1. The package has project content (i.e. content that can be applied to a project lib or content files)
 /// 2. The package is referenced by any other project
 /// 3. The package has at least one dependecy
 ///
 /// This logic will probably fail in one edge case. If there is a meta package that applies to a project
 /// that ended up not being installed in any of the projects and it only exists at solution level.
 /// If this happens, then we think that the following operation applies to the solution instead of showing an error.
 /// To solve that edge case we'd have to walk the graph to find out what the package applies to.
 ///
 /// Technically, the third condition is not totally accurate because a solution-level package can depend on another
 /// solution-level package. However, doing that check here is expensive and we haven't seen such a package.
 /// This condition here is more geared towards guarding against metadata packages, i.e. we shouldn't treat metadata packages
 /// as solution-level ones.
 /// </summary>
 public bool IsProjectLevel(IPackage package)
 {
     return(package.HasProjectContent() ||
            package.DependencySets.SelectMany(p => p.Dependencies).Any() ||
            LocalRepository.IsReferenced(package.Id, package.Version));
 }
 /// <summary>
 /// Will let you know if this package is installed locally. If anyVersion is true
 /// it does not matter which version of the package; otherwise only returns true if
 /// an exact match.
 /// </summary>
 /// <param name="package"></param>
 /// <param name="anyVersion"></param>
 /// <returns></returns>
 public bool IsPackageInstalled(IPackage package, bool anyVersion)
 {
     return((anyVersion) ? LocalRepository.Exists(package.Id) : LocalRepository.Exists(package));
 }
 public bool ExistsUnmoved(string key, LocalRepository repo)
 {
     string sql = string.Format("SELECT COUNT(*) FROM REPOSITORYITEM WHERE RepositoryItemKey = '{0}' AND Moved <> '{1}'", key.Replace("'", "''"), bool.TrueString);
     return int.Parse(database.ExecuteScalar(sql)) > 0;
 }
 /// <summary>
 /// Gets the latest version of the given package.
 /// </summary>
 /// <param name="package">a package</param>
 /// <returns>a package; otherwise null if no package was found</returns>
 public IPackage GetUpdate(IPackage package)
 {
     return(SourceRepository.GetUpdates(LocalRepository.GetPackages(), includePrerelease: false, includeAllVersions: true, targetFrameworks: null).FirstOrDefault(p => package.Id == p.Id && p.IsListed()));
 }
Esempio n. 35
0
        public static RepositoryItem CreateInstance(LocalRepository repo, ListEntry entry)
        {
            RepositoryItem item = new RepositoryItem(repo);
            string key = "";
            if (entry is CommonPrefix) {
                key = ((CommonPrefix)entry).Prefix;
            } else {
                key = ((ObjectEntry)entry).Key;
            }
            item.Key = key;
            item.LocalETag = null;
            item.IsFolder = key.EndsWith("/");

            if(dao.ExistsUnmoved(item)){
                item = dao.GetFomDatabase (item);
            }
            return item;
        }
 /// <summary>
 /// Gets all listed versions of the given package.
 /// </summary>
 /// <param name="packageId">the Id of a package</param>
 /// <returns>
 /// a list of packages
 /// </returns>
 public IEnumerable <IPackage> GetUpdates(string packageId)
 {
     return(SourceRepository.GetUpdates(LocalRepository.GetPackages(), includePrerelease: false, includeAllVersions: true, targetFrameworks: null).Where(p => p.Id == packageId && p.IsListed()));
 }
 public void CreateDefaultRepo(string sqFolder, List<string> ignoreKeys) 
 {
     SQLiteRepositoryDAO repoDao = new SQLiteRepositoryDAO();
     LocalRepository repo = new LocalRepository(sqFolder, "", true);
     repoDao.Create(repo);
     CreateIgnoredList(ignoreKeys, repo);
 }
Esempio n. 38
0
 public TotalFragment(LocalRepository repository)
 {
     this.repository = repository;
 }
 public void InitializeSynchronizers(LocalRepository repo, bool recovery)
 {
     SQLiteRepositoryDAO repoDAO = new SQLiteRepositoryDAO();
     Thread startSync;
     startSync = new Thread(delegate()
     {
         try
         {
             Logger.LogInfo("INFO INITIALIZE SYNC", "Initializing Synchronizers!");
             SynchronizerUnit unit = SynchronizerUnit.GetByRepo(repo);
             if (unit == null)
             {
                 unit = new SynchronizerUnit(repo);
                 SynchronizerUnit.Add(repo, unit);
             }
             unit.InitializeSynchronizers(recovery);
             Logger.LogInfo("INFO INITIALIZE SYNC", "Synchronizers Ready!");
             ErrorType = ERROR_TYPE.NULL;
             OnIdle();
         }
         catch (Exception e)
         {
             Logger.LogInfo("ERROR ON INITIALIZATION SYNC", e);
         }
     });
     startSync.Start();
 }
 public bool IsInstalled(string packageId)
 {
     return(LocalRepository.Exists(packageId));
 }
 public void KillSynchronizers(LocalRepository repo)
 {
     SynchronizerUnit unit = SynchronizerUnit.GetByRepo(repo);
     if (unit != null)
     {
         unit.KillAll();
         Logger.LogInfo("INFO KILL SYNCHRONIZERS", "Synchronizers Killed nicely!");
     }
     else
     {
         Logger.LogInfo("ERROR KILL SYNCHRONIZERS", "Cannot stop synchronizers! [repository not found]");
     }
 }
Esempio n. 42
0
 private void buttonSave_Click(object sender, EventArgs e)
 {
     LocalRepository.Save(int.Parse(this.idTextBox.Text), this.userIdTextBox.Text, this.titleTextBox.Text, this.completedCheckBox.Checked);
 }
 public void CreateRepoFolder(LocalRepository repo)
 {
     if (!Directory.Exists(repo.Path))
     {
         Directory.CreateDirectory(repo.Path);
         SetIcon (repo.Path);
     }
 }
Esempio n. 44
0
 private void button1_Click(object sender, EventArgs e)
 {
     LocalRepository.SaveReportByEntity();
 }
Esempio n. 45
0
        private List <IPackage> UpdateTargetsInternal()
        {
            var projectCollection = new ProjectCollection();
            var project           = new Project(projectCollection);

            var commonPropertyGroup = project.Xml.AddPropertyGroup();
            var target = project.Xml.AddTarget("CheckPackages");

            project.Xml.InitialTargets = "CheckPackages";

            var packages = GetRootPackagesInDependencyOrder();

            foreach (var package in packages)
            {
                if (package.Tags != null && package.Tags.Contains("internal"))
                {
                    continue; // We don't want to polute the Common.targets file with internal packages
                }

                var packageVar    = GetPackageVersionVariable(package.Id);
                var packageTarget = String.Format(@"$(MSBuildThisFileDirectory)..\{0}\{1}.{2}\Targets\{1}.targets", RepositoryPath, package.Id, "$(" + packageVar + ")");

                // Add import
                // <Import Project="..\Packages\Xenko$(SiliconStudioPackageXenkoVersion)\Targets\Xenko.targets" Condition="Exists('..\Packages\Xenko.$(SiliconStudioPackageXenkoVersion)\Targets\Xenko.targets')" />
                var importElement = project.Xml.AddImport(packageTarget);
                importElement.Condition = $@"Exists('{packageTarget}')";

                // Add common properties
                var packageVarSaved    = packageVar + "Saved";
                var packageVarInvalid  = packageVar + "Invalid";
                var packageVarRevision = packageVar + "Revision";
                var packageVarOverride = packageVar + "Override";

                // <SiliconStudioPackageXenkoVersion Condition="'$(SiliconStudioPackageXenkoVersionOverride)' != ''">$(SiliconStudioPackageXenkoVersionOverride)</SiliconStudioPackageXenkoVersion>
                var versionFromOverrideProperty = commonPropertyGroup.AddProperty(packageVar, "$(" + packageVarOverride + ")");
                versionFromOverrideProperty.Condition = "'$(" + packageVarOverride + ")' != ''";

                // <SiliconStudioPackageXenkoVersionSaved>$(SiliconStudioPackageXenkoVersion)</SiliconStudioPackageXenkoVersionSaved>
                commonPropertyGroup.AddProperty(packageVarSaved, "$(" + packageVar + ")");

                // List all the correspondances: Major.minor -> latest installed explicit version

                // Get all the related versions of the same package also installed, and order by Major.Minor
                var allMajorVersions = LocalRepository.FindPackagesById(package.Id).GroupBy(p => p.Version.Version.Major, p => p);
                foreach (var major in allMajorVersions)
                {
                    var majorVersion = major.Key;
                    var minorPkg     = major.GroupBy(p => p.Version.Version.Minor, p => p);
                    foreach (var minor in minorPkg)
                    {
                        var latestPackage = minor.First();
                        // <SiliconStudioPackageXenkoVersionRevision Condition="'$(SiliconStudioPackageXenkoVersion)' == '0.5'">0.5.0-alpha09</SiliconStudioPackageXenkoVersionRevision>
                        var revisionVersionProperty = commonPropertyGroup.AddProperty(packageVarRevision, latestPackage.Version.ToString());
                        revisionVersionProperty.Condition = "'$(" + packageVar + ")' == '" + majorVersion + "." + minor.Key + "'";
                    }
                }

                // Replace the version Major.minor by the full revision name
                // <SiliconStudioPackageXenkoVersion>$(SiliconStudioPackageXenkoVersionRevision)</SiliconStudioPackageXenkoVersion>
                commonPropertyGroup.AddProperty(packageVar, "$(" + packageVarRevision + ")");

                // <SiliconStudioPackageXenkoVersionInvalid Condition="'$(SiliconStudioPackageXenkoVersion)' == '' or !Exists('..\Packages\Xenko.$(SiliconStudioPackageXenkoVersion)\Targets\Xenko.targets')">true</SiliconStudioPackageXenkoVersionInvalid>
                commonPropertyGroup.AddProperty(packageVarInvalid, "true").Condition = "'$(" + packageVar + ")' == '' or !" + importElement.Condition;

                // <SiliconStudioPackageXenkoVersion Condition="'$(SiliconStudioPackageXenkoVersionInvalid)' == 'true'">1.0.0-alpha01</SiliconStudioPackageXenkoVersion>
                // Special case: if major version 1.0 still exists, use it as default (new projects should be created with props file)
                var defaultPackageVersion = LocalRepository.FindPackagesById(package.Id).Select(x => x.Version).FirstOrDefault(x => x.Version.Major == 1 && x.Version.Minor == 0) ?? package.Version;
                var invalidProperty       = commonPropertyGroup.AddProperty(packageVar, defaultPackageVersion.ToString());
                invalidProperty.Condition = "'$(" + packageVarInvalid + ")' == 'true'";

                // Add in CheckPackages target
                // <Warning Condition="$(SiliconStudioPackageXenkoVersionInvalid) == 'true'"  Text="Package Xenko $(SiliconStudioPackageXenkoVersionSaved) not found. Use version $(SiliconStudioPackageXenkoVersion) instead"/>
                // Disable Warning and use only Message for now
                // TODO: Provide a better diagnostic message (in case the version is really not found or rerouted to a newer version)
                var warningTask = target.AddTask("Message");
                warningTask.Condition = invalidProperty.Condition;
                warningTask.SetParameter("Text", $"Package {package.Id} with version [$({packageVarSaved})] not found. Use version $({packageVar}) instead");
            }

            var targetFile = Path.Combine(RootDirectory, DefaultTargets);

            if (File.Exists(targetFile))
            {
                File.Delete(targetFile);
            }
            project.Save(targetFile);

            return(packages);
        }
Esempio n. 46
0
        private async void button2_Click(object sender, EventArgs e)
        {
            WebServiceClient ws = new WebServiceClient();

            LocalRepository.SaveReportWith(await ws.Get(this.filterTextBox.Text));
        }
Esempio n. 47
0
 public static SynchronizerUnit GetByRepo(LocalRepository repo)
 {
     if (repo == null)
         return null;
     SynchronizerUnit unit;
     if (synchronizerUnits.TryGetValue (repo, out unit)) {
         return unit;
     } else {
         return null;
     }
 }
Esempio n. 48
0
 public TotalFragment(LocalRepository repository)
 {
     this.repository = repository;
 }
		public CreateTransactionFragment(LocalRepository repository)
		{
			this.repository = repository;
		}
Esempio n. 50
0
        protected virtual void ExtractPackageFilesToProject(IPackage package)
        {
            // BUG 491: Installing a package with incompatible binaries still does a partial install.
            // Resolve assembly references and content files first so that if this fails we never do anything to the project
            IEnumerable <IPackageAssemblyReference>  assemblyReferences  = GetCompatibleItems(Project, package.AssemblyReferences, package.GetFullName());
            IEnumerable <FrameworkAssemblyReference> frameworkReferences = Project.GetCompatibleItemsCore(package.FrameworkAssemblies);
            IEnumerable <IPackageFile> contentFiles = Project.GetCompatibleItemsCore(package.GetContentFiles());

            try
            {
                // Add content files
                Project.AddFiles(contentFiles, _fileTransformers);

                // Add the references to the reference path
                foreach (IPackageAssemblyReference assemblyReference in assemblyReferences)
                {
                    if (assemblyReference.IsEmptyFolder())
                    {
                        continue;
                    }

                    // Get the physical path of the assembly reference
                    string referencePath         = Path.Combine(PathResolver.GetInstallPath(package), assemblyReference.Path);
                    string relativeReferencePath = PathUtility.GetRelativePath(Project.Root, referencePath);

                    if (Project.ReferenceExists(assemblyReference.Name))
                    {
                        Project.RemoveReference(assemblyReference.Name);
                    }

                    using (Stream stream = assemblyReference.GetStream())
                    {
                        Project.AddReference(relativeReferencePath, stream);
                    }
                }

                // Add GAC/Framework references
                foreach (FrameworkAssemblyReference frameworkReference in frameworkReferences)
                {
                    if (!Project.ReferenceExists(frameworkReference.AssemblyName))
                    {
                        Project.AddFrameworkReference(frameworkReference.AssemblyName);
                    }
                }
            }
            finally
            {
                if (_packageReferenceRepository != null)
                {
                    // save the used project's framework if the repository supports it.
                    _packageReferenceRepository.AddPackage(package.Id, package.Version, Project.TargetFramework);
                }
                else
                {
                    // Add package to local repository in the finally so that the user can uninstall it
                    // if any exception occurs. This is easier than rolling back since the user can just
                    // manually uninstall things that may have failed.
                    // If this fails then the user is out of luck.
                    LocalRepository.AddPackage(package);
                }
            }
        }
Esempio n. 51
0
 public IList <IPackage> GetPackagesInstalled(string packageId)
 {
     return(LocalRepository.GetPackages().Where(p => p.Id == packageId).OrderByDescending(p => p.Version).ToArray());
 }
Esempio n. 52
0
 public bool IsPackageInstalled(IPackage package)
 {
     return(LocalRepository.Exists(package));
 }
 public override List<RepositoryIgnore> All(LocalRepository repo)
 {
     return Select(string.Format("SELECT * FROM RepositoryIgnore where RepositoryId = '{0}' ", repo.Id));
 }
Esempio n. 54
0
        protected virtual void ExtractPackageFilesToProject(IPackage package)
        {
            // BUG 491: Installing a package with incompatible binaries still does a partial install.
            // Resolve assembly references and content files first so that if this fails we never do anything to the project
            List <IPackageAssemblyReference>  assemblyReferences  = Project.GetCompatibleItemsCore(package.AssemblyReferences).ToList();
            List <FrameworkAssemblyReference> frameworkReferences = Project.GetCompatibleItemsCore(package.FrameworkAssemblies).ToList();
            List <IPackageFile> contentFiles = Project.GetCompatibleItemsCore(package.GetContentFiles()).ToList();
            List <IPackageFile> buildFiles   = Project.GetCompatibleItemsCore(package.GetBuildFiles()).ToList();

            // If the package doesn't have any compatible assembly references or content files,
            // throw, unless it's a meta package.
            if (assemblyReferences.Count == 0 && frameworkReferences.Count == 0 && contentFiles.Count == 0 && buildFiles.Count == 0 &&
                (package.FrameworkAssemblies.Any() || package.AssemblyReferences.Any() || package.GetContentFiles().Any() || package.GetBuildFiles().Any()))
            {
                // for portable framework, we want to show the friendly short form (e.g. portable-win8+net45+wp8) instead of ".NETPortable, Profile=Profile104".
                FrameworkName targetFramework       = Project.TargetFramework;
                string        targetFrameworkString = targetFramework.IsPortableFramework()
                                                    ? VersionUtility.GetShortFrameworkName(targetFramework)
                                                    : targetFramework != null?targetFramework.ToString() : null;

                throw new InvalidOperationException(
                          String.Format(CultureInfo.CurrentCulture,
                                        NuGetResources.UnableToFindCompatibleItems, package.GetFullName(), targetFrameworkString));
            }

            // IMPORTANT: this filtering has to be done AFTER the 'if' statement above,
            // so that we don't throw the exception in case the <References> filters out all assemblies.
            FilterAssemblyReferences(assemblyReferences, package.PackageAssemblyReferences);

            try
            {
                // Log target framework info for debugging
                LogTargetFrameworkInfo(package, assemblyReferences, contentFiles, buildFiles);

                // Add content files
                Project.AddFiles(contentFiles, _fileTransformers);

                // Add the references to the reference path
                foreach (IPackageAssemblyReference assemblyReference in assemblyReferences)
                {
                    if (assemblyReference.IsEmptyFolder())
                    {
                        continue;
                    }

                    // Get the physical path of the assembly reference
                    string referencePath         = Path.Combine(PathResolver.GetInstallPath(package), assemblyReference.Path);
                    string relativeReferencePath = PathUtility.GetRelativePath(Project.Root, referencePath);

                    if (Project.ReferenceExists(assemblyReference.Name))
                    {
                        Project.RemoveReference(assemblyReference.Name);
                    }

                    // The current implementation of all ProjectSystem does not use the Stream parameter at all.
                    // We can't change the API now, so just pass in a null stream.
                    Project.AddReference(relativeReferencePath, Stream.Null);
                }

                // Add GAC/Framework references
                foreach (FrameworkAssemblyReference frameworkReference in frameworkReferences)
                {
                    if (!Project.ReferenceExists(frameworkReference.AssemblyName))
                    {
                        Project.AddFrameworkReference(frameworkReference.AssemblyName);
                    }
                }

                foreach (var importFile in buildFiles)
                {
                    string fullImportFilePath = Path.Combine(PathResolver.GetInstallPath(package), importFile.Path);
                    Project.AddImport(
                        fullImportFilePath,
                        importFile.Path.EndsWith(".props", StringComparison.OrdinalIgnoreCase) ? ProjectImportLocation.Top : ProjectImportLocation.Bottom);
                }
            }
            finally
            {
                if (_packageReferenceRepository != null)
                {
                    // save the used project's framework if the repository supports it.
                    _packageReferenceRepository.AddPackage(package.Id, package.Version, package.DevelopmentDependency, Project.TargetFramework);
                }
                else
                {
                    // Add package to local repository in the finally so that the user can uninstall it
                    // if any exception occurs. This is easier than rolling back since the user can just
                    // manually uninstall things that may have failed.
                    // If this fails then the user is out of luck.
                    LocalRepository.AddPackage(package);
                }
            }
        }
 public void Remove(LocalRepository repo, string path)
 {
     database.ExecuteNonQuery(string.Format("DELETE FROM RepositoryIgnore where RepositoryId = '{0}' AND Path = '{1}'", repo.Id, path));
 }
Esempio n. 56
0
 public static RepositoryItem CreateInstance(LocalRepository repo, string key)
 {
     key = key.Replace(Path.DirectorySeparatorChar.ToString(), "/");
     return CreateInstance (repo, key, null, null);
 }
Esempio n. 57
0
 public SQLiteEventDAO(LocalRepository repo)
 {
     this.repo = repo;
 }
Esempio n. 58
0
        public static RepositoryItem CreateInstance(LocalRepository repo, string key, string eTag, string localETag)
        {
            key = key.Replace(Path.DirectorySeparatorChar.ToString(), "/");
            RepositoryItem item = new RepositoryItem(repo);
            item.Key = key;
            item.ETag = eTag;
            item.LocalETag = localETag;
            item.IsFolder = key.EndsWith("/");

            if(dao.ExistsUnmoved(item)){
                item = dao.GetFomDatabase (item);
            }
            return item;
        }
        public void CanGetHtmlForOneEmailWithData()
        {
            var generationDate = new DateTime(2013, 1, 17);

            var emailSender                 = new Mock <IEmailSender>();
            var contactRepository           = new LocalRepository <Contact>();
            var newContactDefinitionBuilder = new Mock <INotificationEmailDefenitionBuilder>();
            var taskCreator                 = new Mock <ITaskManager>();
            var client = ModelHelper.TestClient1AllDataNoReferences;

            var user1 = ModelHelper.TestUser1AllDataNoReferences;

            client.InsideUserSets = new List <InsideUser> {
                user1
            };

            var contactProperty = new ContactProperty()
            {
                ContactId = 1,
                Type      = "Duration",
                Value     = "90"
            };

            var contactForUser = new Contact()
            {
                Id       = 1,
                ClientId = client.Id,
                LeadType = "Phone"
            };

            contactForUser.Client = client;
            contactForUser.Property.Add(contactProperty);
            contactRepository.Add(contactForUser);

            var newContactEmailDefintion1 = new NotificationEmailDefintion();

            newContactEmailDefintion1.ConsultantEmail = "*****@*****.**";
            newContactEmailDefintion1.ConsultantImage = "http:path.to/image.jpg";
            newContactEmailDefintion1.ConsultantName  = "Consultant Name";
            newContactEmailDefintion1.ConsultantPhone = "08654321";

            newContactEmailDefintion1.UserName          = "******";
            newContactEmailDefintion1.Type              = contactForUser.LeadType;
            newContactEmailDefintion1.UserEmail         = "*****@*****.**";
            newContactEmailDefintion1.Date              = "2014-01-01";
            newContactEmailDefintion1.From              = "08123456";
            newContactEmailDefintion1.InsideUrl         = "http://inside.helloy.se/Account/AuthenticateToken?token=Aa1Bb2Cc3Dd4Ee5%26returnUrl=%2freport%2fphone%3fclientid%3d1";
            newContactEmailDefintion1.SubjectOrDuration = "1:30";



            newContactDefinitionBuilder.Setup(rb => rb.GetDefinition(contactForUser.Id, user1.Id))
            .Returns(newContactEmailDefintion1);



            var newContactEmailSender = new UserNotificationEmailSender(emailSender.Object,
                                                                        newContactDefinitionBuilder.Object);

            var taskMessage = JsonConvert.SerializeObject(new UserSpecificNotificationTaskMessage()
            {
                ContactId = contactForUser.Id, UserId = user1.Id
            });

            emailSender.Setup(es => es.Send(It.IsAny <Mandrill.EmailMessage>())).Callback <Mandrill.EmailMessage>(em =>
            {
                var html = em.html;

                Assert.AreEqual(1, Regex.Matches(html, "nytt telefonsamtal").Count);

                Assert.AreEqual(1, Regex.Matches(html, "08123456").Count);

                Assert.AreEqual(1, em.to.Count());
                Assert.AreEqual("*****@*****.**", em.to.ElementAt(0).email);
                Assert.AreEqual("The Company AB", em.to.ElementAt(0).name);
                Assert.AreEqual("*****@*****.**", em.from_email);
                Assert.AreEqual("Consultant Name", em.from_name);

                string actualHtml = Regex.Replace(html, @"^\s+", string.Empty, RegexOptions.Multiline).TrimEnd();
                var expectedHtml  = Regex.Replace(@"<html>
<meta http-equiv=""Content-Type"" content=""text/html; charset=UTF-8"">
<meta property=""og:title"" content=""*|MC:SUBJECT|*"">

<body style=""-webkit-text-size-adjust: none;margin: 0;padding: 3%;font-family: Helvetica,Arial,sans-serif;line-height: 150%;color: #444;width: 94%;"">
    <p style=""font-family: Helvetica,Arial,sans-serif;line-height: 150%;color: #444;font-size: 15px;margin: 0 0 10px;"">Helloy The Company AB!</p>
    <p class=""lighter-text"" style=""font-family: Helvetica,Arial,sans-serif;line-height: 150%;color: #444;font-size: 15px;margin: 0 0 10px;"">Du har fått ett nytt telefonsamtal från 08123456. <a href=""http://inside.helloy.se/Account/AuthenticateToken?token=Aa1Bb2Cc3Dd4Ee5%26returnUrl=%2freport%2fphone%3fclientid%3d1"" style=""color: #009dd2;"">Lyssna</a> eller 
                    <a href=""http://inside.helloy.se/Account/AuthenticateToken?token=Aa1Bb2Cc3Dd4Ee5%26returnUrl=%2freport%2fphone%3fclientid%3d1"" style=""color: #009dd2;"">Betygsätt</a> direkt!</p>
    <p class=""lighter-text"" style=""font-family: Helvetica,Arial,sans-serif;line-height: 150%;color: #444;font-size: 15px;margin: 0 0 10px;"">Datum: 2014-01-01 </p>
    <p class=""lighter-text"" style=""font-family: Helvetica,Arial,sans-serif;line-height: 150%;color: #444;font-size: 15px;margin: 0 0 10px;"">Samtalslängd: 1:30</p>
    <table style=""margin: 20px 0;"">
        <p style=""font-family: Helvetica,Arial,sans-serif;line-height: 150%;color: #444;font-size: 15px;margin: 0 0 10px;"">Med vänliga hälsningar</p>
<tr>
    <td>
        <p style=""font-family: Helvetica,Arial,sans-serif;line-height: 150%;color: #444;font-size: 15px;margin: 0 0 10px;"">Consultant Name</p>
        <p style=""font-family: Helvetica,Arial,sans-serif;line-height: 150%;color: #444;font-size: 15px;margin: 0 0 10px;""><a href=""tel:08654321"" style=""color: #009dd2;"">08654321</a></p>
        <p style=""font-family: Helvetica,Arial,sans-serif;line-height: 150%;color: #444;font-size: 15px;margin: 0 0 10px;""><a href=""mailto:[email protected]"" style=""color: #009dd2;"">[email protected]</a></p>
    </td>
    <td>
        <img class=""greyscale"" style=""width: 115px;margin-left: 50px;border: none;font-size: 14px;font-weight: bold;height: auto;line-height: 100%;outline: none;text-decoration: none;text-transform: capitalize;-webkit-filter: grayscale(1);-moz-filter: grayscale(100%);filter: gray;"" src=""http:path.to/image.jpg"">
    </td>
</tr>
    </table>
</body>
</html>", @"^\s+", string.Empty, RegexOptions.Multiline).TrimEnd();
                actualHtml        = Regex.Replace(actualHtml, @"\\r\\n", "");
                expectedHtml      = Regex.Replace(actualHtml, @"\\r\\n", "");
                Assert.AreEqual(expectedHtml, actualHtml);
            });

            newContactEmailSender.PerformTask(new InsideModel.Models.Task()
            {
                Message = taskMessage, EarliestExecution = generationDate
            });
        }
        /// <summary>
        /// Mark all of the sessions contained in the source package as being read.
        /// </summary>
        public void MarkContentsAsRead(LocalRepository repository)
        {
            //we need to make sure we have the package lock at least long enough to keep the working package and grab sessions.
            if (Package == null)
            {
                throw new NullReferenceException("There is no working package available, indicating an internal Loupe programming error.");
            }

            try
            {
                if (!Log.SilentMode)
                {
                    Log.Write(LogMessageSeverity.Verbose, Packager.LogCategory, "Marking all sessions in the package as read", null);
                }

                IList <SessionHeader> allSessions = Package.GetSessions();

                if (allSessions.Count == 0)
                {
                    if (!Log.SilentMode)
                    {
                        Log.Write(LogMessageSeverity.Verbose, Packager.LogCategory, "No Sessions to Mark Read", "There are unexpectedly no sessions in the working package, so none can be marked as read.  We shouldn't have gotten to this point if tehre are no sessions in the package.");
                    }
                }
                else
                {
                    if (!Log.SilentMode)
                    {
                        Log.Write(LogMessageSeverity.Verbose, Packager.LogCategory, "Found sessions to mark as read", "There are {0} sessions to be marked as read (although some may have been marked as read before).", allSessions.Count);
                    }

                    //assemble the array of sessions to change
                    List <Guid> sessionIds = new List <Guid>(allSessions.Count);
                    foreach (var session in allSessions)
                    {
                        sessionIds.Add(session.Id);
                    }

                    try
                    {
                        repository.SetSessionsNew(sessionIds.ToArray(), false);
                    }
                    catch (Exception ex)
                    {
                        if (!Log.SilentMode)
                        {
                            Log.Write(LogMessageSeverity.Warning, LogWriteMode.Queued, ex, Packager.LogCategory, "Error marking an included session as read",
                                      "Unable to mark one or more of the sessions included in the package as read.  This won't prevent the package from being sent.  Exception:\r\n{0}",
                                      ex.Message);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                if (!Log.SilentMode)
                {
                    Log.Write(LogMessageSeverity.Warning, LogWriteMode.Queued, ex, Packager.LogCategory, "General error while marking included sessions as read",
                              "A general error occurred while marking the source sessions included in the package as read.  This won't prevent the package from being sent.\r\nException ({0}):\r\n{1}",
                              ex.GetType().FullName, ex.Message);
                }
                throw;
            }
        }