From b05fcc7d82395fe2d988567c36d213aa1c6cfeae Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Wed, 30 Jul 2014 14:51:00 -0400 Subject: [PATCH] Fat commit to refactor the quick record generation --- ActiveSync/common.make | 1 - GNUmakefile | 1 - Main/GNUmakefile.preamble | 2 - NEWS | 12 + OGoContentStore/COPYING | 482 ------------------ OGoContentStore/GNUmakefile | 34 -- OGoContentStore/GNUmakefile.preamble | 32 -- OGoContentStore/OCSContactFieldExtractor.m | 136 ----- OGoContentStore/OCSiCalFieldExtractor.h | 35 -- OGoContentStore/OCSiCalFieldExtractor.m | 96 ---- OGoContentStore/README | 144 ------ OGoContentStore/Version | 14 - .../iCalRepeatableEntityObject+OCS.h | 35 -- .../iCalRepeatableEntityObject+OCS.m | 29 -- OGoContentStore/misc/iNetOrgPerson.txt | 108 ---- OGoContentStore/misc/icaltest.ical | 30 -- OGoContentStore/misc/test1/GNUmakefile | 15 - OGoContentStore/misc/test1/common.h | 3 - OGoContentStore/misc/test1/test1.m | 31 -- OpenChange/GNUmakefile | 2 - OpenChange/MAPIStoreContactsMessage.m | 2 +- OpenChange/MAPIStoreTasksMessage.m | 2 +- SOPE/GDLContentStore/GCSFieldExtractor.h | 37 -- SOPE/GDLContentStore/GCSFieldExtractor.m | 30 -- SOPE/GDLContentStore/GCSFolder.h | 4 + SOPE/GDLContentStore/GCSFolder.m | 27 +- SOPE/GDLContentStore/GCSFolderManager.m | 2 +- SOPE/GDLContentStore/GCSFolderType.h | 7 +- SOPE/GDLContentStore/GCSFolderType.m | 40 +- SOPE/GDLContentStore/GNUmakefile | 10 +- .../GDLContentStore}/GNUmakefile.postamble | 6 +- .../GDLContentStore}/appointment-oracle.ocs | 0 .../GDLContentStore}/appointment.ocs | 0 .../GDLContentStore}/contact-oracle.ocs | 0 .../GDLContentStore}/contact.ocs | 0 .../Appointments/SOGoAppointmentFolder.m | 11 +- .../Appointments/SOGoAppointmentObject.h | 2 +- .../Appointments/SOGoAppointmentObject.m | 47 +- .../Appointments/SOGoCalendarComponent.h | 2 +- .../Appointments/SOGoCalendarComponent.m | 21 +- .../Appointments/SOGoComponentOccurence.m | 12 +- SoObjects/Appointments/SOGoTaskObject.h | 2 +- SoObjects/Appointments/SOGoTaskObject.m | 8 +- .../Appointments/SOGoWebAppointmentFolder.h | 5 +- .../Appointments/SOGoWebAppointmentFolder.m | 5 +- SoObjects/Appointments/iCalCalendar+SOGo.m | 24 +- .../Appointments/iCalEntityObject+SOGo.h | 2 +- .../Appointments/iCalEntityObject+SOGo.m | 2 +- SoObjects/Appointments/iCalEvent+SOGo.h | 7 +- SoObjects/Appointments/iCalEvent+SOGo.m | 7 +- .../iCalRepeatableEntityObject+SOGo.h | 38 +- .../iCalRepeatableEntityObject+SOGo.m | 40 +- SoObjects/Appointments/iCalToDo+SOGo.h | 6 +- SoObjects/Appointments/iCalToDo+SOGo.m | 9 +- SoObjects/Contacts/NGVCard+SOGo.m | 50 ++ SoObjects/Contacts/NGVList+SOGo.h | 4 +- SoObjects/Contacts/NGVList+SOGo.m | 19 +- SoObjects/Contacts/SOGoContactGCSEntry.m | 33 +- SoObjects/Contacts/SOGoContactGCSList.m | 26 +- SoObjects/Contacts/SOGoContactLDIFEntry.m | 7 +- SoObjects/Mailer/SOGoDraftObject.m | 2 +- SoObjects/SOGo/GNUmakefile.preamble | 1 - SoObjects/SOGo/SOGoContentObject.h | 16 +- SoObjects/SOGo/SOGoContentObject.m | 45 +- SoObjects/common.make | 1 - Tests/Integration/GNUmakefile.preamble | 1 - Tests/Unit/GNUmakefile | 2 +- Tools/GNUmakefile.preamble | 1 - Tools/SOGoToolRestore.m | 3 +- UI/Contacts/UIxContactFolderActions.m | 4 +- UI/Contacts/UIxListEditor.m | 7 +- UI/MailPartViewers/UIxMailPartICalActions.m | 12 +- UI/Scheduler/UIxComponentEditor.m | 2 +- UI/Scheduler/UIxTaskEditor.m | 16 +- UI/common.make | 5 +- packaging/debian-multiarch/sogo.overrides | 2 +- packaging/debian/sogo.overrides | 2 +- packaging/rhel/sogo.spec | 1 - 78 files changed, 341 insertions(+), 1580 deletions(-) delete mode 100644 OGoContentStore/COPYING delete mode 100644 OGoContentStore/GNUmakefile delete mode 100644 OGoContentStore/GNUmakefile.preamble delete mode 100644 OGoContentStore/OCSContactFieldExtractor.m delete mode 100644 OGoContentStore/OCSiCalFieldExtractor.h delete mode 100644 OGoContentStore/OCSiCalFieldExtractor.m delete mode 100644 OGoContentStore/README delete mode 100644 OGoContentStore/Version delete mode 100644 OGoContentStore/iCalRepeatableEntityObject+OCS.h delete mode 100644 OGoContentStore/iCalRepeatableEntityObject+OCS.m delete mode 100644 OGoContentStore/misc/iNetOrgPerson.txt delete mode 100644 OGoContentStore/misc/icaltest.ical delete mode 100644 OGoContentStore/misc/test1/GNUmakefile delete mode 100644 OGoContentStore/misc/test1/common.h delete mode 100644 OGoContentStore/misc/test1/test1.m delete mode 100644 SOPE/GDLContentStore/GCSFieldExtractor.h delete mode 100644 SOPE/GDLContentStore/GCSFieldExtractor.m rename {OGoContentStore => SOPE/GDLContentStore}/GNUmakefile.postamble (55%) rename {OGoContentStore => SOPE/GDLContentStore}/appointment-oracle.ocs (100%) rename {OGoContentStore => SOPE/GDLContentStore}/appointment.ocs (100%) rename {OGoContentStore => SOPE/GDLContentStore}/contact-oracle.ocs (100%) rename {OGoContentStore => SOPE/GDLContentStore}/contact.ocs (100%) diff --git a/ActiveSync/common.make b/ActiveSync/common.make index d53fcef8e..505f53f88 100644 --- a/ActiveSync/common.make +++ b/ActiveSync/common.make @@ -18,7 +18,6 @@ ADDITIONAL_INCLUDE_DIRS += \ ADDITIONAL_LIB_DIRS += \ -L../SoObjects/SOGo/SOGo.framework/ \ -L../SoObjects/SOGo/$(GNUSTEP_OBJ_DIR)/ \ - -L../OGoContentStore/$(GNUSTEP_OBJ_DIR)/ \ -L../SOPE/NGCards/$(GNUSTEP_OBJ_DIR)/ \ -L/usr/local/lib diff --git a/GNUmakefile b/GNUmakefile index 957160740..fdff4d793 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -6,7 +6,6 @@ include $(GNUSTEP_MAKEFILES)/common.make SUBPROJECTS = \ SOPE/NGCards \ SOPE/GDLContentStore \ - OGoContentStore \ SoObjects \ Main \ UI \ diff --git a/Main/GNUmakefile.preamble b/Main/GNUmakefile.preamble index 675b5916c..022e3d1e2 100644 --- a/Main/GNUmakefile.preamble +++ b/Main/GNUmakefile.preamble @@ -10,14 +10,12 @@ ADDITIONAL_INCLUDE_DIRS += \ ADDITIONAL_LIB_DIRS += \ -L../SoObjects/SOGo/SOGo.framework \ - -L../OGoContentStore/$(GNUSTEP_OBJ_DIR)/ \ -L../SOPE/NGCards/$(GNUSTEP_OBJ_DIR)/ SYSTEM_LIB_DIR += -L/usr/local/lib -L/usr/lib $(SOGOD)_TOOL_LIBS += \ -lSOGo \ - -lOGoContentStore \ -lGDLContentStore \ -lGDLAccess \ -lWEExtensions \ diff --git a/NEWS b/NEWS index 3857a5357..e29d3979e 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,15 @@ +2.2.8 (2014-XX-XX) +------------------ + +New features + - + +Enchancements + - major refactoring of the GCS component saving code (dropped OGoContentStore) + +Bug fixes + - + 2.2.7 (2014-07-30) ------------------ diff --git a/OGoContentStore/COPYING b/OGoContentStore/COPYING deleted file mode 100644 index 161a3d1d4..000000000 --- a/OGoContentStore/COPYING +++ /dev/null @@ -1,482 +0,0 @@ - GNU LIBRARY GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1991 Free Software Foundation, Inc. - 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the library GPL. It is - numbered 2 because it goes with version 2 of the ordinary GPL.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Library General Public License, applies to some -specially designated Free Software Foundation software, and to any -other libraries whose authors decide to use it. You can use it for -your libraries, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if -you distribute copies of the library, or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link a program with the library, you must provide -complete object files to the recipients so that they can relink them -with the library, after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - Our method of protecting your rights has two steps: (1) copyright -the library, and (2) offer you this license which gives you legal -permission to copy, distribute and/or modify the library. - - Also, for each distributor's protection, we want to make certain -that everyone understands that there is no warranty for this free -library. If the library is modified by someone else and passed on, we -want its recipients to know that what they have is not the original -version, so that any problems introduced by others will not reflect on -the original authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that companies distributing free -software will individually obtain patent licenses, thus in effect -transforming the program into proprietary software. To prevent this, -we have made it clear that any patent must be licensed for everyone's -free use or not licensed at all. - - Most GNU software, including some libraries, is covered by the ordinary -GNU General Public License, which was designed for utility programs. This -license, the GNU Library General Public License, applies to certain -designated libraries. This license is quite different from the ordinary -one; be sure to read it in full, and don't assume that anything in it is -the same as in the ordinary license. - - The reason we have a separate public license for some libraries is that -they blur the distinction we usually make between modifying or adding to a -program and simply using it. Linking a program with a library, without -changing the library, is in some sense simply using the library, and is -analogous to running a utility program or application program. However, in -a textual and legal sense, the linked executable is a combined work, a -derivative of the original library, and the ordinary General Public License -treats it as such. - - Because of this blurred distinction, using the ordinary General -Public License for libraries did not effectively promote software -sharing, because most developers did not use the libraries. We -concluded that weaker conditions might promote sharing better. - - However, unrestricted linking of non-free programs would deprive the -users of those programs of all benefit from the free status of the -libraries themselves. This Library General Public License is intended to -permit developers of non-free programs to use free libraries, while -preserving your freedom as a user of such programs to change the free -libraries that are incorporated in them. (We have not seen how to achieve -this as regards changes in header files, but we have achieved it as regards -changes in the actual functions of the Library.) The hope is that this -will lead to faster development of free libraries. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, while the latter only -works together with the library. - - Note that it is possible for a library to be covered by the ordinary -General Public License rather than by this special one. - - GNU LIBRARY GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library which -contains a notice placed by the copyright holder or other authorized -party saying it may be distributed under the terms of this Library -General Public License (also called "this License"). Each licensee is -addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also compile or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - c) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - d) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the source code distributed need not include anything that is normally -distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Library General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - Appendix: How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/OGoContentStore/GNUmakefile b/OGoContentStore/GNUmakefile deleted file mode 100644 index 3b7a48a62..000000000 --- a/OGoContentStore/GNUmakefile +++ /dev/null @@ -1,34 +0,0 @@ -# GNUstep makefile - -include ../config.make -include $(GNUSTEP_MAKEFILES)/common.make -include ./Version - -LIBRARY_NAME = libOGoContentStore - -TYPEMODELS_DIR = $(SOGO_TYPEMODELS) - -libOGoContentStore_HEADER_FILES_DIR = . -libOGoContentStore_HEADER_FILES_INSTALL_DIR = /OGoContentStore -libOGoContentStore_INTERFACE_VERSION=$(MAJOR_VERSION).$(MINOR_VERSION) - -ADDITIONAL_INCLUDE_DIRS += -I../SOPE -ADDITIONAL_LIB_DIRS += -L../SOPE/GDLContentStore/obj - -libOGoContentStore_OBJC_FILES += \ - OCSiCalFieldExtractor.m \ - OCSContactFieldExtractor.m \ - -libOGoContentStore_TYPEMODELS += \ - appointment.ocs \ - contact.ocs \ - appointment-oracle.ocs \ - contact-oracle.ocs - --include GNUmakefile.preamble -ifneq ($(FHS_INSTALL_ROOT),) -GNUSTEP_HEADERS=$(DESTDIR)$(FHS_INSTALL_ROOT)/include -endif -include $(GNUSTEP_MAKEFILES)/library.make -include $(GNUSTEP_MAKEFILES)/tool.make --include GNUmakefile.postamble diff --git a/OGoContentStore/GNUmakefile.preamble b/OGoContentStore/GNUmakefile.preamble deleted file mode 100644 index 3a458580d..000000000 --- a/OGoContentStore/GNUmakefile.preamble +++ /dev/null @@ -1,32 +0,0 @@ -# compilation settings - -libOGoContentStore_LIBRARIES_DEPEND_UPON += \ - -lGDLContentStore \ - -lGDLAccess \ - -lNGCards \ - -lNGExtensions \ - -lEOControl \ - -lSaxObjC \ - $(BASE_LIBS) - -ADDITIONAL_INCLUDE_DIRS += -I. -I.. -I../SOPE -I../SoObjects - -ADDITIONAL_LIB_DIRS += -L./$(GNUSTEP_OBJ_DIR) -L../SOPE/NGCards/$(GNUSTEP_OBJ_DIR)/ -L../SoObjects/SOGo/SOGo.framework/ - -SYSTEM_LIB_DIR += -L/usr/local/lib -L/usr/lib - -ifeq ($(FOUNDATION_LIB),apple) -libOGoContentStore_PREBIND_ADDR="0xC7700000" -libOGoContentStore_LDFLAGS += -seg1addr $(libOGoContentStore_PREBIND_ADDR) -endif - -test_quick_extract_TOOL_LIBS += \ - -lEOControl \ - -lSaxObjC \ - -lDOM \ - -lNGExtensions \ - -lNGCards \ - -lGDLContentStore \ - -lGDLAccess \ - -lOGoContentStore \ - $(BASE_LIBS) diff --git a/OGoContentStore/OCSContactFieldExtractor.m b/OGoContentStore/OCSContactFieldExtractor.m deleted file mode 100644 index 8b1445316..000000000 --- a/OGoContentStore/OCSContactFieldExtractor.m +++ /dev/null @@ -1,136 +0,0 @@ -/* - Copyright (C) 2004-2005 SKYRIX Software AG - - This file is part of OpenGroupware.org. - - OGo is free software; you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - OGo is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with OGo; see the file COPYING. If not, write to the - Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. -*/ - -#import -#import -#import -#import - -#import -#import -#import - -#import - -@interface OCSContactFieldExtractor : GCSFieldExtractor -@end - -@implementation OCSContactFieldExtractor - -- (NSMutableDictionary *) extractQuickFieldsFromVCard: (NGVCard *) vCard -{ - NSMutableDictionary *fields; - NSArray *values; - CardElement *element; - NSString *value; - - fields = [NSMutableDictionary dictionaryWithCapacity: 16]; - - value = [vCard fn]; - if (value) - [fields setObject: value forKey: @"c_cn"]; - element = [vCard n]; - [fields setObject: [element flattenedValueAtIndex: 0 forKey: @""] - forKey: @"c_sn"]; - [fields setObject: [element flattenedValueAtIndex: 1 forKey: @""] - forKey: @"c_givenName"]; - value = [vCard preferredTel]; - if (value) - [fields setObject: value forKey: @"c_telephonenumber"]; - value = [vCard preferredEMail]; - if (![value isNotNull]) - value = @""; - [fields setObject: value forKey: @"c_mail"]; - element = [vCard org]; - [fields setObject: [element flattenedValueAtIndex: 0 forKey: @""] - forKey: @"c_o"]; - [fields setObject: [element flattenedValueAtIndex: 1 forKey: @""] - forKey: @"c_ou"]; - element = [vCard preferredAdr]; - if (element && ![element isVoid]) - [fields setObject: [element flattenedValueAtIndex: 3 - forKey: @""] - forKey: @"c_l"]; - value = [[vCard uniqueChildWithTag: @"X-AIM"] flattenedValuesForKey: @""]; - [fields setObject: value forKey: @"c_screenname"]; - values = [[vCard categories] trimmedComponents]; - if ([values count] > 0) - [fields setObject: [values componentsJoinedByString: @","] - forKey: @"c_categories"]; - else - [fields setObject: [NSNull null] forKey: @"c_categories"]; - [fields setObject: @"vcard" forKey: @"c_component"]; - - return fields; -} - -- (NSMutableDictionary *) extractQuickFieldsFromVList: (NGVList *) vList -{ - NSMutableDictionary *fields; - NSString *value; - - fields = [NSMutableDictionary dictionaryWithCapacity: 1]; - - value = [vList fn]; - if (value) - [fields setObject: value forKey: @"c_cn"]; - [fields setObject: @"vlist" forKey: @"c_component"]; - - return fields; -} - -- (NSMutableDictionary *) extractQuickFieldsFromContent: (NSString *) content -{ - NSMutableDictionary *fields; - NGVCard *vCard; - NGVList *vList; - NSString *upperContent; - - fields = nil; - if ([content length] > 0) - { - upperContent = [content uppercaseString]; - if ([upperContent hasPrefix: @"BEGIN:VCARD"]) - { - vCard = [NGVCard parseSingleFromSource: content]; - if (vCard) - fields = [self extractQuickFieldsFromVCard: vCard]; - else - [self errorWithFormat: @"Could not parse VCARD content."]; - } - else if ([upperContent hasPrefix: @"BEGIN:VLIST"]) - { - vList = [NGVList parseSingleFromSource: content]; - if (vList) - fields = [self extractQuickFieldsFromVList: vList]; - else - [self errorWithFormat: @"Could not parse VLIST content."]; - } - else - [self errorWithFormat: @"Content is unknown."]; - } - else - [self errorWithFormat: @"Content is empty."]; - - return fields; -} - -@end /* OCSContactFieldExtractor */ diff --git a/OGoContentStore/OCSiCalFieldExtractor.h b/OGoContentStore/OCSiCalFieldExtractor.h deleted file mode 100644 index 504d2842c..000000000 --- a/OGoContentStore/OCSiCalFieldExtractor.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - Copyright (C) 2004-2005 SKYRIX Software AG - - This file is part of OpenGroupware.org. - - OGo is free software; you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - OGo is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with OGo; see the file COPYING. If not, write to the - Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. -*/ - -#ifndef __OGoContentStore_OCSiCalFieldExtractor_H__ -#define __OGoContentStore_OCSiCalFieldExtractor_H__ - -#include - -@interface OCSiCalFieldExtractor : GCSFieldExtractor -{ -} - -+ (id)sharedICalFieldExtractor; - -@end - -#endif /* __OGoContentStore_OCSiCalFieldExtractor_H__ */ diff --git a/OGoContentStore/OCSiCalFieldExtractor.m b/OGoContentStore/OCSiCalFieldExtractor.m deleted file mode 100644 index 3bd604720..000000000 --- a/OGoContentStore/OCSiCalFieldExtractor.m +++ /dev/null @@ -1,96 +0,0 @@ -/* - Copyright (C) 2004 SKYRIX Software AG - - This file is part of OpenGroupware.org. - - OGo is free software; you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - OGo is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with SOGo; see the file COPYING. If not, write to the - Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. -*/ - -#import -#import -#import -#import - -#import -#import -#import - -#import - -#import "OCSiCalFieldExtractor.h" - -@implementation OCSiCalFieldExtractor - -+ (id) sharedICalFieldExtractor -{ - static OCSiCalFieldExtractor *extractor = nil; - - if (!extractor) - extractor = [self new]; - - return extractor; -} - -/* operations */ - -- (CardGroup *) firstElementFromCalendar: (iCalCalendar *) ical -{ - NSArray *elements; - CardGroup *element; - unsigned int count; - - elements = [ical allObjects]; - count = [elements count]; - if (count) - element = [elements objectAtIndex: 0]; - else - { - [self logWithFormat: @"ERROR: given calendar contains no elements: %@", ical]; - element = nil; - } - - return element; -} - -- (NSMutableDictionary *) extractQuickFieldsFromContent: (NSString *) _content -{ - NSMutableDictionary *fields; - id cal; - - fields = nil; - - if ([_content length]) - { - cal = [iCalCalendar parseSingleFromSource: _content]; - if (cal) - { - if ([cal isKindOfClass: [iCalCalendar class]]) - cal = [self firstElementFromCalendar: cal]; - - if ([cal isKindOfClass: [iCalRepeatableEntityObject class]]) - fields = [cal quickRecord]; - else if ([cal isNotNull]) - [self logWithFormat: @"ERROR: unexpected iCalendar parse result: %@", - cal]; - } - else - [self logWithFormat: @"ERROR: parsing source didn't return anything"]; - } - - return fields; -} - -@end /* OCSiCalFieldExtractor */ diff --git a/OGoContentStore/README b/OGoContentStore/README deleted file mode 100644 index 4c2b1d3b6..000000000 --- a/OGoContentStore/README +++ /dev/null @@ -1,144 +0,0 @@ -Storage Backend -=============== - -The storage backend implements the "low level" folder abstraction, which is -basically an arbitary "BLOB" containing some document. The feature is that -we extract "quick access" / "searchable" attributes from the document content. - -Further it contains the "folder management" API, as named folders can be stored -in different databases. -Note: we need a way to tell where "new" folders should be created -Note: to sync with LDAP we need to periodically delete or archive old folders - -Folders have associated a type (like 'calendar') which defines the query -attributes and serialization format. - -TODO -==== -- hierarchies deeper than 4 (properly filter on path in OCS) - -Open Questions -============== - -System-meta-data in the blob-table or in the quick-table? -- master data belongs into the blob table -- could be regular 'NSxxx' keys to differentiate meta data from - -Class Hierarchy -=============== - - [NSObject] - OCSContext - tracking context - OCSFolder - represents a single folder - OCSFolderManager - manages folders - OCSFolderType - the mapping info for a specific folder-type - OCSFieldInfo - mapping info for one 'quick field' - OCSChannelManager - maintains EOAdaptorChannel objects - - TBD: - - field 'extractor' - - field 'value' (eg array values for participants?) - - BLOB archiver/unarchiver - -Defaults -======== - - OCSFolderInfoURL - the DB URL where the folder-info table is located - eg: http://OGo:OGo@localhost/test/folder_info - - OCSFolderManagerDebugEnabled - enable folder-manager debug logs - OCSFolderManagerSQLDebugEnabled - enable folder-manager SQL gen debug logs - - OCSChannelManagerDebugEnabled - enable channel debug pooling logs - OCSChannelManagerPoolDebugEnabled - debug pool handle allocation - - OCSChannelExpireAge - if that age in seconds is exceeded, a channel - will be removed from the pool - OCSChannelCollectionTimer - time in seconds. each n-seconds the pool will be - checked for channels too old - - [PGDebugEnabled] - enable PostgreSQL adaptor debugging - -URLs -==== - - "Database URLs" - - We use the schema: - postgresql://[user]:[password]@[host]:[port]/[dbname]/[tablename] - -BLOB Formats -============ - -- TBD -- iCal, XML -- problem with iCal is that a complete and valid iCal file is different from - just the vevent. so we basically need to parse those files in any case. -- XML: the iCal SaxDriver reports XML events, so we can easily store that as - XML -- we need to parse the BLOB for different clients anyway (iCal != iCal ...) -- XML: we could use some XML query extension to PG in the future? - -Update: we now have OCSiCalFieldExtractor - - it parses the BLOB as an iCalendar file and extracts a set of fixed - keys: - - title - plain copy of "summary" - - uid - plain copy - - startdate - date as utime - - enddate - date as utime - - participants - CNs of attendees separated by comma ", " - - location - - partmails - - sequence - - TBD: iscyclic - - TBD: isallday - - TBD: cycles - I guess the client should fetch the BLOB to resolve - - the field extractor is accessed by OCSFolder using the folderinfo: - extractor = [self->folderInfo quickExtractor]; - quickRow = [extractor extractQuickFieldsFromContent:_content]; - -Support Tools -============= - -- tools we need: - - one to recreate a quick table based on the blob table - -Notes -===== - -- need to use http:// URLs for connect info, until generic URLs in - libFoundation are fixed (the parses breaks on the login/password parts) - -QA -== - -Q: Why do we use two tables, we could store the quick columns in the blob? -== -They could be in the same table. I considered using separate tables since the -quick table is likely to be recreated now and then if BLOB indexing -requirements change. -Actually one could even use different _quick tables which share a common BLOB -table. -(a quick table is nothing more than a database index and like with DB indexes - multiple ones for different requirements can make sense). - -Further it might improve caching behaviour for row based caches (the quick -table is going to be queried much more often) - not sure whether this is -relevant with PostgreSQL, probably not? - -Q: Can we use a VARCHAR primary key? -== -I asked in the postgres IRC channel and apparently the performance penalty of -string primary keys isn't big. -We could also use an 'internal' int sequence in addition (might be useful for -supporting ZideLook) -Motivation: the 'iCalendar' ID is a string and usually looks like a GUID. - -Q: Why using VARCHAR instead of TEXT in the BLOB? -== -To quote PostgreSQL documentation: -"There are no performance differences between these three types, apart from - the increased storage size when using the blank-padded type." -So varchar(xx) is just a large TEXT. Since we intend to store mostly small -snippets of data (tiny XML fragments), I considered VARCHAR the more -appropriate type. diff --git a/OGoContentStore/Version b/OGoContentStore/Version deleted file mode 100644 index 0d15a8243..000000000 --- a/OGoContentStore/Version +++ /dev/null @@ -1,14 +0,0 @@ -# Version file - -MAJOR_VERSION=0 -MINOR_VERSION=9 -SUBMINOR_VERSION:=33 - -# v0.9.30 requires libNGiCal v4.5.48 -# v0.9.26 requires libGDLContentStore v4.5.26 -# v0.9.19 requires libNGiCal v4.5.40 -# v0.9.18 requires libNGiCal v4.5.38 -# v0.9.17 requires libNGiCal v4.5.37 -# v0.9.11 requires libFoundation v1.0.63 -# v0.9.11 requires libNGExtensions v4.3.125 -# v0.9.7 requires libGDLAccess v1.1.35 diff --git a/OGoContentStore/iCalRepeatableEntityObject+OCS.h b/OGoContentStore/iCalRepeatableEntityObject+OCS.h deleted file mode 100644 index 36371ede4..000000000 --- a/OGoContentStore/iCalRepeatableEntityObject+OCS.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - Copyright (C) 2004-2005 SKYRIX Software AG - - This file is part of OpenGroupware.org. - - OGo is free software; you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - OGo is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with OGo; see the file COPYING. If not, write to the - Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. -*/ -// $Id: iCalRepeatableEntityObject+OCS.h 617 2005-03-01 17:08:11Z znek $ - - -#ifndef __OGoContentStore_iCalRepeatableEntityObject_OCS_H_ -#define __OGoContentStore_iCalRepeatableEntityObject_OCS_H_ - -#include - -@interface iCalRepeatableEntityObject (OCS) - -- (NSString *)cycleInfo; - -@end - -#endif /* __OGoContentStore_iCalRepeatableEntityObject_OCS_H_ */ diff --git a/OGoContentStore/iCalRepeatableEntityObject+OCS.m b/OGoContentStore/iCalRepeatableEntityObject+OCS.m deleted file mode 100644 index 6e31876dc..000000000 --- a/OGoContentStore/iCalRepeatableEntityObject+OCS.m +++ /dev/null @@ -1,29 +0,0 @@ -/* - Copyright (C) 2004-2005 SKYRIX Software AG - - This file is part of OpenGroupware.org. - - OGo is free software; you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - OGo is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with OGo; see the file COPYING. If not, write to the - Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. -*/ - -#import -#import - -#import "iCalRepeatableEntityObject+OCS.h" - -@implementation iCalRepeatableEntityObject (OCS) - -@end diff --git a/OGoContentStore/misc/iNetOrgPerson.txt b/OGoContentStore/misc/iNetOrgPerson.txt deleted file mode 100644 index eff00af8b..000000000 --- a/OGoContentStore/misc/iNetOrgPerson.txt +++ /dev/null @@ -1,108 +0,0 @@ -http://www.faqs.org/rfcs/rfc2798.html - -Class - NAME 'inetOrgPerson' - SUP organizationalPerson - STRUCTURAL - MAY ( - audio $ businessCategory $ carLicense $ departmentNumber $ - displayName $ employeeNumber $ employeeType $ givenName $ - homePhone $ homePostalAddress $ initials $ jpegPhoto $ - labeledURI $ mail $ manager $ mobile $ o $ pager $ - photo $ roomNumber $ secretary $ uid $ userCertificate $ - x500uniqueIdentifier $ preferredLanguage $ - userSMIMECertificate $ userPKCS12 - ) - MUST ( - cn $ objectClass $ sn - ) - MAY ( - description $ destinationIndicator $ facsimileTelephoneNumber $ - internationaliSDNNumber $ l $ ou $ physicalDeliveryOfficeName $ - postalAddress $ postalCode $ postOfficeBox $ - preferredDeliveryMethod $ registeredAddress $ seeAlso $ - st $ street $ telephoneNumber $ teletexTerminalIdentifier $ - telexNumber $ title $ userPassword $ x121Address - ) - -Properties (inetOrgPerson + organizationalPerson) - businessCategory - carLicense - departmentNumber - destinationIndicator - employeeNumber - employeeType - facsimileTelephoneNumber - givenName - homePostalAddress - initials - jpegPhoto - l - mail - manager - mobile - o - objectClass - ou - pager - physicalDeliveryOfficeName - postOfficeBox - postalCode - preferredLanguage - registeredAddress - roomNumber - secretary - seeAlso - sn - street - telephoneNumber - teletexTerminalIdentifier - title - uid - userCertificate - userPKCS12 - userPassword - x121Address - audio - cn - description - displayName - homePhone - internationaliSDNNumber - labeledURI - photo - postalAddress - preferredDeliveryMethod - st - telexNumber - userSMIMECertificate - x500uniqueIdentifier - -Sample: - version: 1 - dn: cn=Barbara Jensen,ou=Product Development,dc=siroe,dc=com - objectClass: top - objectClass: person - objectClass: organizationalPerson - objectClass: inetOrgPerson - cn: Barbara Jensen - cn: Babs Jensen - displayName: Babs Jensen - sn: Jensen - givenName: Barbara - initials: BJJ - title: manager, product development - uid: bjensen - mail: bjensen@siroe.com - telephoneNumber: +1 408 555 1862 - facsimileTelephoneNumber: +1 408 555 1992 - mobile: +1 408 555 1941 - roomNumber: 0209 - carLicense: 6ABC246 - o: Siroe - ou: Product Development - departmentNumber: 2604 - employeeNumber: 42 - employeeType: full time - preferredLanguage: fr, en-gb;q=0.8, en;q=0.7 - labeledURI: http://www.siroe.com/users/bjensen My Home Page diff --git a/OGoContentStore/misc/icaltest.ical b/OGoContentStore/misc/icaltest.ical deleted file mode 100644 index d048821f7..000000000 --- a/OGoContentStore/misc/icaltest.ical +++ /dev/null @@ -1,30 +0,0 @@ -BEGIN:VEVENT -DURATION:PT1H -ATTENDEE;CN="Elke Bethke";DIR="addressbook://B156F3F0-9CFD-11D8-8561-000 - D93C1A604:ABPerson":mailto:E.Bethke@Sachsen-Anhalt-Lotto.de -ATTENDEE;CN="Erik Doernenburg";DIR="addressbook://B15FCB0F-9CFD-11D8-8561 - -000D93C1A604:ABPerson":mailto:erik@x101.net -ATTENDEE;CN="Christian Schnelle";DIR="addressbook://B1418D4E-9CFD-11D8-8 - 561-000D93C1A604:ABPerson":mailto:cs@enervation.de -ATTENDEE;CN="Chris Herrenberger";DIR="addressbook://B14A390C-9CFD-11D8-8 - 561-000D93C1A604:ABPerson":invalid:nomail -ATTENDEE;CN="Horst Parplies";DIR="addressbook://B19B47E5-9CFD-11D8-8561- - 000D93C1A604:ABPerson":mailto:horst.parplies@freenet.de -ATTENDEE;CN="Imdat Solak";DIR="addressbook://B19EDB62-9CFD-11D8-8561-000 - D93C1A604:ABPerson":mailto:imdat@solak.de -ATTENDEE;CN="Jens Enders";DIR="addressbook://B1B6819F-9CFD-11D8-8561-000 - D93C1A604:ABPerson":mailto:jens.enders@skyrix.com -ATTENDEE;CN="Jens Muenster";DIR="addressbook://B1BBA42E-9CFD-11D8-8561-00 - 0D93C1A604:ABPerson":mailto:jens.muenster@skyrix.com -ATTENDEE;CN="Laurent Pierre";DIR="addressbook://9337C270-A825-11D8-B930- - 000D93C1A604:ABPerson":mailto:laurent.pierre@linagora.com -ATTENDEE;CN="Marcel Weiher";DIR="addressbook://B1F9BB12-9CFD-11D8-8561-0 - 00D93C1A604:ABPerson":mailto:marcel@metaobject.co -DTSTAMP:20040520T140002Z -UID:BD91C454-AA65-11D8-84CA-000D93C1A604 -SEQUENCE:3 -STATUS:CONFIRMED -DTSTART;TZID=Europe/Berlin:20040618T160000 -SUMMARY:SIZE EVENT -X-WR-ITIPSTATUSML:UNCLEAN -END:VEVENT diff --git a/OGoContentStore/misc/test1/GNUmakefile b/OGoContentStore/misc/test1/GNUmakefile deleted file mode 100644 index d92ce9b29..000000000 --- a/OGoContentStore/misc/test1/GNUmakefile +++ /dev/null @@ -1,15 +0,0 @@ -# $Id$ - -include $(GNUSTEP_MAKEFILES)/common.make - -TOOL_NAME = test - -test_OBJC_FILES += test1.m - -ADDITIONAL_TOOL_LIBS += -lOGoContentStore - -ADDITIONAL_LIB_DIRS += -L../../$(GNUSTEP_OBJ_DIR) - --include GNUmakefile.preamble -include $(GNUSTEP_MAKEFILES)/tool.make --include GNUmakefile.postamble diff --git a/OGoContentStore/misc/test1/common.h b/OGoContentStore/misc/test1/common.h deleted file mode 100644 index f771957e7..000000000 --- a/OGoContentStore/misc/test1/common.h +++ /dev/null @@ -1,3 +0,0 @@ -// $Id$ - -#import diff --git a/OGoContentStore/misc/test1/test1.m b/OGoContentStore/misc/test1/test1.m deleted file mode 100644 index 7724b19d1..000000000 --- a/OGoContentStore/misc/test1/test1.m +++ /dev/null @@ -1,31 +0,0 @@ -// $Id$ - -#include "common.h" - -static void testurl(NSString *s) { - NSURL *url; - - url = [NSURL URLWithString:s]; - NSLog(@"url: %@", url); - NSLog(@" login: %@", [url user]); - NSLog(@" pwd: %@", [url password]); -} - -static void test(void) { - testurl(@"http://OGoUser:OGoPwd@localhost/OGo"); - testurl(@"postgresql://OGoUser:OGoPwd@localhost/OGo"); -} - -int main(int argc, char **argv, char **env) { - NSAutoreleasePool *pool; - - pool = [[NSAutoreleasePool alloc] init]; -#if LIB_FOUNDATION_LIBRARY - [NSProcessInfo initializeWithArguments:argv count:argc environment:env]; -#endif - - test(); - - [pool release]; - return 0; -} diff --git a/OpenChange/GNUmakefile b/OpenChange/GNUmakefile index 2a7bac557..3e323a300 100644 --- a/OpenChange/GNUmakefile +++ b/OpenChange/GNUmakefile @@ -137,7 +137,6 @@ $(DBMSGREADER_TOOL)_OBJC_FILES += \ $(DBMSGREADER_TOOL)_LIB_DIRS += \ -L../SoObjects/SOGo/SOGo.framework/ -lSOGo \ - -L../OGoContentStore/obj/ -lOGoContentStore \ -L../SOPE/GDLContentStore/obj/ -lGDLContentStore \ -L../SOPE/NGCards/obj/ -lNGCards \ -lNGObjWeb @@ -166,7 +165,6 @@ $(MAPISTORESOGO)_LIB_DIRS += \ $(LIBMAPISTORE_LIBS) $(SOGOBACKEND)_LIB_DIRS += \ - -L../OGoContentStore/$(GNUSTEP_OBJ_DIR)/ -lOGoContentStore \ -L../SoObjects/SOGo/SOGo.framework/ -lSOGo \ $(LIBMAPI_LIBS) \ $(LIBMAPISTORE_LIBS) diff --git a/OpenChange/MAPIStoreContactsMessage.m b/OpenChange/MAPIStoreContactsMessage.m index b2a5ce660..3b35f9c34 100644 --- a/OpenChange/MAPIStoreContactsMessage.m +++ b/OpenChange/MAPIStoreContactsMessage.m @@ -1200,7 +1200,7 @@ fromProperties: (NSDictionary *) attachmentProps // // we save the new/modified card // - [sogoObject saveContentString: [newCard versitString]]; + [sogoObject saveComponent: newCard]; [self updateVersions]; } diff --git a/OpenChange/MAPIStoreTasksMessage.m b/OpenChange/MAPIStoreTasksMessage.m index 2a7958f19..9215bc409 100644 --- a/OpenChange/MAPIStoreTasksMessage.m +++ b/OpenChange/MAPIStoreTasksMessage.m @@ -513,7 +513,7 @@ } [vToDo setTimeStampAsDate: now]; - [sogoObject saveContentString: [vCalendar versitString]]; + [sogoObject saveComponent: vCalendar]; [self updateVersions]; } diff --git a/SOPE/GDLContentStore/GCSFieldExtractor.h b/SOPE/GDLContentStore/GCSFieldExtractor.h deleted file mode 100644 index 1b1e64af4..000000000 --- a/SOPE/GDLContentStore/GCSFieldExtractor.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - Copyright (C) 2004-2005 SKYRIX Software AG - - This file is part of OpenGroupware.org. - - OGo is free software; you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - OGo is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with OGo; see the file COPYING. If not, write to the - Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. -*/ - -#ifndef __GDLContentStore_GCSFieldExtractor_H__ -#define __GDLContentStore_GCSFieldExtractor_H__ - -#import - -@class NSString, NSMutableDictionary; - -@interface GCSFieldExtractor : NSObject -{ -} - -- (NSMutableDictionary *)extractQuickFieldsFromContent:(NSString *)_content; - -@end - -#endif /* __GDLContentStore_GCSFieldExtractor_H__ */ diff --git a/SOPE/GDLContentStore/GCSFieldExtractor.m b/SOPE/GDLContentStore/GCSFieldExtractor.m deleted file mode 100644 index 134a40343..000000000 --- a/SOPE/GDLContentStore/GCSFieldExtractor.m +++ /dev/null @@ -1,30 +0,0 @@ -/* - Copyright (C) 2004-2005 SKYRIX Software AG - - This file is part of OpenGroupware.org. - - OGo is free software; you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - OGo is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with OGo; see the file COPYING. If not, write to the - Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. -*/ - -#import "GCSFieldExtractor.h" - -@implementation GCSFieldExtractor - -- (NSMutableDictionary *)extractQuickFieldsFromContent:(NSString *)_content { - return nil; -} - -@end /* GCSFieldExtractor */ diff --git a/SOPE/GDLContentStore/GCSFolder.h b/SOPE/GDLContentStore/GCSFolder.h index ff940fd40..5467a567f 100644 --- a/SOPE/GDLContentStore/GCSFolder.h +++ b/SOPE/GDLContentStore/GCSFolder.h @@ -117,10 +117,14 @@ - (NSDictionary *) recordOfEntryWithName: (NSString *) name; - (NSException *) writeContent: (NSString *) _content + fromComponent: (id) theComponent toName: (NSString *) _name baseVersion: (unsigned int *) _baseVersion; + - (NSException *) writeContent: (NSString *) _content + fromComponent: (id) theComponent toName: (NSString *) _name; + - (NSException *) deleteContentWithName: (NSString *) _name; - (NSException *) deleteAllContent; diff --git a/SOPE/GDLContentStore/GCSFolder.m b/SOPE/GDLContentStore/GCSFolder.m index ac5efa58e..ed3b5171b 100644 --- a/SOPE/GDLContentStore/GCSFolder.m +++ b/SOPE/GDLContentStore/GCSFolder.m @@ -1,22 +1,22 @@ /* Copyright (C) 2004-2007 SKYRIX Software AG Copyright (C) 2007 Helge Hess - Copyright (c) 2008-2011 Inverse inc. + Copyright (c) 2008-2014 Inverse inc. - This file is part of OpenGroupware.org. + This file is part of SOGo. - OGo is free software; you can redistribute it and/or modify it under + SOGo is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. - OGo is distributed in the hope that it will be useful, but WITHOUT ANY + SOGo is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with OGo; see the file COPYING. If not, write to the + License along with SOGo; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ @@ -38,7 +38,6 @@ #import "GCSFolderManager.h" #import "GCSFolderType.h" #import "GCSChannelManager.h" -#import "GCSFieldExtractor.h" #import "NSURL+GCS.h" #import "EOAdaptorChannel+GCS.h" #import "EOQualifier+GCS.h" @@ -882,13 +881,13 @@ andAttribute: (EOAttribute *)_attribute } - (NSException *) writeContent: (NSString *) _content + fromComponent: (id) theComponent toName: (NSString *) _name baseVersion: (unsigned int *) _baseVersion { EOAdaptorChannel *storeChannel, *quickChannel; NSMutableDictionary *quickRow, *contentRow; NSDictionary *currentRow; - GCSFieldExtractor *extractor; NSNumber *storedVersion; BOOL isNewRecord, hasInsertDelegate, hasUpdateDelegate; NSCalendarDate *nowDate; @@ -944,8 +943,7 @@ andAttribute: (EOAttribute *)_attribute || *_baseVersion == [storedVersion unsignedIntValue]) { /* extract quick info */ - extractor = [folderInfo quickExtractor]; - quickRow = [extractor extractQuickFieldsFromContent:_content]; + quickRow = [theComponent performSelector: @selector(quickRecordForContainer:) withObject: self]; if (quickRow) { [quickRow setObject:_name forKey:@"c_name"]; @@ -1080,8 +1078,8 @@ andAttribute: (EOAttribute *)_attribute __PRETTY_FUNCTION__]; } else - error = [self errorExtractorReturnedNoQuickRow:extractor - forContent:_content]; + [self errorWithFormat:@"%s: could not extract quick row information", + __PRETTY_FUNCTION__]; } else /* version mismatch (concurrent update) */ error = [self errorVersionMismatchBetweenStoredVersion: @@ -1102,10 +1100,13 @@ andAttribute: (EOAttribute *)_attribute } -- (NSException *)writeContent:(NSString *)_content toName:(NSString *)_name { +- (NSException *)writeContent:(NSString *)_content + fromComponent: (id) theComponent + toName:(NSString *)_name +{ /* this method does not check for concurrent writes */ unsigned int v = 0; - return [self writeContent:_content toName:_name baseVersion:&v]; + return [self writeContent:_content fromComponent: theComponent toName:_name baseVersion:&v]; } - (NSException *)deleteContentWithName:(NSString *)_name { diff --git a/SOPE/GDLContentStore/GCSFolderManager.m b/SOPE/GDLContentStore/GCSFolderManager.m index f333c9951..91c59c268 100644 --- a/SOPE/GDLContentStore/GCSFolderManager.m +++ b/SOPE/GDLContentStore/GCSFolderManager.m @@ -1,5 +1,5 @@ /* - Copyright (C) 2006-2011 Inverse inc. + Copyright (C) 2006-2014 Inverse inc. Copyright (C) 2004-2007 SKYRIX Software AG This file is part of SOGo. diff --git a/SOPE/GDLContentStore/GCSFolderType.h b/SOPE/GDLContentStore/GCSFolderType.h index 8a2e843ce..5784780bd 100644 --- a/SOPE/GDLContentStore/GCSFolderType.h +++ b/SOPE/GDLContentStore/GCSFolderType.h @@ -41,7 +41,7 @@ @class NSString, NSArray, NSDictionary; @class EOQualifier; @class NGResourceLocator; -@class GCSFolder, GCSFieldExtractor; +@class GCSFolder; @interface GCSFolderType : NSObject { @@ -50,7 +50,6 @@ NSArray *fields, *quickFields; // GCSFieldInfo objects EOQualifier *folderQualifier; // to further limit the table set NSString *extractorClassName; - GCSFieldExtractor *extractor; } + (id)folderTypeWithName:(NSString *)_type; @@ -67,10 +66,6 @@ - (NSString *)sqlQuickCreateWithTableName:(NSString *)_tabName; -/* quick support */ - -- (GCSFieldExtractor *)quickExtractor; - /* locator used to find .ocs files */ + (NGResourceLocator *)resourceLocator; diff --git a/SOPE/GDLContentStore/GCSFolderType.m b/SOPE/GDLContentStore/GCSFolderType.m index da051c7a3..bb99051e6 100644 --- a/SOPE/GDLContentStore/GCSFolderType.m +++ b/SOPE/GDLContentStore/GCSFolderType.m @@ -1,20 +1,20 @@ /* Copyright (C) 2004-2005 SKYRIX Software AG - This file is part of OpenGroupware.org. + This file is part of SOGo. - OGo is free software; you can redistribute it and/or modify it under + SOGo is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. - OGo is distributed in the hope that it will be useful, but WITHOUT ANY + SOGo is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with OGo; see the file COPYING. If not, write to the + License along with SOGo; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ @@ -35,7 +35,6 @@ #import "GCSFolderType.h" #import "GCSFolder.h" #import "GCSFieldInfo.h" -#import "GCSFieldExtractor.h" @implementation GCSFolderType @@ -116,7 +115,6 @@ - (void) dealloc { - [extractor release]; [extractorClassName release]; [blobTablePattern release]; [quickTablePattern release]; @@ -173,36 +171,6 @@ return sql; } -/* quick support */ - -- (GCSFieldExtractor *) quickExtractor -{ - Class clazz; - GCSFieldExtractor *quickExtractor; - - if (!extractor) - { - clazz = (extractorClassName - ? NSClassFromString (extractorClassName) - : [GCSFieldExtractor class]); - if (clazz) - { - extractor = [clazz new]; - if (!extractor) - [self logWithFormat:@"ERROR: could not create field extractor of class %@", - clazz]; - } - else - [self logWithFormat:@"ERROR: did not find field extractor class (%@)", extractorClassName]; - } - if ([extractor isNotNull]) - quickExtractor = extractor; - else - quickExtractor = nil; - - return quickExtractor; -} - - (NSArray *) quickFields { return quickFields; diff --git a/SOPE/GDLContentStore/GNUmakefile b/SOPE/GDLContentStore/GNUmakefile index e0e50cab2..84f24d0c0 100644 --- a/SOPE/GDLContentStore/GNUmakefile +++ b/SOPE/GDLContentStore/GNUmakefile @@ -31,7 +31,6 @@ libGDLContentStore_HEADER_FILES += \ GCSFolderManager.h \ GCSFolderType.h \ GCSChannelManager.h \ - GCSFieldExtractor.h \ GCSSessionsFolder.h \ GCSSpecialQueries.h \ GCSStringFormatter.h \ @@ -48,7 +47,6 @@ libGDLContentStore_OBJC_FILES += \ GCSFolderManager.m \ GCSFolderType.m \ GCSChannelManager.m \ - GCSFieldExtractor.m \ GCSSessionsFolder.m \ GCSSpecialQueries.m \ GCSStringFormatter.m \ @@ -60,6 +58,14 @@ GDLContentStore_HEADER_FILES = $(libGDLContentStore_HEADER_FILES) GDLContentStore_OBJC_FILES = $(libGDLContentStore_OBJC_FILES) GDLContentStore_SUBPROJECTS = $(libGDLContentStore_SUBPROJECTS) +# Type models +TYPEMODELS_DIR = $(SOGO_TYPEMODELS) + +libGDLContentStore_TYPEMODELS += \ + appointment.ocs \ + contact.ocs \ + appointment-oracle.ocs \ + contact-oracle.ocs # building diff --git a/OGoContentStore/GNUmakefile.postamble b/SOPE/GDLContentStore/GNUmakefile.postamble similarity index 55% rename from OGoContentStore/GNUmakefile.postamble rename to SOPE/GDLContentStore/GNUmakefile.postamble index 834af222e..2de398a10 100644 --- a/OGoContentStore/GNUmakefile.postamble +++ b/SOPE/GDLContentStore/GNUmakefile.postamble @@ -3,10 +3,10 @@ $(TYPEMODELS_DIR) : $(MKDIRS) $(TYPEMODELS_DIR) -ocs-typemodels : $(TYPEMODELS_DIR) $(libOGoContentStore_TYPEMODELS) - @(if [ "$(libOGoContentStore_TYPEMODELS)" != "" ]; then \ +ocs-typemodels : $(TYPEMODELS_DIR) $(libGDLContentStore_TYPEMODELS) + @(if [ "$(libGDLContentStore_TYPEMODELS)" != "" ]; then \ echo "Copying type models into install path ..."; \ - for ff in $(libOGoContentStore_TYPEMODELS); do \ + for ff in $(libGDLContentStore_TYPEMODELS); do \ cp $$ff $(TYPEMODELS_DIR)/$$ff; \ done; \ fi) diff --git a/OGoContentStore/appointment-oracle.ocs b/SOPE/GDLContentStore/appointment-oracle.ocs similarity index 100% rename from OGoContentStore/appointment-oracle.ocs rename to SOPE/GDLContentStore/appointment-oracle.ocs diff --git a/OGoContentStore/appointment.ocs b/SOPE/GDLContentStore/appointment.ocs similarity index 100% rename from OGoContentStore/appointment.ocs rename to SOPE/GDLContentStore/appointment.ocs diff --git a/OGoContentStore/contact-oracle.ocs b/SOPE/GDLContentStore/contact-oracle.ocs similarity index 100% rename from OGoContentStore/contact-oracle.ocs rename to SOPE/GDLContentStore/contact-oracle.ocs diff --git a/OGoContentStore/contact.ocs b/SOPE/GDLContentStore/contact.ocs similarity index 100% rename from OGoContentStore/contact.ocs rename to SOPE/GDLContentStore/contact.ocs diff --git a/SoObjects/Appointments/SOGoAppointmentFolder.m b/SoObjects/Appointments/SOGoAppointmentFolder.m index 96a14d536..6845a3d23 100644 --- a/SoObjects/Appointments/SOGoAppointmentFolder.m +++ b/SoObjects/Appointments/SOGoAppointmentFolder.m @@ -983,7 +983,7 @@ firstInstanceCalendarDateRange: (NGCalendarDateRange *) fir { if ([dateRange containsDate: [component startDate]]) { - newRecord = [self fixupRecord: [component quickRecord]]; + newRecord = [self fixupRecord: [component quickRecordForContainer: self]]; [ma replaceObjectAtIndex: recordIndex withObject: newRecord]; } else @@ -999,7 +999,7 @@ firstInstanceCalendarDateRange: (NGCalendarDateRange *) fir { // The recurrence id of the exception is outside the date range; // simply add the exception to the records array - newRecord = [self fixupRecord: [component quickRecord]]; + newRecord = [self fixupRecord: [component quickRecordForContainer: self]]; newRecordRange = [NGCalendarDateRange calendarDateRangeWithStartDate: [newRecord objectForKey: @"startDate"] endDate: [newRecord objectForKey: @"endDate"]]; @@ -3034,7 +3034,7 @@ firstInstanceCalendarDateRange: (NGCalendarDateRange *) fir [content appendFormat: @"%@\n", [timezone versitString]]; [content appendFormat: @"%@\nEND:VCALENDAR", [event versitString]]; - return ([object saveContentString: content] == nil) ? uid : nil; + return ([object saveCalendar: [iCalCalendar parseSingleFromSource: content]] == nil) ? uid : nil; } /** @@ -3047,7 +3047,7 @@ firstInstanceCalendarDateRange: (NGCalendarDateRange *) fir NSArray *vtimezones; NSMutableArray *components; NSMutableDictionary *timezones, *uids; - NSString *tzId, *uid, *originalUid, *content; + NSString *tzId, *uid, *originalUid; iCalEntityObject *element; iCalDateTime *startDate; iCalTimeZone *timezone; @@ -3175,8 +3175,7 @@ firstInstanceCalendarDateRange: (NGCalendarDateRange *) fir [masterCalendar addToEvents: event]; if (timezone) [masterCalendar addTimeZone: timezone]; - content = [masterCalendar versitString]; - [master saveContentString: content]; + [master saveCalendar: masterCalendar]; continue; } } diff --git a/SoObjects/Appointments/SOGoAppointmentObject.h b/SoObjects/Appointments/SOGoAppointmentObject.h index 6c0aebd01..6abfb6c0d 100644 --- a/SoObjects/Appointments/SOGoAppointmentObject.h +++ b/SoObjects/Appointments/SOGoAppointmentObject.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2007-2011 Inverse inc. + Copyright (C) 2007-2014 Inverse inc. This file is part of SOGo diff --git a/SoObjects/Appointments/SOGoAppointmentObject.m b/SoObjects/Appointments/SOGoAppointmentObject.m index fc578a578..6a2040720 100644 --- a/SoObjects/Appointments/SOGoAppointmentObject.m +++ b/SoObjects/Appointments/SOGoAppointmentObject.m @@ -187,15 +187,15 @@ if (![theUID isEqualToString: theOwner]) { SOGoAppointmentObject *attendeeObject; - NSString *iCalString; + iCalCalendar *iCalendarToSave; - iCalString = nil; + iCalendarToSave = nil; attendeeObject = [self _lookupEvent: [theEvent uid] forUID: theUID]; // We must add an occurence to a non-existing event. We have // to handle this with care, as in the postCalDAVEventRequestTo:from: if ([attendeeObject isNew] && [theEvent recurrenceId]) - { + { iCalEvent *ownerEvent; iCalPerson *person; SOGoUser *user; @@ -217,7 +217,7 @@ [person setRole: @"REQ-PARTICIPANT"]; [ownerEvent addToAttendees: person]; - iCalString = [[ownerEvent parent] versitString]; + iCalendarToSave = [ownerEvent parent]; } } else @@ -229,12 +229,12 @@ // in attendee's calendar (add exception dates and remove matching // occurrences) -- see _updateRecurrenceIDsWithEvent: - iCalString = [[theEvent parent] versitString]; + iCalendarToSave = [theEvent parent]; } // Save the event in the attendee's calendar - if (iCalString) - [attendeeObject saveContentString: iCalString]; + if (iCalendarToSave) + [attendeeObject saveCalendar: iCalendarToSave]; } } @@ -253,7 +253,6 @@ iCalRepeatableEntityObject *event; iCalCalendar *calendar; NSCalendarDate *currentId; - NSString *calendarContent; NSArray *occurences; int max, count; @@ -294,10 +293,8 @@ [event increaseSequence]; - // We generate the updated iCalendar file and we save it - // in the database. - calendarContent = [calendar versitString]; - [object saveContentString: calendarContent]; + // We save the updated iCalendar in the database. + [object saveCalendar: calendar]; } } } @@ -413,10 +410,10 @@ // This method scans the list of attendees. - (NSException *) _handleAttendeeAvailability: (NSArray *) theAttendees - forEvent: (iCalEvent *) theEvent + forEvent: (iCalEvent *) theEvent { iCalPerson *currentAttendee; - NSMutableArray *attendees, *unavailableAttendees, *whiteList; + NSMutableArray *unavailableAttendees, *whiteList; NSEnumerator *enumerator; NSPredicate *predicate; NSString *currentUID, *ownerUID; @@ -425,11 +422,11 @@ NSMutableDictionary *value, *moduleSettings; SOGoUser *user; SOGoUserSettings *us; - int count = 0, i = 0; - + int i, count; + + i = count = 0; // Build list of the attendees uids without ressources - attendees = [NSMutableArray arrayWithCapacity: [theAttendees count]]; unavailableAttendees = [[NSMutableArray alloc] init]; enumerator = [theAttendees objectEnumerator]; ownerUID = [[[self context] activeUser] login]; @@ -500,7 +497,7 @@ NSMutableArray *attendees; NSEnumerator *enumerator; NSString *currentUID; - SOGoUser *user, *currentUser, *ownerUser; + SOGoUser *user, *currentUser; // Build a list of the attendees uids attendees = [NSMutableArray arrayWithCapacity: [theAttendees count]]; @@ -971,7 +968,7 @@ inRecurrenceExceptionsForEvent: (iCalEvent *) theEvent iCalCalendar *calendar; iCalEntityObject *event; iCalPerson *otherAttendee, *otherDelegate; - NSString *iCalString, *recurrenceTime, *delegateEmail; + NSString *recurrenceTime, *delegateEmail; NSException *error; BOOL addDelegate, removeDelegate; @@ -1082,10 +1079,8 @@ inRecurrenceExceptionsForEvent: (iCalEvent *) theEvent } } - // We generate the updated iCalendar file and we save it - // in the database. - iCalString = [[event parent] versitString]; - error = [eventObject saveContentString: iCalString]; + // We save the updated iCalendar in the database. + error = [eventObject saveCalendar: [event parent]]; } return error; @@ -1464,7 +1459,7 @@ inRecurrenceExceptionsForEvent: (iCalEvent *) theEvent // Over DAV, it'll be handled directly in PUTAction: if (![context request] || [[context request] handledByDefaultHandler] || [[[context request] requestHandlerKey] isEqualToString: @"Microsoft-Server-ActiveSync"]) - ex = [self saveContentString: [[event parent] versitString]]; + ex = [self saveCalendar: [event parent]]; } } else @@ -2099,8 +2094,8 @@ inRecurrenceExceptionsForEvent: (iCalEvent *) theEvent // the content string and we could have etag mismatches. baseVersion = (isNew ? 0 : version); - ex = [self saveContentString: [calendar versitString] - baseVersion: baseVersion]; + ex = [self saveComponent: calendar + baseVersion: baseVersion]; return ex; } diff --git a/SoObjects/Appointments/SOGoCalendarComponent.h b/SoObjects/Appointments/SOGoCalendarComponent.h index 61aca5c3d..e1e2bc7bd 100644 --- a/SoObjects/Appointments/SOGoCalendarComponent.h +++ b/SoObjects/Appointments/SOGoCalendarComponent.h @@ -1,6 +1,6 @@ /* SOGoCalendarComponent.h - this file is part of SOGo * - * Copyright (C) 2006-2013 Inverse inc. + * Copyright (C) 2006-2014 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/SoObjects/Appointments/SOGoCalendarComponent.m b/SoObjects/Appointments/SOGoCalendarComponent.m index d595bdba0..f8822c061 100644 --- a/SoObjects/Appointments/SOGoCalendarComponent.m +++ b/SoObjects/Appointments/SOGoCalendarComponent.m @@ -169,6 +169,11 @@ DESTROY(originalCalendar); } +- (Class *) parsingClass +{ + return [iCalCalendar class]; +} + - (NSString *) davContentType { return @"text/calendar"; @@ -662,7 +667,7 @@ - (NSException *) saveCalendar: (iCalCalendar *) newCalendar { - [self saveContentString: [newCalendar versitString]]; + [super saveComponent: newCalendar]; return nil; } @@ -1193,7 +1198,19 @@ [NSString stringWithFormat: @"%@.ics", newUID] inContainer: newFolder]; - return [newComponent saveContentString: [calendar versitString]]; + return [newComponent saveCalendar: calendar]; +} + +- (NSException *) moveToFolder: (SOGoGCSFolder *) newFolder +{ + NSException *ex; + + ex = [self copyToFolder: newFolder]; + + if (!ex) + ex = [self delete]; + + return ex; } #warning Should we not remove the concept of Organizer and Participant roles? diff --git a/SoObjects/Appointments/SOGoComponentOccurence.m b/SoObjects/Appointments/SOGoComponentOccurence.m index 97c9b1138..0609720b3 100644 --- a/SoObjects/Appointments/SOGoComponentOccurence.m +++ b/SoObjects/Appointments/SOGoComponentOccurence.m @@ -1,9 +1,6 @@ /* SOGoComponentOccurence.m - this file is part of SOGo * - * Copyright (C) 2008-2011 Inverse inc. - * - * Author: Wolfgang Sourdeau - * Francis Lachapelle + * Copyright (C) 2008-2014 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -152,7 +149,6 @@ NSArray *occurences; NSCalendarDate *recurrenceId, *currentId; NSException *error; - NSString *newContent; NSTimeZone *timeZone; iCalCalendar *calendar; iCalEntityObject *currentOccurence; @@ -197,10 +193,8 @@ [master addToExceptionDates: recurrenceId]; [master increaseSequence]; - // We generate the updated iCalendar file and we save it - // in the database. - newContent = [calendar versitString]; - error = [container saveContentString: newContent]; + // We save the updated iCalendar in the database. + error = [container saveComponent: calendar]; } return error; diff --git a/SoObjects/Appointments/SOGoTaskObject.h b/SoObjects/Appointments/SOGoTaskObject.h index 6b5d27d60..5d15c856a 100644 --- a/SoObjects/Appointments/SOGoTaskObject.h +++ b/SoObjects/Appointments/SOGoTaskObject.h @@ -1,6 +1,6 @@ /* - Copyright (C) 2006-2013 Inverse inc. + Copyright (C) 2006-2014 Inverse inc. Copyright (C) 2004-2005 SKYRIX Software AG This file is part of SOGo. diff --git a/SoObjects/Appointments/SOGoTaskObject.m b/SoObjects/Appointments/SOGoTaskObject.m index 5d70dabd0..a94ca3a38 100644 --- a/SoObjects/Appointments/SOGoTaskObject.m +++ b/SoObjects/Appointments/SOGoTaskObject.m @@ -1,5 +1,5 @@ /* - Copyright (C) 2006-2012 Inverse inc. + Copyright (C) 2006-2014 Inverse inc. Copyright (C) 2004-2005 SKYRIX Software AG This file is part of SOGo. @@ -65,12 +65,12 @@ #warning this code should be put in SOGoCalendarComponent once the UID hack\ in SOGoAppointmentObject is resolved -- (NSException *) saveContentString: (NSString *) newContent - baseVersion: (unsigned int) newVersion +- (NSException *) saveComponent: (id) theComponent + baseVersion: (unsigned int) newVersion { NSException *ex; - ex = [super saveContentString: newContent baseVersion: newVersion]; + ex = [super saveComponent: theComponent baseVersion: newVersion]; [fullCalendar release]; fullCalendar = nil; [safeCalendar release]; diff --git a/SoObjects/Appointments/SOGoWebAppointmentFolder.h b/SoObjects/Appointments/SOGoWebAppointmentFolder.h index 45e5da636..736a6b461 100644 --- a/SoObjects/Appointments/SOGoWebAppointmentFolder.h +++ b/SoObjects/Appointments/SOGoWebAppointmentFolder.h @@ -1,9 +1,6 @@ /* SOGoWebAppointmentFolder.h - this file is part of SOGo * - * Copyright (C) 2009-2012 Inverse inc. - * - * Author: Cyril Robert - * Ludovic Marcotte + * Copyright (C) 2009-2014 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/SoObjects/Appointments/SOGoWebAppointmentFolder.m b/SoObjects/Appointments/SOGoWebAppointmentFolder.m index f5c004c84..3bd6c4206 100644 --- a/SoObjects/Appointments/SOGoWebAppointmentFolder.m +++ b/SoObjects/Appointments/SOGoWebAppointmentFolder.m @@ -1,9 +1,6 @@ /* SOGoWebAppointmentFolder.m - this file is part of SOGo * - * Copyright (C) 2009-2013 Inverse inc. - * - * Author: Cyril Robert - * Ludovic Marcotte + * Copyright (C) 2009-2014 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/SoObjects/Appointments/iCalCalendar+SOGo.m b/SoObjects/Appointments/iCalCalendar+SOGo.m index 466c47291..e3af84d15 100644 --- a/SoObjects/Appointments/iCalCalendar+SOGo.m +++ b/SoObjects/Appointments/iCalCalendar+SOGo.m @@ -1,8 +1,6 @@ /* iCalCalendar+SOGo.m - this file is part of SOGo * - * Copyright (C) 2012 Inverse inc - * - * Author: Wolfgang Sourdeau + * Copyright (C) 2012-2014 Inverse inc * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -80,4 +78,24 @@ return [self _occurrence: recID inArray: [self todos]]; } +- (NSMutableDictionary *) quickRecordForContainer: (id) theContainer +{ + CardGroup *element; + NSArray *elements; + + unsigned int count; + + elements = [self allObjects]; + count = [elements count]; + if (count) + element = [elements objectAtIndex: 0]; + else + { + [self logWithFormat: @"ERROR: given calendar contains no elements: %@", self]; + element = nil; + } + + return [element quickRecordForContainer: theContainer]; +} + @end diff --git a/SoObjects/Appointments/iCalEntityObject+SOGo.h b/SoObjects/Appointments/iCalEntityObject+SOGo.h index dee22f353..a37c727d5 100644 --- a/SoObjects/Appointments/iCalEntityObject+SOGo.h +++ b/SoObjects/Appointments/iCalEntityObject+SOGo.h @@ -43,7 +43,7 @@ extern NSNumber *iCalDistantFutureNumber; - (id) itipEntryWithMethod: (NSString *) method; - (NSArray *) attendeesWithoutUser: (SOGoUser *) user; -- (NSMutableDictionary *) quickRecord; +- (NSMutableDictionary *) quickRecordForContainer: (id) theContainer; - (int) priorityNumber; - (NSString *) createdBy; diff --git a/SoObjects/Appointments/iCalEntityObject+SOGo.m b/SoObjects/Appointments/iCalEntityObject+SOGo.m index 97f9ce336..cdb32a582 100644 --- a/SoObjects/Appointments/iCalEntityObject+SOGo.m +++ b/SoObjects/Appointments/iCalEntityObject+SOGo.m @@ -213,7 +213,7 @@ NSNumber *iCalDistantFutureNumber = nil; return dateNumber; } -- (NSMutableDictionary *) quickRecord +- (NSMutableDictionary *) quickRecordForContainer: (id) theContainer { [self subclassResponsibility: _cmd]; diff --git a/SoObjects/Appointments/iCalEvent+SOGo.h b/SoObjects/Appointments/iCalEvent+SOGo.h index 9d2ee9dd4..fd4869132 100644 --- a/SoObjects/Appointments/iCalEvent+SOGo.h +++ b/SoObjects/Appointments/iCalEvent+SOGo.h @@ -1,9 +1,6 @@ /* iCalEvent+SOGo.h - this file is part of SOGo * - * Copyright (C) 2007-2011 Inverse inc. - * - * Author: Wolfgang Sourdeau - * Francis Lachapelle + * Copyright (C) 2007-2014 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -32,7 +29,7 @@ - (BOOL) isStillRelevant; - (unsigned int) occurenceInterval; -- (NSMutableDictionary *) quickRecord; +- (NSMutableDictionary *) quickRecordForContainer: (id) theContainer; - (void) updateRecurrenceRulesUntilDate: (NSCalendarDate *) previousEndDate; @end diff --git a/SoObjects/Appointments/iCalEvent+SOGo.m b/SoObjects/Appointments/iCalEvent+SOGo.m index 6856d89fb..f811ceeca 100644 --- a/SoObjects/Appointments/iCalEvent+SOGo.m +++ b/SoObjects/Appointments/iCalEvent+SOGo.m @@ -1,9 +1,6 @@ /* iCalEvent+SOGo.m - this file is part of SOGo * - * Copyright (C) 2007-2013 Inverse inc. - * - * Author: Wolfgang Sourdeau - * Francis Lachapelle + * Copyright (C) 2007-2014 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -67,7 +64,7 @@ // // // -- (NSMutableDictionary *) quickRecord +- (NSMutableDictionary *) quickRecordForContainer: (id) theContainer { NSMutableDictionary *row; NSCalendarDate *startDate, *endDate, *nextAlarmDate; diff --git a/SoObjects/Appointments/iCalRepeatableEntityObject+SOGo.h b/SoObjects/Appointments/iCalRepeatableEntityObject+SOGo.h index 2d5233666..845167967 100644 --- a/SoObjects/Appointments/iCalRepeatableEntityObject+SOGo.h +++ b/SoObjects/Appointments/iCalRepeatableEntityObject+SOGo.h @@ -1,24 +1,22 @@ /* iCalRepeatableEntityObject+SOGo.h - this file is part of SOGo - Copyright (C) 2004-2005 SKYRIX Software AG - Copyright (C) 2008-2013 Inverse inc. - - This file is part of OpenGroupware.org. - - OGo is free software; you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - OGo is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with OGo; see the file COPYING. If not, write to the - Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. -*/ + * + * Copyright (C) 2007-2014 Inverse inc. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ #import diff --git a/SoObjects/Appointments/iCalRepeatableEntityObject+SOGo.m b/SoObjects/Appointments/iCalRepeatableEntityObject+SOGo.m index 4bbc30e25..128249e88 100644 --- a/SoObjects/Appointments/iCalRepeatableEntityObject+SOGo.m +++ b/SoObjects/Appointments/iCalRepeatableEntityObject+SOGo.m @@ -1,24 +1,22 @@ -/* - Copyright (C) 2008-2013 Inverse inc. - Copyright (C) 2004-2005 SKYRIX Software AG - - This file is part of OpenGroupware.org. - - OGo is free software; you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - OGo is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with OGo; see the file COPYING. If not, write to the - Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. -*/ +/* iCalRepeatableEntityObject+SOGo.m - this file is part of SOGo + * + * Copyright (C) 2007-2014 Inverse inc. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ #import #import diff --git a/SoObjects/Appointments/iCalToDo+SOGo.h b/SoObjects/Appointments/iCalToDo+SOGo.h index 81c16f80d..8da587395 100644 --- a/SoObjects/Appointments/iCalToDo+SOGo.h +++ b/SoObjects/Appointments/iCalToDo+SOGo.h @@ -1,8 +1,6 @@ /* iCalToDo+SOGo.h - this file is part of SOGo * - * Copyright (C) 2007 Inverse inc. - * - * Author: Wolfgang Sourdeau + * Copyright (C) 2007-2014 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -29,7 +27,7 @@ @interface iCalToDo (SOGoExtensions) -- (NSMutableDictionary *) quickRecord; +- (NSMutableDictionary *) quickRecordForContainer: (id) theContainer; @end diff --git a/SoObjects/Appointments/iCalToDo+SOGo.m b/SoObjects/Appointments/iCalToDo+SOGo.m index fd3487198..f46f05ba5 100644 --- a/SoObjects/Appointments/iCalToDo+SOGo.m +++ b/SoObjects/Appointments/iCalToDo+SOGo.m @@ -1,9 +1,6 @@ -/* iCalEvent+SOGo.m - this file is part of SOGo +/* iCalToDot+SOGo.m - this file is part of SOGo * - * Copyright (C) 2008 Inverse inc. - * Copyright (C) 2004-2005 SKYRIX Software AG - * - * Author: Wolfgang Sourdeau + * Copyright (C) 2008-2014 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -41,7 +38,7 @@ @implementation iCalToDo (SOGoExtensions) -- (NSMutableDictionary *) quickRecord +- (NSMutableDictionary *) quickRecordForContainer: (id) theContainer { NSMutableDictionary *row; NSCalendarDate *startDate, *dueDate, *nextAlarmDate; diff --git a/SoObjects/Contacts/NGVCard+SOGo.m b/SoObjects/Contacts/NGVCard+SOGo.m index e13cbfffe..5f94a8a87 100644 --- a/SoObjects/Contacts/NGVCard+SOGo.m +++ b/SoObjects/Contacts/NGVCard+SOGo.m @@ -24,9 +24,12 @@ #import #import +#import + #import #import +#import #import #import "NSDictionary+LDIF.h" @@ -788,4 +791,51 @@ convention: return date; } +- (NSMutableDictionary *) quickRecordForContainer: (id) theContainer +{ + NSMutableDictionary *fields; + CardElement *element; + NSString *value; + NSArray *v; + + fields = [NSMutableDictionary dictionaryWithCapacity: 16]; + + value = [self fn]; + if (value) + [fields setObject: value forKey: @"c_cn"]; + element = [self n]; + [fields setObject: [element flattenedValueAtIndex: 0 forKey: @""] + forKey: @"c_sn"]; + [fields setObject: [element flattenedValueAtIndex: 1 forKey: @""] + forKey: @"c_givenName"]; + value = [self preferredTel]; + if (value) + [fields setObject: value forKey: @"c_telephonenumber"]; + value = [self preferredEMail]; + if (![value isNotNull]) + value = @""; + [fields setObject: value forKey: @"c_mail"]; + element = [self org]; + [fields setObject: [element flattenedValueAtIndex: 0 forKey: @""] + forKey: @"c_o"]; + [fields setObject: [element flattenedValueAtIndex: 1 forKey: @""] + forKey: @"c_ou"]; + element = [self preferredAdr]; + if (element && ![element isVoid]) + [fields setObject: [element flattenedValueAtIndex: 3 + forKey: @""] + forKey: @"c_l"]; + value = [[self uniqueChildWithTag: @"X-AIM"] flattenedValuesForKey: @""]; + [fields setObject: value forKey: @"c_screenname"]; + v = [[self categories] trimmedComponents]; + if ([v count] > 0) + [fields setObject: [v componentsJoinedByString: @","] + forKey: @"c_categories"]; + else + [fields setObject: [NSNull null] forKey: @"c_categories"]; + [fields setObject: @"vcard" forKey: @"c_component"]; + + return fields; +} + @end /* NGVCard */ diff --git a/SoObjects/Contacts/NGVList+SOGo.h b/SoObjects/Contacts/NGVList+SOGo.h index 04601ae1c..286a65faa 100644 --- a/SoObjects/Contacts/NGVList+SOGo.h +++ b/SoObjects/Contacts/NGVList+SOGo.h @@ -1,8 +1,6 @@ /* NGVCard+SOGo.h - this file is part of SOGo * - * Copyright (C) 2009 Inverse inc. - * - * Author: Cyril Robert + * Copyright (C) 2009-2014 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/SoObjects/Contacts/NGVList+SOGo.m b/SoObjects/Contacts/NGVList+SOGo.m index 4e6fd7c78..7c7bebbe7 100644 --- a/SoObjects/Contacts/NGVList+SOGo.m +++ b/SoObjects/Contacts/NGVList+SOGo.m @@ -1,8 +1,6 @@ /* NGVCard+SOGo.m - this file is part of SOGo * - * Copyright (C) 2009 Inverse inc. - * - * Author: Cyril Robert + * Copyright (C) 2009-2014 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -71,4 +69,19 @@ return rc; } +- (NSMutableDictionary *) quickRecordForContainer: (id) theContainer +{ + NSMutableDictionary *fields; + NSString *value; + + fields = [NSMutableDictionary dictionaryWithCapacity: 1]; + + value = [self fn]; + if (value) + [fields setObject: value forKey: @"c_cn"]; + [fields setObject: @"vlist" forKey: @"c_component"]; + + return fields; +} + @end /* NGVList */ diff --git a/SoObjects/Contacts/SOGoContactGCSEntry.m b/SoObjects/Contacts/SOGoContactGCSEntry.m index 6e3365d4e..4b5d5bd21 100644 --- a/SoObjects/Contacts/SOGoContactGCSEntry.m +++ b/SoObjects/Contacts/SOGoContactGCSEntry.m @@ -48,6 +48,11 @@ [super dealloc]; } +- (Class *) parsingClass +{ + return [NGVCard class]; +} + /* content */ - (NGVCard *) vCard @@ -121,11 +126,25 @@ newContact = [[self class] objectWithName: [NSString stringWithFormat: @"%@.vcf", newUID] - inContainer: newFolder]; + inContainer: newFolder]; - return [newContact saveContentString: [newCard versitString]]; + return [newContact saveComponent: newCard]; } + +- (NSException *) moveToFolder: (SOGoGCSFolder *) newFolder +{ + NSException *ex; + + ex = [self copyToFolder: newFolder]; + + if (!ex) + ex = [self delete]; + + return ex; +} + + - (NSString *) displayName { return [[self vCard] fn]; @@ -150,7 +169,7 @@ NSException *result; if (card) - result = [self saveContentString: [card versitString]]; + result = [super saveComponent: card]; else result = nil; /* TODO: we should probably return an exception instead */ @@ -160,15 +179,15 @@ - (NSException *) saveComponent: (NGVCard *) newCard { ASSIGN(card, newCard); - return [self save]; + return [super saveComponent: newCard]; } -- (NSException *) saveContentString: (NSString *) newContent - baseVersion: (unsigned int) newVersion +- (NSException *) saveComponent: (NGVCard *) newCard + baseVersion: (unsigned int) newVersion { NSException *ex; - ex = [super saveContentString: newContent baseVersion: newVersion]; + ex = [super saveComponent: newCard baseVersion: newVersion]; [card release]; card = nil; diff --git a/SoObjects/Contacts/SOGoContactGCSList.m b/SoObjects/Contacts/SOGoContactGCSList.m index 11d75a752..61e68bf85 100644 --- a/SoObjects/Contacts/SOGoContactGCSList.m +++ b/SoObjects/Contacts/SOGoContactGCSList.m @@ -1,8 +1,6 @@ /* SOGoContactGCSList.m - this file is part of SOGo * - * Copyright (C) 2008-2009 Inverse inc. - * - * Author: Wolfgang Sourdeau + * Copyright (C) 2008-2014 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -45,6 +43,12 @@ [super dealloc]; } +- (Class *) parsingClass +{ + return [NGVList class]; +} + + /* content */ - (NGVList *) vList @@ -77,7 +81,19 @@ [NSString stringWithFormat: @"%@.vlf", newUID] inContainer: newFolder]; - return [newGList saveContentString: [newList versitString]]; + return [newGList saveComponent: newList]; +} + +- (NSException *) moveToFolder: (SOGoGCSFolder *) newFolder +{ + NSException *ex; + + ex = [self copyToFolder: newFolder]; + + if (!ex) + ex = [self delete]; + + return ex; } /* DAV */ @@ -100,7 +116,7 @@ vlist = [self vList]; - [self saveContentString: [vlist versitString]]; + [self saveComponent: vlist]; } @end diff --git a/SoObjects/Contacts/SOGoContactLDIFEntry.m b/SoObjects/Contacts/SOGoContactLDIFEntry.m index dc8ec3431..4e456cbed 100644 --- a/SoObjects/Contacts/SOGoContactLDIFEntry.m +++ b/SoObjects/Contacts/SOGoContactLDIFEntry.m @@ -1,9 +1,6 @@ /* SOGoContactLDIFEntry.m - this file is part of SOGo * - * Copyright (C) 2006-2012 Inverse inc. - * - * Author: Wolfgang Sourdeau - * Ludovic Marcotte + * Copyright (C) 2006-2014 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -231,7 +228,7 @@ [NSString stringWithFormat: @"%@.vcf", newUID] inContainer: newFolder]; - return [newContact saveContentString: [newCard versitString]]; + return [newContact saveComponent: newCard]; } @end diff --git a/SoObjects/Mailer/SOGoDraftObject.m b/SoObjects/Mailer/SOGoDraftObject.m index 764963534..b1cb2a2cc 100644 --- a/SoObjects/Mailer/SOGoDraftObject.m +++ b/SoObjects/Mailer/SOGoDraftObject.m @@ -1833,7 +1833,7 @@ static NSString *userAgent = nil; newContact = [contactGCSEntry objectWithName: uid inContainer: folder]; [newContact setIsNew: YES]; - [newContact saveContentString: [card versitString]]; + [newContact saveComponent: card]; } } } diff --git a/SoObjects/SOGo/GNUmakefile.preamble b/SoObjects/SOGo/GNUmakefile.preamble index 925df35a0..a03047c38 100644 --- a/SoObjects/SOGo/GNUmakefile.preamble +++ b/SoObjects/SOGo/GNUmakefile.preamble @@ -15,7 +15,6 @@ ADDITIONAL_CPPFLAGS += \ SOGo_LIBRARIES_DEPEND_UPON += \ -Wl,--no-as-needed \ - -L../../OGoContentStore/$(GNUSTEP_OBJ_DIR)/ -lOGoContentStore \ -L../../SOPE/NGCards/$(GNUSTEP_OBJ_DIR)/ \ -lmemcached \ -lGDLAccess \ diff --git a/SoObjects/SOGo/SOGoContentObject.h b/SoObjects/SOGo/SOGoContentObject.h index 866e2dfb2..fbd0e7365 100644 --- a/SoObjects/SOGo/SOGoContentObject.h +++ b/SoObjects/SOGo/SOGoContentObject.h @@ -1,20 +1,21 @@ /* Copyright (C) 2004 SKYRIX Software AG + Copyright (C) 2005-2014 Inverse inc. - This file is part of OpenGroupware.org. + This file is part of SOGo. - OGo is free software; you can redistribute it and/or modify it under + SOGo is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. - OGo is distributed in the hope that it will be useful, but WITHOUT ANY + SOGo is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with OGo; see the file COPYING. If not, write to the + License along with SOGo; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ @@ -50,6 +51,7 @@ - (id) initWithName: (NSString *) newName andContent: (NSString *) newContent inContainer: (SOGoGCSFolder *) newContainer; +- (Class *) parsingClass; /* content */ @@ -62,9 +64,9 @@ - (NSCalendarDate *) lastModified; - (NSString *) contentAsString; -- (NSException *) saveContentString: (NSString *) _str - baseVersion: (unsigned int) _baseVersion; -- (NSException *) saveContentString: (NSString *)_str; +- (NSException *) saveComponent: (id) theComponent + baseVersion: (unsigned int) _baseVersion; +- (NSException *) saveComponent: (id) theComponent; - (id) PUTAction: (WOContext *) _ctx; diff --git a/SoObjects/SOGo/SOGoContentObject.m b/SoObjects/SOGo/SOGoContentObject.m index b1afaa699..e3c6ed9ca 100644 --- a/SoObjects/SOGo/SOGoContentObject.m +++ b/SoObjects/SOGo/SOGoContentObject.m @@ -1,5 +1,5 @@ /* - Copyright (C) 2006-2013 Inverse inc. + Copyright (C) 2006-2014 Inverse inc. Copyright (C) 2004-2005 SKYRIX Software AG This file is part of SOGo. @@ -32,6 +32,9 @@ #import #import +#import +#import + #import "NSCalendarDate+SOGo.h" #import "SOGoCache.h" #import "SOGoGCSFolder.h" @@ -87,6 +90,13 @@ return self; } +- (Class *) parsingClass +{ + [self subclassResponsibility: _cmd]; + + return nil; +} + - (void) _setRecord: (NSDictionary *) objectRecord { id data; @@ -187,16 +197,18 @@ return content; } -- (NSException *) saveContentString: (NSString *) newContent - baseVersion: (unsigned int) newVersion +- (NSException *) saveComponent: (id) theComponent + baseVersion: (unsigned int) newVersion { /* Note: "iCal multifolder saves" are implemented in the apt subclass! */ GCSFolder *folder; NSException *ex; NSCalendarDate *now; + NSString *newContent; ex = nil; - + + newContent = [theComponent versitString]; now = [NSCalendarDate calendarDate]; if (!content) ASSIGN (creationDate, now); @@ -208,8 +220,9 @@ if (folder) { ex = [folder writeContent: newContent - toName: nameInContainer - baseVersion: &version]; + fromComponent: theComponent + toName: nameInContainer + baseVersion: &version]; if (ex) [self errorWithFormat:@"write failed: %@", ex]; } @@ -223,9 +236,9 @@ return ex; } -- (NSException *) saveContentString: (NSString *) newContent +- (NSException *) saveComponent: (id) theComponent { - return [self saveContentString: newContent baseVersion: version]; + return [self saveComponent: theComponent baseVersion: version]; } /* actions */ @@ -239,17 +252,7 @@ - (NSException *) moveToFolder: (SOGoGCSFolder *) newFolder { - SOGoContentObject *newObject; - NSException *ex; - - newObject = [[self class] objectWithName: nameInContainer - inContainer: newFolder]; - [newObject setIsNew: YES]; - ex = [newObject saveContentString: content]; - if (!ex) - ex = [self delete]; - - return ex; + [self subclassResponsibility: _cmd]; } - (NSException *) delete @@ -341,8 +344,8 @@ /* attempt a save */ - error = [self saveContentString: [rq contentAsString] - baseVersion: baseVersion]; + error = [self saveComponent: [[self parsingClass] parseSingleFromSource: [rq contentAsString]] + baseVersion: baseVersion]; if (error) response = (WOResponse *) error; else diff --git a/SoObjects/common.make b/SoObjects/common.make index 8dc2d8c28..31f10e1ac 100644 --- a/SoObjects/common.make +++ b/SoObjects/common.make @@ -20,7 +20,6 @@ ADDITIONAL_INCLUDE_DIRS += \ ADDITIONAL_LIB_DIRS += \ -L../SOGo/SOGo.framework/ \ -L../../SOGo/$(GNUSTEP_OBJ_DIR)/ \ - -L../../OGoContentStore/$(GNUSTEP_OBJ_DIR)/ \ -L../../SOPE/NGCards/$(GNUSTEP_OBJ_DIR)/ \ -L/usr/local/lib diff --git a/Tests/Integration/GNUmakefile.preamble b/Tests/Integration/GNUmakefile.preamble index 90cc86a41..cd29c8e19 100644 --- a/Tests/Integration/GNUmakefile.preamble +++ b/Tests/Integration/GNUmakefile.preamble @@ -11,7 +11,6 @@ ADDITIONAL_INCLUDE_DIRS += \ ADDITIONAL_LIB_DIRS += \ -L../../SoObjects/SOGo/SOGo.framework -lSOGo \ - -L../../OGoContentStore/$(GNUSTEP_OBJ_DIR)/ -lOGoContentStore \ -L../../SOPE/GDLContentStore/$(GNUSTEP_OBJ_DIR)/ -lGDLContentStore \ -L../../SOPE/NGCards/$(GNUSTEP_OBJ_DIR)/ -lNGCards \ -L/usr/local/lib -L/usr/lib -lEOControl -lNGStreams -lNGMime -lNGExtensions diff --git a/Tests/Unit/GNUmakefile b/Tests/Unit/GNUmakefile index 316e5cf4e..6b99e05a5 100644 --- a/Tests/Unit/GNUmakefile +++ b/Tests/Unit/GNUmakefile @@ -35,7 +35,7 @@ $(TEST_TOOL)_CPPFLAGS += \ ADDITIONAL_LIB_DIRS += \ -L../../SoObjects/SOGo/SOGo.framework/Versions/Current -L../../SOPE/NGCards/obj -L../../SOPE/GDLContentStore/obj -lSOGo -lNGMime -lNGCards -lGDLContentStore -lNGExtensions -lSBJson -lobjc \ -L/usr/local/lib -lSaxObjC \ - -Wl,-rpath,../../SoObjects/SOGo/SOGo.framework/Versions/Current -Wl,-rpath,../../SOPE/NGCards/obj -Wl,-rpath,../../SOPE/GDLContentStore/obj -Wl,-rpath,../../OGoContentStore/obj + -Wl,-rpath,../../SoObjects/SOGo/SOGo.framework/Versions/Current -Wl,-rpath,../../SOPE/NGCards/obj -Wl,-rpath,../../SOPE/GDLContentStore/obj ADDITIONAL_LDFLAGS += -Wl,--no-as-needed -include GNUmakefile.preamble diff --git a/Tools/GNUmakefile.preamble b/Tools/GNUmakefile.preamble index 3c0700276..fc78b8b0a 100644 --- a/Tools/GNUmakefile.preamble +++ b/Tools/GNUmakefile.preamble @@ -11,7 +11,6 @@ ADDITIONAL_INCLUDE_DIRS += \ ADDITIONAL_LIB_DIRS += \ -L../SoObjects/SOGo/SOGo.framework -lSOGo \ - -L../OGoContentStore/$(GNUSTEP_OBJ_DIR)/ -lOGoContentStore \ -L../SOPE/GDLContentStore/$(GNUSTEP_OBJ_DIR)/ -lGDLContentStore \ -L../SOPE/NGCards/$(GNUSTEP_OBJ_DIR)/ -lNGCards \ -L/usr/local/lib -L/usr/lib -lEOControl -lNGStreams -lNGMime -lNGExtensions -lNGObjWeb diff --git a/Tools/SOGoToolRestore.m b/Tools/SOGoToolRestore.m index 0cdda3b29..4a4a1b350 100644 --- a/Tools/SOGoToolRestore.m +++ b/Tools/SOGoToolRestore.m @@ -374,7 +374,8 @@ typedef enum SOGoToolRestoreMode { { NSLog (@"restoring record '%@'", cName); cContent = [currentRecord objectForKey: @"c_content"]; - [gcsFolder writeContent: cContent toName: cName + [gcsFolder writeContent: cContent + toName: cName baseVersion: &version]; } } diff --git a/UI/Contacts/UIxContactFolderActions.m b/UI/Contacts/UIxContactFolderActions.m index 887ce3b7b..974e7d5d0 100644 --- a/UI/Contacts/UIxContactFolderActions.m +++ b/UI/Contacts/UIxContactFolderActions.m @@ -1,6 +1,6 @@ /* Copyright (C) 2004-2005 SKYRIX Software AG - Copyright (C) 2006-2013 Inverse inc. + Copyright (C) 2006-2014 Inverse inc. This file is part of SOGo @@ -280,7 +280,7 @@ inContainer: folder]; [contact setIsNew: YES]; - [contact saveContentString: [card versitString]]; + [contact saveComponent: card]; rc = YES; } diff --git a/UI/Contacts/UIxListEditor.m b/UI/Contacts/UIxListEditor.m index d9478b9cc..69d63bd21 100644 --- a/UI/Contacts/UIxListEditor.m +++ b/UI/Contacts/UIxListEditor.m @@ -1,9 +1,6 @@ /* UIxListEditor.m - this file is part of SOGo * - * Copyright (C) 2008-2012 Inverse inc. - * - * Author: Wolfgang Sourdeau - * Francis Lachapelle + * Copyright (C) 2008-2014 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -190,7 +187,7 @@ // Add vCard to current folder newContact = [SOGoContactGCSEntry objectWithName: newUID inContainer: folder]; - [newContact saveContentString: [newCard versitString]]; + [newContact saveComponent: newCard]; // Create card reference for the list cardReference = [NGVCardReference elementWithTag: @"card"]; diff --git a/UI/MailPartViewers/UIxMailPartICalActions.m b/UI/MailPartViewers/UIxMailPartICalActions.m index 281ee4bdc..be8c47e73 100644 --- a/UI/MailPartViewers/UIxMailPartICalActions.m +++ b/UI/MailPartViewers/UIxMailPartICalActions.m @@ -1,8 +1,6 @@ /* UIxMailPartICalActions.m - this file is part of SOGo * - * Copyright (C) 2007-2011 Inverse inc. - * - * Author: Wolfgang Sourdeau + * Copyright (C) 2007-2014 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -179,7 +177,7 @@ if ([*eventObject isNew]) { chosenEvent = emailEvent; - [*eventObject saveContentString: [[emailEvent parent] versitString]]; + [*eventObject saveCalendar: [emailEvent parent]]; } else { @@ -209,7 +207,7 @@ parent = [calendarEvent parent]; [parent removeChild: calendarEvent]; [parent addChild: emailEvent]; - [*eventObject saveContentString: [parent versitString]]; + [*eventObject saveCalendar: parent]; [*eventObject flush]; chosenEvent = emailEvent; } @@ -332,7 +330,6 @@ { iCalEvent *emailEvent; SOGoAppointmentObject *eventObject; - NSString *iCalString; WOResponse *response; emailEvent = [self _emailEvent]; @@ -341,8 +338,7 @@ eventObject = [self _eventObjectWithUID: [emailEvent uid]]; if ([eventObject isNew]) { - iCalString = [[emailEvent parent] versitString]; - [eventObject saveContentString: iCalString]; + [eventObject saveCalendar: [emailEvent parent]]; response = [self responseWith204]; } else diff --git a/UI/Scheduler/UIxComponentEditor.m b/UI/Scheduler/UIxComponentEditor.m index ce56a9644..4699e929b 100644 --- a/UI/Scheduler/UIxComponentEditor.m +++ b/UI/Scheduler/UIxComponentEditor.m @@ -1712,7 +1712,7 @@ RANGE(2); - (BOOL) isWriteableClientObject { return [[self clientObject] - respondsToSelector: @selector(saveContentString:)]; + respondsToSelector: @selector(saveCompontent:)]; } /* access */ diff --git a/UI/Scheduler/UIxTaskEditor.m b/UI/Scheduler/UIxTaskEditor.m index 36cfa036a..597e7b83e 100644 --- a/UI/Scheduler/UIxTaskEditor.m +++ b/UI/Scheduler/UIxTaskEditor.m @@ -1,8 +1,6 @@ /* UIxTaskEditor.m - this file is part of SOGo * - * Copyright (C) 2007-2009 Inverse inc. - * - * Author: Wolfgang Sourdeau + * Copyright (C) 2007-2014 Inverse inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -421,18 +419,6 @@ return [self jsCloseWithRefreshMethod: @"refreshTasks()"]; } -// - (id ) saveAction -// { -// SOGoTaskObject *clientObject; -// NSString *iCalString; - -// clientObject = [self clientObject]; -// iCalString = [[clientObject calendar: NO secure: NO] versitString]; -// [clientObject saveContentString: iCalString]; - -// return [self jsCloseWithRefreshMethod: @"refreshTasks()"]; -// } - - (id ) viewAction { WOResponse *result; diff --git a/UI/common.make b/UI/common.make index 87c3d4fb8..80d67ea23 100644 --- a/UI/common.make +++ b/UI/common.make @@ -29,14 +29,11 @@ RELBUILD_DIR_libSOGo = \ $(GNUSTEP_BUILD_DIR)/../../SoObjects/SOGo/SOGo.framework/ RELBUILD_DIR_libSOGoUI = \ $(GNUSTEP_BUILD_DIR)/../SOGoUI/$(GNUSTEP_OBJ_DIR_NAME) -RELBUILD_DIR_libOGoContentStore = \ - $(GNUSTEP_BUILD_DIR)/../../OGoContentStore/$(GNUSTEP_OBJ_DIR_NAME) ADDITIONAL_LIB_DIRS += \ -L$(RELBUILD_DIR_libNGCards) \ -L$(RELBUILD_DIR_libSOGo) \ - -L$(RELBUILD_DIR_libSOGoUI) \ - -L$(RELBUILD_DIR_libOGoContentStore) + -L$(RELBUILD_DIR_libSOGoUI) endif SYSTEM_LIB_DIR += -L/usr/local/lib -L/usr/lib diff --git a/packaging/debian-multiarch/sogo.overrides b/packaging/debian-multiarch/sogo.overrides index cf3442214..d5dad073b 100644 --- a/packaging/debian-multiarch/sogo.overrides +++ b/packaging/debian-multiarch/sogo.overrides @@ -1,4 +1,4 @@ sogo: embedded-javascript-library usr/lib/GNUstep/SOGo/WebServerResources/prototype.js sogo: extra-license-file usr/lib/GNUstep/SOGo/WebServerResources/scriptaculous/MIT-LICENSE sogo: embedded-javascript-library usr/lib/GNUstep/SOGo/WebServerResources/scriptaculous/scriptaculous.js -sogo: package-name-doesnt-match-sonames libGDLContentStore4.9 libNGCards4.9 libOGoContentStore0.9 libSOGoUI1.0 +sogo: package-name-doesnt-match-sonames libGDLContentStore4.9 libNGCards4.9 libSOGoUI1.0 diff --git a/packaging/debian/sogo.overrides b/packaging/debian/sogo.overrides index 2b406f701..21c9e3523 100644 --- a/packaging/debian/sogo.overrides +++ b/packaging/debian/sogo.overrides @@ -1,4 +1,4 @@ sogo: embedded-javascript-library usr/lib/GNUstep/SOGo/WebServerResources/prototype.js sogo: embedded-javascript-library usr/lib/GNUstep/SOGo/WebServerResources/jquery.js sogo: embedded-javascript-library usr/lib/GNUstep/SOGo/WebServerResources/jquery-ui.js -sogo: package-name-doesnt-match-sonames libGDLContentStore4.9 libNGCards4.9 libOGoContentStore0.9 libSOGoUI1.0 +sogo: package-name-doesnt-match-sonames libGDLContentStore4.9 libNGCards4.9 libSOGoUI1.0 diff --git a/packaging/rhel/sogo.spec b/packaging/rhel/sogo.spec index 5f99e7058..a330f39e3 100644 --- a/packaging/rhel/sogo.spec +++ b/packaging/rhel/sogo.spec @@ -262,7 +262,6 @@ rm -fr ${RPM_BUILD_ROOT} %{_sbindir}/openchange_user_cleanup %{_libdir}/libSOGo.so.* %{_libdir}/libSOGoUI.so.* -%{_libdir}/libOGoContentStore.so* %{_libdir}/GNUstep/SOGo/AdministrationUI.SOGo %{_libdir}/GNUstep/SOGo/Appointments.SOGo %{_libdir}/GNUstep/SOGo/CommonUI.SOGo