void Resource::ResourceFileModified() { QFileInfo newFileInfo(m_FullFilePath); const QDateTime lastModifiedDate = newFileInfo.lastModified(); qint64 latestWrittenTo = lastModifiedDate.isValid() ? lastModifiedDate.toMSecsSinceEpoch() : 0; qint64 latestWrittenSize = newFileInfo.size(); if (latestWrittenTo == m_LastSaved) { // The FileChangedOnDisk has triggered even though the data in the file has not changed. // This can happen if the FileWatcher is monitoring a file that Sigil has just performed // a disk operation with, such as Saving before a Merge. In this circumstance the data // loaded in memory by Sigil may be more up to date than that on disk (such as after the // merge but before user has chosen to Save) so we want to ignore the file change notification. return; } if ((latestWrittenTo != m_LastWrittenTo) || (latestWrittenSize != m_LastWrittenSize)) { // The file is still being written to. m_LastWrittenTo = latestWrittenTo; m_LastWrittenSize = latestWrittenSize; QTimer::singleShot(WAIT_FOR_WRITE_DELAY, this, SLOT(ResourceFileModified())); } else { if (LoadFromDisk()) { // will trigger marking the book as modified emit ResourceUpdatedFromDisk(this); } // will trigger updates in other resources that link to this resource emit ResourceUpdatedOnDisk(); } }
void TextResource::SaveToDisk(bool book_wide_save) { if (!m_IsLoaded) { return; } // We can't perform the document modified check // here because that causes problems with epub export // when the user has not changed the text file. // (some text files have placeholder text on disk) { QWriteLocker locker(&GetLock()); Utility::WriteUnicodeTextFile(GetText(), GetFullPath()); } if (!book_wide_save) { emit ResourceUpdatedOnDisk(); } m_TextDocument->setModified(false); Resource::SaveToDisk(book_wide_save); }
void AVTab::ConnectSignalsToSlots() { connect(&m_Resource, SIGNAL(ResourceUpdatedOnDisk()), this, SLOT(RefreshContent())); connect(&m_Resource, SIGNAL(Deleted(Resource)), this, SLOT(Close())); }