Skip to content

Commit

Permalink
support for custom fonts from appConfigs/fonts
Browse files Browse the repository at this point in the history
  • Loading branch information
pavjacko committed Sep 30, 2019
1 parent 05480d7 commit a98a8ea
Show file tree
Hide file tree
Showing 5 changed files with 103 additions and 73 deletions.
2 changes: 1 addition & 1 deletion packages/rnv/bin/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ program
.option('-i, --info', 'show full debug Info')
.option('-u, --update', 'force Update dependencies (iOS only)')
.option('-p, --platform [value]', 'select specific Platform')
.option('-c, --appConfigID <value>', 'select specific app Config id')
.option('-c, --appConfigID [value]', 'select specific app Config id')
.option('-t, --target <value>', 'select specific Target device/simulator')
.option('-T, --template <value>', 'select specific template')
.option('-d, --device [value]', 'select connected Device')
Expand Down
7 changes: 6 additions & 1 deletion packages/rnv/src/configTools/configParser.js
Original file line number Diff line number Diff line change
Expand Up @@ -384,6 +384,10 @@ const _loadConfigFiles = (c, fileObj, pathObj, extendDir) => {
path.join(extendDir, extendAppId),
pathObj.dir
];
pathObj.fontDirs = [
path.join(pathObj.dirs[0], 'fonts'),
path.join(pathObj.dirs[1], 'fonts')
];
loadFile(fileObj, pathObj, 'configBase');
}

