// Media Folder // // Douglas Thrift // // $Id$ #include "MediaFolder.hpp" #include MediaFolder::MediaFolder(_H& connection, const api::Path& path) : connection(connection), path(path) { _H root_(connection->Parse(_B("SELECT root FROM folders WHERE path = ?"))->Execute(path.GetPath())); if (root_->MoveNext()) root = root_->GetString(_B("root")); else throw; } MediaFolder::MediaFolder(_H& connection, const api::Path& path, const api::Path& root) : connection(connection), path(path), root(root) { _H path_(connection->Parse(_B("SELECT path FROM folders WHERE path = ?"))->Execute(path.GetPath())); if (path_->MoveNext()) if (path.GetPath() != root.GetPath()) connection->Parse(_B("UPDATE folders SET folder = ?, root = ? WHERE path = ?"))->Execute(path.GetParent().GetPath(), root.GetPath(), path.GetPath()); else connection->Parse(_B("UPDATE folders SET folder = NULL, root = ? WHERE path = ?"))->Execute(root.GetPath(), path.GetPath()); else if (path.GetPath() != root.GetPath()) connection->Parse(_B("INSERT INTO folders (path, folder, root) VALUES (?, ?, ?)"))->Execute(path.GetPath(), path.GetParent().GetPath(), root.GetPath()); else connection->Parse(_B("INSERT INTO folders (path, folder, root) VALUES (?, NULL, ?)"))->Execute(path.GetPath(), root.GetPath()); } _L MediaFolder::GetFiles() const { _H paths(connection->Parse(_B("SELECT path FROM files WHERE live = TRUE AND folder = ?"))->Execute(path.GetPath())); _L files; while (paths->MoveNext()) files.InsertLast(MediaFile(connection, paths->GetString(_B("path")))); return files; } _L MediaFolder::GetFolders() const { _H paths(connection->Parse(_B("SELECT path FROM folders WHERE live = TRUE AND folder = ?"))->Execute(path.GetPath())); _L folders; while (paths->MoveNext()) folders.InsertLast(MediaFolder(connection, paths->GetString(_B("path")))); return folders; }