Skip to content
Merged
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
35 changes: 17 additions & 18 deletions src/GUI_UIs/ui_manage_references.ui
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@
<widget class="QPushButton" name="pushButton_delete_ref">
<property name="geometry">
<rect>
<x>560</x>
<x>600</x>
<y>8</y>
<width>30</width>
<height>30</height>
Expand Down Expand Up @@ -133,22 +133,6 @@
<string/>
</property>
</widget>
<widget class="QPushButton" name="pushButton_delete_unused_refs">
<property name="geometry">
<rect>
<x>600</x>
<y>8</y>
<width>30</width>
<height>30</height>
</rect>
</property>
<property name="toolTip">
<string>Delete all references that are not assigned to files</string>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QPushButton" name="pushButton_edit_ref">
<property name="geometry">
<rect>
Expand Down Expand Up @@ -201,6 +185,22 @@ Review after applying the function.</string>
<string/>
</property>
</widget>
<widget class="QPushButton" name="pushButton_export">
<property name="geometry">
<rect>
<x>530</x>
<y>8</y>
<width>30</width>
<height>30</height>
</rect>
</property>
<property name="toolTip">
<string>Export references</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</widget>
</item>
</layout>
Expand All @@ -215,7 +215,6 @@ Review after applying the function.</string>
<tabstop>pushButton_edit_ref</tabstop>
<tabstop>pushButton_import</tabstop>
<tabstop>pushButton_delete_ref</tabstop>
<tabstop>pushButton_delete_unused_refs</tabstop>
</tabstops>
<resources/>
<connections/>
Expand Down
25 changes: 17 additions & 8 deletions src/qualcoder/GUI/ui_manage_references.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Form implementation generated from reading ui file 'C:\Users\salom\Downloads\r6\_ui_backup_20260826_012531\ui_manage_references.ui'
# Form implementation generated from reading ui file 'ui_manage_references.ui'
#
# Created by: PyQt6 UI code generator 6.10.2
#
Expand Down Expand Up @@ -44,7 +44,7 @@ def setupUi(self, Dialog_manage_references):
self.checkBox_hide_refs.setGeometry(QtCore.QRect(20, 40, 301, 23))
self.checkBox_hide_refs.setObjectName("checkBox_hide_refs")
self.pushButton_delete_ref = QtWidgets.QPushButton(parent=self.groupBox)
self.pushButton_delete_ref.setGeometry(QtCore.QRect(560, 8, 30, 30))
self.pushButton_delete_ref.setGeometry(QtCore.QRect(600, 8, 30, 30))
self.pushButton_delete_ref.setText("")
self.pushButton_delete_ref.setObjectName("pushButton_delete_ref")
self.pushButton_link = QtWidgets.QPushButton(parent=self.groupBox)
Expand All @@ -55,10 +55,6 @@ def setupUi(self, Dialog_manage_references):
self.pushButton_unlink_files.setGeometry(QtCore.QRect(410, 8, 30, 30))
self.pushButton_unlink_files.setText("")
self.pushButton_unlink_files.setObjectName("pushButton_unlink_files")
self.pushButton_delete_unused_refs = QtWidgets.QPushButton(parent=self.groupBox)
self.pushButton_delete_unused_refs.setGeometry(QtCore.QRect(600, 8, 30, 30))
self.pushButton_delete_unused_refs.setText("")
self.pushButton_delete_unused_refs.setObjectName("pushButton_delete_unused_refs")
self.pushButton_edit_ref = QtWidgets.QPushButton(parent=self.groupBox)
self.pushButton_edit_ref.setGeometry(QtCore.QRect(450, 8, 30, 30))
self.pushButton_edit_ref.setText("")
Expand All @@ -71,6 +67,10 @@ def setupUi(self, Dialog_manage_references):
self.pushButton_auto_link.setGeometry(QtCore.QRect(490, 8, 30, 30))
self.pushButton_auto_link.setText("")
self.pushButton_auto_link.setObjectName("pushButton_auto_link")
self.pushButton_export = QtWidgets.QPushButton(parent=self.groupBox)
self.pushButton_export.setGeometry(QtCore.QRect(530, 8, 30, 30))
self.pushButton_export.setText("")
self.pushButton_export.setObjectName("pushButton_export")
self.gridLayout.addWidget(self.groupBox, 4, 0, 1, 1)

self.retranslateUi(Dialog_manage_references)
Expand All @@ -83,7 +83,6 @@ def setupUi(self, Dialog_manage_references):
Dialog_manage_references.setTabOrder(self.pushButton_unlink_files, self.pushButton_edit_ref)
Dialog_manage_references.setTabOrder(self.pushButton_edit_ref, self.pushButton_import)
Dialog_manage_references.setTabOrder(self.pushButton_import, self.pushButton_delete_ref)
Dialog_manage_references.setTabOrder(self.pushButton_delete_ref, self.pushButton_delete_unused_refs)

