You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
	
	
		
			
				
					
						
							|  |  |  | // Copyright © 2022 Rangeproof Pty Ltd. All rights reserved. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import GRDB | 
					
						
							|  |  |  | import SessionMessagingKit | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public class NewConversationViewModel { | 
					
						
							|  |  |  |     struct SectionData { | 
					
						
							|  |  |  |         var sectionName: String | 
					
						
							|  |  |  |         var contacts: [Profile] | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     let sectionData: [SectionData] | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     init() { | 
					
						
							|  |  |  |         let contactProfiles: [Profile] = Profile.fetchAllContactProfiles(excludeCurrentUser: true) | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         var groupedContacts: [String: SectionData] = [:] | 
					
						
							|  |  |  |         contactProfiles.forEach { profile in | 
					
						
							|  |  |  |             let displayName = NSMutableString(string: profile.displayName()) | 
					
						
							|  |  |  |             CFStringTransform(displayName, nil, kCFStringTransformToLatin, false) | 
					
						
							|  |  |  |             CFStringTransform(displayName, nil, kCFStringTransformStripDiacritics, false) | 
					
						
							|  |  |  |              | 
					
						
							|  |  |  |             let initialCharacter: String = (displayName.length > 0 ? displayName.substring(to: 1) : "") | 
					
						
							|  |  |  |             let section: String = initialCharacter.capitalized.isSingleAlphabet ? | 
					
						
							|  |  |  |             initialCharacter.capitalized : | 
					
						
							|  |  |  |                 "#" | 
					
						
							|  |  |  |              | 
					
						
							|  |  |  |             if groupedContacts[section] == nil { | 
					
						
							|  |  |  |                 groupedContacts[section] = SectionData( | 
					
						
							|  |  |  |                     sectionName: section, | 
					
						
							|  |  |  |                     contacts: [] | 
					
						
							|  |  |  |                 ) | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             groupedContacts[section]?.contacts.append(profile) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         sectionData = groupedContacts.values.sorted { $0.sectionName < $1.sectionName } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |