FileLocation::FileLocation()
{
+ locationId = 0;
fid = 0;
hostId = 0;
failedRename = false;
bool Database::addFileLocation(const FileLocation &fileLocation)
{
- QSqlQuery &q = prepare("INSERT INTO file_location VALUES(:fid, :hostId, :path, DEFAULT, DEFAULT)");
+ QSqlQuery &q = prepare("INSERT INTO file_location VALUES(DEFAULT, :fid, :hostId, :path, DEFAULT, DEFAULT)");
q.bindValue(":fid", fileLocation.fid);
q.bindValue(":hostId", fileLocation.hostId);
q.bindValue(":path", fileLocation.path);
bool Database::setFileLocation(const FileLocation &fileLocation)
{
QSqlQuery &q = prepare(
- "UPDATE file_location SET host_id = :hostId, path = :path, renamed = :renamed, "
+ "UPDATE file_location SET fid = :fid, host_id = :hostId, path = :path, renamed = :renamed, "
" failed_rename = :failedRename "
- " WHERE fid = :fid");
+ " WHERE location_id = :locationId");
+ q.bindValue(":locationId", fileLocation.locationId);
q.bindValue(":fid", fileLocation.fid);
q.bindValue(":hostId", fileLocation.hostId);
q.bindValue(":path", fileLocation.path);
q.bindValue(":failedRename", fileLocation.failedRename);
return exec(q);
+ if (!exec(q))
+ return false;
+
+ if (q.numRowsAffected())
+ return true;
+
+ {
+ QSqlQuery &q = prepare(
+ "UPDATE file_location SET failed_rename = true "
+ " WHERE location_id = :locationId");
+ q.bindValue(":locationId", fileLocation.locationId);
+ return exec(q);
+ }
}
Anime Database::getAnime(int aid)
struct LOCALMYLISTSHARED_EXPORT FileLocation
{
+ int locationId;
int fid;
int hostId;
QString path;
QFileInfo oldFile(r.value("path").toString());
FileLocation fl;
+ fl.locationId = r.value("location_id").toInt();
fl.fid = q.value(0).toInt();
fl.hostId = MyList::instance()->hostId();
fl.path = r.value("path").toString();
// --------------------------------------------------------------------------------
+int FileLocation::read_locationId() const
+{
+ auto o = thisObj();
+ if (!o) return int();
+ return o->locationId;
+}
+
+void FileLocation::write_locationId(int val)
+{
+ auto o = thisObj();
+ if (!o) return;
+ o->locationId = val;
+}
+
int FileLocation::read_fid() const
{
auto o = thisObj();
class LOCALMYLISTSHARED_EXPORT FileLocation : public QObject, protected QScriptable
{
Q_OBJECT
+ Q_PROPERTY(int locationId READ read_locationId WRITE write_locationId)
Q_PROPERTY(int fid READ read_fid WRITE write_fid)
Q_PROPERTY(int hostId READ read_hostId WRITE write_hostId)
Q_PROPERTY(QString path READ read_path WRITE write_path)
QString toString() const;
public:
+ int read_locationId() const;
+ void write_locationId(int val);
+
int read_fid() const;
void write_fid(int val);
CREATE INDEX file_episode_rel_fid_fk ON file_episode_rel USING btree (fid);
CREATE TABLE file_location (
+ location_id serial NOT NULL,
fid integer NOT NULL,
host_id integer,
path text,
renamed timestamp without time zone,
failed_rename boolean NOT NULL DEFAULT false,
- CONSTRAINT file_location_pk PRIMARY KEY (fid, host_id, path )
+ CONSTRAINT file_location_pk PRIMARY KEY (location_id ),
+ CONSTRAINT file_location_unique_location UNIQUE (fid, host_id, path )
);
CREATE TABLE unknown_file (
e.title_kanji AS episode_title_kanji, e.length AS episode_length, e.airdate, e.state, e.type, e.recap, e.rating, e.votes, e.my_vote, e.my_vote_date,
f.anidb_update, f.entry_update, f.my_update, f.ed2k, f.size, f.length, f.extension, f.group_name, f.group_name_short, f.crc, f.release_date, f.version, f.censored, f.source, f.quality_id,
f.quality, f.resolution, f.video_codec, f.audio_codec, f.audio_language, f.subtitle_language, f.aspect_ratio, f.my_watched, f.my_state, f.my_file_state, f.my_storage, f.my_source,
- f.my_other, fl.host_id, fl.path, fl.renamed, fl.failed_rename
+ f.my_other, fl.location_id, fl.host_id, fl.path, fl.renamed, fl.failed_rename
FROM file f
JOIN anime a ON a.aid = f.aid
JOIN episode e ON e.eid = f.eid