Logo Search packages:      
Sourcecode: kdenlive version File versions  Download package

projectformatmanager.cpp

/***************************************************************************
                          projectformatmanager  -  description
                             -------------------
    begin                : Wed Dec 3 2003
    copyright            : (C) 2003 by Jason Wood
    email                : jasonwood@blueyonder.co.uk
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program 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 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/
#include "projectformatmanager.h"

#include <qfile.h>

#include <kdebug.h>
#include <kio/job.h>
#include <kio/netaccess.h>
#include <kmimetype.h>
#include <ktempfile.h>
#include <kurl.h>
#include <klocale.h>
#include <kmessagebox.h>

#include "kdenlivedoc.h"

#include "loadprojectkinofilter.h"
#include "loadprojectnativefilter.h"
#include "saveprojectnativefilter.h"
#include "saveprojectscenelistfilter.h"

ProjectFormatManager::ProjectFormatManager()
{
    m_saveFilters.setAutoDelete(true);
    m_loadFilters.setAutoDelete(true);

    registerLoadFilter(new LoadProjectNativeFilter());
    registerLoadFilter(new LoadProjectKinoFilter());

    registerSaveFilter(new SaveProjectNativeFilter());
    registerSaveFilter(new SaveProjectScenelistFilter());
}


ProjectFormatManager::~ProjectFormatManager()
{
}

00054 bool ProjectFormatManager::mergeDocument(const KURL & url,
    KdenliveDoc * document)
{
    if (url.isEmpty())
      return false;

    KMimeType::Ptr format = KMimeType::findByURL(url);

    LoadProjectFilter *filter = findLoadFormat(format->name());
    if (filter) {
      QString tmpfile;
      if (KIO::NetAccess::download(url, tmpfile, 0)) {
          QFile file(tmpfile);
          if (file.open(IO_ReadOnly)) {
            filter->merge(file, document);
          }
          KIO::NetAccess::removeTempFile(tmpfile);
          //document->initSceneListGeneration();
          QTimer::singleShot(200, document, SLOT(initSceneListGeneration()));
          return true;
      }
    }

    return false;
}

00080 bool ProjectFormatManager::openDocument(const KURL & url,
    KdenliveDoc * document)
{
    if (url.isEmpty())
      return false;

    KMimeType::Ptr format = KMimeType::findByURL(url);

    LoadProjectFilter *filter = findLoadFormat(format->name());
    // if(url.filename().right(9) == ".kdenlive")
    if (filter) {
      QString tmpfile;
      if (KIO::NetAccess::download(url, tmpfile, 0)) {
          QFile file(tmpfile);
          if (file.open(IO_ReadOnly)) {
                document->closeDocument();
            filter->load(file, document);
            document->setURL(url);
          }
          KIO::NetAccess::removeTempFile(tmpfile);
          //document->initSceneListGeneration();
          QTimer::singleShot(500, document, SLOT(initSceneListGeneration()));
          return true;
      }
//      } else {
//              document->clipManager().insertClip(url);
    }

    return false;
}

00111 bool ProjectFormatManager::saveDocument(const KURL & url,
    KdenliveDoc * document)
{
    if (url.isEmpty())
      return false;
    bool result = false;
    KMimeType::Ptr format = KMimeType::findByURL(url);
    SaveProjectFilter *filter = findSaveFormat(format->name());

    if (filter) {
      KTempFile file;
      //file.setAutoDelete(true);

      if ((filter->save(*file.file(), document))) {
          file.close();
          if (!KIO::NetAccess::upload(file.name(), url, 0)) {
            //kdError() << "Could not upload file to correct location" << endl;
            KMessageBox::sorry(0, i18n("Could not save file %1.\nPlease check your permissions").arg(url.path()));
          }
          else result = true;
      } else {
          KMessageBox::sorry(0, i18n("Could not save file %1.\nPlease check your permissions").arg(file.name()));
          //kdError() << "Save failed" << endl;
      }
    }

    if (result) document->setModified(false);
    return result;
}

00141 bool ProjectFormatManager::backupDocument(const KURL & url,
    KdenliveDoc * document)
{
    if (url.isEmpty())
      return false;
    bool result = false;
    KMimeType::Ptr format = KMimeType::findByURL(url);
    SaveProjectFilter *filter = m_saveFilters.first();

    if (filter) {
      KTempFile file;
      //file.setAutoDelete(true);

      if ((filter->save(*file.file(), document, false))) {
          file.close();
          if (!KIO::NetAccess::upload(file.name(), url, 0)) {
            //kdError() << "Could not upload file to correct location" << endl;
            KMessageBox::sorry(0, i18n("Could not save file %1.\nPlease check your permissions").arg(url.path()));
          }
          else result = true;
      } else {
          kdError() << "Save failed" << endl;
      }
    }
    return result;
}

00168 void ProjectFormatManager::registerSaveFilter(SaveProjectFilter * filter)
{
    m_saveFilters.append(filter);
}

00173 void ProjectFormatManager::registerLoadFilter(LoadProjectFilter * filter)
{
    m_loadFilters.append(filter);
}

LoadProjectFilter *ProjectFormatManager::
00179 findLoadFormat(const QString & format)
{
    QPtrListIterator < LoadProjectFilter > itt(m_loadFilters);
    while (itt.current()) {
      if (itt.current()->handlesFormat(format)) {
          return itt.current();
      }
      ++itt;
    }

    return m_loadFilters.first();
}

SaveProjectFilter *ProjectFormatManager::
00193 findSaveFormat(const QString & format)
{
    QPtrListIterator < SaveProjectFilter > itt(m_saveFilters);

    while (itt.current()) {
      if (itt.current()->handlesFormat(format)) {
          return itt.current();
      }
      ++itt;
    }

    return m_saveFilters.first();
}

/** Returns the mime types that can be loaded in */
00208 QString ProjectFormatManager::loadMimeTypes()
{
    QPtrListIterator < LoadProjectFilter > itt(m_loadFilters);

    QStringList list;

    while (itt.current()) {
      QStringList extraList = itt.current()->handledFormats();

      for (QStringList::Iterator extraItt = extraList.begin();
          extraItt != extraList.end(); ++extraItt) {
          list.append(*extraItt);
      }

      ++itt;
    }

    return list.join(" ");
}

/** Returns the mime types that can be saved out */
00229 QString ProjectFormatManager::saveMimeTypes()
{
    QPtrListIterator < SaveProjectFilter > itt(m_saveFilters);

    QStringList list;

    while (itt.current()) {
      QStringList extraList = itt.current()->handledFormats();

      for (QStringList::Iterator extraItt = extraList.begin();
          extraItt != extraList.end(); ++extraItt) {
          list.append(*extraItt);
      }

      ++itt;
    }

    return list.join(" ");
}

Generated by  Doxygen 1.6.0   Back to index