Update the icon in the personal preferences if it's changed elsewhere (the contact...
[adiumx.git] / Source / AICoreComponentLoader.m
blobc4dcb33f6dd932f9ad18cd0ae5a068c1fb29a1f9
1 /*
2  * Adium is the legal property of its developers, whose names are listed in the copyright file included
3  * with this source distribution.
4  *
5  * This program is free software; you can redistribute it and/or modify it under the terms of the GNU
6  * General Public License as published by the Free Software Foundation; either version 2 of the License,
7  * or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
10  * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
11  * Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License along with this program; if not,
14  * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
15  */
17 /*!
18  * @class AICoreComponentLoader
19  * @brief Core - Component Loader
20  *
21  * Loads integrated plugins.  Component classes to load are determined by CoreComponents.plist
22  */
24 #import "AICoreComponentLoader.h"
25 #import <Adium/AIObject.h>
26 #import "AIPlugin.h"
28 @interface AICoreComponentLoader (PRIVATE)
29 - (void)loadComponents;
30 @end
32 @implementation AICoreComponentLoader
34 /*!
35  * @brief Init
36  */
37 - (id)init
39         if ((self = [super init])) {
40                 components = [[NSMutableDictionary alloc] init];
41                 
42                 [self loadComponents];
43         }
45         return self;
48 /*!
49  * @brief Deallocate
50  */
51 - (void)dealloc
53         [components release];
54         [super dealloc];
57 #pragma mark -
59 /*!
60  * @brief Load integrated components
61  */
62 - (void)loadComponents
64         //Fetch the list of components to load
65         NSString        *propertyList = [[NSBundle mainBundle] pathForResource:@"CoreComponents" ofType:@"plist"];
66         NSArray         *componentArray = [NSArray arrayWithContentsOfFile:propertyList];
67         NSParameterAssert(componentArray != nil);
69         //Load each component
70         NSEnumerator *enumerator = [componentArray objectEnumerator];
71         NSString         *className;
73         while ((className = [enumerator nextObject])) {
74                 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
75                 Class class;
77                 if (className && (class = NSClassFromString(className))) {
78                         id <AIPlugin>   object = [[class alloc] init];
80                         NSAssert1(object, @"Failed to load %@", className);
82                         [object installPlugin];
84                         [components setObject:object forKey:className];
85                         [object release];
86                 }
87                 [pool release];
88         }
91 - (void)controllerDidLoad
95 /*!
96  * @brief Close integreated components
97  */
98 - (void)controllerWillClose
100         NSEnumerator    *enumerator = [components objectEnumerator];
101         id <AIPlugin>   plugin;
103         while ((plugin = [enumerator nextObject])) {
104                 [[[AIObject sharedAdiumInstance] notificationCenter] removeObserver:plugin];
105                 [[NSNotificationCenter defaultCenter] removeObserver:plugin];
106                 [plugin uninstallPlugin];
107         }
110 #pragma mark -
113  * @brief Retrieve a component plugin by its class name
114  */
115 - (id <AIPlugin>)pluginWithClassName:(NSString *)className {
116         return [components objectForKey:className];
119 @end