X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fkdenlivedoc.cpp;h=127cd32c3a163c4ad6968c586d2ad0444f9147de;hb=a3eee7be24126f5a3458d488f44cd61c66135e17;hp=01cd32e3397d052a6e9bfd9e69ee155975b8156a;hpb=5d4746e4c3e8665de83e6d281dcd08a46cd22c31;p=kdenlive diff --git a/src/kdenlivedoc.cpp b/src/kdenlivedoc.cpp index 01cd32e3..127cd32c 100644 --- a/src/kdenlivedoc.cpp +++ b/src/kdenlivedoc.cpp @@ -24,7 +24,7 @@ #include "kdenlivesettings.h" #include "renderer.h" #include "clipmanager.h" -#include "titlewidget.h" +#include "widgets/titlewidget.h" #include "mainwindow.h" #include "documentchecker.h" #include "documentvalidator.h" @@ -61,7 +61,7 @@ const double DOCUMENTVERSION = 0.88; -KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, const QString &profileName, const QMap & properties, const QMap & metadata, const QPoint &tracks, Render *render, KTextEdit *notes, bool *openBackup, MainWindow *parent, KProgressDialog *progressDialog) : +KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, const QString &profileName, const QMap & properties, const QMap & metadata, const QPoint &tracks, Render *render, KTextEdit *notes, bool *openBackup, QGLWidget *glContext, MainWindow *parent, KProgressDialog *progressDialog) : QObject(parent), m_autosave(NULL), m_url(url), @@ -83,7 +83,7 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup m_profile.display_aspect_den = 0; m_profile.colorspace = 0; - m_clipManager = new ClipManager(this); + m_clipManager = new ClipManager(this, glContext); m_autoSaveTimer = new QTimer(this); m_autoSaveTimer->setSingleShot(true); connect(m_clipManager, SIGNAL(displayMessage(QString,int)), parent, SLOT(slotGotProgressInfo(QString,int))); @@ -246,9 +246,9 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup if (e.tagName() == "trackinfo") { TrackInfo projectTrack; if (e.attribute("type") == "audio") - projectTrack.type = AUDIOTRACK; + projectTrack.type = AudioTrack; else - projectTrack.type = VIDEOTRACK; + projectTrack.type = VideoTrack; projectTrack.isMute = e.attribute("mute").toInt(); projectTrack.isBlind = e.attribute("blind").toInt(); projectTrack.isLocked = e.attribute("locked").toInt(); @@ -422,7 +422,7 @@ QDomDocument KdenliveDoc::createEmptyDocument(int videotracks, int audiotracks) // Better default names for tracks: Audio 1 etc. instead of blank numbers for (int i = 0; i < audiotracks; ++i) { TrackInfo audioTrack; - audioTrack.type = AUDIOTRACK; + audioTrack.type = AudioTrack; audioTrack.isMute = false; audioTrack.isBlind = true; audioTrack.isLocked = false; @@ -434,7 +434,7 @@ QDomDocument KdenliveDoc::createEmptyDocument(int videotracks, int audiotracks) } for (int i = 0; i < videotracks; ++i) { TrackInfo videoTrack; - videoTrack.type = VIDEOTRACK; + videoTrack.type = VideoTrack; videoTrack.isMute = false; videoTrack.isBlind = false; videoTrack.isLocked = false; @@ -531,7 +531,7 @@ QDomDocument KdenliveDoc::createEmptyDocument(const QList &tracks) for (int i = 1; i < total; ++i) { QDomElement track = doc.createElement("track"); track.setAttribute("producer", "playlist" + QString::number(i)); - if (tracks.at(i - 1).type == AUDIOTRACK) { + if (tracks.at(i - 1).type == AudioTrack) { track.setAttribute("hide", "video"); } else if (tracks.at(i - 1).isBlind) track.setAttribute("hide", "video"); @@ -731,7 +731,7 @@ QDomDocument KdenliveDoc::xmlSceneList(const QString &scene, const QStringList & QDomElement tracksinfo = sceneList.createElement("tracksinfo"); foreach(const TrackInfo & info, m_tracksList) { QDomElement trackinfo = sceneList.createElement("trackinfo"); - if (info.type == AUDIOTRACK) trackinfo.setAttribute("type", "audio"); + if (info.type == AudioTrack) trackinfo.setAttribute("type", "audio"); trackinfo.setAttribute("mute", info.isMute); trackinfo.setAttribute("blind", info.isBlind); trackinfo.setAttribute("locked", info.isLocked); @@ -841,6 +841,7 @@ void KdenliveDoc::setProjectFolder(KUrl url) KStandardDirs::makeDir(url.path()); KStandardDirs::makeDir(url.path(KUrl::AddTrailingSlash) + "titles/"); KStandardDirs::makeDir(url.path(KUrl::AddTrailingSlash) + "thumbs/"); + KStandardDirs::makeDir(url.path(KUrl::AddTrailingSlash) + "proxy/"); if (KMessageBox::questionYesNo(kapp->activeWindow(), i18n("You have changed the project folder. Do you want to copy the cached data from %1 to the new folder %2?", m_projectFolder.path(), url.path())) == KMessageBox::Yes) moveProjectData(url); m_projectFolder = url; @@ -853,7 +854,7 @@ void KdenliveDoc::moveProjectData(const KUrl &url) KUrl::List cacheUrls; for (int i = 0; i < list.count(); ++i) { DocClipBase *clip = list.at(i); - if (clip->clipType() == TEXT) { + if (clip->clipType() == Text) { // the image for title clip must be moved KUrl oldUrl = clip->fileURL(); KUrl newUrl = KUrl(url.path(KUrl::AddTrailingSlash) + "titles/" + oldUrl.fileName()); @@ -862,13 +863,17 @@ void KdenliveDoc::moveProjectData(const KUrl &url) } QString hash = clip->getClipHash(); KUrl oldVideoThumbUrl = KUrl(m_projectFolder.path(KUrl::AddTrailingSlash) + "thumbs/" + hash + ".png"); - KUrl oldAudioThumbUrl = KUrl(m_projectFolder.path(KUrl::AddTrailingSlash) + "thumbs/" + hash + ".thumb"); if (KIO::NetAccess::exists(oldVideoThumbUrl, KIO::NetAccess::SourceSide, 0)) { cacheUrls << oldVideoThumbUrl; } + KUrl oldAudioThumbUrl = KUrl(m_projectFolder.path(KUrl::AddTrailingSlash) + "thumbs/" + hash + ".thumb"); if (KIO::NetAccess::exists(oldAudioThumbUrl, KIO::NetAccess::SourceSide, 0)) { cacheUrls << oldAudioThumbUrl; } + KUrl oldVideoProxyUrl = KUrl(m_projectFolder.path(KUrl::AddTrailingSlash) + "proxy/" + hash + '.' + KdenliveSettings::proxyextension()); + if (KIO::NetAccess::exists(oldVideoProxyUrl, KIO::NetAccess::SourceSide, 0)) { + cacheUrls << oldVideoProxyUrl; + } } if (!cacheUrls.isEmpty()) { KIO::Job *job = KIO::copy(cacheUrls, KUrl(url.path(KUrl::AddTrailingSlash) + "thumbs/")); @@ -1096,14 +1101,14 @@ bool KdenliveDoc::addClip(QDomElement elem, const QString &clipId, bool createCl elem.setAttribute("id", producerId); QString path = elem.attribute("resource"); QString extension; - if (elem.attribute("type").toInt() == SLIDESHOW) { + if (elem.attribute("type").toInt() == SlideShow) { extension = KUrl(path).fileName(); path = KUrl(path).directory(); } if (elem.hasAttribute("_missingsource")) { // Clip has proxy but missing original source } - else if (path.isEmpty() == false && QFile::exists(path) == false && elem.attribute("type").toInt() != TEXT && !elem.hasAttribute("placeholder")) { + else if (path.isEmpty() == false && QFile::exists(path) == false && elem.attribute("type").toInt() != Text && !elem.hasAttribute("placeholder")) { kDebug() << "// FOUND MISSING CLIP: " << path << ", TYPE: " << elem.attribute("type").toInt(); const QString size = elem.attribute("file_size"); const QString hash = elem.attribute("file_hash"); @@ -1115,7 +1120,7 @@ bool KdenliveDoc::addClip(QDomElement elem, const QString &clipId, bool createCl else action = (KMessageBox::ButtonCode) KMessageBox::questionYesNoCancel(kapp->activeWindow(), i18n("Clip %1
is invalid, what do you want to do?", path), i18n("File not found"), KGuiItem(i18n("Search automatically")), KGuiItem(i18n("Keep as placeholder"))); } else { - if (elem.attribute("type").toInt() == SLIDESHOW) { + if (elem.attribute("type").toInt() == SlideShow) { int res = KMessageBox::questionYesNoCancel(kapp->activeWindow(), i18n("Clip %1
is invalid or missing, what do you want to do?", path), i18n("File not found"), KGuiItem(i18n("Search manually")), KGuiItem(i18n("Keep as placeholder"))); if (res == KMessageBox::Yes) newpath = KFileDialog::getExistingDirectory(KUrl("kfiledialog:///clipfolder"), kapp->activeWindow(), i18n("Looking for %1", path)); @@ -1145,7 +1150,8 @@ bool KdenliveDoc::addClip(QDomElement elem, const QString &clipId, bool createCl elem.setAttribute("placeholder", '1'); } if (!newpath.isEmpty()) { - if (elem.attribute("type").toInt() == SLIDESHOW) + kDebug() << "// NEW CLIP PATH FOR CLIP " << clipId << " : " << newpath; + if (elem.attribute("type").toInt() == SlideShow) newpath.append('/' + extension); elem.setAttribute("resource", newpath); setNewClipResource(clipId, newpath); @@ -1207,9 +1213,11 @@ QString KdenliveDoc::searchFileRecursively(const QDir &dir, const QString &match fileHash = QCryptographicHash::hash(fileData, QCryptographicHash::Md5); if (QString(fileHash.toHex()) == matchHash) return file.fileName(); + else + kDebug() << filesAndDirs.at(i) << "size match but not hash"; } } - kDebug() << filesAndDirs.at(i) << file.size() << fileHash.toHex(); + //kDebug() << filesAndDirs.at(i) << file.size() << fileHash.toHex(); } filesAndDirs = dir.entryList(QDir::Dirs | QDir::Readable | QDir::Executable | QDir::NoDotAndDotDot); for (int i = 0; i < filesAndDirs.size() && foundFileName.isEmpty(); ++i) { @@ -1435,7 +1443,7 @@ QPoint KdenliveDoc::getTracksCount() const int audio = 0; int video = 0; foreach(const TrackInfo & info, m_tracksList) { - if (info.type == VIDEOTRACK) video++; + if (info.type == VideoTrack) video++; else audio++; } return QPoint(video, audio);