Skip to content

Commit

Permalink
added support for looking for subtitles in both main and backup langu…
Browse files Browse the repository at this point in the history
…ages #45
  • Loading branch information
krzemin committed Dec 27, 2015
1 parent 3962e41 commit 786a820
Show file tree
Hide file tree
Showing 20 changed files with 289 additions and 168 deletions.
4 changes: 4 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
[submodule "deps/libmaia"]
path = deps/libmaia
url = https://github.com/wiedi/libmaia.git
[submodule "deps/qt-maybe"]
path = deps/qt-maybe
url = https://github.com/QNapi/qt-maybe.git
branch = compilation_fixes
1 change: 1 addition & 0 deletions deps/qt-maybe
Submodule qt-maybe added at ff34f5
1 change: 1 addition & 0 deletions qnapi.pro
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ OBJECTS_DIR = tmp
INCLUDEPATH = src

include(deps/libmaia/maia.pri)
include(deps/qt-maybe/qt-maybe.pri)

unix {
CONFIG += link_pkgconfig
Expand Down
51 changes: 42 additions & 9 deletions src/engines/qnapiabstractengine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
#include "subconvert/subtitleformatsregistry.h"

#include <QFlags>
#include <QDebug>


// ustawia sciezke do pliku filmowego
void QNapiAbstractEngine::setMoviePath(const QString & path)
Expand All @@ -31,17 +31,16 @@ QString QNapiAbstractEngine::moviePath()
return movie;
}

// ustawia sciezke do pliku z napisami
void QNapiAbstractEngine::setSubtitlesPath(const QString & path)
void QNapiAbstractEngine::clearSubtitlesList()
{
subtitles = path;
foreach(QNapiSubtitleInfo s, subtitlesList)
{
if(QFile::exists(s.sourceLocation))
QFile::remove(s.sourceLocation);
}
subtitlesList.clear();
}

// zwraca sciezke do pliku z napisami
QString QNapiAbstractEngine::subtitlesPath()
{
return subtitles;
}

// dopasowuje napisy do pliku z filmem
bool QNapiAbstractEngine::match()
Expand Down Expand Up @@ -321,6 +320,31 @@ bool QNapiAbstractEngine::changeSubtitlesPermissions(QFile::Permissions permissi
}
#endif


Maybe<QNapiSubtitleInfo> QNapiAbstractEngine::resolveById(QUuid id)
{
foreach(QNapiSubtitleInfo s, subtitlesList)
{
if(s.id == id)
return just(s);
}
return nothing();
}

void QNapiAbstractEngine::updateSubtitleInfo(const QNapiSubtitleInfo & si)
{
for(int i = 0; i < subtitlesList.size(); ++i)
{
if(subtitlesList[i].id == si.id)
{
subtitlesList[i] = si;
break;
}
}

}


// generuje nazwe dla pliku tymczasowego
QString QNapiAbstractEngine::generateTmpFileName()
{
Expand All @@ -332,3 +356,12 @@ QString QNapiAbstractEngine::generateTmpFileName()
}
return QString("QNapi.%1.tmp").arg(qrand());
}

QString QNapiAbstractEngine::generateTmpPath()
{
QString newTmpFilePath = QString("%1/%2")
.arg(tmpPath)
.arg(generateTmpFileName());
return QDir::toNativeSeparators(newTmpFilePath);
}

33 changes: 21 additions & 12 deletions src/engines/qnapiabstractengine.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,25 +25,24 @@

#include <ctime>

#include <Maybe.h>

#include "qnapiconfig.h"
#include "qnapisubtitleinfo.h"
#include "encodingutils.h"


