Changeset 8098


Ignore:
Timestamp:
Mar 28, 2009, 5:18:43 PM (13 years ago)
Author:
livings124
Message:

the Mac build works with the new speed limit libT code - still a bit quirky

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Transmission.xcodeproj/project.pbxproj

    r7991 r8098  
    22082208                                INFOPLIST_PREPROCESS = YES;
    22092209                                MACOSX_DEPLOYMENT_TARGET = 10.5;
     2210                                ONLY_ACTIVE_ARCH = YES;
    22102211                                OTHER_CFLAGS = "$(inherited)";
    22112212                                OTHER_LDFLAGS = "";
  • trunk/macosx/Controller.h

    r7659 r8098  
    101101    Badger                          * fBadger;
    102102    IBOutlet NSMenu                 * fDockMenu;
    103    
    104     NSTimer                         * fSpeedLimitTimer;
    105103   
    106104    NSMutableArray                  * fAutoImportedNames;
     
    214212- (void) toggleSpeedLimit: (id) sender;
    215213- (void) speedLimitChanged: (id) sender;
    216 - (void) autoSpeedLimitChange: (NSNotification *) notification;
    217 - (void) autoSpeedLimit: (NSTimer *) timer;
    218 - (void) setAutoSpeedLimitTimer: (BOOL) nextIsLimit;
     214- (void) altSpeedToggledCallbackIsLimited: (NSNumber *) limited;
    219215
    220216- (void) setLimitGlobalEnabled: (id) sender;
  • trunk/macosx/Controller.m

    r7983 r8098  
    144144#define DONATE_URL  @"http://www.transmissionbt.com/donate.php"
    145145
     146static void altSpeedToggledCallback(tr_session * handle UNUSED, tr_bool active, void * controller)
     147{
     148    [(Controller *)controller performSelectorOnMainThread: @selector(altSpeedToggledCallbackIsLimited:)
     149        withObject: [[NSNumber alloc] initWithBool: active] waitUntilDone: NO];
     150}
     151
    146152static tr_rpc_callback_status rpcCallback(tr_session * handle UNUSED, tr_rpc_callback_type type, struct tr_torrent * torrentStruct, void * controller)
    147153{
     
    201207        fDefaults = [NSUserDefaults standardUserDefaults];
    202208       
     209        //checks for old version speeds of -1
     210        if ([fDefaults integerForKey: @"UploadLimit"] < 0)
     211        {
     212            [fDefaults removeObjectForKey: @"UploadLimit"];
     213            [fDefaults setBool: NO forKey: @"CheckUpload"];
     214        }
     215        if ([fDefaults integerForKey: @"DownloadLimit"] < 0)
     216        {
     217            [fDefaults removeObjectForKey: @"DownloadLimit"];
     218            [fDefaults setBool: NO forKey: @"CheckDownload"];
     219        }
     220       
    203221        tr_benc settings;
    204         tr_bencInitDict(&settings, 22);
     222        tr_bencInitDict(&settings, 28);
    205223        tr_sessionGetDefaultSettings(&settings);
     224       
     225        #warning how to work with schedule?
     226        if (![fDefaults boolForKey: @"SpeedLimitAuto"])
     227            tr_bencDictAddInt(&settings, TR_PREFS_KEY_ALT_SPEED_ENABLED, [fDefaults boolForKey: @"SpeedLimit"]);
     228       
     229        tr_bencDictAddInt(&settings, TR_PREFS_KEY_ALT_SPEED_UP, [fDefaults integerForKey: @"SpeedLimitUploadLimit"]);
     230        tr_bencDictAddInt(&settings, TR_PREFS_KEY_ALT_SPEED_DOWN, [fDefaults integerForKey: @"SpeedLimitDownloadLimit"]);
     231       
     232        tr_bencDictAddInt(&settings, TR_PREFS_KEY_ALT_SPEED_TIME_ENABLED, [fDefaults boolForKey: @"SpeedLimitAuto"]);
     233        tr_bencDictAddInt(&settings, TR_PREFS_KEY_ALT_SPEED_TIME_BEGIN, [PrefsController dateToTimeSum:
     234                                                                            [fDefaults objectForKey: @"SpeedLimitAutoOnDate"]]);
     235        tr_bencDictAddInt(&settings, TR_PREFS_KEY_ALT_SPEED_TIME_END, [PrefsController dateToTimeSum:
     236                                                                            [fDefaults objectForKey: @"SpeedLimitAutoOffDate"]]);
     237       
     238        tr_bencDictAddInt(&settings, TR_PREFS_KEY_DSPEED, [fDefaults integerForKey: @"DownloadLimit"]);
     239        tr_bencDictAddInt(&settings, TR_PREFS_KEY_DSPEED_ENABLED, [fDefaults boolForKey: @"CheckDownload"]);
     240        tr_bencDictAddInt(&settings, TR_PREFS_KEY_USPEED, [fDefaults integerForKey: @"UploadLimit"]);
     241        tr_bencDictAddInt(&settings, TR_PREFS_KEY_USPEED_ENABLED, [fDefaults boolForKey: @"CheckUpload"]);
    206242       
    207243        tr_bencDictAddInt(&settings, TR_PREFS_KEY_BLOCKLIST_ENABLED, [fDefaults boolForKey: @"Blocklist"]);
     
    257293        fSoundPlaying = NO;
    258294       
     295        #warning needs to set before init
     296        tr_sessionSetAltSpeedFunc(fLib, altSpeedToggledCallback, self);
     297       
    259298        tr_sessionSetRPCCallback(fLib, rpcCallback, self);
    260299       
     
    424463                    name: NSOutlineViewSelectionDidChangeNotification object: fTableView];
    425464   
    426     [nc addObserver: self selector: @selector(autoSpeedLimitChange:)
    427                     name: @"AutoSpeedLimitChange" object: nil];
    428    
    429465    [nc addObserver: self selector: @selector(changeAutoImport)
    430466                    name: @"AutoImportSettingChange" object: nil];
     
    475511    if ([fDefaults boolForKey: @"InfoVisible"])
    476512        [self showInfo: nil];
    477    
    478     //set up the speed limit
    479     [self autoSpeedLimitChange: nil];
    480513}
    481514
     
    553586   
    554587    [fTimer invalidate];
    555     [fSpeedLimitTimer invalidate];
    556588   
    557589    if (fAutoImportTimer)
     
    22852317- (void) speedLimitChanged: (id) sender
    22862318{
    2287     [fPrefsController applySpeedSettings: nil];
    2288 }
    2289 
    2290 - (void) autoSpeedLimitChange: (NSNotification *) notification
    2291 {
    2292     //clear timer here in case it's not being reset
    2293     [fSpeedLimitTimer invalidate];
    2294     fSpeedLimitTimer = nil;
    2295    
    2296     if (![fDefaults boolForKey: @"SpeedLimitAuto"])
    2297         return;
    2298    
    2299     NSCalendar * calendar = [NSCalendar currentCalendar];
    2300     NSDateComponents * nowComponents = [calendar components: NSHourCalendarUnit | NSMinuteCalendarUnit fromDate: [NSDate date]],
    2301                     * onComponents = [calendar components: NSHourCalendarUnit | NSMinuteCalendarUnit
    2302                                         fromDate: [fDefaults objectForKey: @"SpeedLimitAutoOnDate"]],
    2303                     * offComponents = [calendar components: NSHourCalendarUnit | NSMinuteCalendarUnit
    2304                                         fromDate: [fDefaults objectForKey: @"SpeedLimitAutoOffDate"]];
    2305    
    2306     //check if should be on if within range
    2307     NSInteger onTime = [onComponents hour] * 60 + [onComponents minute],
    2308         offTime = [offComponents hour] * 60 + [offComponents minute],
    2309         nowTime = [nowComponents hour] * 60 + [nowComponents minute];
    2310    
    2311     BOOL shouldBeOn = NO;
    2312     if (onTime < offTime)
    2313         shouldBeOn = onTime <= nowTime && nowTime < offTime;
    2314     else if (onTime > offTime)
    2315         shouldBeOn = onTime <= nowTime || nowTime < offTime;
    2316     else;
    2317    
    2318     if ([fDefaults boolForKey: @"SpeedLimit"] != shouldBeOn)
    2319         [self toggleSpeedLimit: nil];
    2320    
    2321     //no need to set the timer if both times are equal
    2322     if (onTime == offTime)
    2323         return;
    2324    
    2325     [self setAutoSpeedLimitTimer: !shouldBeOn];
    2326 }
    2327 
    2328 //only called by fSpeedLimitTimer
    2329 - (void) autoSpeedLimit: (NSTimer *) timer
    2330 {
    2331     BOOL shouldLimit = [[timer userInfo] boolValue];
    2332    
    2333     if ([fDefaults boolForKey: @"SpeedLimit"] != shouldLimit)
    2334     {
    2335         [self toggleSpeedLimit: nil];
    2336        
    2337         [GrowlApplicationBridge notifyWithTitle: [fDefaults boolForKey: @"SpeedLimit"]
    2338                 ? NSLocalizedString(@"Speed Limit Auto Enabled", "Growl notification title")
    2339                 : NSLocalizedString(@"Speed Limit Auto Disabled", "Growl notification title")
    2340             description: NSLocalizedString(@"Bandwidth settings changed", "Growl notification description")
    2341             notificationName: GROWL_AUTO_SPEED_LIMIT iconData: nil priority: 0 isSticky: NO clickContext: nil];
    2342     }
    2343    
    2344     [self setAutoSpeedLimitTimer: !shouldLimit];
    2345 }
    2346 
    2347 - (void) setAutoSpeedLimitTimer: (BOOL) nextIsLimit
    2348 {
    2349     NSDate * timerDate = [fDefaults objectForKey: nextIsLimit ? @"SpeedLimitAutoOnDate" : @"SpeedLimitAutoOffDate"];
    2350    
    2351     //create date with combination of the current date and the date to go off
    2352     NSCalendar * calendar = [NSCalendar currentCalendar];
    2353     NSDateComponents * nowComponents = [calendar components: NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit
    2354                                         | NSHourCalendarUnit | NSMinuteCalendarUnit fromDate: [NSDate date]],
    2355                     * timerComponents = [calendar components: NSHourCalendarUnit | NSMinuteCalendarUnit fromDate: timerDate];
    2356    
    2357     //check if should be the next day
    2358     NSInteger nowTime = [nowComponents hour] * 60 + [nowComponents minute],
    2359         timerTime = [timerComponents hour] * 60 + [timerComponents minute];
    2360     if (timerTime < nowTime)
    2361         [nowComponents setDay: [nowComponents day] + 1]; //properly goes to next month when appropriate
    2362    
    2363     [nowComponents setHour: [timerComponents hour]];
    2364     [nowComponents setMinute: [timerComponents minute]];
    2365     [nowComponents setSecond: 0];
    2366    
    2367     NSDate * dateToUse = [calendar dateFromComponents: nowComponents];
    2368    
    2369     fSpeedLimitTimer = [[NSTimer alloc] initWithFireDate: dateToUse interval: 0 target: self selector: @selector(autoSpeedLimit:)
    2370                         userInfo: [NSNumber numberWithBool: nextIsLimit] repeats: NO];
    2371    
    2372     NSRunLoop * loop = [NSRunLoop mainRunLoop];
    2373     [loop addTimer: fSpeedLimitTimer forMode: NSDefaultRunLoopMode];
    2374     [loop addTimer: fSpeedLimitTimer forMode: NSModalPanelRunLoopMode];
    2375     [loop addTimer: fSpeedLimitTimer forMode: NSEventTrackingRunLoopMode];
    2376     [fSpeedLimitTimer release];
     2319    tr_sessionUseAltSpeed(fLib, [fDefaults boolForKey: @"SpeedLimit"]);
     2320    [self updateSpeedFieldsToolTips];
     2321}
     2322
     2323//limited has been retained
     2324- (void) altSpeedToggledCallbackIsLimited: (NSNumber *) limited
     2325{
     2326    const BOOL isLimited = [limited boolValue];
     2327
     2328    [fDefaults setBool: isLimited forKey: @"SpeedLimit"];
     2329    [self updateSpeedFieldsToolTips];
     2330   
     2331    #warning don't show on startup or on manual changed
     2332    [GrowlApplicationBridge notifyWithTitle: isLimited
     2333            ? NSLocalizedString(@"Speed Limit Auto Enabled", "Growl notification title")
     2334            : NSLocalizedString(@"Speed Limit Auto Disabled", "Growl notification title")
     2335        description: NSLocalizedString(@"Bandwidth settings changed", "Growl notification description")
     2336        notificationName: GROWL_AUTO_SPEED_LIMIT iconData: nil priority: 0 isSticky: NO clickContext: nil];
     2337   
     2338    [limited release];
    23772339}
    23782340
     
    37753737            //resume sleeping transfers after we wake up
    37763738            [fTorrents makeObjectsPerformSelector: @selector(wakeUp)];
    3777             [self autoSpeedLimitChange: nil];
     3739            #warning check speed limit timer?
     3740            //[self autoSpeedLimitChange: nil];
    37783741            break;
    37793742    }
  • trunk/macosx/PrefsController.h

    r8058 r8098  
    108108
    109109- (void) applySpeedSettings: (id) sender;
     110- (void) applyAltSpeedSettings;
    110111
    111112- (void) updateLimitFields;
     
    114115- (void) setSpeedLimit: (id) sender;
    115116- (void) setAutoSpeedLimit: (id) sender;
     117- (void) setAutoSpeedLimitTime: (id) sender;
     118+ (NSInteger) dateToTimeSum: (NSDate *) date;
    116119
    117120- (void) setAutoImport: (id) sender;
  • trunk/macosx/PrefsController.m

    r8058 r8098  
    9191        fDefaults = [NSUserDefaults standardUserDefaults];
    9292       
    93         //checks for old version speeds of -1
    94         if ([fDefaults integerForKey: @"UploadLimit"] < 0)
    95         {
    96             [fDefaults removeObjectForKey: @"UploadLimit"];
    97             [fDefaults setBool: NO forKey: @"CheckUpload"];
    98         }
    99         if ([fDefaults integerForKey: @"DownloadLimit"] < 0)
    100         {
    101             [fDefaults removeObjectForKey: @"DownloadLimit"];
    102             [fDefaults setBool: NO forKey: @"CheckDownload"];
    103         }
    104        
    10593        //check for old version download location (before 1.1)
    10694        NSString * choice;
     
    127115        //set encryption
    128116        [self setEncryptionMode: nil];
    129        
    130         //actually set bandwidth limits
    131         [self applySpeedSettings: nil];
    132117       
    133118        //set proxy type
     
    548533- (void) applySpeedSettings: (id) sender
    549534{
    550     if ([fDefaults boolForKey: @"SpeedLimit"])
    551     {
    552         tr_sessionSetSpeedLimitEnabled(fHandle, TR_UP, 1);
    553         tr_sessionSetSpeedLimit(fHandle, TR_UP, [fDefaults integerForKey: @"SpeedLimitUploadLimit"]);
    554        
    555         tr_sessionSetSpeedLimitEnabled(fHandle, TR_DOWN, 1);
    556         tr_sessionSetSpeedLimit(fHandle, TR_DOWN, [fDefaults integerForKey: @"SpeedLimitDownloadLimit"]);
    557     }
    558     else
    559     {
    560         tr_sessionSetSpeedLimitEnabled(fHandle, TR_UP, [fDefaults boolForKey: @"CheckUpload"]);
    561         tr_sessionSetSpeedLimit(fHandle, TR_UP, [fDefaults integerForKey: @"UploadLimit"]);
    562        
    563         tr_sessionSetSpeedLimitEnabled(fHandle, TR_DOWN, [fDefaults boolForKey: @"CheckDownload"]);
    564         tr_sessionSetSpeedLimit(fHandle, TR_DOWN, [fDefaults integerForKey: @"DownloadLimit"]);
    565     }
    566    
     535    tr_sessionLimitSpeed(fHandle, TR_UP, [fDefaults boolForKey: @"CheckUpload"]);
     536    tr_sessionSetSpeedLimit(fHandle, TR_UP, [fDefaults integerForKey: @"UploadLimit"]);
     537   
     538    tr_sessionLimitSpeed(fHandle, TR_DOWN, [fDefaults boolForKey: @"CheckDownload"]);
     539    tr_sessionSetSpeedLimit(fHandle, TR_DOWN, [fDefaults integerForKey: @"DownloadLimit"]);
     540   
     541    [[NSNotificationCenter defaultCenter] postNotificationName: @"SpeedLimitUpdate" object: nil];
     542}
     543
     544- (void) applyAltSpeedSettings
     545{
     546    tr_sessionSetAltSpeed(fHandle, TR_UP, [fDefaults integerForKey: @"SpeedLimitUploadLimit"]);
     547    tr_sessionSetAltSpeed(fHandle, TR_DOWN, [fDefaults integerForKey: @"SpeedLimitDownloadLimit"]);
     548       
    567549    [[NSNotificationCenter defaultCenter] postNotificationName: @"SpeedLimitUpdate" object: nil];
    568550}
     
    609591    [fDefaults setInteger: [sender intValue] forKey: sender == fSpeedLimitUploadField
    610592                                                        ? @"SpeedLimitUploadLimit" : @"SpeedLimitDownloadLimit"];
    611     [self applySpeedSettings: self];
     593    [self applyAltSpeedSettings];
    612594}
    613595
    614596- (void) setAutoSpeedLimit: (id) sender
    615597{
    616     [[NSNotificationCenter defaultCenter] postNotificationName: @"AutoSpeedLimitChange" object: self];
     598    tr_sessionUseAltSpeedTime(fHandle, [fDefaults boolForKey: @"SpeedLimitAuto"]);
     599}
     600
     601- (void) setAutoSpeedLimitTime: (id) sender
     602{
     603    tr_sessionSetAltSpeedBegin(fHandle, [PrefsController dateToTimeSum: [fDefaults objectForKey: @"SpeedLimitAutoOnDate"]]);
     604    tr_sessionSetAltSpeedEnd(fHandle, [PrefsController dateToTimeSum: [fDefaults objectForKey: @"SpeedLimitAutoOffDate"]]);
     605}
     606
     607+ (NSInteger) dateToTimeSum: (NSDate *) date
     608{
     609    NSCalendar * calendar = [NSCalendar currentCalendar];
     610    NSDateComponents * components = [calendar components: NSHourCalendarUnit | NSMinuteCalendarUnit fromDate: date];
     611    return [components hour] * 60 + [components minute];
    617612}
    618613
     
    10491044}
    10501045
     1046#warning probably needs to be updated
    10511047- (void) rpcUpdatePrefs
    10521048{
     
    10801076   
    10811077    //speed limit - down
    1082     BOOL downLimitEnabled = tr_sessionIsSpeedLimitEnabled(fHandle, TR_DOWN);
     1078    BOOL downLimitEnabled = tr_sessionIsSpeedLimited(fHandle, TR_DOWN);
    10831079    [fDefaults setBool: downLimitEnabled forKey: @"CheckDownload"];
    10841080   
     
    10871083   
    10881084    //speed limit - up
    1089     BOOL upLimitEnabled = tr_sessionIsSpeedLimitEnabled(fHandle, TR_UP);
     1085    BOOL upLimitEnabled = tr_sessionIsSpeedLimited(fHandle, TR_UP);
    10901086    [fDefaults setBool: upLimitEnabled forKey: @"CheckUpload"];
    10911087   
  • trunk/macosx/Torrent.m

    r8067 r8098  
    395395- (BOOL) usesSpeedLimit: (BOOL) upload
    396396{
    397     return tr_torrentIsUsingSpeedLimit(fHandle, upload ? TR_UP : TR_DOWN);
     397    return tr_torrentUsesSpeedLimit(fHandle, upload ? TR_UP : TR_DOWN);
    398398}
    399399
     
    415415- (BOOL) usesGlobalSpeedLimit
    416416{
    417     const BOOL up = tr_torrentIsUsingGlobalSpeedLimit(fHandle, TR_UP);
    418     const BOOL down = tr_torrentIsUsingGlobalSpeedLimit(fHandle, TR_DOWN);
    419     NSAssert(up == down, @"upload and download global limit settings should have the same value");
    420     return up;
     417    return tr_torrentUsesSessionLimits(fHandle);
    421418}
    422419
    423420- (void) setUseGlobalSpeedLimit: (BOOL) use
    424421{
    425     tr_torrentUseGlobalSpeedLimit(fHandle, TR_UP, use);
    426     tr_torrentUseGlobalSpeedLimit(fHandle, TR_DOWN, use);
     422    tr_torrentUseSessionLimits(fHandle, use);
    427423}
    428424
  • trunk/macosx/en.lproj/PrefsWindow.xib

    r8039 r8098  
    30693069                                                                <string key="NSFrame">{{1, 1}, {141, 169}}</string>
    30703070                                                                <reference key="NSSuperview" ref="544077474"/>
     3071                                                                <reference key="NSNextKeyView" ref="638525082"/>
    30713072                                                                <reference key="NSDocView" ref="638525082"/>
    30723073                                                                <reference key="NSBGColor" ref="729660797"/>
     
    30963097                                                <string key="NSFrame">{{20, 49}, {143, 171}}</string>
    30973098                                                <reference key="NSSuperview" ref="284666863"/>
     3099                                                <reference key="NSNextKeyView" ref="568562479"/>
    30983100                                                <int key="NSsFlags">530</int>
    30993101                                                <reference key="NSVScroller" ref="287972127"/>
     
    53645366                                                                <string key="NSFrame">{{1, 1}, {291, 76}}</string>
    53655367                                                                <reference key="NSSuperview" ref="122119447"/>
     5368                                                                <reference key="NSNextKeyView" ref="173651346"/>
    53665369                                                                <reference key="NSDocView" ref="173651346"/>
    53675370                                                                <reference key="NSBGColor" ref="729660797"/>
     
    53905393                                                <string key="NSFrame">{{103, 96}, {308, 78}}</string>
    53915394                                                <reference key="NSSuperview" ref="810116101"/>
     5395                                                <reference key="NSNextKeyView" ref="206862330"/>
    53925396                                                <int key="NSsFlags">18</int>
    53935397                                                <reference key="NSVScroller" ref="220703981"/>
     
    61296133                                        </object>
    61306134                                        <int key="connectionID">531</int>
    6131                                 </object>
    6132                                 <object class="IBConnectionRecord">
    6133                                         <object class="IBActionConnection" key="connection">
    6134                                                 <string key="label">setAutoSpeedLimit:</string>
    6135                                                 <reference key="source" ref="511492310"/>
    6136                                                 <reference key="destination" ref="401711944"/>
    6137                                         </object>
    6138                                         <int key="connectionID">532</int>
    6139                                 </object>
    6140                                 <object class="IBConnectionRecord">
    6141                                         <object class="IBActionConnection" key="connection">
    6142                                                 <string key="label">setAutoSpeedLimit:</string>
    6143                                                 <reference key="source" ref="511492310"/>
    6144                                                 <reference key="destination" ref="497078689"/>
    6145                                         </object>
    6146                                         <int key="connectionID">533</int>
    61476135                                </object>
    61486136                                <object class="IBConnectionRecord">
     
    87078695                                        </object>
    87088696                                        <int key="connectionID">1900</int>
     8697                                </object>
     8698                                <object class="IBConnectionRecord">
     8699                                        <object class="IBActionConnection" key="connection">
     8700                                                <string key="label">setAutoSpeedLimitTime:</string>
     8701                                                <reference key="source" ref="511492310"/>
     8702                                                <reference key="destination" ref="497078689"/>
     8703                                        </object>
     8704                                        <int key="connectionID">1902</int>
     8705                                </object>
     8706                                <object class="IBConnectionRecord">
     8707                                        <object class="IBActionConnection" key="connection">
     8708                                                <string key="label">setAutoSpeedLimitTime:</string>
     8709                                                <reference key="source" ref="511492310"/>
     8710                                                <reference key="destination" ref="401711944"/>
     8711                                        </object>
     8712                                        <int key="connectionID">1903</int>
    87098713                                </object>
    87108714                        </object>
     
    1249612500                        </object>
    1249712501                        <nil key="sourceID"/>
    12498                         <int key="maxID">1901</int>
     12502                        <int key="maxID">1903</int>
    1249912503                </object>
    1250012504                <object class="IBClassDescriber" key="IBDocument.Classes">
     
    1265112655                                                        <string>setAutoSize:</string>
    1265212656                                                        <string>setAutoSpeedLimit:</string>
     12657                                                        <string>setAutoSpeedLimitTime:</string>
    1265312658                                                        <string>setAutoUpdateToBeta:</string>
    1265412659                                                        <string>setBadge:</string>
     
    1273712742                                                        <string>id</string>
    1273812743                                                        <string>id</string>
     12744                                                        <string>id</string>
    1273912745                                                </object>
    1274012746                                        </object>
Note: See TracChangeset for help on using the changeset viewer.