/core/autoinstaller/UpdateEngineExtensions/UpdatePrinter.m

http://macfuse.googlecode.com/ · Objective C · 89 lines · 64 code · 17 blank · 8 comment · 5 complexity · a0204e19acf4040a99617cf57e414604 MD5 · raw file

  1. //
  2. // UpdatePrinter.m
  3. // autoinstaller
  4. //
  5. // Created by Greg Miller on 7/16/08.
  6. // Copyright 2008 Google Inc. All rights reserved.
  7. //
  8. #import "UpdatePrinter.h"
  9. #import "GTMLogger.h"
  10. @implementation UpdatePrinter
  11. + (id)printer {
  12. return [[[self alloc] init] autorelease];
  13. }
  14. - (id)init {
  15. GTMLogger *logger = [GTMLogger logger];
  16. return [self initWithLogger:logger];
  17. }
  18. - (id)initWithLogger:(GTMLogger *)logger {
  19. if ((self = [super init])) {
  20. logger_ = [logger retain];
  21. }
  22. return self;
  23. }
  24. - (void)dealloc {
  25. [logger_ release];
  26. [super dealloc];
  27. }
  28. - (GTMLogger *)logger {
  29. return logger_;
  30. }
  31. - (void)printUpdates:(NSArray *)productUpdates {
  32. NSDictionary *update = nil;
  33. NSEnumerator *updateEnumerator = [productUpdates objectEnumerator];
  34. while ((update = [updateEnumerator nextObject])) {
  35. [[self logger] logInfo:@"### Update"];
  36. NSString *key = nil;
  37. NSEnumerator *keyEnumerator = [update keyEnumerator];
  38. while ((key = [keyEnumerator nextObject])) {
  39. if (![key hasPrefix:@"kServer"]) // Ignore keys created by Update Engine
  40. [[self logger] logInfo:@"%@='%@'", key, [update objectForKey:key]];
  41. }
  42. [[self logger] logInfo:@""]; // Output newline
  43. }
  44. }
  45. @end
  46. @implementation PlistUpdatePrinter
  47. - (void)printUpdates:(NSArray *)productUpdates {
  48. NSMutableArray *cleanedArray = [NSMutableArray array];
  49. NSDictionary *update = nil;
  50. NSEnumerator *updateEnumerator = [productUpdates objectEnumerator];
  51. while ((update = [updateEnumerator nextObject])) {
  52. NSMutableDictionary *mutableUpdate = [[update mutableCopy] autorelease];
  53. NSArray *keys = [mutableUpdate allKeys];
  54. NSArray *generatedKeys = [keys filteredArrayUsingPredicate:
  55. [NSPredicate predicateWithFormat:
  56. @"SELF beginswith 'kServer'"]];
  57. [mutableUpdate removeObjectsForKeys:generatedKeys];
  58. [cleanedArray addObject:mutableUpdate];
  59. }
  60. NSDictionary *dict = [NSDictionary dictionaryWithObject:cleanedArray
  61. forKey:@"Updates"];
  62. // Now, print the dictionary, which should now be a valid plist
  63. NSData *data = [NSPropertyListSerialization
  64. dataFromPropertyList:dict
  65. format:NSPropertyListXMLFormat_v1_0
  66. errorDescription:NULL];
  67. NSString *plist = [[[NSString alloc]
  68. initWithData:data
  69. encoding:NSUTF8StringEncoding] autorelease];
  70. [[self logger] logInfo:@"%@", plist];
  71. }
  72. @end