class QNapiAbstractEngine
{
public:

// destruktor
virtual ~QNapiAbstractEngine() {};
virtual ~QNapiAbstractEngine() {}

// ustawia sciezke do pliku filmowego
void setMoviePath(const QString & path);
// zwraca sciezke do pliku filmowego
QString moviePath();
// ustawia sciezke do pliku z napisami
void setSubtitlesPath(const QString & path);
// zwraca sciezke do pliku z napisami
QString subtitlesPath();

// dopasowuje napisy do pliku z filmem
bool match();
Expand Down Expand Up @@ -77,26 +76,31 @@ class QNapiAbstractEngine
// wywoluje okienko konfiguracji
virtual void configure(QWidget * parent) = 0;

// czysci wewnetrzne listy znalezionych napisow w silniku
virtual void clearSubtitlesList();
// powinna obliczac i zwracac sume kontrolna pliku filmowego,
// a takze ustawiac wartosc zmiennej checkSym
// a takze ustawiac wartosc zmiennej checksum
virtual QString checksum(QString filename = "") = 0;
// szuka napisow w podanym jezyku
virtual bool lookForSubtitles(QString lang) = 0;
// zwraca liste dostepnych napisow
virtual QList<QNapiSubtitleInfo> listSubtitles() = 0;
// powinna pobierac napisy do filmu i zapisywac w jakims pliku tymczasowym
virtual bool download(int idx) = 0;
virtual bool download(QUuid id) = 0;
// powinna rozpakowywac pobrane napisy, a ich sciezke zapisywac w polu
// subtitlesTmpPath
virtual bool unpack() = 0;
virtual bool unpack(QUuid id) = 0;
// powinna czyscic pliki tymczasowe itd.
virtual void cleanup() = 0;


protected:

QList<QNapiSubtitleInfo> subtitlesList;

// sciezka do pliku filmowego
QString movie;
// sciezka do napisow (zazwyczaj taka sama jak do napisow z innym rozszerzeniem)
// sciezka do napisow (zazwyczaj taka sama jak do napisow, tylko z innym rozszerzeniem)
QString subtitles;
// sciezka do tymczasowego pliku z napisami
QString subtitlesTmp;
Expand All @@ -109,15 +113,20 @@ class QNapiAbstractEngine
bool noBackup;

// konstruktor klasy
QNapiAbstractEngine(const QString & movieFile = "", const QString & subtitlesFile = "")
: movie(movieFile), subtitles(subtitlesFile)
QNapiAbstractEngine()
{
tmpPath = GlobalConfig().tmpPath();
noBackup = GlobalConfig().noBackup();
};
}

Maybe<QNapiSubtitleInfo> resolveById(QUuid id);
void updateSubtitleInfo(const QNapiSubtitleInfo & si);


// generuje nazwe dla pliku tymczasowego
QString generateTmpFileName();
// generuje sciezke dla pliku tymczasowego w katalogu tymczasowym
QString generateTmpPath();

private:
EncodingUtils encodingUtils;
Expand Down
46 changes: 25 additions & 21 deletions src/engines/qnapiprojektengine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,12 @@
#endif

// konstruktor klasy
QNapiProjektEngine::QNapiProjektEngine(const QString & movieFile, const QString & subtitlesFile)
: QNapiAbstractEngine(movieFile, subtitlesFile)
QNapiProjektEngine::QNapiProjektEngine()
{
p7zipPath = GlobalConfig().p7zipPath();
nick = GlobalConfig().nick(engineName());
pass = GlobalConfig().pass(engineName());
noBackup = GlobalConfig().noBackup();
tmpPackedFile = QString("%1/%2").arg(tmpPath).arg(generateTmpFileName());
}

// destruktor klasy
Expand All @@ -57,7 +55,7 @@ QString QNapiProjektEngine::engineName()
// zwraca informacje nt. modulu
QString QNapiProjektEngine::engineInfo()
{
return "Modul pobierania napisów z bazy <b>www.napiprojekt.pl</b>";
return "Moduł pobierania napisów z bazy <b>www.napiprojekt.pl</b>";
}

// zwraca ikone w formacie XMP
Expand Down Expand Up @@ -115,8 +113,6 @@ bool QNapiProjektEngine::lookForSubtitles(QString lang)
{
if(checkSum.isEmpty()) return false;

subtitlesList.clear();

SyncHTTP http;
QString urlTxt = napiDownloadUrlTpl.arg(npLangWrapper(lang))
.arg(checkSum)
Expand All @@ -143,6 +139,8 @@ bool QNapiProjektEngine::lookForSubtitles(QString lang)
if(buffer.indexOf("NPc") == 0)
return false;

QString tmpPackedFile = generateTmpPath();

QFile file(tmpPackedFile);
if(file.exists()) file.remove();
if(!file.open(QIODevice::WriteOnly))
Expand All @@ -155,13 +153,13 @@ bool QNapiProjektEngine::lookForSubtitles(QString lang)

subtitlesList << QNapiSubtitleInfo( lang,
engineName(),
urlTxt,
tmpPackedFile,
QFileInfo(movie).completeBaseName(),
"",
"txt",
SUBTITLE_UNKNOWN);

return (subtitlesList.size() > 0);
return true;
}

QList<QNapiSubtitleInfo> QNapiProjektEngine::listSubtitles()
Expand All @@ -170,25 +168,27 @@ QList<QNapiSubtitleInfo> QNapiProjektEngine::listSubtitles()
}

