diff --git a/gui/irodsTicketLogin.py b/gui/irodsTicketLogin.py index 29233f866ef3505eab600baccef98c06f2e1f838..3e1f1a35186522654ad5c70913f7487652bfb863 100644 --- a/gui/irodsTicketLogin.py +++ b/gui/irodsTicketLogin.py @@ -1,6 +1,9 @@ from PyQt5 import QtWidgets +from PyQt5.QtWidgets import QMainWindow, QHeaderView, QMessageBox +from PyQt5 import QtCore from PyQt5.uic import loadUi from utils.irodsConnectorAnonymous import irodsConnectorAnonymous +from gui.checkableFsTree import checkableFsTreeModel import os class irodsTicketLogin(): @@ -8,10 +11,26 @@ class irodsTicketLogin(): self.ic = None self.coll = None self.widget = widget + + # QTreeViews + self.dirmodel = checkableFsTreeModel(self.widget.localFsTreeView) + self.widget.localFsTreeView.setModel(self.dirmodel) + # Hide all columns except the Name + self.widget.localFsTreeView.setColumnHidden(1, True) + self.widget.localFsTreeView.setColumnHidden(2, True) + self.widget.localFsTreeView.setColumnHidden(3, True) + self.widget.localFsTreeView.header().setSectionResizeMode(QHeaderView.ResizeToContents) + home_location = QtCore.QStandardPaths.standardLocations( + QtCore.QStandardPaths.HomeLocation)[0] + index = self.dirmodel.setRootPath(home_location) + self.widget.localFsTreeView.setCurrentIndex(index) + self.dirmodel.initial_expand() + self.widget.connectButton.clicked.connect(self.irodsSession) self.widget.homeButton.clicked.connect(self.loadTable) self.widget.collTable.doubleClicked.connect(self.browse) - + self.widget.collTable.clicked.connect(self.fillInfo) + def irodsSession(self): self.widget.infoLabel.clear() @@ -70,3 +89,76 @@ class irodsTicketLogin(): if self.ic.session.collections.exists(path+'/'+item): coll = self.ic.session.collections.get(path+'/'+item) self.loadTable(update = coll) + + + def fillInfo(self, index): + self.widget.previewBrowser.clear() + self.widget.metadataTable.setRowCount(0) + row = index.row() + value = self.widget.collTable.item(row, 1).text() + path = self.widget.collTable.item(row, 0).text() + try: + self.__fillPreview(value, path) + self.__fillMetadata(value, path) + except Exception as e: + self.widget.infoLabel.setText(repr(e)) + raise + + + def __fillPreview(self, value, path): + newPath = "/"+path.strip("/")+"/"+value.strip("/") + if self.ic.session.collections.exists(newPath): # collection + coll = self.ic.session.collections.get(newPath) + content = ['Collections:', '-----------------'] +\ + [c.name+'/' for c in coll.subcollections] + \ + ['\n', 'Data:', '-----------------']+\ + [o.name for o in coll.data_objects] + previewString = '\n'.join(content) + self.widget.previewBrowser.append(previewString) + else: # object + subcoll = self.ic.session.collections.get(path) + obj = [o for o in subcoll.data_objects if o.name == value][0] + # get mimetype + mimetype = value.split(".")[len(value.split("."))-1] + if mimetype in ['txt', 'json', 'csv']: + try: + out = [] + with obj.open('r') as readObj: + for i in range(20): + out.append(readObj.read(50)) + previewString = ''.join([line.decode('utf-8') for line in out]) + self.widget.previewBrowser.append(previewString) + except Exception as e: + self.widget.previewBrowser.append(obj.path) + self.widget.previewBrowser.append(repr(e)) + self.widget.previewBrowser.append("Storage resource might be down.") + else: + self.widget.previewBrowser.append("No preview for "+obj.path) + + + def __fillMetadata(self, value, path): + newPath = "/"+path.strip("/")+"/"+value.strip("/") + metadata = [] + if value.endswith("/") and self.ic.session.collections.exists(newPath): + coll = self.ic.session.collections.get( + "/"+path.strip("/")+"/"+value.strip("/") + ) + metadata = coll.metadata.items() + else: + subcoll = self.ic.session.collections.get(path) + obj = [o for o in subcoll.data_objects if o.name == value][0] + metadata = obj.metadata.items() + self.widget.metadataTable.setRowCount(len(metadata)) + row = 0 + for item in metadata: + self.widget.metadataTable.setItem(row, 0, + QtWidgets.QTableWidgetItem(item.name)) + self.widget.metadataTable.setItem(row, 1, + QtWidgets.QTableWidgetItem(item.value)) + self.widget.metadataTable.setItem(row, 2, + QtWidgets.QTableWidgetItem(item.units)) + row = row+1 + self.widget.metadataTable.resizeColumnsToContents() + + + diff --git a/gui/ui-files/tabTicketAccess.ui b/gui/ui-files/tabTicketAccess.ui index 8e981bc6eebd4844b7ff20a4a1104e8415bd8be5..f033222aba85f80e72fed1a228074f070aa8d286 100644 --- a/gui/ui-files/tabTicketAccess.ui +++ b/gui/ui-files/tabTicketAccess.ui @@ -111,13 +111,10 @@ QLabel#infoLabel </widget> </item> <item> - <spacer name="verticalSpacer"> + <spacer name="verticalSpacer_3"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> - <property name="sizeType"> - <enum>QSizePolicy::Maximum</enum> - </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> @@ -127,45 +124,76 @@ QLabel#infoLabel </spacer> </item> <item> - <widget class="QTableWidget" name="collTable"> - <property name="sizeAdjustPolicy"> - <enum>QAbstractScrollArea::AdjustToContents</enum> - </property> - <property name="editTriggers"> - <set>QAbstractItemView::NoEditTriggers</set> - </property> - <property name="selectionMode"> - <enum>QAbstractItemView::MultiSelection</enum> - </property> - <property name="selectionBehavior"> - <enum>QAbstractItemView::SelectRows</enum> - </property> - <column> - <property name="text"> - <string>Path</string> - </property> - </column> - <column> - <property name="text"> - <string>Name</string> - </property> - </column> - <column> - <property name="text"> - <string>Size</string> - </property> - </column> - <column> - <property name="text"> - <string>Checksum</string> - </property> - </column> - <column> - <property name="text"> - <string>Last modified</string> - </property> - </column> - </widget> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <widget class="QTableWidget" name="collTable"> + <property name="sizeAdjustPolicy"> + <enum>QAbstractScrollArea::AdjustToContents</enum> + </property> + <property name="editTriggers"> + <set>QAbstractItemView::NoEditTriggers</set> + </property> + <property name="selectionMode"> + <enum>QAbstractItemView::MultiSelection</enum> + </property> + <property name="selectionBehavior"> + <enum>QAbstractItemView::SelectRows</enum> + </property> + <column> + <property name="text"> + <string>Path</string> + </property> + </column> + <column> + <property name="text"> + <string>Name</string> + </property> + </column> + <column> + <property name="text"> + <string>Size</string> + </property> + </column> + <column> + <property name="text"> + <string>Checksum</string> + </property> + </column> + <column> + <property name="text"> + <string>Last modified</string> + </property> + </column> + </widget> + </item> + <item> + <widget class="QPushButton" name="downloadButton_2"> + <property name="text"> + <string/> + </property> + <property name="icon"> + <iconset> + <normaloff>../icons/arrow-right.png</normaloff>../icons/arrow-right.png</iconset> + </property> + <property name="iconSize"> + <size> + <width>30</width> + <height>30</height> + </size> + </property> + </widget> + </item> + <item> + <widget class="QTreeView" name="localFsTreeView"> + <property name="selectionMode"> + <enum>QAbstractItemView::NoSelection</enum> + </property> + <property name="selectionBehavior"> + <enum>QAbstractItemView::SelectItems</enum> + </property> + </widget> + </item> + </layout> </item> <item> <layout class="QHBoxLayout" name="horizontalLayout_2"> @@ -193,22 +221,24 @@ QLabel#infoLabel </property> </spacer> </item> - <item> - <widget class="QPushButton" name="downloadButton"> - <property name="text"> - <string>Download all</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="downloadSelectionButton"> - <property name="text"> - <string>Download selected</string> - </property> - </widget> - </item> </layout> </item> + <item> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Maximum</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> <item> <widget class="QTabWidget" name="tabWidget"> <property name="currentIndex"> @@ -220,7 +250,7 @@ QLabel#infoLabel </attribute> <layout class="QVBoxLayout" name="verticalLayout_3"> <item> - <widget class="QTextBrowser" name="textBrowser"/> + <widget class="QTextBrowser" name="previewBrowser"/> </item> </layout> </widget> @@ -230,7 +260,7 @@ QLabel#infoLabel </attribute> <layout class="QVBoxLayout" name="verticalLayout_2"> <item> - <widget class="QTableWidget" name="tableWidget_2"> + <widget class="QTableWidget" name="metadataTable"> <property name="editTriggers"> <set>QAbstractItemView::NoEditTriggers</set> </property>