diff --git a/Monal/Classes/ActiveChatsViewController.m b/Monal/Classes/ActiveChatsViewController.m index c7402871cb..24771259ab 100755 --- a/Monal/Classes/ActiveChatsViewController.m +++ b/Monal/Classes/ActiveChatsViewController.m @@ -267,10 +267,8 @@ -(void) handleRefreshDisplayNotification:(NSNotification*) notification { // filter notifcations from within this class if([notification.object isKindOfClass:[ActiveChatsViewController class]]) - { return; - } - [self refreshDisplay]; + [self refresh]; } -(void) handleContactRemoved:(NSNotification*) notification @@ -410,8 +408,7 @@ -(void) sheetDismissed -(void) refresh { dispatch_async(dispatch_get_main_queue(), ^{ - if(self.unpinnedContacts.count == 0 && self.pinnedContacts.count == 0) - [self refreshDisplay]; // load contacts + [self refreshDisplay]; // load contacts [self segueToIntroScreensIfNeeded]; }); } @@ -523,7 +520,7 @@ -(void) syncContacts [store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError* _Nullable error) { if(granted) { - NSString* countryCode = @"+49"; //[[HelperTools defaultsDB] objectForKey:@"Quicksy_countryCode"]; + NSString* countryCode = [[HelperTools defaultsDB] objectForKey:@"Quicksy_countryCode"]; NSCharacterSet* allowedCharacters = [[NSCharacterSet characterSetWithCharactersInString:@"+0123456789"] invertedSet]; NSMutableDictionary* numbers = [NSMutableDictionary new]; @@ -540,7 +537,7 @@ -(void) syncContacts if(countryCode != nil && ![number hasPrefix:@"+"] && ![number hasPrefix:@"00"]) { DDLogVerbose(@"Adding country code '%@' to number: %@", countryCode, number); - number = [NSString stringWithFormat:@"%@%@", countryCode, number]; + number = [NSString stringWithFormat:@"%@%@", countryCode, [number hasPrefix:@"0"] ? [number substringFromIndex:1] : number]; } numbers[number] = name; } diff --git a/Monal/Classes/CountryCodes.swift b/Monal/Classes/CountryCodes.swift new file mode 100644 index 0000000000..8d306d0e82 --- /dev/null +++ b/Monal/Classes/CountryCodes.swift @@ -0,0 +1,243 @@ +// This file was automatically generated by scripts/itu_pdf_to_swift.py +// Please run this python script again to update this file +// Example ../scripts/itu_pdf_to_swift.py > Classes/CountryCodes.swift + +public struct Quicksy_Country: Identifiable, Hashable { + public let id = UUID() + public let name: String + public let code: String + public let pattern: String +} + +public let COUNTRY_CODES: [Quicksy_Country] = [ + Quicksy_Country(name: NSLocalizedString("Afghanistan", comment:"quicksy country"), code: "+93", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("Albania", comment:"quicksy country"), code: "+355", pattern: "^([0-9]{3,9})$") , + Quicksy_Country(name: NSLocalizedString("Algeria", comment:"quicksy country"), code: "+213", pattern: "^([0-9]{8}|[0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("American Samoa", comment:"quicksy country"), code: "+1", pattern: "^(684)([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Andorra", comment:"quicksy country"), code: "+376", pattern: "^([0-9]{6}|[0-9]{8}|[0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("Angola", comment:"quicksy country"), code: "+244", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("Anguilla", comment:"quicksy country"), code: "+1", pattern: "^(264)([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Antigua and Barbuda", comment:"quicksy country"), code: "+1", pattern: "^(268)([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Argentina", comment:"quicksy country"), code: "+54", pattern: "^([0-9]{10})$") , + Quicksy_Country(name: NSLocalizedString("Armenia", comment:"quicksy country"), code: "+374", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Aruba", comment:"quicksy country"), code: "+297", pattern: "^([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Australia", comment:"quicksy country"), code: "+61", pattern: "^([0-9]{5,15})$") , + Quicksy_Country(name: NSLocalizedString("Australian External Territories", comment:"quicksy country"), code: "+672", pattern: "^([0-9]{6})$") , + Quicksy_Country(name: NSLocalizedString("Austria", comment:"quicksy country"), code: "+43", pattern: "^([0-9]{4,13})$") , + Quicksy_Country(name: NSLocalizedString("Azerbaijan", comment:"quicksy country"), code: "+994", pattern: "^([0-9]{8,9})$") , + Quicksy_Country(name: NSLocalizedString("Bahamas", comment:"quicksy country"), code: "+1", pattern: "^(242)([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Bahrain", comment:"quicksy country"), code: "+973", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Bangladesh", comment:"quicksy country"), code: "+880", pattern: "^([0-9]{6,10})$") , + Quicksy_Country(name: NSLocalizedString("Barbados", comment:"quicksy country"), code: "+1", pattern: "^(246)([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Belarus", comment:"quicksy country"), code: "+375", pattern: "^([0-9]{9,10})$") , + Quicksy_Country(name: NSLocalizedString("Belgium", comment:"quicksy country"), code: "+32", pattern: "^([0-9]{8,9})$") , + Quicksy_Country(name: NSLocalizedString("Belize", comment:"quicksy country"), code: "+501", pattern: "^([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Benin", comment:"quicksy country"), code: "+229", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Bermuda", comment:"quicksy country"), code: "+1", pattern: "^(441)([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Bhutan", comment:"quicksy country"), code: "+975", pattern: "^([0-9]{7,8})$") , + Quicksy_Country(name: NSLocalizedString("Bolivia (Plurinational State of)", comment:"quicksy country"), code: "+591", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Bonaire, Sint Eustatius and Saba", comment:"quicksy country"), code: "+599", pattern: "^([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Bosnia and Herzegovina", comment:"quicksy country"), code: "+387", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Botswana", comment:"quicksy country"), code: "+267", pattern: "^([0-9]{7,8})$") , + Quicksy_Country(name: NSLocalizedString("Brazil", comment:"quicksy country"), code: "+55", pattern: "^([0-9]{10})$") , + Quicksy_Country(name: NSLocalizedString("British Virgin Islands", comment:"quicksy country"), code: "+1", pattern: "^(284)([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Brunei Darussalam", comment:"quicksy country"), code: "+673", pattern: "^([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Bulgaria", comment:"quicksy country"), code: "+359", pattern: "^([0-9]{7,9})$") , + Quicksy_Country(name: NSLocalizedString("Burkina Faso", comment:"quicksy country"), code: "+226", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Burundi", comment:"quicksy country"), code: "+257", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Cambodia", comment:"quicksy country"), code: "+855", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Cameroon", comment:"quicksy country"), code: "+237", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Canada", comment:"quicksy country"), code: "+1", pattern: "^([0-9]{10})$") , + Quicksy_Country(name: NSLocalizedString("Cape Verde", comment:"quicksy country"), code: "+238", pattern: "^([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Cayman Islands", comment:"quicksy country"), code: "+1", pattern: "^(345)([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Central African Rep.", comment:"quicksy country"), code: "+236", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Chad", comment:"quicksy country"), code: "+235", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Chile", comment:"quicksy country"), code: "+56", pattern: "^([0-9]{8,9})$") , + Quicksy_Country(name: NSLocalizedString("China", comment:"quicksy country"), code: "+86", pattern: "^([0-9]{5,12})$") , + Quicksy_Country(name: NSLocalizedString("Colombia", comment:"quicksy country"), code: "+57", pattern: "^([0-9]{8}|[0-9]{10})$") , + Quicksy_Country(name: NSLocalizedString("Comoros", comment:"quicksy country"), code: "+269", pattern: "^([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Congo", comment:"quicksy country"), code: "+242", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("Cook Islands", comment:"quicksy country"), code: "+682", pattern: "^([0-9]{5})$") , + Quicksy_Country(name: NSLocalizedString("Costa Rica", comment:"quicksy country"), code: "+506", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Côte d'Ivoire", comment:"quicksy country"), code: "+225", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Croatia", comment:"quicksy country"), code: "+385", pattern: "^([0-9]{8,12})$") , + Quicksy_Country(name: NSLocalizedString("Cuba", comment:"quicksy country"), code: "+53", pattern: "^([0-9]{6,8})$") , + Quicksy_Country(name: NSLocalizedString("Curaçao", comment:"quicksy country"), code: "+599", pattern: "^([0-9]{7,8})$") , + Quicksy_Country(name: NSLocalizedString("Cyprus", comment:"quicksy country"), code: "+357", pattern: "^([0-9]{8}|[0-9]{11})$") , + Quicksy_Country(name: NSLocalizedString("Czech Rep.", comment:"quicksy country"), code: "+420", pattern: "^([0-9]{4,12})$") , + Quicksy_Country(name: NSLocalizedString("Dem. People's Rep. of Korea", comment:"quicksy country"), code: "+850", pattern: "^([0-9]{6,17})$") , + Quicksy_Country(name: NSLocalizedString("Dem. Rep. of the Congo", comment:"quicksy country"), code: "+243", pattern: "^([0-9]{5,9})$") , + Quicksy_Country(name: NSLocalizedString("Denmark", comment:"quicksy country"), code: "+45", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Diego Garcia", comment:"quicksy country"), code: "+246", pattern: "^([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Djibouti", comment:"quicksy country"), code: "+253", pattern: "^([0-9]{6})$") , + Quicksy_Country(name: NSLocalizedString("Dominica", comment:"quicksy country"), code: "+1", pattern: "^(767)([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Dominican Rep.", comment:"quicksy country"), code: "+1", pattern: "^(809|829)([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Ecuador", comment:"quicksy country"), code: "+593", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Egypt", comment:"quicksy country"), code: "+20", pattern: "^([0-9]{7,9})$") , + Quicksy_Country(name: NSLocalizedString("El Salvador", comment:"quicksy country"), code: "+503", pattern: "^([0-9]{7}|[0-9]{8}|[0-9]{11})$") , + Quicksy_Country(name: NSLocalizedString("Equatorial Guinea", comment:"quicksy country"), code: "+240", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("Eritrea", comment:"quicksy country"), code: "+291", pattern: "^([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Estonia", comment:"quicksy country"), code: "+372", pattern: "^([0-9]{7,10})$") , + Quicksy_Country(name: NSLocalizedString("Ethiopia", comment:"quicksy country"), code: "+251", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("Falkland Islands (Malvinas)", comment:"quicksy country"), code: "+500", pattern: "^([0-9]{5})$") , + Quicksy_Country(name: NSLocalizedString("Faroe Islands", comment:"quicksy country"), code: "+298", pattern: "^([0-9]{6})$") , + Quicksy_Country(name: NSLocalizedString("Fiji", comment:"quicksy country"), code: "+679", pattern: "^([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Finland", comment:"quicksy country"), code: "+358", pattern: "^([0-9]{5,12})$") , + Quicksy_Country(name: NSLocalizedString("France", comment:"quicksy country"), code: "+33", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("French Departments and Territories in the Indian Ocean", comment:"quicksy country"), code: "+262", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("French Guiana", comment:"quicksy country"), code: "+594", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("French Polynesia", comment:"quicksy country"), code: "+689", pattern: "^([0-9]{6})$") , + Quicksy_Country(name: NSLocalizedString("Gabon", comment:"quicksy country"), code: "+241", pattern: "^([0-9]{6}|[0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Gambia", comment:"quicksy country"), code: "+220", pattern: "^([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Georgia", comment:"quicksy country"), code: "+995", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("Germany", comment:"quicksy country"), code: "+49", pattern: "^([0-9]{6,13})$") , + Quicksy_Country(name: NSLocalizedString("Ghana", comment:"quicksy country"), code: "+233", pattern: "^([0-9]{5,9})$") , + Quicksy_Country(name: NSLocalizedString("Gibraltar", comment:"quicksy country"), code: "+350", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Greece", comment:"quicksy country"), code: "+30", pattern: "^([0-9]{10})$") , + Quicksy_Country(name: NSLocalizedString("Greenland", comment:"quicksy country"), code: "+299", pattern: "^([0-9]{6})$") , + Quicksy_Country(name: NSLocalizedString("Grenada", comment:"quicksy country"), code: "+1", pattern: "^(473)([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Guadeloupe", comment:"quicksy country"), code: "+590", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("Guam", comment:"quicksy country"), code: "+1", pattern: "^(671)([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Guatemala", comment:"quicksy country"), code: "+502", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Guinea", comment:"quicksy country"), code: "+224", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Guinea-Bissau", comment:"quicksy country"), code: "+245", pattern: "^([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Guyana", comment:"quicksy country"), code: "+592", pattern: "^([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Haiti", comment:"quicksy country"), code: "+509", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Honduras", comment:"quicksy country"), code: "+504", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Hong Kong, China", comment:"quicksy country"), code: "+852", pattern: "^([0-9]{4}|[0-9]{8,9})$") , + Quicksy_Country(name: NSLocalizedString("Hungary", comment:"quicksy country"), code: "+36", pattern: "^([0-9]{8,9})$") , + Quicksy_Country(name: NSLocalizedString("Iceland", comment:"quicksy country"), code: "+354", pattern: "^([0-9]{7}|[0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("India", comment:"quicksy country"), code: "+91", pattern: "^([0-9]{7,10})$") , + Quicksy_Country(name: NSLocalizedString("Indonesia", comment:"quicksy country"), code: "+62", pattern: "^([0-9]{5,10})$") , + Quicksy_Country(name: NSLocalizedString("Iran (Islamic Republic of)", comment:"quicksy country"), code: "+98", pattern: "^([0-9]{6,10})$") , + Quicksy_Country(name: NSLocalizedString("Iraq", comment:"quicksy country"), code: "+964", pattern: "^([0-9]{8,10})$") , + Quicksy_Country(name: NSLocalizedString("Ireland", comment:"quicksy country"), code: "+353", pattern: "^([0-9]{7,11})$") , + Quicksy_Country(name: NSLocalizedString("Israel", comment:"quicksy country"), code: "+972", pattern: "^([0-9]{8,9})$") , + Quicksy_Country(name: NSLocalizedString("Italy", comment:"quicksy country"), code: "+39", pattern: "^([0-9]{1,11})$") , + Quicksy_Country(name: NSLocalizedString("Jamaica", comment:"quicksy country"), code: "+1", pattern: "^(876)([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Japan", comment:"quicksy country"), code: "+81", pattern: "^([0-9]{5,13})$") , + Quicksy_Country(name: NSLocalizedString("Jordan", comment:"quicksy country"), code: "+962", pattern: "^([0-9]{5,9})$") , + Quicksy_Country(name: NSLocalizedString("Kazakhstan", comment:"quicksy country"), code: "+7", pattern: "^([0-9]{10})$") , + Quicksy_Country(name: NSLocalizedString("Kenya", comment:"quicksy country"), code: "+254", pattern: "^([0-9]{6,10})$") , + Quicksy_Country(name: NSLocalizedString("Kiribati", comment:"quicksy country"), code: "+686", pattern: "^([0-9]{5})$") , + Quicksy_Country(name: NSLocalizedString("Korea (Rep. of)", comment:"quicksy country"), code: "+82", pattern: "^([0-9]{8,11})$") , + Quicksy_Country(name: NSLocalizedString("Kuwait", comment:"quicksy country"), code: "+965", pattern: "^([0-9]{7}|[0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Kyrgyzstan", comment:"quicksy country"), code: "+996", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("Lao P.D.R.", comment:"quicksy country"), code: "+856", pattern: "^([0-9]{8,10})$") , + Quicksy_Country(name: NSLocalizedString("Latvia", comment:"quicksy country"), code: "+371", pattern: "^([0-9]{7}|[0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Lebanon", comment:"quicksy country"), code: "+961", pattern: "^([0-9]{7,8})$") , + Quicksy_Country(name: NSLocalizedString("Lesotho", comment:"quicksy country"), code: "+266", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Liberia", comment:"quicksy country"), code: "+231", pattern: "^([0-9]{7,8})$") , + Quicksy_Country(name: NSLocalizedString("Libya", comment:"quicksy country"), code: "+218", pattern: "^([0-9]{8,9})$") , + Quicksy_Country(name: NSLocalizedString("Liechtenstein", comment:"quicksy country"), code: "+423", pattern: "^([0-9]{7,9})$") , + Quicksy_Country(name: NSLocalizedString("Lithuania", comment:"quicksy country"), code: "+370", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Luxembourg", comment:"quicksy country"), code: "+352", pattern: "^([0-9]{4,11})$") , + Quicksy_Country(name: NSLocalizedString("Macao, China", comment:"quicksy country"), code: "+853", pattern: "^([0-9]{7,8})$") , + Quicksy_Country(name: NSLocalizedString("Madagascar", comment:"quicksy country"), code: "+261", pattern: "^([0-9]{9,10})$") , + Quicksy_Country(name: NSLocalizedString("Malawi", comment:"quicksy country"), code: "+265", pattern: "^([0-9]{7}|[0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Malaysia", comment:"quicksy country"), code: "+60", pattern: "^([0-9]{7,9})$") , + Quicksy_Country(name: NSLocalizedString("Maldives", comment:"quicksy country"), code: "+960", pattern: "^([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Mali", comment:"quicksy country"), code: "+223", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Malta", comment:"quicksy country"), code: "+356", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Marshall Islands", comment:"quicksy country"), code: "+692", pattern: "^([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Martinique", comment:"quicksy country"), code: "+596", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("Mauritania", comment:"quicksy country"), code: "+222", pattern: "^([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Mauritius", comment:"quicksy country"), code: "+230", pattern: "^([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Mexico", comment:"quicksy country"), code: "+52", pattern: "^([0-9]{10})$") , + Quicksy_Country(name: NSLocalizedString("Micronesia", comment:"quicksy country"), code: "+691", pattern: "^([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Moldova (Republic of)", comment:"quicksy country"), code: "+373", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Monaco", comment:"quicksy country"), code: "+377", pattern: "^([0-9]{5,9})$") , + Quicksy_Country(name: NSLocalizedString("Mongolia", comment:"quicksy country"), code: "+976", pattern: "^([0-9]{7,8})$") , + Quicksy_Country(name: NSLocalizedString("Montenegro", comment:"quicksy country"), code: "+382", pattern: "^([0-9]{4,12})$") , + Quicksy_Country(name: NSLocalizedString("Montserrat", comment:"quicksy country"), code: "+1", pattern: "^(664)([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Morocco", comment:"quicksy country"), code: "+212", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("Mozambique", comment:"quicksy country"), code: "+258", pattern: "^([0-9]{8,9})$") , + Quicksy_Country(name: NSLocalizedString("Myanmar", comment:"quicksy country"), code: "+95", pattern: "^([0-9]{7,9})$") , + Quicksy_Country(name: NSLocalizedString("Namibia", comment:"quicksy country"), code: "+264", pattern: "^([0-9]{6,10})$") , + Quicksy_Country(name: NSLocalizedString("Nauru", comment:"quicksy country"), code: "+674", pattern: "^([0-9]{4}|[0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Nepal", comment:"quicksy country"), code: "+977", pattern: "^([0-9]{8,9})$") , + Quicksy_Country(name: NSLocalizedString("Netherlands", comment:"quicksy country"), code: "+31", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("New Caledonia", comment:"quicksy country"), code: "+687", pattern: "^([0-9]{6})$") , + Quicksy_Country(name: NSLocalizedString("New Zealand", comment:"quicksy country"), code: "+64", pattern: "^([0-9]{3,10})$") , + Quicksy_Country(name: NSLocalizedString("Nicaragua", comment:"quicksy country"), code: "+505", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Niger", comment:"quicksy country"), code: "+227", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Nigeria", comment:"quicksy country"), code: "+234", pattern: "^([0-9]{7,10})$") , + Quicksy_Country(name: NSLocalizedString("Niue", comment:"quicksy country"), code: "+683", pattern: "^([0-9]{4})$") , + Quicksy_Country(name: NSLocalizedString("Northern Marianas", comment:"quicksy country"), code: "+1", pattern: "^(670)([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Norway", comment:"quicksy country"), code: "+47", pattern: "^([0-9]{5}|[0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Oman", comment:"quicksy country"), code: "+968", pattern: "^([0-9]{7,8})$") , + Quicksy_Country(name: NSLocalizedString("Pakistan", comment:"quicksy country"), code: "+92", pattern: "^([0-9]{8,11})$") , + Quicksy_Country(name: NSLocalizedString("Palau", comment:"quicksy country"), code: "+680", pattern: "^([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Panama", comment:"quicksy country"), code: "+507", pattern: "^([0-9]{7}|[0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Papua New Guinea", comment:"quicksy country"), code: "+675", pattern: "^([0-9]{4,11})$") , + Quicksy_Country(name: NSLocalizedString("Paraguay", comment:"quicksy country"), code: "+595", pattern: "^([0-9]{5,9})$") , + Quicksy_Country(name: NSLocalizedString("Peru", comment:"quicksy country"), code: "+51", pattern: "^([0-9]{8,11})$") , + Quicksy_Country(name: NSLocalizedString("Philippines", comment:"quicksy country"), code: "+63", pattern: "^([0-9]{8,10})$") , + Quicksy_Country(name: NSLocalizedString("Poland", comment:"quicksy country"), code: "+48", pattern: "^([0-9]{6,9})$") , + Quicksy_Country(name: NSLocalizedString("Portugal", comment:"quicksy country"), code: "+351", pattern: "^([0-9]{9}|[0-9]{11})$") , + Quicksy_Country(name: NSLocalizedString("Puerto Rico", comment:"quicksy country"), code: "+1", pattern: "^(787|939)([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Qatar", comment:"quicksy country"), code: "+974", pattern: "^([0-9]{3,8})$") , + Quicksy_Country(name: NSLocalizedString("Romania", comment:"quicksy country"), code: "+40", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("Russian Federation", comment:"quicksy country"), code: "+7", pattern: "^([0-9]{10})$") , + Quicksy_Country(name: NSLocalizedString("Rwanda", comment:"quicksy country"), code: "+250", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("Saint Helena, Ascension and Tristan da Cunha", comment:"quicksy country"), code: "+247", pattern: "^([0-9]{4})$") , + Quicksy_Country(name: NSLocalizedString("Saint Helena, Ascension and Tristan da Cunha", comment:"quicksy country"), code: "+290", pattern: "^([0-9]{4})$") , + Quicksy_Country(name: NSLocalizedString("Saint Kitts and Nevis", comment:"quicksy country"), code: "+1", pattern: "^(869)([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Saint Lucia", comment:"quicksy country"), code: "+1", pattern: "^(758)([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Saint Pierre and Miquelon", comment:"quicksy country"), code: "+508", pattern: "^([0-9]{6})$") , + Quicksy_Country(name: NSLocalizedString("Saint Vincent and the Grenadines", comment:"quicksy country"), code: "+1", pattern: "^(784)([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Samoa", comment:"quicksy country"), code: "+685", pattern: "^([0-9]{3,7})$") , + Quicksy_Country(name: NSLocalizedString("San Marino", comment:"quicksy country"), code: "+378", pattern: "^([0-9]{6,10})$") , + Quicksy_Country(name: NSLocalizedString("Sao Tome and Principe", comment:"quicksy country"), code: "+239", pattern: "^([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Saudi Arabia", comment:"quicksy country"), code: "+966", pattern: "^([0-9]{8,9})$") , + Quicksy_Country(name: NSLocalizedString("Senegal", comment:"quicksy country"), code: "+221", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("Serbia", comment:"quicksy country"), code: "+381", pattern: "^([0-9]{4,12})$") , + Quicksy_Country(name: NSLocalizedString("Seychelles", comment:"quicksy country"), code: "+248", pattern: "^([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Sierra Leone", comment:"quicksy country"), code: "+232", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Singapore", comment:"quicksy country"), code: "+65", pattern: "^([0-9]{8,12})$") , + Quicksy_Country(name: NSLocalizedString("Sint Maarten (Dutch part)", comment:"quicksy country"), code: "+1", pattern: "^(721)([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Slovakia", comment:"quicksy country"), code: "+421", pattern: "^([0-9]{4,9})$") , + Quicksy_Country(name: NSLocalizedString("Slovenia", comment:"quicksy country"), code: "+386", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Solomon Islands", comment:"quicksy country"), code: "+677", pattern: "^([0-9]{5})$") , + Quicksy_Country(name: NSLocalizedString("Somalia", comment:"quicksy country"), code: "+252", pattern: "^([0-9]{5,8})$") , + Quicksy_Country(name: NSLocalizedString("South Africa", comment:"quicksy country"), code: "+27", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("Spain", comment:"quicksy country"), code: "+34", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("Sri Lanka", comment:"quicksy country"), code: "+94", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("Sudan", comment:"quicksy country"), code: "+249", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("Suriname", comment:"quicksy country"), code: "+597", pattern: "^([0-9]{6,7})$") , + Quicksy_Country(name: NSLocalizedString("Swaziland", comment:"quicksy country"), code: "+268", pattern: "^([0-9]{7,8})$") , + Quicksy_Country(name: NSLocalizedString("Sweden", comment:"quicksy country"), code: "+46", pattern: "^([0-9]{7,13})$") , + Quicksy_Country(name: NSLocalizedString("Switzerland", comment:"quicksy country"), code: "+41", pattern: "^([0-9]{4,12})$") , + Quicksy_Country(name: NSLocalizedString("Syrian Arab Republic", comment:"quicksy country"), code: "+963", pattern: "^([0-9]{8,10})$") , + Quicksy_Country(name: NSLocalizedString("Taiwan, China", comment:"quicksy country"), code: "+886", pattern: "^([0-9]{8,9})$") , + Quicksy_Country(name: NSLocalizedString("Tajikistan", comment:"quicksy country"), code: "+992", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("Tanzania", comment:"quicksy country"), code: "+255", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("Thailand", comment:"quicksy country"), code: "+66", pattern: "^([0-9]{8}|[0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("The Former Yugoslav Republic of Macedonia", comment:"quicksy country"), code: "+389", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Timor-Leste", comment:"quicksy country"), code: "+670", pattern: "^([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Togo", comment:"quicksy country"), code: "+228", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Tokelau", comment:"quicksy country"), code: "+690", pattern: "^([0-9]{4})$") , + Quicksy_Country(name: NSLocalizedString("Tonga", comment:"quicksy country"), code: "+676", pattern: "^([0-9]{5}|[0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Trinidad and Tobago", comment:"quicksy country"), code: "+1", pattern: "^(868)([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Tunisia", comment:"quicksy country"), code: "+216", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Turkey", comment:"quicksy country"), code: "+90", pattern: "^([0-9]{10})$") , + Quicksy_Country(name: NSLocalizedString("Turkmenistan", comment:"quicksy country"), code: "+993", pattern: "^([0-9]{8})$") , + Quicksy_Country(name: NSLocalizedString("Turks and Caicos Islands", comment:"quicksy country"), code: "+1", pattern: "^(649)([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Tuvalu", comment:"quicksy country"), code: "+688", pattern: "^([0-9]{5}|[0-9]{6})$") , + Quicksy_Country(name: NSLocalizedString("Uganda", comment:"quicksy country"), code: "+256", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("Ukraine", comment:"quicksy country"), code: "+380", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("United Arab Emirates", comment:"quicksy country"), code: "+971", pattern: "^([0-9]{8,9})$") , + Quicksy_Country(name: NSLocalizedString("United Kingdom", comment:"quicksy country"), code: "+44", pattern: "^([0-9]{7,10})$") , + Quicksy_Country(name: NSLocalizedString("United States", comment:"quicksy country"), code: "+1", pattern: "^([0-9]{10})$") , + Quicksy_Country(name: NSLocalizedString("United States Virgin Islands", comment:"quicksy country"), code: "+1", pattern: "^(340)([0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Uruguay", comment:"quicksy country"), code: "+598", pattern: "^([0-9]{4,11})$") , + Quicksy_Country(name: NSLocalizedString("Uzbekistan", comment:"quicksy country"), code: "+998", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("Vanuatu", comment:"quicksy country"), code: "+678", pattern: "^([0-9]{5}|[0-9]{7})$") , + Quicksy_Country(name: NSLocalizedString("Vatican", comment:"quicksy country"), code: "+39", pattern: "^([0-9]{1,11})$") , + Quicksy_Country(name: NSLocalizedString("Venezuela (Bolivarian Republic of)", comment:"quicksy country"), code: "+58", pattern: "^([0-9]{10})$") , + Quicksy_Country(name: NSLocalizedString("Viet Nam", comment:"quicksy country"), code: "+84", pattern: "^([0-9]{7,10})$") , + Quicksy_Country(name: NSLocalizedString("Wallis and Futuna", comment:"quicksy country"), code: "+681", pattern: "^([0-9]{6})$") , + Quicksy_Country(name: NSLocalizedString("Yemen", comment:"quicksy country"), code: "+967", pattern: "^([0-9]{6,9})$") , + Quicksy_Country(name: NSLocalizedString("Zambia", comment:"quicksy country"), code: "+260", pattern: "^([0-9]{9})$") , + Quicksy_Country(name: NSLocalizedString("Zimbabwe", comment:"quicksy country"), code: "+263", pattern: "^([0-9]{5,10})$") , +] diff --git a/Monal/Classes/Quicksy_RegisterAccount.swift b/Monal/Classes/Quicksy_RegisterAccount.swift index 19b02bb33b..430946c63c 100644 --- a/Monal/Classes/Quicksy_RegisterAccount.swift +++ b/Monal/Classes/Quicksy_RegisterAccount.swift @@ -50,23 +50,9 @@ class Quicksy_State: ObservableObject { var countryCode: String? } -struct Quicksy_Country: Identifiable, Hashable { - let id = UUID() - let name: String - let code: String - let mobilePattern: String -} - struct Quicksy_RegisterAccount: View { var delegate: SheetDismisserProtocol - let countries: [Quicksy_Country] = [ - Quicksy_Country(name: NSLocalizedString("Germany", comment:"quicksy country"), code: "+49", mobilePattern: "^1\\d{10}$") , - Quicksy_Country(name: NSLocalizedString("United States", comment:"quicksy country"), code: "+1", mobilePattern: "^\\d{10}$"), - Quicksy_Country(name: NSLocalizedString("Canada", comment:"quicksy country"), code: "+1", mobilePattern: "^\\d{10}$"), - Quicksy_Country(name: NSLocalizedString("United Kingdom", comment:"quicksy country"), code: "+44", mobilePattern: "^7\\d{9}$"), - Quicksy_Country(name: NSLocalizedString("Australia", comment:"quicksy country"), code: "+61", mobilePattern: "^4\\d{8}$"), - Quicksy_Country(name: NSLocalizedString("India", comment:"quicksy country"), code: "+91", mobilePattern: "^[789]\\d{9}$"), - ] + let countries: [Quicksy_Country] = COUNTRY_CODES @StateObject private var overlay = LoadingOverlayState() @ObservedObject var state = Quicksy_State() @State private var currentIndex = 0 @@ -141,7 +127,7 @@ struct Quicksy_RegisterAccount: View { guard let selectedCountry = selectedCountry else { return false } - let phonePredicate = NSPredicate(format: "SELF MATCHES %@", selectedCountry.mobilePattern) + let phonePredicate = NSPredicate(format: "SELF MATCHES %@", selectedCountry.pattern) return phoneNumber.allSatisfy { $0.isNumber } && phoneNumber.count > 0 && phonePredicate.evaluate(with: phoneNumber) } @@ -280,6 +266,13 @@ struct Quicksy_RegisterAccount: View { }) .onAppear { selectedCountry = countries[0] + print("######## \(String(describing:Locale.current.regionCode))") + print("######## \(String(describing:Locale(identifier: "en_US").localizedString(forRegionCode:Locale.current.regionCode ?? "en")))") + for country in countries { + if country.name == Locale.current.localizedString(forRegionCode:Locale.current.regionCode ?? "en") || country.name == Locale(identifier: "en_US").localizedString(forRegionCode:Locale.current.regionCode ?? "en") { + selectedCountry = country + } + } //ios>=15 //phoneNumberFocused = true } diff --git a/Monal/Classes/xmpp.m b/Monal/Classes/xmpp.m index bcbd5f24ff..fb245b58fc 100644 --- a/Monal/Classes/xmpp.m +++ b/Monal/Classes/xmpp.m @@ -3241,14 +3241,19 @@ -(void) sendIq:(XMPPIQ*) iq withResponseHandler:(monal_iq_handler_t) resultHandl -(void) sendIq:(XMPPIQ*) iq withHandler:(MLHandler*) handler { - if(handler) - { - DDLogVerbose(@"Adding %@ to iqHandlers...", handler); - @synchronized(_iqHandlers) { - _iqHandlers[iq.id] = [@{@"iq":iq, @"timeout":@(IQ_TIMEOUT), @"handler":handler} mutableCopy]; + //serialize this state update with other receive queue updates + //not doing this will make it race with a readState call in the receive queue before the write of this update can happen, + //which will remove this entry from state and the iq answer received later on be discarded + [self dispatchAsyncOnReceiveQueue:^{ + if(handler) + { + DDLogVerbose(@"Adding %@ to iqHandlers...", handler); + @synchronized(self->_iqHandlers) { + self->_iqHandlers[iq.id] = [@{@"iq":iq, @"timeout":@(IQ_TIMEOUT), @"handler":handler} mutableCopy]; + } } - } - [self send:iq]; //this will also call persistState --> we don't need to do this here explicitly (to make sure our iq delegate is stored to db) + [self send:iq]; //this will also call persistState --> we don't need to do this here explicitly (to make sure our iq delegate is stored to db) + }]; } -(void) send:(MLXMLNode*) stanza diff --git a/Monal/Monal.xcodeproj/project.pbxproj b/Monal/Monal.xcodeproj/project.pbxproj index 2fc1ceb74d..d7a76444df 100644 --- a/Monal/Monal.xcodeproj/project.pbxproj +++ b/Monal/Monal.xcodeproj/project.pbxproj @@ -150,6 +150,7 @@ 845EFFBE2918723D00C1E03E /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C1E4654624EE517000CA5AAF /* Localizable.strings */; }; 846DF27C2937FAA600AAB9C0 /* ChatPlaceholder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 846DF27B2937FAA600AAB9C0 /* ChatPlaceholder.swift */; }; 848227912C4A6194003CCA33 /* MLPlaceholderViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 848227902C4A6194003CCA33 /* MLPlaceholderViewController.m */; }; + 848501342C4F2B6D00C1B693 /* CountryCodes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 848501332C4F2B6D00C1B693 /* CountryCodes.swift */; }; 848717F3295ED64600B8D288 /* MLCall.m in Sources */ = {isa = PBXBuildFile; fileRef = 848717F1295ED64500B8D288 /* MLCall.m */; }; 848904A9289C82C30097E19C /* SCRAM.m in Sources */ = {isa = PBXBuildFile; fileRef = 848904A8289C82C30097E19C /* SCRAM.m */; }; 848C73E02BDF2014007035C9 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 848C73DF2BDF2014007035C9 /* PrivacyInfo.xcprivacy */; }; @@ -586,6 +587,7 @@ 845D636A2AD4AEDA0066EFFB /* ImageViewer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageViewer.swift; sourceTree = ""; }; 846DF27B2937FAA600AAB9C0 /* ChatPlaceholder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatPlaceholder.swift; sourceTree = ""; }; 848227902C4A6194003CCA33 /* MLPlaceholderViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MLPlaceholderViewController.m; sourceTree = ""; }; + 848501332C4F2B6D00C1B693 /* CountryCodes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CountryCodes.swift; sourceTree = ""; }; 848717F1295ED64500B8D288 /* MLCall.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MLCall.m; path = Classes/MLCall.m; sourceTree = SOURCE_ROOT; }; 848717F2295ED64500B8D288 /* MLCall.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MLCall.h; path = Classes/MLCall.h; sourceTree = SOURCE_ROOT; }; 848904A8289C82C30097E19C /* SCRAM.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SCRAM.m; sourceTree = ""; }; @@ -1269,6 +1271,7 @@ 84C1CD532A8F6196007076ED /* MLStreamRedirect.h */, 844921E92C29F9A000B99A9C /* MLDelayableTimer.m */, 844921EB2C29F9BE00B99A9C /* MLDelayableTimer.h */, + 848501332C4F2B6D00C1B693 /* CountryCodes.swift */, ); name = tools; sourceTree = ""; @@ -2188,6 +2191,7 @@ 542CF3FF2763314F002C3710 /* hsluv.c in Sources */, 8420EA9D2915E5100038FF40 /* OmemoState.m in Sources */, 389E298C25E901CA009A5268 /* MLAudioRecoderManager.m in Sources */, + 848501342C4F2B6D00C1B693 /* CountryCodes.swift in Sources */, 84C1CD522A8F617F007076ED /* MLStreamRedirect.m in Sources */, 26CC57C923A0892800ABB92A /* MLMessageProcessor.m in Sources */, C18E757C245E8AE900AE8FB7 /* MLPipe.m in Sources */, diff --git a/scripts/exportOptions/Quicksy_Stable_iOS_ExportOptions.plist b/scripts/exportOptions/Quicksy_Stable_iOS_ExportOptions.plist new file mode 100644 index 0000000000..a2dab0a13a --- /dev/null +++ b/scripts/exportOptions/Quicksy_Stable_iOS_ExportOptions.plist @@ -0,0 +1,16 @@ + + + + + method + app-store + compileBitcode + + uploadBitcode + + signingStyle + automatic + teamID + S8D843U34Y + + \ No newline at end of file diff --git a/scripts/itu_pdf_to_swift.py b/scripts/itu_pdf_to_swift.py new file mode 100755 index 0000000000..b7d9c9f029 --- /dev/null +++ b/scripts/itu_pdf_to_swift.py @@ -0,0 +1,135 @@ +#!/usr/bin/env python3 +import requests +import io +from pypdf import PdfReader +import re +import logging + +logging.basicConfig(level=logging.DEBUG, format="%(asctime)s [%(levelname)-7s] %(name)s {%(threadName)s} %(filename)s:%(lineno)d: %(message)s") +logger = logging.getLogger(__name__) + +class Quicksy_Country: + def __init__(self, name, code, pattern): + self.name = name + self.code = code + self.pattern = pattern + + def __repr__(self): + return f"Quicksy_Country(name: NSLocalizedString(\"{self.name}\", comment:\"quicksy country\"), code: \"{self.code}\", pattern: \"{self.pattern}\") ," + +def parse_pdf(pdf_data): + country_regex = re.compile(r'^(?P[^0-9]+)[ ]{32}(?P[0-9]+)[ ]{32}(?P.+)[ ]{32}(?P.+)[ ]{32}(?P.+ digits)[ ]{32}(?P.*)$') + country_end_regex = re.compile(r'^(?P.*)([ ]{32}(?P.+))?$') + countries = {} + pdf = PdfReader(io.BytesIO(pdf_data)) + pagenum = 0 + last_entry = None + for page in pdf.pages: + pagenum += 1 + countries[pagenum] = [] + logger.info(f"Starting to analyze page {pagenum}...") + text = page.extract_text(extraction_mode="layout", layout_mode_space_vertically=False) + if text and "Country/geographical area" in text and "Country" in text and "International" in text and "National" in text and "National (Significant)" in text and "UTC/DST" in text and "Note" in text: + for line in text.split("\n"): + #this is faster than having a "{128,} in the compiled country_regex + match = country_regex.match(re.sub("[ ]{128,}", " "*32, line)) + if match == None: + # check if this is just a linebreak in the country name and append the value to the previous country + if re.sub("[ ]{128,}", " "*32, line) == line.strip() and last_entry != None and "Annex to ITU" not in line: + logger.debug(f"Adding to last country name: {line=}") + countries[pagenum][last_entry].name += f" {line.strip()}" + else: + last_entry = None # don't append line continuations of non-real countries to a real country + else: + match = match.groupdict() | {"dst": None, "notes": None} + if match["end"] and match["end"].strip() != "": + end_splitting = match["end"].split(" "*32) + if len(end_splitting) >= 1: + match["dst"] = end_splitting[0] + if len(end_splitting) >= 2: + match["notes"] = end_splitting[1] + match = {key: (value.strip() if value != None else None) for key, value in match.items()} + # logger.debug("****************") + # logger.debug(f"{match['country'] = }") + # logger.debug(f"{match['code'] = }") + # logger.debug(f"{match['international_prefix'] = }") + # logger.debug(f"{match['national_prefix'] = }") + # logger.debug(f"{match['format'] = }") + # logger.debug(f"{match['dst'] = }") + # logger.debug(f"{match['notes'] = }") + + if match["dst"] == None: # all real countries have a dst entry + last_entry = None # don't append line continuations of non-real countries to a real country + else: + country_code = f"+{match['code']}" + pattern = subpattern_matchers(match['format'], True) + superpattern = matcher(pattern, r"(\([0-9/]+\))[ ]*\+[ ]*(.+)[ ]+digits", match['format'], lambda result: result) + if pattern == None and superpattern != None: + #logger.debug(f"Trying superpattern: '{match['format']}' --> '{superpattern.group(1)}' ## '{superpattern.group(2)}'") + subpattern = subpattern_matchers(superpattern.group(2), False) + if subpattern != None: + pattern = re.sub("/", "|", superpattern.group(1)) + subpattern + if pattern == None: + logger.warning(f"Unknown format description for {match['country']} ({country_code}): '{match['format']}'") + pattern = "[0-9]*" + country = Quicksy_Country(match['country'], country_code, f"^{pattern}$") + countries[pagenum].append(country) + last_entry = len(countries[pagenum]) - 1 + logger.info(f"Page {pagenum}: Found {len(countries[pagenum])} countries so far...") + + return [c for cs in countries.values() for c in cs] + +def matcher(previous_result, regex, text, closure): + if previous_result != None: + return previous_result + matches = re.match(regex, text) + if matches == None: + return None + else: + return closure(matches) + +def subpattern_matchers(text, should_end_with_unit): + if should_end_with_unit: + if text[-6:] != "digits": + logger.error(f"should_end_with_unit set but not ending in 'digits': {text[-6:] = }") + return None + text = text[:-6] + + def subdef(result): + retval = f"[0-9]{{" + grp1 = result.group(1) if result.group(1) != "up" else "1" + retval += f"{grp1}" + if result.group(3) != None: + retval += f",{result.group(3)}" + retval += f"}}" + return retval + pattern = [] + parts = [x.strip() for x in text.split(",")] + for part in parts: + result = matcher(None, r"(up|[0-9]+)([ ]*to[ ]*([0-9]+)[ ]*)?", part, subdef) + #logger.debug(f"{part=} --> {result=}") + if result != None: + pattern.append(result) + if len(pattern) == 0: + return None + return "(" + "|".join(pattern) + ")" + +logger.info("Downloading PDF...") +response = requests.get("https://www.itu.int/dms_pub/itu-t/opb/sp/T-SP-E.164C-2011-PDF-E.pdf") +logger.info("Parsing PDF...") +countries = parse_pdf(response.content) +print("""// This file was automatically generated by scripts/itu_pdf_to_swift.py +// Please run this python script again to update this file +// Example ../scripts/itu_pdf_to_swift.py > Classes/CountryCodes.swift + +public struct Quicksy_Country: Identifiable, Hashable { + public let id = UUID() + public let name: String + public let code: String + public let pattern: String +} +""") +print(f"public let COUNTRY_CODES: [Quicksy_Country] = [") +for country in countries: + print(f" {country}") +print(f"]") diff --git a/scripts/requirements.txt b/scripts/requirements.txt new file mode 100644 index 0000000000..8e809ad01a --- /dev/null +++ b/scripts/requirements.txt @@ -0,0 +1 @@ +PyPDF @ git+https://github.com/py-pdf/pypdf@4.3.1 \ No newline at end of file