diff options
author | lioux <lioux@FreeBSD.org> | 2003-03-04 00:46:40 +0800 |
---|---|---|
committer | lioux <lioux@FreeBSD.org> | 2003-03-04 00:46:40 +0800 |
commit | b53e2cb37ca302dcce6fbc698a8289db40ba3e01 (patch) | |
tree | 062fb1721e993896b90c5d37c78e9c1e498160ba /audio/juk | |
parent | 1dc1f12eb39293a471812320bb1672973f2eed7e (diff) | |
download | freebsd-ports-gnome-b53e2cb37ca302dcce6fbc698a8289db40ba3e01.tar.gz freebsd-ports-gnome-b53e2cb37ca302dcce6fbc698a8289db40ba3e01.tar.zst freebsd-ports-gnome-b53e2cb37ca302dcce6fbc698a8289db40ba3e01.zip |
New port juk version 1.0: JuK, a music manager and jukebox for KDE
Submitted by: Lauri Watts <lauri@kde.org>
Reviewed by: kde (members),
Scott Wheeler <wheeler@kde.org> (developer)
Diffstat (limited to 'audio/juk')
-rw-r--r-- | audio/juk/Makefile | 27 | ||||
-rw-r--r-- | audio/juk/distinfo | 1 | ||||
-rw-r--r-- | audio/juk/files/patch-juk::collectionlist.cpp | 13 | ||||
-rw-r--r-- | audio/juk/files/patch-juk::genrelisteditorbase.ui | 38 | ||||
-rw-r--r-- | audio/juk/files/patch-juk::juk.cpp | 19 | ||||
-rw-r--r-- | audio/juk/files/patch-juk::juk.h | 11 | ||||
-rw-r--r-- | audio/juk/files/patch-juk::jukui.rc | 11 | ||||
-rw-r--r-- | audio/juk/files/patch-juk::playlist.cpp | 29 | ||||
-rw-r--r-- | audio/juk/files/patch-juk::playlistbox.cpp | 20 | ||||
-rw-r--r-- | audio/juk/files/patch-juk::playlistsplitter.cpp | 69 | ||||
-rw-r--r-- | audio/juk/files/patch-juk::playlistsplitter.h | 22 | ||||
-rw-r--r-- | audio/juk/files/patch-juk::slideraction.cpp | 11 | ||||
-rw-r--r-- | audio/juk/files/patch-juk::tageditor.cpp | 80 | ||||
-rw-r--r-- | audio/juk/pkg-descr | 19 | ||||
-rw-r--r-- | audio/juk/pkg-plist | 44 |
15 files changed, 414 insertions, 0 deletions
diff --git a/audio/juk/Makefile b/audio/juk/Makefile new file mode 100644 index 000000000000..931d006056b1 --- /dev/null +++ b/audio/juk/Makefile @@ -0,0 +1,27 @@ +# New ports collection makefile for: JuK +# Date created: Saturday 7 December 2002 +# Whom: Lauri Watts <lauri@kde.org> +# +# $FreeBSD$ +# + +PORTNAME= juk +PORTVERSION= 1.0 +CATEGORIES= audio kde +MASTER_SITES= http://www.slackorama.net/oss/juk/ +DISTNAME= ${PORTNAME}-${PORTVERSION}-1 + +MAINTAINER= kde@FreeBSD.org +COMMENT= JuK, a music manager and jukebox for KDE + +LIB_DEPENDS= id3-3.8.2:${PORTSDIR}/audio/id3lib +RUN_DEPENDS= ${LOCALBASE}/lib/kde3/kfile_mp3.so:${PORTSDIR}/multimedia/kdemultimedia3 \ + ${LOCALBASE}/lib/kde3/kfile_ogg.so:${PORTSDIR}/multimedia/kdemultimedia3 + +USE_KDELIBS_VER=3 +USE_GMAKE= yes +GNU_CONFIGURE= yes +CONFIGURE_ARGS= --program-transform-name='' +WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION} + +.include <bsd.port.mk> diff --git a/audio/juk/distinfo b/audio/juk/distinfo new file mode 100644 index 000000000000..6a25692ed2b9 --- /dev/null +++ b/audio/juk/distinfo @@ -0,0 +1 @@ +MD5 (juk-1.0-1.tar.gz) = 52373efb9db08946437ee2c5ec54a95a diff --git a/audio/juk/files/patch-juk::collectionlist.cpp b/audio/juk/files/patch-juk::collectionlist.cpp new file mode 100644 index 000000000000..b466e773d7b2 --- /dev/null +++ b/audio/juk/files/patch-juk::collectionlist.cpp @@ -0,0 +1,13 @@ +--- juk/collectionlist.cpp.orig Sat Feb 15 08:36:32 2003 ++++ juk/collectionlist.cpp Mon Mar 3 12:24:34 2003 +@@ -131,8 +131,8 @@ + { + if(e->source() == this) + return; +- +- ++ else ++ decode(e); + } + + void CollectionList::contentsDragMoveEvent(QDragMoveEvent *e) diff --git a/audio/juk/files/patch-juk::genrelisteditorbase.ui b/audio/juk/files/patch-juk::genrelisteditorbase.ui new file mode 100644 index 000000000000..1d9af928fac5 --- /dev/null +++ b/audio/juk/files/patch-juk::genrelisteditorbase.ui @@ -0,0 +1,38 @@ +--- juk/genrelisteditorbase.ui.orig Mon Dec 9 12:36:24 2002 ++++ juk/genrelisteditorbase.ui Mon Mar 3 12:24:34 2003 +@@ -159,7 +159,7 @@ + <cstring>genreNameLabel</cstring> + </property> + <property name="text"> +- <string>Name</string> ++ <string>Name:</string> + </property> + </widget> + <widget class="KLineEdit"> +@@ -172,7 +172,7 @@ + <cstring>ID3v1Label</cstring> + </property> + <property name="text"> +- <string>ID3v1 Genre Mapping</string> ++ <string>ID3v1 genre mapping:</string> + </property> + </widget> + <widget class="KComboBox"> +@@ -247,7 +247,7 @@ + <cstring>okButton</cstring> + </property> + <property name="text"> +- <string>OK</string> ++ <string>&OK</string> + </property> + <property name="autoDefault"> + <bool>true</bool> +@@ -261,7 +261,7 @@ + <cstring>cancelButton</cstring> + </property> + <property name="text"> +- <string>Cancel</string> ++ <string>&Cancel</string> + </property> + </widget> + </hbox> diff --git a/audio/juk/files/patch-juk::juk.cpp b/audio/juk/files/patch-juk::juk.cpp new file mode 100644 index 000000000000..602f5826224c --- /dev/null +++ b/audio/juk/files/patch-juk::juk.cpp @@ -0,0 +1,19 @@ +--- juk/juk.cpp.orig Tue Feb 18 05:29:20 2003 ++++ juk/juk.cpp Mon Mar 3 12:24:34 2003 +@@ -52,6 +52,7 @@ + readSettings(); + setupLayout(); + setupActions(); ++ playlistChanged(); + readConfig(); + setupPlayer(); + setupSystemTray(); +@@ -84,8 +85,6 @@ + + connect(splitter, SIGNAL(selectedPlaylistCountChanged(int)), statusLabel, SLOT(setPlaylistCount(int))); + connect(statusLabel, SIGNAL(jumpButtonClicked()), splitter, SLOT(selectPlaying())); +- +- updatePlaylistInfo(); + + splitter->setFocus(); + diff --git a/audio/juk/files/patch-juk::juk.h b/audio/juk/files/patch-juk::juk.h new file mode 100644 index 000000000000..1e4815ff380c --- /dev/null +++ b/audio/juk/files/patch-juk::juk.h @@ -0,0 +1,11 @@ +--- juk/juk.h.orig Tue Feb 18 05:27:09 2003 ++++ juk/juk.h Mon Mar 3 12:24:34 2003 +@@ -84,8 +84,6 @@ + void clear(); + void selectAll(); + +-private slots: +- + // player menu + void play(); + void pause(); diff --git a/audio/juk/files/patch-juk::jukui.rc b/audio/juk/files/patch-juk::jukui.rc new file mode 100644 index 000000000000..82d013635466 --- /dev/null +++ b/audio/juk/files/patch-juk::jukui.rc @@ -0,0 +1,11 @@ +--- juk/jukui.rc.orig Mon Feb 17 08:36:00 2003 ++++ juk/jukui.rc Mon Mar 3 12:24:34 2003 +@@ -15,7 +15,7 @@ + <Separator/> + + <Action name="file_save"/> +- <Action name="file_saveas"/> ++ <Action name="file_save_as"/> + + <Separator/> + diff --git a/audio/juk/files/patch-juk::playlist.cpp b/audio/juk/files/patch-juk::playlist.cpp new file mode 100644 index 000000000000..6ca3906bf66d --- /dev/null +++ b/audio/juk/files/patch-juk::playlist.cpp @@ -0,0 +1,29 @@ +--- juk/playlist.cpp.orig Mon Feb 17 09:50:48 2003 ++++ juk/playlist.cpp Mon Mar 3 12:24:34 2003 +@@ -215,7 +215,7 @@ + delete it.current(); + } + else +- KMessageBox::sorry(this, i18n("Could not save delete ") + it.current()->fileName() + "."); ++ KMessageBox::sorry(this, i18n("Could not delete ") + it.current()->fileName() + "."); + } + + } +@@ -483,7 +483,7 @@ + + _columnVisibleAction = new KActionMenu(i18n("Show Columns"), this, "showColumns"); + headerMenu = _columnVisibleAction->popupMenu(); +- headerMenu->insertTitle(i18n("Show...")); ++ headerMenu->insertTitle(i18n("Show")); + headerMenu->setCheckable(true); + + for(int i =0; i < header()->count(); ++i) { +@@ -508,7 +508,7 @@ + + rmbMenu->insertSeparator(); + +- rmbMenu->insertItem(SmallIcon("editdelete"), i18n("Remove from disk"), this, SLOT(removeSelectedItems())); ++ rmbMenu->insertItem(SmallIcon("editdelete"), i18n("Remove From Disk"), this, SLOT(removeSelectedItems())); + + rmbMenu->insertSeparator(); + diff --git a/audio/juk/files/patch-juk::playlistbox.cpp b/audio/juk/files/patch-juk::playlistbox.cpp new file mode 100644 index 000000000000..909ad3847e81 --- /dev/null +++ b/audio/juk/files/patch-juk::playlistbox.cpp @@ -0,0 +1,20 @@ +--- juk/playlistbox.cpp.orig Mon Feb 17 04:03:17 2003 ++++ juk/playlistbox.cpp Mon Mar 3 12:24:34 2003 +@@ -129,7 +129,7 @@ + + bool ok; + +- QString name = QInputDialog::getText(i18n("Rename..."), i18n("Please enter a name for this playlist:"), ++ QString name = QInputDialog::getText(i18n("Rename"), i18n("Please enter a name for this playlist:"), + QLineEdit::Normal, item->text(), &ok); + if(ok) { + item->setText(name); +@@ -158,7 +158,7 @@ + + // If this text is changed, please also change it in PlaylistSplitter::createPlaylist(). + +- QString name = QInputDialog::getText(i18n("New Playlist..."), i18n("Please enter a name for the new playlist:"), ++ QString name = QInputDialog::getText(i18n("New Playlist"), i18n("Please enter a name for the new playlist:"), + QLineEdit::Normal, splitter->uniquePlaylistName(item->text(), true), &ok); + if(ok) { + Playlist *p = splitter->createPlaylist(name); diff --git a/audio/juk/files/patch-juk::playlistsplitter.cpp b/audio/juk/files/patch-juk::playlistsplitter.cpp new file mode 100644 index 000000000000..5d74bf92a8a3 --- /dev/null +++ b/audio/juk/files/patch-juk::playlistsplitter.cpp @@ -0,0 +1,69 @@ +--- juk/playlistsplitter.cpp.orig Mon Feb 17 09:46:30 2003 ++++ juk/playlistsplitter.cpp Mon Mar 3 12:24:34 2003 +@@ -443,7 +443,7 @@ + + // check to see if we've alredy loaded this item before continuing + +- if(!playlistFiles.insert(p->fileName())) ++ if(p->fileName().isEmpty() || !playlistFiles.insert(p->fileName())) + setupPlaylist(p); + else + delete p; +@@ -458,19 +458,19 @@ + + if(collection) { + // the last column is just a filler +- _visibleColumns.resize(collection->columns() - 1, true); ++ m_visibleColumns.resize(collection->columns() - 1, true); + QValueList<int> l = config->readIntListEntry("VisibleColumns"); + + uint i = 0; + for(QValueList<int>::Iterator it = l.begin(); it != l.end(); ++it) { + if(! bool(*it)) { +- _visibleColumns[i] = bool(*it); ++ m_visibleColumns[i] = bool(*it); + collection->hideColumn(i); + } + +- // while we're looping go ahead and populate _columnNames ++ // while we're looping go ahead and populate m_columnNames + +- _columnNames.append(collection->columnText(i)); ++ m_columnNames.append(collection->columnText(i)); + + i++; + } +@@ -513,8 +513,8 @@ + config->writeEntry("DirectoryList", directoryList); + + QValueList<int> l; +- for(uint i = 0; i < _visibleColumns.size(); i++) +- l.append(int(_visibleColumns[i])); ++ for(uint i = 0; i < m_visibleColumns.size(); i++) ++ l.append(int(m_visibleColumns[i])); + + config->writeEntry("VisibleColumns", l); + +@@ -583,10 +583,10 @@ + if(!p) + return; + +- for(uint i = 0; i < _visibleColumns.size(); i++) { +- if(_visibleColumns[i] && ! p->isColumnVisible(i)) ++ for(uint i = 0; i < m_visibleColumns.size(); i++) { ++ if(m_visibleColumns[i] && ! p->isColumnVisible(i)) + p->showColumn(i); +- else if(! _visibleColumns[i] && p->isColumnVisible(i)) ++ else if(! m_visibleColumns[i] && p->isColumnVisible(i)) + p->hideColumn(i); + } + } +@@ -619,7 +619,7 @@ + + void PlaylistSplitter::slotToggleColumnVisible(int column) + { +- _visibleColumns[column] = ! _visibleColumns[column]; ++ m_visibleColumns[column] = ! m_visibleColumns[column]; + if(visiblePlaylist()) + setupColumns(visiblePlaylist()); + } diff --git a/audio/juk/files/patch-juk::playlistsplitter.h b/audio/juk/files/patch-juk::playlistsplitter.h new file mode 100644 index 000000000000..5e415e7f323e --- /dev/null +++ b/audio/juk/files/patch-juk::playlistsplitter.h @@ -0,0 +1,22 @@ +--- juk/playlistsplitter.h.orig Mon Feb 17 06:23:26 2003 ++++ juk/playlistsplitter.h Mon Mar 3 12:24:34 2003 +@@ -144,7 +144,7 @@ + */ + void open(const QString &file); + +- QStringList columnNames() const { return _columnNames; } ++ QStringList columnNames() const { return m_columnNames; } + + KActionMenu *columnVisibleAction() const { return collection->columnVisibleAction(); } + +@@ -300,8 +300,8 @@ + QStringList directoryQueue; + QStringList directoryQueueRemove; + +- QValueVector<bool> _visibleColumns; +- QStringList _columnNames; ++ QValueVector<bool> m_visibleColumns; ++ QStringList m_columnNames; + + bool showEditor; + bool restore; diff --git a/audio/juk/files/patch-juk::slideraction.cpp b/audio/juk/files/patch-juk::slideraction.cpp new file mode 100644 index 000000000000..e922af7ff361 --- /dev/null +++ b/audio/juk/files/patch-juk::slideraction.cpp @@ -0,0 +1,11 @@ +--- juk/slideraction.cpp.orig Thu Feb 13 02:51:57 2003 ++++ juk/slideraction.cpp Mon Mar 3 12:24:34 2003 +@@ -122,7 +122,7 @@ + + trackPositionSlider = new TrackPositionSlider(base, "trackPositionSlider"); + trackPositionSlider->setMaxValue(1000); +- QToolTip::add(trackPositionSlider, i18n("Track Position")); ++ QToolTip::add(trackPositionSlider, i18n("Track position")); + layout->addWidget(trackPositionSlider); + + volumeSlider = new QSlider(base, "volumeSlider" ); diff --git a/audio/juk/files/patch-juk::tageditor.cpp b/audio/juk/files/patch-juk::tageditor.cpp new file mode 100644 index 000000000000..c479f935a53b --- /dev/null +++ b/audio/juk/files/patch-juk::tageditor.cpp @@ -0,0 +1,80 @@ +--- juk/tageditor.cpp.orig Sun Feb 16 06:07:29 2003 ++++ juk/tageditor.cpp Mon Mar 3 12:24:34 2003 +@@ -315,17 +315,17 @@ + { // just for organization + artistNameBox = new KComboBox(true, this, "artistNameBox"); + artistNameBox->setCompletionMode(KGlobalSettings::CompletionAuto); +- addItem(i18n("Artist Name"), artistNameBox, leftColumnLayout); ++ addItem(i18n("Artist name:"), artistNameBox, leftColumnLayout); + + trackNameBox = new KLineEdit(this, "trackNameBox"); +- addItem(i18n("Track Name"), trackNameBox, leftColumnLayout); ++ addItem(i18n("Track name:"), trackNameBox, leftColumnLayout); + + albumNameBox = new KComboBox(true, this, "albumNameBox"); + albumNameBox->setCompletionMode(KGlobalSettings::CompletionAuto); +- addItem(i18n("Album Name"), albumNameBox, leftColumnLayout); ++ addItem(i18n("Album name:"), albumNameBox, leftColumnLayout); + + genreBox = new KComboBox(true, this, "genreBox"); +- addItem(i18n("Genre"), genreBox, leftColumnLayout); ++ addItem(i18n("Genre:"), genreBox, leftColumnLayout); + + // this fills the space at the bottem of the left column + leftColumnLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding)); +@@ -334,7 +334,7 @@ + // put stuff in the right column + ////////////////////////////////////////////////////////////////////////////// + { // just for organization +- rightColumnLayout->addWidget(new QLabel(i18n("File Name"), this)); ++ rightColumnLayout->addWidget(new QLabel(i18n("File name:"), this)); + + fileNameBox = new KLineEdit(this, "fileNameBox"); + rightColumnLayout->addWidget(fileNameBox); +@@ -343,16 +343,16 @@ + QHBoxLayout *trackRowLayout = new QHBoxLayout(rightColumnLayout, horizontalSpacing); + + trackSpin = new KIntSpinBox(0, 255, 1, 0, 10, this, "trackSpin"); +- addItem("Track", trackSpin, trackRowLayout); ++ addItem(i18n("Track:"), trackSpin, trackRowLayout); + + trackRowLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum)); + + yearSpin = new KIntSpinBox(0, 9999, 1, 0, 10, this, "yearSpin"); +- addItem(i18n("Year"), yearSpin, trackRowLayout); ++ addItem(i18n("Year:"), yearSpin, trackRowLayout); + + trackRowLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum)); + +- trackRowLayout->addWidget(new QLabel(i18n("Length"), this)); ++ trackRowLayout->addWidget(new QLabel(i18n("Length:"), this)); + lengthBox = new KLineEdit(this, "lengthBox"); + lengthBox->setMaximumWidth(50); + lengthBox->setReadOnly(true); +@@ -360,7 +360,7 @@ + + trackRowLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum)); + +- trackRowLayout->addWidget(new QLabel(i18n("Bitrate"), this)); ++ trackRowLayout->addWidget(new QLabel(i18n("Bitrate:"), this)); + bitrateBox = new KLineEdit(this, "bitrateBox"); + bitrateBox->setMaximumWidth(50); + bitrateBox->setReadOnly(true); +@@ -369,7 +369,7 @@ + + commentBox = new KEdit(this, "commentBox"); + commentBox->setTextFormat(Qt::PlainText); +- addItem(i18n("Comment"), commentBox, rightColumnLayout); ++ addItem(i18n("Comment:"), commentBox, rightColumnLayout); + } + + connect(artistNameBox, SIGNAL(textChanged(const QString&)), this, SIGNAL(changed())); +@@ -463,7 +463,7 @@ + if(!errorFiles.isEmpty()) + KMessageBox::detailedSorry(this, + i18n("Could not save to specified file(s)."), +- i18n("Could not write to:\n") + errorFiles.join("\n")); ++ i18n("Could Not Write to:\n") + errorFiles.join("\n")); + dataChanged = false; + + KApplication::restoreOverrideCursor(); diff --git a/audio/juk/pkg-descr b/audio/juk/pkg-descr new file mode 100644 index 000000000000..04a0001578bc --- /dev/null +++ b/audio/juk/pkg-descr @@ -0,0 +1,19 @@ +JuK (pronounced jook) is a jukebox and music manager for the KDE +desktop similar to jukebox software on other platforms such as +iTunes(TM) or RealOne(TM). It also features: + +* Support for Ogg Vorbis and MP3 formats, tag editing support for + both formats (including ID3v2 for MP3 files), output to aRts or + GStreamer, multiple playlists, and lots of other groovy stuff + +* Integration into KDE that allows drag-and-drop and clipboard usage + with other KDE and X apps + +* Multitagging, or editing, a selection of multiple files at once + is also supported. Managing of your "collection" and multiple + playlists. Import and export to m3u playlists + +* Binary caching of audio meta-data and playlist information for + faster load times (starting with the second time you run JuK) + +WWW: http://www.slackorama.net/cgi-bin/content.pl?juk diff --git a/audio/juk/pkg-plist b/audio/juk/pkg-plist new file mode 100644 index 000000000000..448059408f89 --- /dev/null +++ b/audio/juk/pkg-plist @@ -0,0 +1,44 @@ +bin/juk +share/applnk/Multimedia/juk.desktop +share/apps/juk/icons/hicolor/16x16/actions/dequeue.png +share/apps/juk/icons/hicolor/16x16/actions/enqueue.png +share/apps/juk/icons/hicolor/16x16/actions/tag.png +share/apps/juk/icons/hicolor/22x22/actions/dequeue.png +share/apps/juk/icons/hicolor/22x22/actions/enqueue.png +share/apps/juk/icons/hicolor/22x22/actions/tag.png +share/apps/juk/icons/hicolor/32x32/actions/dequeue.png +share/apps/juk/icons/hicolor/32x32/actions/enqueue.png +share/apps/juk/icons/hicolor/32x32/actions/tag.png +share/apps/juk/id3v1.genreml +share/apps/juk/jukui.rc +share/apps/juk/pics/playing.png +share/doc/HTML/en/juk/common +share/doc/HTML/en/juk/index.cache.bz2 +share/doc/HTML/en/juk/index.docbook +share/icons/hicolor/16x16/apps/juk.png +share/icons/hicolor/32x32/apps/juk.png +share/icons/hicolor/48x48/apps/juk.png +@unexec rmdir %D/share/icons/hicolor/48x48/apps 2>/dev/null || true +@unexec rmdir %D/share/icons/hicolor/48x48 2>/dev/null || true +@unexec rmdir %D/share/icons/hicolor/32x32/apps 2>/dev/null || true +@unexec rmdir %D/share/icons/hicolor/32x32 2>/dev/null || true +@unexec rmdir %D/share/icons/hicolor/16x16/apps 2>/dev/null || true +@unexec rmdir %D/share/icons/hicolor/16x16 2>/dev/null || true +@unexec rmdir %D/share/icons/hicolor 2>/dev/null || true +@unexec rmdir %D/share/icons 2>/dev/null || true +@dirrm share/doc/HTML/en/juk +@unexec rmdir %D/share/doc/HTML/en 2>/dev/null || true +@unexec rmdir %D/share/doc/HTML 2>/dev/null || true +@dirrm share/apps/juk/pics +@dirrm share/apps/juk/icons/hicolor/32x32/actions +@dirrm share/apps/juk/icons/hicolor/32x32 +@dirrm share/apps/juk/icons/hicolor/22x22/actions +@dirrm share/apps/juk/icons/hicolor/22x22 +@dirrm share/apps/juk/icons/hicolor/16x16/actions +@dirrm share/apps/juk/icons/hicolor/16x16 +@dirrm share/apps/juk/icons/hicolor +@dirrm share/apps/juk/icons +@dirrm share/apps/juk +@unexec rmdir %D/share/apps 2>/dev/null || true +@unexec rmdir %D/share/applnk/Multimedia 2>/dev/null || true +@unexec rmdir %D/share/applnk 2>/dev/null || true |