Sarah Zakarias | 969397b | 2018-10-15 09:30:34 +0200 | [diff] [blame] | 1 | import 'dart:io'; |
| 2 | |
| 3 | import 'dart_tutorial/addressbook.pb.dart'; |
| 4 | |
Roman Kamyk | dc974d2 | 2019-09-04 10:14:20 -0700 | [diff] [blame] | 5 | /// This function fills in a Person message based on user input. |
Jonathan White | b017ac4 | 2018-11-20 18:45:25 -0800 | [diff] [blame] | 6 | Person promptForAddress() { |
Roman Kamyk | dc974d2 | 2019-09-04 10:14:20 -0700 | [diff] [blame] | 7 | final person = Person(); |
Sarah Zakarias | 969397b | 2018-10-15 09:30:34 +0200 | [diff] [blame] | 8 | |
| 9 | print('Enter person ID: '); |
Roman Kamyk | dc974d2 | 2019-09-04 10:14:20 -0700 | [diff] [blame] | 10 | final input = stdin.readLineSync(); |
Sarah Zakarias | 969397b | 2018-10-15 09:30:34 +0200 | [diff] [blame] | 11 | person.id = int.parse(input); |
| 12 | |
| 13 | print('Enter name'); |
| 14 | person.name = stdin.readLineSync(); |
| 15 | |
| 16 | print('Enter email address (blank for none) : '); |
Roman Kamyk | dc974d2 | 2019-09-04 10:14:20 -0700 | [diff] [blame] | 17 | final email = stdin.readLineSync(); |
| 18 | if (email.isNotEmpty) person.email = email; |
Sarah Zakarias | 969397b | 2018-10-15 09:30:34 +0200 | [diff] [blame] | 19 | |
Sarah Zakarias | bc00484 | 2018-10-23 09:52:44 +0200 | [diff] [blame] | 20 | while (true) { |
Sarah Zakarias | 969397b | 2018-10-15 09:30:34 +0200 | [diff] [blame] | 21 | print('Enter a phone number (or leave blank to finish): '); |
Roman Kamyk | dc974d2 | 2019-09-04 10:14:20 -0700 | [diff] [blame] | 22 | final number = stdin.readLineSync(); |
Sarah Zakarias | 969397b | 2018-10-15 09:30:34 +0200 | [diff] [blame] | 23 | if (number.isEmpty) break; |
| 24 | |
Roman Kamyk | dc974d2 | 2019-09-04 10:14:20 -0700 | [diff] [blame] | 25 | final phoneNumber = Person_PhoneNumber()..number = number; |
Sarah Zakarias | 969397b | 2018-10-15 09:30:34 +0200 | [diff] [blame] | 26 | |
Sarah Zakarias | 969397b | 2018-10-15 09:30:34 +0200 | [diff] [blame] | 27 | print('Is this a mobile, home, or work phone? '); |
| 28 | |
Roman Kamyk | dc974d2 | 2019-09-04 10:14:20 -0700 | [diff] [blame] | 29 | final type = stdin.readLineSync(); |
Sarah Zakarias | bc00484 | 2018-10-23 09:52:44 +0200 | [diff] [blame] | 30 | switch (type) { |
Sarah Zakarias | 969397b | 2018-10-15 09:30:34 +0200 | [diff] [blame] | 31 | case 'mobile': |
| 32 | phoneNumber.type = Person_PhoneType.MOBILE; |
| 33 | break; |
| 34 | case 'home': |
| 35 | phoneNumber.type = Person_PhoneType.HOME; |
| 36 | break; |
| 37 | case 'work': |
| 38 | phoneNumber.type = Person_PhoneType.WORK; |
| 39 | break; |
| 40 | default: |
| 41 | print('Unknown phone type. Using default.'); |
| 42 | } |
| 43 | person.phones.add(phoneNumber); |
| 44 | } |
| 45 | |
| 46 | return person; |
| 47 | } |
| 48 | |
Roman Kamyk | dc974d2 | 2019-09-04 10:14:20 -0700 | [diff] [blame] | 49 | /// Reads the entire address book from a file, adds one person based |
| 50 | /// on user input, then writes it back out to the same file. |
| 51 | void main(List<String> arguments) { |
Sarah Zakarias | 969397b | 2018-10-15 09:30:34 +0200 | [diff] [blame] | 52 | if (arguments.length != 1) { |
| 53 | print('Usage: add_person ADDRESS_BOOK_FILE'); |
| 54 | exit(-1); |
| 55 | } |
| 56 | |
Roman Kamyk | dc974d2 | 2019-09-04 10:14:20 -0700 | [diff] [blame] | 57 | final file = File(arguments.first); |
Sarah Zakarias | 969397b | 2018-10-15 09:30:34 +0200 | [diff] [blame] | 58 | AddressBook addressBook; |
| 59 | if (!file.existsSync()) { |
| 60 | print('File not found. Creating new file.'); |
Sarah Zakarias | bc00484 | 2018-10-23 09:52:44 +0200 | [diff] [blame] | 61 | addressBook = AddressBook(); |
Sarah Zakarias | 969397b | 2018-10-15 09:30:34 +0200 | [diff] [blame] | 62 | } else { |
| 63 | addressBook = AddressBook.fromBuffer(file.readAsBytesSync()); |
| 64 | } |
Jonathan White | b017ac4 | 2018-11-20 18:45:25 -0800 | [diff] [blame] | 65 | addressBook.people.add(promptForAddress()); |
Sarah Zakarias | 969397b | 2018-10-15 09:30:34 +0200 | [diff] [blame] | 66 | file.writeAsBytes(addressBook.writeToBuffer()); |
Sarah Zakarias | bc00484 | 2018-10-23 09:52:44 +0200 | [diff] [blame] | 67 | } |