// Probuje pobrac napisy do filmu z serwera NAPI
bool QNapiProjektEngine::download(int idx)
bool QNapiProjektEngine::download(QUuid id)
{
Q_UNUSED(idx)
return (subtitlesList.size() > 0);
Maybe<QNapiSubtitleInfo> ms = resolveById(id);

return ms && QFile::exists(ms.value().sourceLocation);
}

// Probuje rozpakowac napisy do filmu
bool QNapiProjektEngine::unpack()
bool QNapiProjektEngine::unpack(QUuid id)
{
if(!QFile::exists(tmpPackedFile)) return false;
Maybe<QNapiSubtitleInfo> ms = resolveById(id);
if(!ms) return false;

if(!QFile::exists(movie)) return false;
subtitlesTmp = tmpPath + "/" + checkSum + ".txt";

if(QFile::exists(subtitlesTmp))
QFile::remove(subtitlesTmp);

QStringList args;
args << "e" << "-y" << ("-p" + napiZipPassword) << ("-o" + tmpPath) << tmpPackedFile;
args << "e" << "-y" << ("-p" + napiZipPassword) << ("-o" + tmpPath) << ms.value().sourceLocation;

QProcess p7zip;
p7zip.start(p7zipPath, args);
Expand All @@ -201,8 +201,7 @@ bool QNapiProjektEngine::unpack()

void QNapiProjektEngine::cleanup()
{
if(QFile::exists(tmpPackedFile))
QFile::remove(tmpPackedFile);
clearSubtitlesList();
if(QFile::exists(subtitlesTmp))
QFile::remove(subtitlesTmp);
}
Expand All @@ -225,8 +224,11 @@ bool QNapiProjektEngine::checkUser(const QString & nick, const QString & pass)

// Wrzuca napisy do bazy NAPI
QNapiProjektEngine::UploadResult
QNapiProjektEngine::uploadSubtitles(const QString & language, const QString & nick,
const QString & pass, bool correct, const QString & comment)
QNapiProjektEngine::uploadSubtitles(const QString & movie,
const QString & subtitles,
const QString & language,
bool correct,
const QString & comment)
{
if(!QFile::exists(movie) || !QFile::exists(subtitles))
return NAPI_FAIL;
Expand Down Expand Up @@ -363,8 +365,10 @@ QNapiProjektEngine::UploadResult

// Wysyla blad o niepasujacyh napisach
QNapiProjektEngine::ReportResult
QNapiProjektEngine::reportBad(const QString & language, const QString & nick, const QString & pass,
const QString & comment, QString *response)
QNapiProjektEngine::reportBad(const QString & movie,
const QString & language,
const QString & comment,
QString *response)
{
QFileInfo fi(movie);
subtitles = fi.path() + "/" + fi.completeBaseName() + ".txt";
Expand Down
26 changes: 15 additions & 11 deletions src/engines/qnapiprojektengine.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ class QNapiProjektEngine : public QNapiAbstractEngine
NAPI_REPORTED, NAPI_NO_SUBTITLES, NAPI_NOT_REPORTED
};

QNapiProjektEngine(const QString & movieFile = "", const QString & subtitlesFile = "");
QNapiProjektEngine();
~QNapiProjektEngine();

// zwraca nazwe modulu
Expand All @@ -68,11 +68,12 @@ class QNapiProjektEngine : public QNapiAbstractEngine
// wywoluje okienko konfiguracji
void configure(QWidget * parent);


QString checksum(QString filename = "");
bool lookForSubtitles(QString lang);
QList<QNapiSubtitleInfo> listSubtitles();
bool download(int idx);
bool unpack();
bool download(QUuid id);
bool unpack(QUuid id);
void cleanup();

QString name()
Expand All @@ -81,17 +82,20 @@ class QNapiProjektEngine : public QNapiAbstractEngine
}

static bool checkUser(const QString & nick, const QString & pass);
UploadResult uploadSubtitles(const QString & language, const QString & nick,
const QString & pass, bool correct = false,
const QString & comment = "");
ReportResult reportBad(const QString & language, const QString & nick, const QString & pass,
const QString & comment, QString *response);
UploadResult uploadSubtitles(const QString & movie,
const QString & subtitles,
const QString & language,
bool correct = false,
const QString & comment = "");

private:
ReportResult reportBad(const QString & movie,
const QString & language,
const QString & comment,
QString *response);

QString p7zipPath, nick, pass, tmpPackedFile;
private:

QList<QNapiSubtitleInfo> subtitlesList;
QString p7zipPath, nick, pass;

QString checksum(QString filename, bool limit10M);
QString npFDigest(const QString & input);
Expand Down
Loading

0 comments on commit 786a820

Please sign in to comment.