// ///////////////////////////////////////////////////////////////////////////////
// Copyright
(C
) 2010, Frank Blumenberg
//
// See License.
txt for complete licensing and attribution information.
// Permission
is hereby granted, free of charge, to
any person obtaining a copy
// of this software and associated documentation files
(the "Software"
), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software
is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
all
// copies or substantial portions of the Software.
//
// THE SOFTWARE
IS PROVIDED "AS IS", WITHOUT WARRANTY OF
ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
// ///////////////////////////////////////////////////////////////////////////////
#import "MKHosts.
h"
#import "MKHost.
h"
#import "TTGlobalCorePaths.
h"
#import "TTCorePreprocessorMacros.
h"
@interface MKHosts
(Private
)
-
(void
) load;
-
(void
) save;
@
end
@implementation MKHosts
-
(id
) init
{
self =
[super init
];
if (self != nil
) {
[self
load];
if(!hosts
) {
hosts =
[[NSMutableArray alloc
]init
];
MKHost* h;
h =
[[MKHost alloc
]init
];
h.
name = @"Quadkopter WLAN";
h.
address = @"192.168.0.74";
h.
port =
23;
h.
connectionClass = @"MKIpConnection";
[hosts addObject:h
];
[h release
];
h =
[[MKHost alloc
]init
];
h.
name = @"Quadkopter QMK";
h.
address = @"127.0.0.1";
h.
port =
64400;
h.
connectionClass = @"MKQmkIpConnection";
[hosts addObject:h
];
[h release
];
h =
[[MKHost alloc
]init
];
h.
name = @"Quadkopter Fake";
h.
address = @"192.168.0.74";
h.
port =
23;
h.
connectionClass = @"MKFakeConnection";
[hosts addObject:h
];
[h release
];
[self
save];
}
}
return self;
}
-
(void
) dealloc
{
[hosts release
];
[super dealloc
];
}
///////////////////////////////////////////////////////////////////////////////////////////////////
#define kFilename @"mkhosts"
#define kDataKey @"Data"
-
(void
) load {
NSString *filePath = TTPathForDocumentsResource
(kFilename
);
if ([[NSFileManager defaultManager
] fileExistsAtPath:filePath
]) {
DLog
(@"
Load the hosts from
%@",filePath);
NSData *data =
[[NSMutableData alloc
]
initWithContentsOfFile:filePath
];
NSKeyedUnarchiver *unarchiver =
[[NSKeyedUnarchiver alloc
] initForReadingWithData:data
];
TT_RELEASE_SAFELY
(hosts
);
hosts =
[unarchiver decodeObjectForKey:kDataKey
];
[hosts retain
];
[unarchiver finishDecoding
];
[unarchiver release
];
[data release
];
DLog
(@"Loaded the hosts
%@",hosts);
}
}
-
(void
) save {
NSString *filePath = TTPathForDocumentsResource
(kFilename
);
NSMutableData *data =
[[NSMutableData alloc
] init
];
NSKeyedArchiver *archiver =
[[NSKeyedArchiver alloc
] initForWritingWithMutableData:data
];
[archiver encodeObject:hosts forKey:kDataKey
];
[archiver finishEncoding
];
[data writeToFile:filePath atomically:YES
];
[archiver release
];
[data release
];
}
///////////////////////////////////////////////////////////////////////////////////////////////////
-
(NSUInteger
) count
{
return [hosts count
];
}
-
(MKHost*
) hostAtIndexPath:
(NSIndexPath *
)indexPath
{
NSUInteger row =
[indexPath row
];
return [hosts objectAtIndex:row
];
}
-
(NSIndexPath*
) addHost
{
MKHost* h =
[[MKHost alloc
]init
];
h.
connectionClass = @"MKFakeConnection";
[hosts addObject:h
];
[h release
];
[self
save];
return [NSIndexPath indexPathForRow:
[hosts count
]-
1 inSection:
0];
}
-
(void
) moveHostAtIndexPath:
(NSIndexPath *
)fromIndexPath toIndexPath:
(NSIndexPath *
)toIndexPath
{
NSLog
(@"moveHostAtIndexPath
%@ -> %@",fromIndexPath,toIndexPath);
NSLog
(@"
%@",hosts);
NSUInteger fromRow =
[fromIndexPath row
];
NSUInteger toRow =
[toIndexPath row
];
id object =
[[hosts objectAtIndex:fromRow
] retain
];
[hosts removeObjectAtIndex:fromRow
];
[hosts insertObject:object atIndex:toRow
];
[object release
];
NSLog
(@"
%@",hosts);
[self
save];
}
-
(void
) deleteHostAtIndexPath:
(NSIndexPath*
)indexPath
{
[hosts removeObjectAtIndex:
[indexPath row
]];
[self
save];
}
@
end