/* * Copyright (c) 2010, 2011, 2012, 2013, 2016, 2017, 2018, 2021, 2024 * Jonathan Schleifer * * https://fossil.nil.im/objirc * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice is present in all copies. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #include #include #import #import #import #import #import "IRCUser.h" @implementation IRCUser @synthesize username = _username, nickname = _nickname, hostname = _hostname; + (instancetype)userWithString: (OFString *)string { return [[[self alloc] initWithString: string] autorelease]; } - (instancetype)initWithString: (OFString *)string { self = [super init]; @try { size_t pos; pos = [string rangeOfString: @"@"].location; if (pos == OFNotFound) @throw [OFInvalidFormatException exception]; _hostname = [[string substringFromIndex: pos + 1] copy]; string = [string substringToIndex: pos]; pos = [string rangeOfString: @"!"].location; if (pos == OFNotFound) @throw [OFInvalidFormatException exception]; _username = [[string substringFromIndex: pos + 1] copy]; _nickname = [[string substringToIndex: pos] copy]; } @catch (id e) { [self release]; @throw e; } return self; } - (void)dealloc { [_nickname release]; [_username release]; [_hostname release]; [super dealloc]; } - (id)copy { return [self retain]; } - (OFString *)description { return [OFString stringWithFormat: @"%@!%@@%@", _nickname, _username, _hostname]; } @end