예제 #1
0
QString DirViewItem::fullName() const
{
    QString fn = m_name;
    DirViewItem *item = parent();
    while (item && item->type() != DirViewItem::Type_Root) {
        fn.prepend("/");
        fn.prepend(item->name());
        item = item->parent();
    }
    return fn;
}
예제 #2
0
DirViewItemRoot * MPDParseUtils::parseDirViewItems(const QByteArray * const data)
{
	QList<QByteArray> lines = data->split('\n');

	DirViewItemRoot * rootItem = new DirViewItemRoot("");
	DirViewItem * currentDir = rootItem;
	QStringList currentDirList;

	int amountOfLines = lines.size();
	for (int i = 0; i < amountOfLines; i++) {
		QString line(lines.at(i));

		if (line.startsWith("file: ")) {
			line.remove(0, 6);
			QStringList parts = line.split("/");

			if (currentDir->type() == DirViewItem::Type_Root)
				static_cast<DirViewItemRoot *>(currentDir)->insertFile(parts.at(parts.size()-1));
			else
				static_cast<DirViewItemDir *>(currentDir)->insertFile(parts.at(parts.size()-1));
		} else if (line.startsWith("directory: ")) {
			line.remove(0, 11);
			QStringList parts = line.split("/");

			/* Check how much matches */
			int depth = 0;
			for (int j = 0; j < currentDirList.size() && j < parts.size(); j++) {
				if (currentDirList.at(j) != parts.at(j))
					break;
				depth++;
			}

			for (int j = currentDirList.size(); j > depth; j--) {
				currentDir = currentDir->parent();
			}

			if (currentDir->type() == DirViewItem::Type_Root)
				currentDir = static_cast<DirViewItemRoot *>(currentDir)->createDirectory(parts.at(parts.size()-1));
			else
				currentDir = static_cast<DirViewItemDir *>(currentDir)->createDirectory(parts.at(parts.size()-1));

			currentDirList = parts;
		}
	}

	return rootItem;
}