Skip to content

Commit

Permalink
Dcn/fix windows fs bug (#368)
Browse files Browse the repository at this point in the history
* changed place of the 'nprogress' by few px

* trying a configuration to increase 'maxConcurrentTasks'

* removed @mui/icons-react from deps and let it in devDeps

* fixed a bug that makes the app crashes on bad import from gitea AND make the research for a repo more accessible by keeping the search persistent (it does not put back the default owner everytime you click on a repo)

* FIX pathes for windows and all systems

* update jxl-pdf and FIX for windows pathes

* fixed lint errors

* fixed windows path

* reverted the spinner back to it's old position

* FIX windows path in process

* FIXED pdf generation for windows

* fixes and updated the module to make it easier to use

* corrected eslint

* fixed list of book display

* modified the code to avoid deleting all the wrappers in the list. When you only have one item in a list, you cannot delete it anymore

* removed useless console.log

* eslint fix

* slight text change

* installed 'puppeteer for electron' , we will now instanciate the browser with puppeteer-core and give the instance to jxl-pdf

* it's now install chrome automatically for puppeteer-core

* installed graceful-fs and removed useless files and updated github action

* test to build actions for dcn/fix_windows_fs_bug

* getting rid of 'graceful-fs' and everything is working here

* resolved last eslint error

* removed my branch from yml file

* fixed macos install yaml

* last fix for this to work on all platforms

---------

Co-authored-by: danielc-n <[email protected]>
  • Loading branch information
DanielC-N and danielc-n authored Oct 3, 2024
1 parent a06727f commit 8addbea
Show file tree
Hide file tree
Showing 654 changed files with 526 additions and 288 deletions.
15 changes: 0 additions & 15 deletions .expo/README.md

This file was deleted.

8 changes: 0 additions & 8 deletions .expo/settings.json

This file was deleted.

131 changes: 62 additions & 69 deletions .github/workflows/node.js.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ jobs:
runs-on: ubuntu-latest
env:
CI: false
NODE_OPTIONS: --max-old-space-size=4096
strategy:
matrix:
node-version: [18.20.3]
Expand All @@ -31,9 +32,6 @@ jobs:
- name: yarn install
run: yarn install

- name: set max memory allocation
run: export NODE_OPTIONS=-max_old_space_size=4096

- name: package
id: package
run: |
Expand All @@ -53,6 +51,7 @@ jobs:
runs-on: ubuntu-latest
env:
CI: false
NODE_OPTIONS: --max-old-space-size=4096
strategy:
matrix:
node-version: [18.20.3]
Expand All @@ -70,9 +69,6 @@ jobs:
- name: set @bitregistry translation-help
run: yarn config set '@bit:registry' https://node.bit.dev

- name: set max memory allocation
run: export NODE_OPTIONS=-max_old_space_size=4096

- name: install dependencies
run: yarn install

Expand All @@ -96,66 +92,63 @@ jobs:
path: artifacts
overwrite: true
# Commented the below code for getting the binaries build for windows and Ubuntu
# build-mac:
# runs-on: macos-latest
# env:
# CI: false
# strategy:
# matrix:
# node-version: [18.20.3]

# steps:
# - uses: actions/checkout@v2
# - name: Use Node.js 18.20.3
# uses: actions/setup-node@v1
# with:
# node-version: 18.20.3
# - run: |
# node --version
# yarn --version
# - name: Increase file descriptor limit
# run: sudo sysctl -w kern.maxfiles=10485760 && sudo sysctl -w kern.maxfilesperproc=1048576
# - name: set @bitregistry translation-help
# run: yarn config set '@bit:registry' https://node.bit.dev

# - name: Install Homebrew
# run: |
# /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> $HOME/.zprofile
# eval "$(/opt/homebrew/bin/brew shellenv)"

# - name: Install canvas dependencies
# run: |
# brew install pkg-config cairo pango libpng jpeg giflib librsvg [email protected]
# brew reinstall jpeg
# echo 'export PATH="/opt/homebrew/opt/jpeg/bin:$PATH"' >> $HOME/.zprofile
# echo 'export LDFLAGS="-L/opt/homebrew/opt/jpeg/lib"' >> $HOME/.zprofile
# echo 'export CPPFLAGS="-I/opt/homebrew/opt/jpeg/include"' >> $HOME/.zprofile
# echo 'export PKG_CONFIG_PATH="/opt/homebrew/opt/jpeg/lib/pkgconfig"' >> $HOME/.zprofile
# eval "$(/opt/homebrew/bin/brew shellenv)"
# brew install python-setuptools


# - name: set max memory allocation
# run: export NODE_OPTIONS=-max_old_space_size=4096

# - name: yarn install
# run: yarn install --verbose

# - name: install dmg-license
# run: yarn add dmg-license

# - name: package
# id: package
# run: |
# yarn dist

# - name: Cleanup artifacts
# run: |
# npx rimraf "dist/!(*.deb|*.AppImage|*.dmg)"
# - name: Upload artifacts
# uses: actions/upload-artifact@v4
# with:
# name: Scribe-${{ github.run_id }}-${{ github.sha }}
# path: dist
# overwrite: true
build-mac:
runs-on: macos-latest
env:
CI: false
NODE_OPTIONS: --max-old-space-size=4096
strategy:
matrix:
node-version: [18.20.3]

steps:
- uses: actions/checkout@v2
- name: Use Node.js 18.20.3
uses: actions/setup-node@v1
with:
node-version: 18.20.3
- run: |
node --version
yarn --version
- name: Increase file descriptor limit
run: sudo sysctl -w kern.maxfiles=10485760 && sudo sysctl -w kern.maxfilesperproc=1048576
- name: set @bitregistry translation-help
run: yarn config set '@bit:registry' https://node.bit.dev

- name: Install Homebrew
run: |
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> $HOME/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
- name: Install canvas dependencies
run: |
brew install pkg-config cairo pango libpng jpeg giflib librsvg [email protected]
brew reinstall jpeg
echo 'export PATH="/opt/homebrew/opt/jpeg/bin:$PATH"' >> $HOME/.zprofile
echo 'export LDFLAGS="-L/opt/homebrew/opt/jpeg/lib"' >> $HOME/.zprofile
echo 'export CPPFLAGS="-I/opt/homebrew/opt/jpeg/include"' >> $HOME/.zprofile
echo 'export PKG_CONFIG_PATH="/opt/homebrew/opt/jpeg/lib/pkgconfig"' >> $HOME/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
brew install python-setuptools
- name: yarn install
run: yarn install

- name: install dmg-license
run: yarn add dmg-license

- name: package
id: package
run: |
yarn dist
- name: Cleanup artifacts
run: |
npx rimraf "dist/!(*.deb|*.AppImage|*.dmg)"
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: Scribe-${{ github.run_id }}-${{ github.sha }}
path: dist
overwrite: true
1 change: 1 addition & 0 deletions .gitignore
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
/.pnp
.pnp.js
bower_components
/.expo

# next-on-netlify build output
out_functions/
Expand Down
Empty file modified .yarnrc
100644 → 100755
Empty file.
Empty file modified __mocks__/electron.js
100644 → 100755
Empty file.
Empty file modified __mocks__/fileMock.js
100644 → 100755
Empty file.
Empty file modified __mocks__/styleMock.js
100644 → 100755
Empty file.
Empty file modified app/favicon.ico
100644 → 100755
Empty file.
Empty file modified app/head.js
100644 → 100755
Empty file.
Empty file modified app/home/layout.jsx
100644 → 100755
Empty file.
Empty file modified app/home/page.jsx
100644 → 100755
Empty file.
Empty file modified app/layout.js
100644 → 100755
Empty file.
Empty file modified app/loading.js
100644 → 100755
Empty file.
Empty file modified app/login/page.jsx
100644 → 100755
Empty file.
Empty file modified app/newproject/page.js
100644 → 100755
Empty file.
Empty file modified app/page.js
100644 → 100755
Empty file.
Empty file modified app/profile/page.js
100644 → 100755
Empty file.
Empty file modified app/projects/page.jsx
100644 → 100755
Empty file.
Empty file modified app/providers.js
100644 → 100755
Empty file.
Empty file modified app/resource/page.jsx
100644 → 100755
Empty file.
Empty file modified app/signup/page.jsx
100644 → 100755
Empty file.
Empty file modified app/sync/page.js
100644 → 100755
Empty file.
Empty file modified babel.config.js
100644 → 100755
Empty file.
Empty file modified docs/Architecture/Architecture.md
100644 → 100755
Empty file.
Empty file modified docs/Architecture/Autographacodestructure.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Empty file modified docs/Architecture/BirdEyeView.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Empty file modified docs/Architecture/CodeStructure.html
100644 → 100755
Empty file.
Empty file modified docs/Architecture/MajorComponents.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Empty file modified docs/Architecture/codeStructure.txt
100644 → 100755
Empty file.
Empty file modified docs/Autographa-Diagram0.txt
100644 → 100755
Empty file.
Empty file modified docs/AutographaRefactDraft1.md
100644 → 100755
Empty file.
Empty file modified docs/AutographaTestDoc.md
100644 → 100755
Empty file.
Empty file modified docs/Autographa_refactorplans.md
100644 → 100755
Empty file.
Empty file modified docs/AutographaflowDiagramDraft.html
100644 → 100755
Empty file.
Empty file modified docs/Development/Offline-Merge.md
100644 → 100755
Empty file.
Empty file modified docs/Flows/sectionPlaceholder flow.pdf
100644 → 100755
Empty file.
Empty file modified e2e-tests/base.test.ts
100644 → 100755
Empty file.
Empty file modified e2e-tests/common.js
100644 → 100755
Empty file.
Empty file modified e2e-tests/myFixtures.ts
100644 → 100755
Empty file.
Empty file modified intro.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
86 changes: 82 additions & 4 deletions main/index.js
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
// Native
require('@electron/remote/main').initialize();
const { join } = require('path');
const path = require('path');
const fs = require('fs');
const { format } = require('url');
const { install } = require('@puppeteer/browsers');
const config = require("dotenv");
config.config();

Expand All @@ -12,11 +14,71 @@ const prepareNext = require('electron-next');
const { autoUpdater } = require('electron-updater');

let mainWindow;
let browserPath;
function isDev() {
return process.argv[2] == '--dev';
}

async function setPermissions(chromePath) {
try {
fs.chmodSync(chromePath, '755');
} catch (err) {
console.error(`Failed to set permissions for ${chromePath}: `, err);
}
}

function getChromeCacheDir() {
const dataDir = app.getPath('appData');

const chromeDataDir = path.join(dataDir, 'chrome-cache');
const chromeDataDirFilePath = path.join(chromeDataDir, 'executablePath');

// Create the folder if it doesn't exist
try {
fs.accessSync(chromeDataDir);
} catch (err) {
// If the directory doesn't exist, create it
fs.mkdirSync(chromeDataDir, { recursive: true });
fs.appendFileSync(chromeDataDirFilePath, '', 'utf8');
console.log(`Created persistent Chrome data directory at: ${chromeDataDir}`);
}

return chromeDataDir;
}

async function verifyAndInstallChrome(version) {
// Get the persistent directory
const cacheDir = getChromeCacheDir();
const cacheDirFilePath = path.join(cacheDir, 'executablePath');

// Check if the browser is already installed

// fs.accessSync(cacheDirFilePath);
const data = fs.readFileSync(cacheDirFilePath, 'utf8');
if(data.trim() !== '') {
console.log(`Chrome version ${version} is already installed at '${data}'`);
browserPath = data;
return browserPath;
}
console.log(`Chrome version ${version} is not installed. Installing now...`);
await install({
cacheDir,
browser: 'chrome',
buildId: version,
}).then((res) => {
if (fs.existsSync(res.executablePath)) {
browserPath = res.executablePath;
fs.appendFileSync(cacheDirFilePath, res.executablePath, 'utf8');
console.log(`Chrome version ${version} has been installed to ${browserPath}.`);
}
setPermissions(browserPath);
}).catch((err) => {
throw new Error(`Failed to install Chrome version ${version} : ${err}`);
});
}

// Prepare the renderer once the app is ready
function createWindow() {
async function createWindow() {
mainWindow = new BrowserWindow({
width: 900,
height: 600,
Expand All @@ -26,22 +88,37 @@ function createWindow() {
webSecurity: false,
enableRemoteModule: true,
contextIsolation: false,
preload: join(__dirname, 'preload.js'),
preload: path.join(__dirname, 'preload.js'),
},
});
require('@electron/remote/main').enable(mainWindow.webContents);
const url = isDev()
? 'http://localhost:8000'
: format({
pathname: join(__dirname, '../renderer/out/index.html'),
pathname: path.join(__dirname, '../renderer/out/index.html'),
protocol: 'file:',
slashes: true,
});

// useful line of code to debug puppet with the console in the app
// app.commandLine.appendSwitch('remote-debugging-port', '8000');

verifyAndInstallChrome('121.0.6167.85')
.catch(err => {
console.error(`Failed to verify or install Chrome: ${err.message}`);
});

mainWindow.loadURL(url);
autoUpdater.checkForUpdatesAndNotify();
}

ipcMain.handle('get-browser-path', async (event) => {
await verifyAndInstallChrome('121.0.6167.85').catch(err => {
console.error(`Failed to verify or install Chrome: ${err.message}`);
});
return browserPath;
});

// prevent multiple app window opening
const gotTheLock = app.requestSingleInstanceLock();
if (!gotTheLock) {
Expand Down Expand Up @@ -71,6 +148,7 @@ app.on('window-all-closed', () => {

app.on('activate', async () => {
if (mainWindow === null) {
await pie.initialize(app);
createWindow();
}
});
Expand Down
9 changes: 4 additions & 5 deletions main/preload.js
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ const { ipcRenderer } = require('electron');
const log = require('electron-log');
const fontList = require('font-list');
const { PdfGen } = require('jxl-pdf');
const puppeteer = require('puppeteer-core');

const _fonts = [];
const fetchFonts = async () => {
Expand All @@ -17,12 +18,10 @@ const fetchFonts = async () => {
};
fetchFonts();

// Since we disabled nodeIntegration we can reintroduce
// needed node functionality here
process.once('loaded', () => {

global.ipcRenderer = ipcRenderer;
global.puppeteer = puppeteer;
global.log = log;
global.PdfGenStatic = PdfGen
global.PdfGenStatic = PdfGen;
global.fonts = _fonts;
});
});
Empty file modified netlify.toml
100644 → 100755
Empty file.
2 changes: 2 additions & 0 deletions next.config.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// const nodeExternals = require('webpack-node-externals');
const path = require('path');
const colors = require('tailwindcss/colors');
const TerserPlugin = require("terser-webpack-plugin");

const nextConfig = {
webpack: (config, { isServer }) => {
Expand All @@ -9,6 +10,7 @@ const nextConfig = {
config.resolve.fallback.fs = false;
config.resolve.alias.canvas = false;
}

config.module.rules.push({
test: /\.md$/,
use: 'raw-loader',
Expand Down
Loading

0 comments on commit 8addbea

Please sign in to comment.