Open-Source-Software-Entwicklung und Downloads

Browse Subversion Repository

Diff of /bathyscaphe/trunk/application/source/browser/BSBoardListItemHEADCheckTask.m

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1421 by tsawada2, Sat Aug 27 12:39:53 2011 UTC revision 1422 by masakih, Tue May 1 13:07:47 2012 UTC
# Line 3  Line 3 
3  //  BathyScaphe  //  BathyScaphe
4  //  //
5  //  Created by Hori,Masaki on 06/08/13.  //  Created by Hori,Masaki on 06/08/13.
6  //  Copyright 2006-2010 BathyScaphe Project. All rights reserved.  //  Copyright 2006-2010,2012 BathyScaphe Project. All rights reserved.
7  //  encoding="UTF-8"  //  encoding="UTF-8"
8  //  //
9    
# Line 22  static NSString *const BSFavHEADerLMKey Line 22  static NSString *const BSFavHEADerLMKey
22  static NSURL *datURLForBoardIDStringAndThreadID(NSString *boardIDString, NSString *threadID);  static NSURL *datURLForBoardIDStringAndThreadID(NSString *boardIDString, NSString *threadID);
23  static BOOL shouldCheckItemHeader(id dict);  static BOOL shouldCheckItemHeader(id dict);
24    
25  @interface BSBoardListItemHEADCheckTask(Private)  @interface BSBoardListItemHEADCheckTask ()
26    @property (copy) NSString *amountString;
27    @property (copy) NSString *descString;
28    
29  - (NSArray *)threadInfomations;  - (NSArray *)threadInfomations;
30  - (BSDownloadTask *)sendHEADMethod:(NSURL *)url;  - (BSDownloadTask *)sendHEADMethod:(NSURL *)url;
31  - (void)resetNewStatus;  - (void)resetNewStatus;
# Line 30  static BOOL shouldCheckItemHeader(id dic Line 33  static BOOL shouldCheckItemHeader(id dic
33  @end  @end
34    
35  @implementation BSBoardListItemHEADCheckTask  @implementation BSBoardListItemHEADCheckTask
36    @synthesize amountString;
37    @synthesize descString;
38    
39  + (id)taskWithThreadList:(BSDBThreadList *)list  + (id)taskWithThreadList:(BSDBThreadList *)list
40  {  {
41          return [[[self alloc] initWithThreadList:list] autorelease];          return [[[self alloc] initWithThreadList:list] autorelease];
# Line 38  static BOOL shouldCheckItemHeader(id dic Line 44  static BOOL shouldCheckItemHeader(id dic
44  - (id)initWithThreadList:(BSDBThreadList *)list  - (id)initWithThreadList:(BSDBThreadList *)list
45  {  {
46          if (self = [super init]) {          if (self = [super init]) {
47                  targetList = list; //[list retain];                  targetList = list;
48                  item = [[list boardListItem] retain];                  item = [[list boardListItem] retain];
49          }          }
50                    
# Line 47  static BOOL shouldCheckItemHeader(id dic Line 53  static BOOL shouldCheckItemHeader(id dic
53    
54  - (void)dealloc  - (void)dealloc
55  {  {
 //      [targetList release];  
56          [item release];          [item release];
57          [amountString release];          [amountString release];
58          [descString release];          [descString release];
# Line 56  static BOOL shouldCheckItemHeader(id dic Line 61  static BOOL shouldCheckItemHeader(id dic
61  }  }
62    
63  #pragma mark -  #pragma mark -
64  - (id)identifier  + (NSSet *)keyPathsForValuesAffectingMessage
65  {  {
66          return [NSString stringWithFormat:@"%@-%p", self, self];          return [NSSet setWithObjects:@"amountString", @"descString", nil];
67  }  }
   
68  - (NSString *)title  - (NSString *)title
69  {  {
70          NSString *format = NSLocalizedStringFromTable(@"Checking SmartBoard(%@).", @"ThreadsList", @"");          NSString *format = NSLocalizedStringFromTable(@"Checking SmartBoard(%@).", @"ThreadsList", @"");
71          return [NSString stringWithFormat:format, [item name]];          return [NSString stringWithFormat:format, [item name]];
72  }  }
73    
 - (void)setAmountString:(NSString *)str  
 {  
         id temp = amountString;  
         @synchronized(self) {  
                 [self willChangeValueForKey:@"message"];  
                 amountString = [str retain];  
                 [self didChangeValueForKey:@"message"];  
         }  
         [temp release];  
 }  
   
 - (NSString *)amountString  
 {  
         id result;  
         @synchronized(self) {  
                 result = [[amountString retain] autorelease];  
         }  
         return result;  
 }  
   
 - (void)setDescString:(NSString *)str  
 {  
         id temp = descString;  
         @synchronized(self) {  
                 [self willChangeValueForKey:@"message"];  
                 descString = [str retain];  
                 [self didChangeValueForKey:@"message"];  
         }  
         [temp release];  
 }  
   
 - (NSString *)descString  
 {  
         id result;  
         @synchronized(self) {  
                 result = [[descString retain] autorelease];  
         }  
         return result;  
 }  
   
74  - (NSString *)message  - (NSString *)message
75  {  {
76          NSString *descStr = [self descString];          NSString *descStr = self.descString;
77          NSString *amountStr = [self amountString];          NSString *amountStr = self.amountString;
78                    
79          if (descStr && amountStr) {          if (descStr && amountStr) {
80                  return [NSString stringWithFormat:@"%@ (%@)", descStr, amountStr];                  return [NSString stringWithFormat:@"%@ (%@)", descStr, amountStr];
# Line 136  static BOOL shouldCheckItemHeader(id dic Line 100  static BOOL shouldCheckItemHeader(id dic
100          [finishedSound_ play];          [finishedSound_ play];
101  }  }
102    
103  - (void)doExecuteWithLayout:(CMRThreadLayout *)layout  - (void)excute
104  {  {
105          [self resetNewStatus];          [self resetNewStatus];
106                    
107          NSArray *threads = [self threadInfomations];          NSArray *threads = [self threadInfomations];
 //      NSEnumerator *threadsEnum;  
 //      id thread;  
108          NSMutableArray *updatedThreads = [NSMutableArray array];          NSMutableArray *updatedThreads = [NSMutableArray array];
109                    
110  //      [self checkHOGE];  //      [self checkHOGE];
# Line 153  static BOOL shouldCheckItemHeader(id dic Line 115  static BOOL shouldCheckItemHeader(id dic
115          NSInteger numberOfChecked = 0; // HEAD を送信した回数          NSInteger numberOfChecked = 0; // HEAD を送信した回数
116          NSString *amoutFormat = NSLocalizedStringFromTable(@"%ld/%ld (%ld skiped)", @"ThreadsList", @"");          NSString *amoutFormat = NSLocalizedStringFromTable(@"%ld/%ld (%ld skiped)", @"ThreadsList", @"");
117    
118          [self setAmountString:[NSString stringWithFormat:amoutFormat,          self.amountString = [NSString stringWithFormat:amoutFormat,
119                                                     (long)numberOfFinishCheck, (long)numberOfAllTarget, (long)numberOfSkip]];                                                   (long)numberOfFinishCheck, (long)numberOfAllTarget, (long)numberOfSkip];
120          [self setDescString:NSLocalizedStringFromTable(@"Checking thread", @"ThreadsList", @"")];          self.descString = NSLocalizedStringFromTable(@"Checking thread", @"ThreadsList", @"");
121                    
 //      threadsEnum = [threads objectEnumerator];  
 //      while(thread = [threadsEnum nextObject]) {  
122      for (id thread in threads) {      for (id thread in threads) {
123                    if(self.isInterrupted) return;
124                    
125                  id pool = [[NSAutoreleasePool alloc] init];                  id pool = [[NSAutoreleasePool alloc] init];
126                                    
127                  id dl;                  id dl;
128                  id response;                  id response;
129                  id newMod;                  id newMod;
130                                                    
131                  [self checkIsInterrupted];                  self.amountString = [NSString stringWithFormat:amoutFormat,
132                  [self setAmountString:[NSString stringWithFormat:amoutFormat,                                                           ++numberOfFinishCheck, numberOfAllTarget, numberOfSkip];
                                                            ++numberOfFinishCheck, numberOfAllTarget, numberOfSkip]];  
133                                    
134                  if (!shouldCheckItemHeader(thread)) {                  if (!shouldCheckItemHeader(thread)) {
135                          [pool release];                          [pool release];
# Line 176  static BOOL shouldCheckItemHeader(id dic Line 137  static BOOL shouldCheckItemHeader(id dic
137                          continue;                          continue;
138                  }                  }
139                                    
 //              NSString *boardName = [thread valueForColumn:BoardNameColumn];  
140                  NSString *threadID = [thread valueForColumn:ThreadIDColumn];                  NSString *threadID = [thread valueForColumn:ThreadIDColumn];
141                  NSString *modDate = [thread valueForColumn:ModifiedDateColumn];                  NSString *modDate = [thread valueForColumn:ModifiedDateColumn];
142          NSString *boardID = [thread valueForColumn:BoardIDColumn];          NSString *boardID = [thread valueForColumn:BoardIDColumn];
# Line 190  static BOOL shouldCheckItemHeader(id dic Line 150  static BOOL shouldCheckItemHeader(id dic
150              [checker startChecking];              [checker startChecking];
151              while ([checker isChecking]) {              while ([checker isChecking]) {
152                  id pool2 = [[NSAutoreleasePool alloc] init];                  id pool2 = [[NSAutoreleasePool alloc] init];
153                  @try {                                  [loop runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
154                      [loop runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];                                  [pool2 release];
                 }  
                 @catch(id ex) {  
                     // do nothing.  
                     @throw;  
                 }  
                 @finally {  
                     [pool2 release];  
                 }  
155              }              }
156              if (!(checker.lastError) && checker.isUpdated) {              if (!(checker.lastError) && checker.isUpdated) {
157                  [updatedThreads addObject:thread];                  [updatedThreads addObject:thread];
# Line 232  static BOOL shouldCheckItemHeader(id dic Line 184  static BOOL shouldCheckItemHeader(id dic
184          [targetList updateCursor];          [targetList updateCursor];
185                    
186  }  }
 // - (void) finalizeWhenInterrupted;  
187    
188  - (NSArray *)threadInfomations  - (NSArray *)threadInfomations
189  {  {
# Line 241  static BOOL shouldCheckItemHeader(id dic Line 192  static BOOL shouldCheckItemHeader(id dic
192          NSString *table = [item query];          NSString *table = [item query];
193          if (!table) return nil;          if (!table) return nil;
194                    
195          [self setDescString:NSLocalizedStringFromTable(@"Collecting infomation of thread", @"ThreadsList", @"")];          self.descString = NSLocalizedStringFromTable(@"Collecting infomation of thread", @"ThreadsList", @"");
196                    
197          db = [[DatabaseManager defaultManager] databaseForCurrentThread];          db = [[DatabaseManager defaultManager] databaseForCurrentThread];
198                    
# Line 372  static NSURL *datURLForBoardIDStringAndT Line 323  static NSURL *datURLForBoardIDStringAndT
323          NSURL *boardURL;          NSURL *boardURL;
324          CMRHostHandler *handler;          CMRHostHandler *handler;
325                    
 //      boardURL = [[BoardManager defaultManager] URLForBoardName:boardName];  
326      boardURL = [NSURL URLWithString:[[DatabaseManager defaultManager] urlStringForBoardID:[boardIDString unsignedIntegerValue]]];      boardURL = [NSURL URLWithString:[[DatabaseManager defaultManager] urlStringForBoardID:[boardIDString unsignedIntegerValue]]];
327          handler = [CMRHostHandler hostHandlerForURL:boardURL];          handler = [CMRHostHandler hostHandlerForURL:boardURL];
328                    
# Line 382  static NSURL *datURLForBoardIDStringAndT Line 332  static NSURL *datURLForBoardIDStringAndT
332  - (BSDownloadTask *)sendHEADMethod:(NSURL *)url  - (BSDownloadTask *)sendHEADMethod:(NSURL *)url
333  {  {
334          BSDownloadTask *dlTask = [[BSDownloadTask alloc] initWithURL:url method:@"HEAD"];          BSDownloadTask *dlTask = [[BSDownloadTask alloc] initWithURL:url method:@"HEAD"];
335          [dlTask doExecuteWithLayout:nil];          [dlTask synchronousDownLoad];
336                    
337          return [dlTask autorelease];          return [dlTask autorelease];
338  }  }
# Line 391  static NSURL *datURLForBoardIDStringAndT Line 341  static NSURL *datURLForBoardIDStringAndT
341  {  {
342          SQLiteDB *db = [[DatabaseManager defaultManager] databaseForCurrentThread];          SQLiteDB *db = [[DatabaseManager defaultManager] databaseForCurrentThread];
343                    
344          [self setDescString:NSLocalizedStringFromTable(@"Reseting new threads status.", @"ThreadsList", @"")];          self.descString = NSLocalizedStringFromTable(@"Reseting new threads status.", @"ThreadsList", @"");
345                    
346          if (db && [db beginTransaction]) {          if (db && [db beginTransaction]) {
347                  id cursor = nil;                  id cursor = nil;
# Line 435  static NSURL *datURLForBoardIDStringAndT Line 385  static NSURL *datURLForBoardIDStringAndT
385          }          }
386          NSInteger numberOfAllTarget = [threads count];          NSInteger numberOfAllTarget = [threads count];
387          NSInteger numberOfFinishCheck = 0;          NSInteger numberOfFinishCheck = 0;
388          [self setAmountString:[NSString stringWithFormat:@"%ld/%ld", (long)numberOfFinishCheck, (long)numberOfAllTarget]];          self.amountString = [NSString stringWithFormat:@"%ld/%ld", (long)numberOfFinishCheck, (long)numberOfAllTarget];
389          [self setDescString:NSLocalizedStringFromTable(@"Updating database", @"ThreadsList", @"")];          self.descString = NSLocalizedStringFromTable(@"Updating database", @"ThreadsList", @"");
390                    
391          SQLiteDB *db = [[DatabaseManager defaultManager] databaseForCurrentThread];          SQLiteDB *db = [[DatabaseManager defaultManager] databaseForCurrentThread];
392          NSString *query = [NSString stringWithFormat:          NSString *query = [NSString stringWithFormat:
# Line 447  static NSURL *datURLForBoardIDStringAndT Line 397  static NSURL *datURLForBoardIDStringAndT
397                                             ThreadStatusColumn, (long)ThreadHeadModifiedStatus,                                             ThreadStatusColumn, (long)ThreadHeadModifiedStatus,
398                                             BoardIDColumn, ThreadIDColumn];                                             BoardIDColumn, ThreadIDColumn];
399          if (db && [db beginTransaction]) {          if (db && [db beginTransaction]) {
 //              id threadsEnum = [threads objectEnumerator];  
 //              id thread;  
   
400                  SQLiteReservedQuery *rQuery = [db reservedQuery:query];                  SQLiteReservedQuery *rQuery = [db reservedQuery:query];
401    
 //              while(thread = [threadsEnum nextObject]) {  
402          for (id thread in threads) {          for (id thread in threads) {
403                          [self checkIsInterrupted];                          if(self.isInterrupted) goto abort;
404                          [self setAmountString:[NSString stringWithFormat:@"%ld/%ld", (long)++numberOfFinishCheck, (long)numberOfAllTarget]];                          self.amountString = [NSString stringWithFormat:@"%ld/%ld", (long)++numberOfFinishCheck, (long)numberOfAllTarget];
405                                                    
406                          const char *format = F_NSNumberOfInt F_NSString;                          const char *format = F_NSNumberOfInt F_NSString;
407                          [rQuery cursorWithFormat:format, [thread valueForColumn:BoardIDColumn], [thread valueForColumn:ThreadIDColumn]];                          [rQuery cursorWithFormat:format, [thread valueForColumn:BoardIDColumn], [thread valueForColumn:ThreadIDColumn]];
# Line 463  static NSURL *datURLForBoardIDStringAndT Line 409  static NSURL *datURLForBoardIDStringAndT
409    
410                  [db commitTransaction];                  [db commitTransaction];
411          }          }
412            
413    abort:
414            [db rollbackTransaction];
415  }  }
416  @end  @end
417    

Legend:
Removed from v.1421  
changed lines
  Added in v.1422

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26