Expand All @@ -396,14 +400,15 @@ const _loadConfigFiles = (c, fileObj, pathObj, extendDir) => {
export const setAppConfig = (c, appId) => {
logTask(`setAppConfig:${appId}`);

if (!appId || appId === '?') return;
if (!appId || appId === '?' || appId === true) return;

c.runtime.appId = appId;
c.runtime.appDir = path.join(c.paths.project.builds.dir, `${c.runtime.appId}_${c.runtime.platform}`);

_findAndSwitchAppConfigDir(c, appId);

_generateConfigPaths(c.paths.appConfig, path.join(c.paths.project.appConfigsDir, appId));
c.paths.appConfig.fontsDir = path.join(c.paths.appConfig.dir, 'fonts');
_loadConfigFiles(c, c.files.appConfig, c.paths.appConfig, c.paths.project.appConfigsDir);

const workspaceAppConfigsDir = getRealPath(c, c.buildConfig.workspaceAppConfigsDir);
Expand Down
40 changes: 18 additions & 22 deletions packages/rnv/src/platformTools/android/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import { logToSummary, logTask,
logDebug, logInfo,
logSuccess } from '../../systemTools/logger';
import { copyFileSync, mkdirSync, getRealPath } from '../../systemTools/fileutils';
import { copyAssetsFolder, copyBuildsFolder } from '../../projectTools/projectParser';
import { copyAssetsFolder, copyBuildsFolder, parseFonts } from '../../projectTools/projectParser';
import { IS_TABLET_ABOVE_INCH, ANDROID_WEAR, ANDROID, ANDROID_TV, CLI_ANDROID_EMULATOR, CLI_ANDROID_ADB, CLI_ANDROID_AVDMANAGER, CLI_ANDROID_SDKMANAGER } from '../../constants';
import { parsePlugins } from '../../pluginTools';
import { parseAndroidManifestSync, injectPluginManifestSync } from './manifestParser';
Expand Down Expand Up @@ -370,31 +370,27 @@ export const configureProject = (c, platform) => new Promise((resolve, reject) =
c.pluginConfigAndroid.pluginPackages = c.pluginConfigAndroid.pluginPackages.substring(0, c.pluginConfigAndroid.pluginPackages.length - 2);

// FONTS
if (c.buildConfig) {
if (fs.existsSync(c.paths.project.projectConfig.fontsDir)) {
fs.readdirSync(c.paths.project.projectConfig.fontsDir).forEach((font) => {
if (font.includes('.ttf') || font.includes('.otf')) {
const key = font.split('.')[0];
const { includedFonts } = c.buildConfig.common;
if (includedFonts) {
if (includedFonts.includes('*') || includedFonts.includes(key)) {
if (font) {
const fontSource = path.join(c.paths.project.projectConfig.dir, 'fonts', font);
if (fs.existsSync(fontSource)) {
const fontFolder = path.join(appFolder, 'app/src/main/assets/fonts');
mkdirSync(fontFolder);
const fontDest = path.join(fontFolder, font);
copyFileSync(fontSource, fontDest);
} else {
logWarning(`Font ${chalk.white(fontSource)} doesn't exist! Skipping.`);
}
}
parseFonts(c, (font, dir) => {
if (font.includes('.ttf') || font.includes('.otf')) {
const key = font.split('.')[0];
const { includedFonts } = c.buildConfig.common;
if (includedFonts) {
if (includedFonts.includes('*') || includedFonts.includes(key)) {
if (font) {
const fontSource = path.join(dir, font);
if (fs.existsSync(fontSource)) {
const fontFolder = path.join(appFolder, 'app/src/main/assets/fonts');
mkdirSync(fontFolder);
const fontDest = path.join(fontFolder, font);
copyFileSync(fontSource, fontDest);
} else {
logWarning(`Font ${chalk.white(fontSource)} doesn't exist! Skipping.`);
}
}
}
});
}
}
}
});

parseSettingsGradleSync(c, platform);
parseAppBuildGradleSync(c, platform);
Expand Down
41 changes: 19 additions & 22 deletions packages/rnv/src/platformTools/apple/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import {
getIP,
logSuccess,
} from '../../common';
import { copyAssetsFolder, copyBuildsFolder } from '../../projectTools/projectParser';
import { copyAssetsFolder, copyBuildsFolder, parseFonts } from '../../projectTools/projectParser';
import { copyFileSync, mkdirSync } from '../../systemTools/fileutils';
import { IOS, TVOS, MACOS } from '../../constants';
import {
Expand Down Expand Up @@ -400,29 +400,26 @@ const configureXcodeProject = (c, platform, ip, port) => new Promise((resolve, r
};

// FONTS
if (c.buildConfig) {
if (fs.existsSync(c.paths.project.projectConfig.fontsDir)) {
fs.readdirSync(c.paths.project.projectConfig.fontsDir).forEach((font) => {
if (font.includes('.ttf') || font.includes('.otf')) {
const key = font.split('.')[0];
const { includedFonts } = c.buildConfig.common;
if (includedFonts && (includedFonts.includes('*') || includedFonts.includes(key))) {
const fontSource = path.join(c.paths.project.projectConfig.dir, 'fonts', font);
if (fs.existsSync(fontSource)) {
const fontFolder = path.join(appFolder, 'fonts');
mkdirSync(fontFolder);
const fontDest = path.join(fontFolder, font);
copyFileSync(fontSource, fontDest);
c.pluginConfigiOS.embeddedFontSources.push(fontSource);
c.pluginConfigiOS.embeddedFonts.push(font);
} else {
logWarning(`Font ${chalk.white(fontSource)} doesn't exist! Skipping.`);
}
}
parseFonts(c, (font, dir) => {
if (font.includes('.ttf') || font.includes('.otf')) {
const key = font.split('.')[0];
const { includedFonts } = c.buildConfig.common;
if (includedFonts && (includedFonts.includes('*') || includedFonts.includes(key))) {
const fontSource = path.join(dir, font);
if (fs.existsSync(fontSource)) {
const fontFolder = path.join(appFolder, 'fonts');
mkdirSync(fontFolder);
const fontDest = path.join(fontFolder, font);
copyFileSync(fontSource, fontDest);
c.pluginConfigiOS.embeddedFontSources.push(fontSource);
c.pluginConfigiOS.embeddedFonts.push(font);
} else {
logWarning(`Font ${chalk.white(fontSource)} doesn't exist! Skipping.`);
}
});
}
}
}
});


// CHECK TEAM ID IF DEVICE
const tId = getConfigProp(c, platform, 'teamID');
Expand Down
86 changes: 59 additions & 27 deletions packages/rnv/src/projectTools/projectParser.js
Original file line number Diff line number Diff line change
Expand Up @@ -75,42 +75,46 @@ export const copyRuntimeAssets = c => new Promise((resolve, reject) => {
copyFolderContentsRecursiveSync(sourcePath, destPath);
}

// FONTS
let fontsObj = 'export default [';

if (c.buildConfig) {
if (!c.buildConfig.common) {
reject(`Your ${chalk.white(c.paths.appConfig.config)} is missconfigured. (Maybe you have older version?). Missing ${chalk.white('{ common: {} }')} object at root`);
return;
}
if (fs.existsSync(c.paths.project.projectConfig.fontsDir)) {
fs.readdirSync(c.paths.project.projectConfig.fontsDir).forEach((font) => {
if (font.includes('.ttf') || font.includes('.otf')) {
const key = font.split('.')[0];
const { includedFonts } = c.buildConfig.common;
if (includedFonts) {
if (includedFonts.includes('*') || includedFonts.includes(key)) {
if (font) {
const fontSource = path.join(c.paths.project.projectConfig.dir, 'fonts', font);
if (fs.existsSync(fontSource)) {
// const fontFolder = path.join(appFolder, 'app/src/main/assets/fonts');
// mkdirSync(fontFolder);
// const fontDest = path.join(fontFolder, font);
// copyFileSync(fontSource, fontDest);
fontsObj += `{
fontFamily: '${key}',
file: require('../../projectConfig/fonts/${font}'),
},`;
} else {
logWarning(`Font ${chalk.white(fontSource)} doesn't exist! Skipping.`);
}
}
}

// FONTS
let fontsObj = 'export default [';


parseFonts(c, (font, dir) => {
if (font.includes('.ttf') || font.includes('.otf')) {
const key = font.split('.')[0];
const { includedFonts } = c.buildConfig.common;
if (includedFonts) {
if (includedFonts.includes('*') || includedFonts.includes(key)) {
if (font) {
const fontSource = path.join(dir, font);

const relativePath = dir.replace(c.paths.project.dir, '');
console.log('SHKSJHKJS', relativePath);
if (fs.existsSync(fontSource)) {
// const fontFolder = path.join(appFolder, 'app/src/main/assets/fonts');
// mkdirSync(fontFolder);
// const fontDest = path.join(fontFolder, font);
// copyFileSync(fontSource, fontDest);
fontsObj += `{
fontFamily: '${key}',
file: require('../..${relativePath}/${font}'),
},`;
} else {
logWarning(`Font ${chalk.white(fontSource)} doesn't exist! Skipping.`);
}
}
}
});
}
}
}
});


fontsObj += '];';
if (fs.existsSync(c.paths.project.assets.runtimeDir)) {
Expand All @@ -131,6 +135,34 @@ export const copyRuntimeAssets = c => new Promise((resolve, reject) => {
});


export const parseFonts = (c, callback) => {
logTask('parseFonts');

if (c.buildConfig) {
// FONTS - PROJECT CONFIG
if (fs.existsSync(c.paths.project.projectConfig.fontsDir)) {
fs.readdirSync(c.paths.project.projectConfig.fontsDir).forEach((font) => {
if (callback) callback(font, c.paths.project.projectConfig.fontsDir);
});
}
// FONTS - APP CONFIG
if (c.paths.appConfig.fontsDirs) {
c.paths.appConfig.fontsDirs.forEach((v) => {
if (fs.existsSync(v)) {
fs.readdirSync(v).forEach((font) => {
if (callback) callback(font, v);
});
}
});
} else if (fs.existsSync(c.paths.appConfig.fontsDir)) {
fs.readdirSync(c.paths.appConfig.fontsDir).forEach((font) => {
if (callback) callback(font, c.paths.appConfig.fontsDir);
});
}
}
};


export const copySharedPlatforms = c => new Promise((resolve) => {
logTask(`_copySharedPlatform:${c.platform}`);

Expand Down

0 comments on commit a98a8ea

Please sign in to comment.