• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdelibs API Reference
  • KDE Home
  • Contact Us
 

Nepomuk-Core

  • sources
  • kde-4.12
  • kdelibs
  • nepomuk-core
  • services
  • storage
  • backup
backupgenerationjob.cpp
Go to the documentation of this file.
1 /*
2  This file is part of the Nepomuk KDE project.
3  Copyright (C) 2011 Vishesh Handa <handa.vish@gmail.com>
4 
5  This library is free software; you can redistribute it and/or
6  modify it under the terms of the GNU Lesser General Public
7  License as published by the Free Software Foundation; either
8  version 2.1 of the License, or (at your option) version 3, or any
9  later version accepted by the membership of KDE e.V. (or its
10  successor approved by the membership of KDE e.V.), which shall
11  act as a proxy defined in Section 6 of version 3 of the license.
12 
13  This library is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  Lesser General Public License for more details.
17 
18  You should have received a copy of the GNU Lesser General Public
19  License along with this library. If not, see <http://www.gnu.org/licenses/>.
20 */
21 
22 #include "backupgenerationjob.h"
23 #include "backupfile.h"
24 #include "simpleresource.h"
25 #include "resourcelistgenerator.h"
26 #include "statementgenerator.h"
27 #include "graphgenerator.h"
28 
29 #include <Soprano/PluginManager>
30 #include <Soprano/Serializer>
31 #include <Soprano/Util/SimpleStatementIterator>
32 
33 #include <QtCore/QTimer>
34 #include <QtCore/QSettings>
35 
36 #include <KTar>
37 #include <KTemporaryFile>
38 #include <KDebug>
39 #include <KTempDir>
40 
41 Nepomuk2::BackupGenerationJob::BackupGenerationJob(Soprano::Model *model, const QUrl& url, QObject* parent)
42  : KJob(parent)
43  , m_model(model)
44  , m_url( url )
45  , m_filter( Filter_None )
46 {
47 }
48 
49 void Nepomuk2::BackupGenerationJob::start()
50 {
51  QTimer::singleShot( 0, this, SLOT(doWork()) );
52 }
53 
54 void Nepomuk2::BackupGenerationJob::setFilter(Nepomuk2::BackupGenerationJob::Filter filter)
55 {
56  m_filter = filter;
57 }
58 
59 
60 void Nepomuk2::BackupGenerationJob::doWork()
61 {
62  KTemporaryFile uriListFile;
63  uriListFile.setAutoRemove( false );
64  uriListFile.open();
65 
66  Backup::ResourceListGenerator* uriListGen = new Backup::ResourceListGenerator( m_model, uriListFile.fileName(), this );
67  uriListGen->setProperty( "filename", uriListFile.fileName() );
68  if( m_filter == Filter_TagsAndRatings )
69  uriListGen->setFilter( Backup::ResourceListGenerator::Filter_FilesAndTags );
70 
71  connect( uriListGen, SIGNAL(finished(KJob*)), this, SLOT(slotResourceListFinished(KJob*)) );
72  connect( uriListGen, SIGNAL(percent(KJob*,ulong)), this, SLOT(slotResourceListProgress(KJob*,ulong)) );
73  uriListGen->start();
74 
75 }
76 
77 void Nepomuk2::BackupGenerationJob::slotResourceListProgress(KJob*, ulong progress)
78 {
79  // The ResourceListGeneration should take about 20% of the total time
80  float amt = progress * 0.20;
81  kDebug() << amt;
82  setPercent( amt );
83 }
84 
85 void Nepomuk2::BackupGenerationJob::slotResourceListFinished(KJob* job)
86 {
87  Backup::ResourceListGenerator* uriListGen = static_cast<Backup::ResourceListGenerator*>(job);
88 
89  if( uriListGen->error() ) {
90  setError(1);
91  setErrorText( uriListGen->errorString() );
92  emitResult();
93  return;
94  }
95 
96  const QString uriListFile = uriListGen->property( "filename" ).toString();
97 
98  KTemporaryFile stListFile;
99  stListFile.setAutoRemove( false );
100  stListFile.open();
101 
102  Backup::StatementGenerator* stGen = new Backup::StatementGenerator( m_model, uriListFile,
103  stListFile.fileName(), this );
104  stGen->setProperty( "filename", stListFile.fileName() );
105  stGen->setResourceCount( uriListGen->resourceCount() );
106  if( m_filter == Filter_TagsAndRatings )
107  stGen->setFilter( Backup::StatementGenerator::Filter_TagsAndRatings );
108 
109  connect( stGen, SIGNAL(finished(KJob*)), this, SLOT(slotStatementListGenerationFinished(KJob*)) );
110  connect( stGen, SIGNAL(percent(KJob*,ulong)), this, SLOT(slotStatementListGeneratorProgress(KJob*,ulong)) );
111  stGen->start();
112 }
113 
114 void Nepomuk2::BackupGenerationJob::slotStatementListGeneratorProgress(KJob*, ulong progress)
115 {
116  // The StatementGenerator should take about 40% of the time
117  float amt = 20 + (progress*0.40);
118  kDebug() << "FF" << amt;
119  setPercent( amt );
120 }
121 
122 void Nepomuk2::BackupGenerationJob::slotStatementListGenerationFinished(KJob* job)
123 {
124  Backup::StatementGenerator* stGen = static_cast<Backup::StatementGenerator*>(job);
125  if( stGen->error() ) {
126  setError(1);
127  setErrorText( stGen->errorString() );
128  emitResult();
129  return;
130  }
131 
132  KTemporaryFile dataFile;
133  dataFile.setAutoRemove( false );
134  dataFile.open();
135 
136  const QString stListFile = stGen->property( "filename" ).toString();
137  Backup::GraphGenerator* graphGen = new Backup::GraphGenerator( m_model, stListFile,
138  dataFile.fileName(), this );
139 
140  connect( graphGen, SIGNAL(finished(KJob*)), this, SLOT(slotGraphGenerationFinished(KJob*)) );
141  connect( graphGen, SIGNAL(percent(KJob*,ulong)), this, SLOT(slotGraphGeneratorProgress(KJob*,ulong)) );
142 
143  graphGen->setInputCount( stGen->statementCount() );
144  graphGen->setProperty( "filename", dataFile.fileName() );
145  graphGen->start();
146 }
147 
148 void Nepomuk2::BackupGenerationJob::slotGraphGeneratorProgress(KJob*, ulong progress)
149 {
150  float amt = 60 + (progress*0.40);
151  kDebug() << amt;
152  setPercent( amt );
153 }
154 
155 void Nepomuk2::BackupGenerationJob::slotGraphGenerationFinished(KJob* job)
156 {
157  Backup::GraphGenerator* graphGen = static_cast<Backup::GraphGenerator*>(job);
158  if( graphGen->error() ) {
159  setError(1);
160  setErrorText( graphGen->errorString() );
161  emitResult();
162  return;
163  }
164 
165  const QString dataFile = graphGen->property("filename").toString();
166 
167  // Metadata
168  KTemporaryFile tmpFile;
169  tmpFile.open();
170  tmpFile.setAutoRemove( false );
171  QString metdataFile = tmpFile.fileName();
172  tmpFile.close();
173 
174  QSettings iniFile( metdataFile, QSettings::IniFormat );
175  iniFile.setValue("NumStatements", graphGen->numStatements());
176  iniFile.setValue("Created", QDateTime::currentDateTime().toString() );
177  iniFile.sync();
178 
179  // Push to tar file
180  KTar tarFile( m_url.toLocalFile(), QString::fromLatin1("application/x-gzip") );
181  if( !tarFile.open( QIODevice::WriteOnly ) ) {
182  kWarning() << "File could not be opened : " << m_url.toLocalFile();
183  return;
184  }
185 
186  tarFile.addLocalFile( dataFile, "data" );
187  tarFile.addLocalFile( metdataFile, "metadata" );
188 
189  emitResult();
190 }
191 
backupfile.h
Nepomuk2::BackupGenerationJob::BackupGenerationJob
BackupGenerationJob(Soprano::Model *model, const QUrl &url, QObject *parent=0)
Definition: backupgenerationjob.cpp:41
resourcelistgenerator.h
Nepomuk2::Backup::ResourceListGenerator
This class generates a list of resource URIs that should be backed up.
Definition: resourcelistgenerator.h:39
QObject
Nepomuk2::Backup::StatementGenerator::Filter_TagsAndRatings
Definition: statementgenerator.h:47
Nepomuk2::BackupGenerationJob::Filter
Filter
Definition: backupgenerationjob.h:37
backupgenerationjob.h
graphgenerator.h
simpleresource.h
Nepomuk2::BackupGenerationJob::start
virtual void start()
Definition: backupgenerationjob.cpp:49
Nepomuk2::Backup::ResourceListGenerator::Filter_FilesAndTags
Definition: resourcelistgenerator.h:49
Nepomuk2::Backup::ResourceListGenerator::setFilter
void setFilter(Filter filter)
Definition: resourcelistgenerator.cpp:49
statementgenerator.h
Nepomuk2::Backup::ResourceListGenerator::start
virtual void start()
Definition: resourcelistgenerator.cpp:44
Nepomuk2::BackupGenerationJob::setFilter
void setFilter(Filter filter)
Definition: backupgenerationjob.cpp:54
KJob
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:48:08 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

Nepomuk-Core

Skip menu "Nepomuk-Core"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Modules
  • Related Pages

kdelibs API Reference

Skip menu "kdelibs API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  • kjsembed
  •   WTF
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Nepomuk-Core
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal