Skip to content

Instantly share code, notes, and snippets.

@dceddia
dceddia / App.js
Created June 15, 2018 02:03
Upload pictures to the server
uploadPicture = () => {
return fetch(SERVER_URL, {
body: JSON.stringify({
image: this.state.photo.base64
}),
headers: {
'content-type': 'application/json'
},
method: 'POST'
})
@dceddia
dceddia / server.js
Created June 15, 2018 02:03
Bare bones Express server
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
// If your phone has a modern camera (unlike my iPhone 4S)
// you might wanna make this bigger.
app.use(bodyParser.json({ limit: '10mb' }));
// TODO: handle requests
@dceddia
dceddia / server.js
Created June 15, 2018 02:03
Handle GET requests
// View latest image
app.get('/', (req, res) => {
// Does this session have an image yet?
if(!latestPhoto) {
return res.status(404).send("Nothing here yet");
}
console.log('sending photo');
try {
@dceddia
dceddia / App.js
Created June 15, 2018 02:03
Timers trigger more timers.
takePicture = () => {
this.camera.takePictureAsync({
quality: 0.1,
base64: true,
exif: false
}).then(photo => {
this.setState({ photo });
// In 27 seconds, turn the camera back on
setTimeout(() => {
@dceddia
dceddia / App.js
Created June 15, 2018 02:03
Creating the Autoshoot component to render the Camera.
class Autoshoot extends React.Component {
render() {
return (
<View style={{ flex: 1, width: '100%' }}>
<Camera
style={{ flex: 1 }}
type={Camera.Constants.Type.back}
ref={cam => this.camera = cam}>
</Camera>
</View>
@dceddia
dceddia / App.js
Created June 15, 2018 02:03
Expo-generated App.js file
import React from 'react';
import { StyleSheet, Text, View } from 'react-native';
export default class App extends React.Component {
render() {
return (
<View style={styles.container}>
<Text>Open up App.js to start working on your app!</Text>
</View>
);
@dceddia
dceddia / App.js
Created June 15, 2018 02:03
Add the takePicture method
takePicture = () => {
this.camera.takePictureAsync({
quality: 0.1,
base64: true,
exif: false
}).then(photo => {
this.setState({ photo });
})
}
@dceddia
dceddia / App.js
Created June 15, 2018 02:03
Upload each picture as it is taken
// Here's the timer code, lifted from takePicture:
queuePhoto = () => {
// In 27 seconds, turn the camera back on
setTimeout(() => {
this.setState({ photo: null });
}, PHOTO_INTERVAL - FOCUS_TIME);
// In 30 seconds, take the next picture
setTimeout(this.takePicture, PHOTO_INTERVAL);
}
@dceddia
dceddia / App.js
Created June 15, 2018 02:03
Importing Camera and rendering based on permissions.
import React from 'react';
import { StyleSheet, Text, View } from 'react-native';
// add this:
import { Camera, Permissions } from 'expo';
export default class App extends React.Component {
// initialize state
state = {
cameraPermission: null
@dceddia
dceddia / App.js
Created June 15, 2018 02:03
Using Autoshoot inside App
render() {
const { cameraPermission } = this.state;
// Render one of 3 things depending on permissions
return (
<View style={styles.container}>
{cameraPermission === null ? (
<Text>Waiting for permission...</Text>
) : cameraPermission === false ? (
<Text>Permission denied</Text>