Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

frontend: Adjust missing files dialog #11892

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 5 additions & 8 deletions frontend/dialogs/OBSMissingFiles.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,17 +41,14 @@ OBSMissingFiles::OBSMissingFiles(obs_missing_files_t *files, QWidget *parent)
ui->setupUi(this);

ui->tableView->setModel(filesModel);
ui->tableView->setItemDelegateForColumn(MissingFilesColumn::OriginalPath,
new MissingFilesPathItemDelegate(false, ""));
ui->tableView->setItemDelegateForColumn(MissingFilesColumn::NewPath,
new MissingFilesPathItemDelegate(true, ""));
ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeMode::Stretch);
ui->tableView->horizontalHeader()->setSectionResizeMode(MissingFilesColumn::Source,
QHeaderView::ResizeMode::ResizeToContents);
ui->tableView->horizontalHeader()->setMaximumSectionSize(width() / 3);
ui->tableView->horizontalHeader()->setSectionResizeMode(MissingFilesColumn::State,
QHeaderView::ResizeMode::ResizeToContents);
ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeMode::ResizeToContents);
ui->tableView->horizontalHeader()->setMaximumSectionSize(width() / 4);
ui->tableView->horizontalHeader()->setSectionResizeMode(MissingFilesColumn::NewPath,
QHeaderView::ResizeMode::Stretch);
ui->tableView->setEditTriggers(QAbstractItemView::EditTrigger::CurrentChanged);
ui->tableView->setWordWrap(false);

ui->warningIcon->setPixmap(filesModel->warningIcon.pixmap(QSize(32, 32)));

Expand Down
10 changes: 8 additions & 2 deletions frontend/forms/OBSMissingFiles.ui
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,16 @@
<rect>
<x>0</x>
<y>0</y>
<width>666</width>
<height>310</height>
<width>700</width>
<height>320</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>700</width>
<height>320</height>
</size>
</property>
<property name="windowTitle">
<string>MissingFiles</string>
</property>
Expand Down
74 changes: 48 additions & 26 deletions frontend/utility/MissingFilesModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -162,11 +162,17 @@ Qt::ItemFlags MissingFilesModel::flags(const QModelIndex &index) const

void MissingFilesModel::fileCheckLoop(QList<MissingFileEntry> files, QString path, bool skipPrompt)
{
loop = false;
fileCheckLoop(files, path, skipPrompt, 0);
}

void MissingFilesModel::fileCheckLoop(QList<MissingFileEntry> files, QString path, bool skipPrompt, int depth)
{
fileLoopCounter += 1;
QUrl url = QUrl().fromLocalFile(path);
QString dir = url.toDisplayString(QUrl::RemoveScheme | QUrl::RemoveFilename | QUrl::PreferLocalFile);

bool prompted = skipPrompt;
int depthWithoutFile = depth + 1;

for (int i = 0; i < files.length(); i++) {
if (files[i].state != MissingFilesState::Missing)
Expand All @@ -177,6 +183,8 @@ void MissingFilesModel::fileCheckLoop(QList<MissingFileEntry> files, QString pat
QString testFile = dir + filename;

if (os_file_exists(testFile.toStdString().c_str())) {
depthWithoutFile = 0;

if (!prompted) {
QMessageBox::StandardButton button =
QMessageBox::question(nullptr, QTStr("MissingFiles.AutoSearch"),
Expand All @@ -191,7 +199,21 @@ void MissingFilesModel::fileCheckLoop(QList<MissingFileEntry> files, QString pat
setData(in, testFile, 0);
}
}
loop = true;

if (depthWithoutFile <= 2) {
os_dir_t *folder = os_opendir(dir.toStdString().c_str());
struct os_dirent *ent;
while ((ent = os_readdir(folder)) != NULL) {
if (!ent->directory || *ent->d_name == '.')
continue;

QString directoryPath = dir + QString(ent->d_name) + "/";
fileCheckLoop(files, directoryPath, true, depthWithoutFile);
}

os_closedir(folder);
}
fileLoopCounter -= 1;
}

bool MissingFilesModel::setData(const QModelIndex &index, const QVariant &value, int role)
Expand All @@ -214,32 +236,32 @@ bool MissingFilesModel::setData(const QModelIndex &index, const QVariant &value,
endInsertRows();

success = true;
} else {
QString path = value.toString();
if (index.column() == MissingFilesColumn::NewPath) {
files[index.row()].newPath = value.toString();
QString fileName = QUrl(path).fileName();
QString origFileName = QUrl(files[index.row()].originalPath).fileName();

if (path.isEmpty()) {
files[index.row()].state = MissingFilesState::Missing;
} else if (path.compare(QTStr("MissingFiles.Clear")) == 0) {
files[index.row()].state = MissingFilesState::Cleared;
} else if (fileName.compare(origFileName) == 0) {
files[index.row()].state = MissingFilesState::Found;

if (loop)
fileCheckLoop(files, path, false);
} else {
files[index.row()].state = MissingFilesState::Replaced;

if (loop)
fileCheckLoop(files, path, false);
}
} else if (index.column() == MissingFilesColumn::NewPath && files[index.row()].newPath != value.toString()) {

emit dataChanged(index, index);
success = true;
QString path = value.toString();
files[index.row()].newPath = value.toString();
QString fileName = QUrl(path).fileName();
QString origFileName = QUrl(files[index.row()].originalPath).fileName();

if (path.isEmpty()) {
files[index.row()].state = MissingFilesState::Missing;
} else if (path.compare(QTStr("MissingFiles.Clear")) == 0) {
files[index.row()].state = MissingFilesState::Cleared;
} else if (fileName.compare(origFileName) == 0) {
files[index.row()].state = MissingFilesState::Found;

if (fileLoopCounter == 0)
fileCheckLoop(files, path, false);
} else {
files[index.row()].state = MissingFilesState::Replaced;

if (fileLoopCounter == 0)
fileCheckLoop(files, path, false);
}

emit dataChanged(index, index);

success = true;
}

return success;
Expand Down
3 changes: 2 additions & 1 deletion frontend/utility/MissingFilesModel.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ class MissingFilesModel : public QAbstractTableModel {
Qt::ItemFlags flags(const QModelIndex &index) const;
bool setData(const QModelIndex &index, const QVariant &value, int role);

bool loop = true;
int fileLoopCounter = 0;

QIcon warningIcon;

Expand All @@ -57,4 +57,5 @@ class MissingFilesModel : public QAbstractTableModel {
QList<MissingFileEntry> files;

void fileCheckLoop(QList<MissingFileEntry> files, QString path, bool skipPrompt);
void fileCheckLoop(QList<MissingFileEntry> files, QString path, bool skipPrompt, int depth);
};
6 changes: 6 additions & 0 deletions frontend/utility/MissingFilesPathItemDelegate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,12 @@ void MissingFilesPathItemDelegate::paint(QPainter *painter, const QStyleOptionVi
QApplication::style()->drawControl(QStyle::CE_ItemViewItem, &localOption, painter);
}

void MissingFilesPathItemDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const
{
QStyledItemDelegate::initStyleOption(option, index);
option->textElideMode = Qt::ElideMiddle;
}

void MissingFilesPathItemDelegate::handleBrowse(QWidget *container)
{

Expand Down
3 changes: 3 additions & 0 deletions frontend/utility/MissingFilesPathItemDelegate.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ class MissingFilesPathItemDelegate : public QStyledItemDelegate {
virtual void paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const override;

protected:
void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const override;

private:
bool isOutput;
QString defaultPath;
Expand Down
Loading