Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dcn/fix windows fs bug #368

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
5802aae
changed place of the 'nprogress' by few px
Apr 10, 2024
30dc501
trying a configuration to increase 'maxConcurrentTasks'
Sep 9, 2024
ad4f4ea
removed @mui/icons-react from deps and let it in devDeps
Sep 9, 2024
d40a790
Merge branch 'development' of github.com:Proskomma/scribe-scripture-e…
Sep 20, 2024
eb714d6
fixed a bug that makes the app crashes on bad import from gitea AND m…
Sep 23, 2024
14af3c2
FIX pathes for windows and all systems
Sep 23, 2024
b2c05fb
update jxl-pdf and FIX for windows pathes
Sep 23, 2024
bd656a6
fixed lint errors
Sep 23, 2024
326069e
fixed windows path
Sep 23, 2024
8925291
reverted the spinner back to it's old position
Sep 23, 2024
e3f7325
FIX windows path in process
Sep 24, 2024
b0473ea
FIXED pdf generation for windows
Sep 25, 2024
cc51526
fixes and updated the module to make it easier to use
Sep 25, 2024
4279920
corrected eslint
Sep 25, 2024
c67ba5d
fixed list of book display
Sep 25, 2024
b5091ea
modified the code to avoid deleting all the wrappers in the list. Whe…
Sep 26, 2024
126b9d6
removed useless console.log
Sep 26, 2024
8f65591
eslint fix
Sep 26, 2024
3b4e1ad
slight text change
Sep 26, 2024
23a491c
installed 'puppeteer for electron' , we will now instanciate the brow…
Sep 30, 2024
a98307f
it's now install chrome automatically for puppeteer-core
Oct 1, 2024
5ea1101
installed graceful-fs and removed useless files and updated github ac…
Oct 1, 2024
02b264a
test to build actions for dcn/fix_windows_fs_bug
Oct 1, 2024
f62e774
getting rid of 'graceful-fs' and everything is working here
Oct 1, 2024
a2750dd
resolved last eslint error
Oct 1, 2024
d89c935
removed my branch from yml file
Oct 1, 2024
56e16fe
fixed macos install yaml
Oct 1, 2024
ec5758f
last fix for this to work on all platforms
Oct 1, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
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
Loading