Skip to content

Commit

Permalink
Feature: Reveal in Finder (#3698)
Browse files Browse the repository at this point in the history
* feat: Reveal in Finder

* added support for linux
  • Loading branch information
NV404 authored Jan 13, 2025
1 parent f8711a9 commit add47ad
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 22 deletions.
32 changes: 12 additions & 20 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { useDrag, useDrop } from 'react-dnd';
import { IconChevronRight, IconDots } from '@tabler/icons';
import { useSelector, useDispatch } from 'react-redux';
import { addTab, focusTab } from 'providers/ReduxStore/slices/tabs';
import { moveItem, sendRequest } from 'providers/ReduxStore/slices/collections/actions';
import { moveItem, revealInFinder, sendRequest } from 'providers/ReduxStore/slices/collections/actions';
import { collectionFolderClicked } from 'providers/ReduxStore/slices/collections';
import Dropdown from 'components/Dropdown';
import NewRequest from 'components/Sidebar/NewRequest';
Expand Down Expand Up @@ -211,6 +211,12 @@ const CollectionItem = ({ item, collection, searchText }) => {
}
};

const handleReveal = () => {
dispatch(revealInFinder(item.pathname)).catch((error) => {
toast.error('Error revealing file:', error);
});
};

const requestItems = sortRequestItems(filter(item.items, (i) => isItemARequest(i)));
const folderItems = sortFolderItems(filter(item.items, (i) => isItemAFolder(i)));

Expand Down Expand Up @@ -359,6 +365,17 @@ const CollectionItem = ({ item, collection, searchText }) => {
Generate Code
</div>
)}
{!isFolder && (
<div
className="dropdown-item"
onClick={(e) => {
dropdownTippyRef.current.hide();
handleReveal();
}}
>
Reveal in Finder
</div>
)}
<div
className="dropdown-item delete-item"
onClick={(e) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1192,4 +1192,13 @@ export const hydrateCollectionWithUiStateSnapshot = (payload) => (dispatch, getS
reject(error);
}
});
};
};

export const revealInFinder = (collectionPath) => () => {
return new Promise((resolve, reject) => {
const { ipcRenderer } = window;

ipcRenderer.invoke('renderer:reveal-in-finder', collectionPath).then(resolve).catch(reject);
});
};

36 changes: 36 additions & 0 deletions packages/bruno-electron/src/ipc/collection.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ const fs = require('fs');
const fsExtra = require('fs-extra');
const os = require('os');
const path = require('path');
const { exec } = require('child_process');
const { ipcMain, shell, dialog, app } = require('electron');
const { envJsonToBru, bruToJson, jsonToBru, jsonToCollectionBru } = require('../bru');

Expand Down Expand Up @@ -776,6 +777,41 @@ const registerRendererEventHandlers = (mainWindow, watcher, lastOpenedCollection
throw new Error(error.message);
}
});

ipcMain.handle('renderer:reveal-in-finder', async (event, filePath) => {
try {
if (!filePath) {
throw new Error('File path is required.');
}

const resolvedPath = path.resolve(filePath);

if (!fs.existsSync(resolvedPath)) {
throw new Error('The specified file does not exist.');
}

console.log(process.platform, "process.platform")

switch (process.platform) {
case 'darwin': // macOS
shell.showItemInFolder(resolvedPath);
break;
case 'win32': // Windows
shell.showItemInFolder(resolvedPath);
break;
case 'linux': // Linux
exec(`xdg-open "${resolvedPath}"`);
break;
default:
throw new Error('Unsupported platform.');
}

return { success: true };
} catch (error) {
console.error('Error in reveal-in-finder:', error);
return { success: false, message: error.message };
}
});
};

const registerMainEventHandlers = (mainWindow, watcher, lastOpenedCollections) => {
Expand Down

0 comments on commit add47ad

Please sign in to comment.