Skip to content

Instantly share code, notes, and snippets.

View jauntybrain's full-sized avatar
🤔
2B || !2B?

Pavel Ryabov jauntybrain

🤔
2B || !2B?
View GitHub Profile
@jauntybrain
jauntybrain / info.plist
Created September 9, 2023 08:02
info.plist implementation with iPad dynamic icons
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTDPLIST1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- ...the rest of info.plist -->
<key>CFBundleIcons</key>
<dict>
<!-- Default app icon -->
<key>CFBundlePrimaryIcon</key>
<dict>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTDPLIST1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- ...the rest of info.plist -->
<key>CFBundleIcons</key>
<dict>
<!-- Default app icon -->
<key>CFBundlePrimaryIcon</key>
<dict>
@jauntybrain
jauntybrain / index.ts
Created August 30, 2023 07:37
Index file for the Flow Links setup
import * as functions from "firebase-functions";
import * as admin from "firebase-admin";
import * as express from 'express';
import * as fs from "fs";
import * as path from 'path';
// Initialize Firebase Admin SDK
admin.initializeApp();
// Initialize Express app
@jauntybrain
jauntybrain / detectedObjects.dart
Created August 24, 2023 02:02
Detected objects stream controller from Firestore
StreamController<DetectedObject?> controller = StreamController<DetectedObject?>();
void dispose() {
controller.close();
}
void handle(DetectedObject data) async {
// Your handling logic for the detected object
}
@jauntybrain
jauntybrain / triggers.ts
Created August 24, 2023 01:30
Firestore Trigger on object detection
const CLOUD_FUNCTIONS_REGION = 'us-central1'; // Your functions region here
const COLLECTION_NAME = 'detectedObjects'; // Your specified collection here
export const processDetectedObjects = functions
.region(CLOUD_FUNCTIONS_REGION)
.firestore.document(`${COLLECTION_NAME}/{documentID}`)
.onCreate(async (snapshot) => {
try {
const objectsData = snapshot.data();
import * as functions from "firebase-functions";
import * as admin from "firebase-admin";
import * as fs from "fs";
import * as path from 'path';
const app = admin.initializeApp();
const firestore = admin.firestore(app);
exports.post = functions.https.onRequest(async (req, res) => {
// Get post ID from url params
@jauntybrain
jauntybrain / helpers.ts
Last active August 26, 2023 08:13
Firebase Dynamic Thumbnails - helpers file
import { CanvasRenderingContext2D, createCanvas, loadImage, registerFont } from 'canvas';
import * as path from 'path';
export async function createThumbnail(imageUrl: string, title: string, subtitle: string): Promise<Buffer> {
// Step 1: Pre-load font
registerFont(path.join(__dirname, '../assets/fonts/Poppins-Black.ttf'), { family: 'Poppins', weight: '900' });
registerFont(path.join(__dirname, '../assets/fonts/Poppins-Regular.ttf'), { family: 'Poppins', weight: '500' });
// Step 2: Create a canvas and load the image
// Note: 1200x630 is the recommended resolution for thumbnails
@jauntybrain
jauntybrain / index.ts
Last active August 7, 2023 19:44
Firebase Dynamic Thumbnail index file
import * as functions from "firebase-functions";
import * as admin from "firebase-admin";
import { getStorage, getDownloadURL } from 'firebase-admin/storage';
import * as fs from "fs";
import * as path from 'path';
import { createThumbnail } from "./util/helpers";
const app = admin.initializeApp();
const firestore = admin.firestore(app);