diff options
Diffstat (limited to 'src/resources/buddylist.cpp')
-rw-r--r-- | src/resources/buddylist.cpp | 124 |
1 files changed, 34 insertions, 90 deletions
diff --git a/src/resources/buddylist.cpp b/src/resources/buddylist.cpp index 3e40ec86..9772ff19 100644 --- a/src/resources/buddylist.cpp +++ b/src/resources/buddylist.cpp @@ -29,113 +29,59 @@ BuddyList::BuddyList() { // Find saved buddy list file - filename = new std::string(std::string(homeDir) + "buddy.xml"); - - // Create buddy file - buddyXmlwriterMemory(); + filename = new std::string(std::string(homeDir) + "buddy.txt"); // Load buddy from file - streamFile(); + loadFile(); } BuddyList::~BuddyList() { - int rc; - - std::ofstream outputStream(filename->c_str(), std::ios::trunc); - if( !outputStream ) { - std::cerr << "Error opening output stream" << std::endl; - return; - } - - /* Close last element. */ - rc = xmlTextWriterEndElement(writer); - if (rc < 0) { - std::cerr << "buddyXmlwriterFilename: Error at xmlTextWriterEndElement" << std::endl; - return; - } - - xmlFreeTextWriter(writer); - xmlCleanupParser(); - - /* Write and close file */ - outputStream << (const char*)buf->content; - outputStream.close(); - xmlBufferFree(buf); - delete filename; } -void BuddyList::streamFile(void) { - int ret; +void BuddyList::loadFile(void) +{ + char buddy[LEN_USERNAME]; - reader = xmlReaderForFile(filename->c_str(), NULL, 0); - if (reader != NULL) { - ret = xmlTextReaderRead(reader); - while (ret == 1) { - processNode(); - ret = xmlTextReaderRead(reader); - } - xmlFreeTextReader(reader); - if (ret != 0) { - std::cerr << filename << " : failed to parse" << std::endl; - } - } else { - std::cerr << "Unable to open " << filename << std::endl; + // Open file + std::ifstream inputStream(filename->c_str(), std::ios::in); + if( !inputStream ) { + std::cerr << "Error opening input stream" << std::endl; + return; } -} - -void BuddyList::processNode(void) { - const xmlChar *name, *value; - name = xmlTextReaderConstName(reader); - if (name == NULL) - name = BAD_CAST "--"; - - value = xmlTextReaderConstValue(reader); - - if(!xmlTextReaderIsEmptyElement(reader) && xmlTextReaderHasValue(reader)) - addBuddy((char *)value); + do { + inputStream.getline(buddy, LEN_USERNAME); + buddylist.push_back(buddy); + } while(!inputStream.eof()); + // Read buddy and close file + inputStream.close(); } -void BuddyList::buddyXmlwriterMemory(void) -{ - int rc; - - /* Create a new XML buffer, to which the XML document will be - * written */ - buf = xmlBufferCreate(); - if (buf == NULL) { - std::cerr << "buddyXmlwriterMemory: Error creating the xml buffer" << std::endl; - return; - } - // Create a new XmlWriter for uri, with no compression - writer = xmlNewTextWriterMemory(buf, 0); - if (writer == NULL) { - std::cerr << "buddyXmlwriterMemory: Error creating the xml writer" << std::endl; - return; - } +void BuddyList::saveFile(void) +{ + std::string str; - // Start with the xml default version and UTF-8 encoding - rc = xmlTextWriterStartDocument(writer, NULL, "UTF-8", NULL); - if (rc < 0) { - std::cerr << "buddyXmlwriterFilename: Error at xmlTextWriterStartDocument" << std::endl; + // Open file + std::ofstream outputStream(filename->c_str(), std::ios::trunc); + if( !outputStream ) { + std::cerr << "Error opening output stream" << std::endl; return; } - // Start with the root named "LIST" - rc = xmlTextWriterStartElement(writer, BAD_CAST "LIST"); - if (rc < 0) { - std::cerr << "buddyXmlwriterFilename: Error at xmlTextWriterStartElement" << std::endl; - return; + // Write buddy and close file + for (buddyit = buddylist.begin(); buddyit != buddylist.end(); buddyit++) + { + str = *buddyit; + outputStream << (const char*) str.c_str() << std::endl; } + outputStream.close(); } bool BuddyList::addBuddy(const std::string buddy) { - int rc; - for (buddyit = buddylist.begin(); buddyit != buddylist.end(); buddyit++) { // Buddy already exist @@ -145,12 +91,8 @@ bool BuddyList::addBuddy(const std::string buddy) // Buddy doesnt exist, add it buddylist.push_back(buddy); - // Store buddy in "PEOPLE" - rc = xmlTextWriterWriteElement(writer, BAD_CAST "PEOPLE", (xmlChar *) buddy.c_str()); - if (rc < 0) { - std::cerr << "buddyXmlwriterFilename: Error at xmlTextWriterWriteElement" << std::endl; - return false; - } + // Save file + saveFile(); return true; } @@ -163,11 +105,13 @@ bool BuddyList::removeBuddy(const std::string buddy) // Buddy exist, remove it if (*buddyit == buddy) { buddylist.remove(buddy); + + // Save file + saveFile(); return true; } } } - // TODO: Remove from buddy.xml // Buddy doesnt exist return false; |