/Source/GDataEntryMailItem.m

http://google-email-uploader-mac.googlecode.com/ · Objective C · 175 lines · 115 code · 43 blank · 17 comment · 2 complexity · 40f0bfc36e7aff6aa73e1e909e3baa43 MD5 · raw file

  1. /* Copyright (c) 2009 Google Inc.
  2. *
  3. * Licensed under the Apache License, Version 2.0 (the "License");
  4. * you may not use this file except in compliance with the License.
  5. * You may obtain a copy of the License at
  6. *
  7. * http://www.apache.org/licenses/LICENSE-2.0
  8. *
  9. * Unless required by applicable law or agreed to in writing, software
  10. * distributed under the License is distributed on an "AS IS" BASIS,
  11. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. * See the License for the specific language governing permissions and
  13. * limitations under the License.
  14. */
  15. //
  16. // GDataEntryMailItem.m
  17. //
  18. #define GDATAMAILITEM_DEFINE_GLOBALS 1
  19. #import "GDataEntryMailItem.h"
  20. #import "GDataEntryLink.h"
  21. static NSString* const kEncodingAttr = @"encoding";
  22. @implementation GDataMailItemProperty
  23. + (NSString *)extensionElementURI { return kGDataNamespaceGoogleApps; }
  24. + (NSString *)extensionElementPrefix { return kGDataNamespaceGoogleAppsPrefix; }
  25. + (NSString *)extensionElementLocalName { return @"mailItemProperty"; }
  26. @end
  27. @implementation GDataMailItemLabel
  28. + (NSString *)extensionElementURI { return kGDataNamespaceGoogleApps; }
  29. + (NSString *)extensionElementPrefix { return kGDataNamespaceGoogleAppsPrefix; }
  30. + (NSString *)extensionElementLocalName { return @"label"; }
  31. - (NSString *)attributeName {
  32. return @"labelName";
  33. }
  34. @end
  35. @implementation GDataMailItemSpamSetting
  36. + (NSString *)extensionElementURI { return kGDataNamespaceGoogleApps; }
  37. + (NSString *)extensionElementPrefix { return kGDataNamespaceGoogleAppsPrefix; }
  38. + (NSString *)extensionElementLocalName { return @"spamSettings"; }
  39. @end
  40. @implementation GDataEntryMailItem
  41. + (NSDictionary *)appsNamespaces {
  42. NSMutableDictionary *namespaces;
  43. namespaces = [NSMutableDictionary dictionaryWithObject:kGDataNamespaceGoogleApps
  44. forKey:kGDataNamespaceGoogleAppsPrefix];
  45. [namespaces addEntriesFromDictionary:[GDataEntryBase baseGDataNamespaces]];
  46. return namespaces;
  47. }
  48. + (GDataEntryMailItem *)mailItem {
  49. GDataEntryMailItem *obj;
  50. obj = [[[GDataEntryMailItem alloc] init] autorelease];
  51. [obj setNamespaces:[GDataEntryMailItem appsNamespaces]];
  52. return obj;
  53. }
  54. + (GDataEntryMailItem *)mailItemWithRFC822String:(NSString *)str {
  55. GDataEntryMailItem *entry = [self mailItem];
  56. NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
  57. [entry setUploadData:data];
  58. [entry setUploadMIMEType:@"message/rfc822"];
  59. return entry;
  60. }
  61. #pragma mark -
  62. + (NSString *)standardEntryKind {
  63. return kGDataCategoryMailItem;
  64. }
  65. + (void)load {
  66. [self registerEntryClass];
  67. }
  68. - (void)addExtensionDeclarations {
  69. [super addExtensionDeclarations];
  70. [self addExtensionDeclarationForParentClass:[self class]
  71. childClasses:
  72. [GDataMailItemProperty class],
  73. [GDataMailItemLabel class],
  74. [GDataMailItemSpamSetting class],
  75. nil];
  76. }
  77. - (NSMutableArray *)itemsForDescription {
  78. NSData *uploadData = [self uploadData];
  79. NSString *msgStr = [[[NSString alloc] initWithData:uploadData
  80. encoding:NSUTF8StringEncoding] autorelease];
  81. if (msgStr == nil) {
  82. msgStr = @"<Unknown upload data>";
  83. }
  84. NSArray *labels = [self valueForKeyPath:@"mailItemLabels.stringValue"];
  85. NSString *labelStr = [labels componentsJoinedByString:@","];
  86. struct GDataDescriptionRecord descRecs[] = {
  87. { @"properties", @"mailItemProperties", kGDataDescValueLabeled },
  88. { @"labels", labelStr, kGDataDescValueIsKeyPath },
  89. { @"msg", msgStr, kGDataDescValueIsKeyPath },
  90. { @"filterSpam", @"shouldFilterSpam", kGDataDescBooleanPresent },
  91. { nil, nil, 0 }
  92. };
  93. NSMutableArray *items = [super itemsForDescription];
  94. [self addDescriptionRecords:descRecs toItems:items];
  95. return items;
  96. }
  97. #pragma mark -
  98. - (NSArray *)mailItemLabels {
  99. return [self objectsForExtensionClass:[GDataMailItemLabel class]];
  100. }
  101. - (void)setMailItemLabels:(NSArray *)array {
  102. [self setObjects:array forExtensionClass:[GDataMailItemLabel class]];
  103. }
  104. - (void)addMailItemLabel:(GDataMailItemLabel *)obj {
  105. [self addObject:obj forExtensionClass:[GDataMailItemLabel class]];
  106. }
  107. - (void)addMailItemLabelWithString:(NSString *)str {
  108. GDataMailItemLabel *label = [GDataMailItemLabel valueWithString:str];
  109. [self addMailItemLabel:label];
  110. }
  111. - (NSArray *)mailItemProperties {
  112. return [self objectsForExtensionClass:[GDataMailItemProperty class]];
  113. }
  114. - (void)setMailItemProperties:(NSArray *)array {
  115. [self setObjects:array forExtensionClass:[GDataMailItemProperty class]];
  116. }
  117. - (void)addMailItemProperty:(GDataMailItemProperty *)obj {
  118. [self addObject:obj forExtensionClass:[GDataMailItemProperty class]];
  119. }
  120. - (void)addMailItemPropertyWithString:(NSString *)str {
  121. GDataMailItemProperty *prop = [GDataMailItemProperty valueWithString:str];
  122. [self addMailItemProperty:prop];
  123. }
  124. - (BOOL)shouldFilterSpam {
  125. id obj = [self objectForExtensionClass:[GDataMailItemSpamSetting class]];
  126. return [obj boolValue];
  127. }
  128. - (void)setShouldFilterSpam:(BOOL)flag {
  129. GDataMailItemSpamSetting *obj = [GDataMailItemSpamSetting valueWithBool:flag];
  130. [self setObject:obj forExtensionClass:[GDataMailItemSpamSetting class]];
  131. }
  132. @end