def retranslateUi(self, Dialog_manage_references):
_translate = QtCore.QCoreApplication.translate
Expand All @@ -94,11 +93,21 @@ def retranslateUi(self, Dialog_manage_references):
self.pushButton_delete_ref.setToolTip(_translate("Dialog_manage_references", "Delete selected reference"))
self.pushButton_link.setToolTip(_translate("Dialog_manage_references", "Link selected files to selected reference"))
self.pushButton_unlink_files.setToolTip(_translate("Dialog_manage_references", "Unlink selected files from references"))
self.pushButton_delete_unused_refs.setToolTip(_translate("Dialog_manage_references", "Delete all references that are not assigned to files"))
self.pushButton_edit_ref.setToolTip(_translate("Dialog_manage_references", "Edit reference"))
self.pushButton_import.setToolTip(_translate("Dialog_manage_references", "Import references. RIS or NBIB (PubMed) format."))
self.pushButton_auto_link.setToolTip(_translate("Dialog_manage_references", "Automatically link references to unassigned file names.\n"
"Word matching uses words from reference title.\n"
"Strong matches with 70% or more matching words are linked.\n"
"Linking may be incorrect.\n"
"Review after applying the function."))
self.pushButton_export.setToolTip(_translate("Dialog_manage_references", "Export references"))


if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Dialog_manage_references = QtWidgets.QDialog()
ui = Ui_Dialog_manage_references()
ui.setupUi(Dialog_manage_references)
Dialog_manage_references.show()
sys.exit(app.exec())
42 changes: 35 additions & 7 deletions src/qualcoder/manage_references.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,12 @@

import datetime
import os
from pathlib import Path
from rispy import TAG_KEY_MAPPING
import logging
from operator import itemgetter
from PyQt6 import QtWidgets, QtCore, QtGui
import qtawesome as qta
import qtawesome as qta # see: https://pictogrammers.com/library/mdi/
import re
from shutil import copyfile
import webbrowser
Expand All @@ -36,7 +37,7 @@
from .GUI.ui_manage_references import Ui_Dialog_manage_references
from .confirm_delete import DialogConfirmDelete
from .information import DialogInformation
from .helpers import Message, extract_epub_fulltext
from .helpers import Message, extract_epub_fulltext, ExportDirectoryPathDialog
from .pdf_preview import DialogPdfPreview
from .manage_references_import import ATTACHMENT_EXTENSIONS, existing_reference_signatures, \
reference_signature
Expand Down Expand Up @@ -113,12 +114,10 @@ def __init__(self, app_, parent_text_edit):
self.ui.pushButton_edit_ref.pressed.connect(self.edit_reference)
self.ui.pushButton_delete_ref.setIcon(qta.icon('mdi6.delete-outline', options=[{'scale_factor': 1.4}]))
self.ui.pushButton_delete_ref.pressed.connect(self.delete_reference)
self.ui.pushButton_delete_unused_refs.setIcon(
qta.icon('mdi6.file-document-remove-outline', options=[{'scale_factor': 1.4}]))
self.ui.pushButton_delete_unused_refs.setEnabled(False)
self.ui.pushButton_delete_unused_refs.hide()
self.ui.pushButton_auto_link.setIcon(qta.icon('mdi6.magic-staff', options=[{'scale_factor': 1.4}]))
self.ui.pushButton_auto_link.pressed.connect(self.auto_link_files_to_references)
self.ui.pushButton_export.setIcon(qta.icon('mdi6.export', options=[{'scale_factor': 1.4}]))
self.ui.pushButton_export.pressed.connect(self.export_references)

self.get_data()
self.ui.tableWidget_refs.setTabKeyNavigation(False)
Expand Down Expand Up @@ -753,14 +752,43 @@ def add_fields(self):
return
cur = self.app.conn.cursor()
for s in selection:
print(s)
short_tag, long_tag = s['name'].split(": ")
cur.execute("insert into ris (risid,tag,longtag, value) values(?,?,?,'')", [int(ris_id), short_tag, long_tag])
self.app.conn.commit()
self.get_data()
self.app.delete_backup = False
self._emit_project_table_changes(['attribute_type'])

def export_references(self):
""" Export references to .ris file. """

exp_directory = ExportDirectoryPathDialog(self.app, "QC_references.ris")
filepath = exp_directory.filepath
if filepath is None:
return
lines = []
cur = self.app.conn.cursor()
cur.execute("select distinct risid from ris order by risid asc")
ris_ids = cur.fetchall()
for ris_id in ris_ids:
# First RIS key value is TY
cur.execute("SELECT value from ris where tag='TY' and risid=?", [ris_id[0]])
ty = cur.fetchone()
if ty:
lines.append(f"TY - {ty[0]}")
else:
lines.append("TY - JOUR") # JOUR a default value
cur.execute("SELECT tag,value from ris where tag != 'TY' and risid=?", [ris_id[0]])
res = cur.fetchall()
for r in res:
lines.append(f"{r[0]} - {r[1]}")
lines.append("ER - ") # End record
with open(filepath, 'w', encoding='utf-8') as f:
for line in lines:
print(line, file=f)
self.parent_text_edit.append(_("References exported: ") + filepath)
Message(self.app, _("References exported"), filepath).exec()

def import_references(self):
"""
Asks for the source (file or Zotero) and launches the matching importer. File imports
Expand Down
Loading