public static RegularFolderRecord FolderRecordForCategory(ItemCategory itemCategory) { RegularFolderRecord folderRecord; if (!foldersByCategory.TryGetValue(itemCategory, out folderRecord)) { DateTime now = DateTime.Now; folderRecord = new RegularFolderRecord() { title = Properties.Strings.ResourceManager.GetString(string.Concat("FolderName_", Enum.GetName(typeof(ItemCategory), itemCategory))), createdAt = now, updatedAt = now, typeName = RecordType.RegularFolder, uuid = Guid.NewGuid() }; foldersByCategory.Add(itemCategory, folderRecord); iconsByUuid.Add(folderRecord.uuid, iconsByCategory[itemCategory]); } return(folderRecord); }
public void Import(List <Records.BaseRecord> records, PwDatabase pwDatabase, IStatusLogger statusLogger, UserPrefs userPrefs) { List <Records.ItemRecord> trashedRecords = null; records.RemoveAll(record => record is Records.SavedSearchRecord); // Copy trashed items to another collection if (userPrefs.KeepTrashedItems) { trashedRecords = records.FindAll(record => (record is Records.ItemRecord) && (record as Records.ItemRecord).trashed).ConvertAll <Records.ItemRecord>(record => record as Records.ItemRecord); } // Filter out trashed items from main set records.RemoveAll(record => (record is Records.ItemRecord) && (record as Records.ItemRecord).trashed); if (userPrefs.FolderLayout == FolderLayout.Category) { // Since they're not being used, filter out user-defined folders from main set records = records.FindAll(record => record is Records.ItemRecord); // Assign parent folder to items according to their category foreach (Records.ItemRecord itemRecord in records.ConvertAll(record => record as Records.ItemRecord)) { ItemCategory itemCategory = ItemCategory.Unknown; if (!categoriesByRecordType.TryGetValue(itemRecord.typeName, out itemCategory)) { itemCategory = ItemCategory.Unknown; } Records.RegularFolderRecord categoryFolder = Records.RegularFolderRecord.FolderRecordForCategory(itemCategory); if (!records.Contains(categoryFolder)) { records.Add(categoryFolder); } itemRecord.folderUuid = categoryFolder.uuid; } } else if (userPrefs.FolderLayout == FolderLayout.UserDefined) { Records.RegularFolderRecord unassignedFolder = null; // Assign orphan items the "Unassigned" folder as parent foreach (Records.ItemRecord itemRecord in records.FindAll(record => (record is Records.ItemRecord) && Guid.Empty.Equals((record as Records.ItemRecord).folderUuid))) { if (unassignedFolder == null) { unassignedFolder = Records.RegularFolderRecord.UnassignedFolderRecord; records.Add(unassignedFolder); } itemRecord.folderUuid = Records.RegularFolderRecord.UnassignedFolderRecord.uuid; } } IEnumerable <TreeNode <Records.BaseRecord> > tree = buildTree(records); PwGroup rootGroup = null; if (userPrefs.CreateParentFolder) { rootGroup = new PwGroup(true, true) { Name = "1Password Import on " + DateTimeFormatter.FormatDateTime(DateTime.Now, userPrefs.DateFormat) } } ; else { rootGroup = pwDatabase.RootGroup; } foreach (TreeNode <Records.BaseRecord> node in tree) { importRecord(node, rootGroup, pwDatabase, userPrefs); } if (trashedRecords != null && trashedRecords.Count > 0) { PwGroup trashGroup = Records.RegularFolderRecord.TrashFolderRecord.CreatePwGroup(); foreach (Records.ItemRecord trashedRecord in trashedRecords) { PwEntry entry = trashedRecord.CreatePwEntry(pwDatabase, userPrefs); trashGroup.AddEntry(entry, true); } rootGroup.AddGroup(trashGroup, true); } if (userPrefs.CreateParentFolder) { pwDatabase.RootGroup.AddGroup(rootGroup, true); } }