├── .watchmanconfig ├── .prettierignore ├── src ├── res │ ├── colors │ │ └── index.js │ └── images │ │ ├── logo.png │ │ ├── paypal.png │ │ ├── twitch.png │ │ ├── signature.png │ │ ├── Tipeee_logo.png │ │ ├── header-back.jpg │ │ └── twitch_round.png ├── data │ ├── store.js │ └── renegade │ │ ├── actions.js │ │ └── reducer.js ├── tools │ ├── Storage.js │ ├── Date.js │ ├── Device.js │ └── Notification.js ├── screens │ ├── home │ │ ├── Home.js │ │ └── index.js │ ├── programs │ │ ├── index.js │ │ ├── Programs.js │ │ └── ProgramsDetails.js │ ├── index.js │ └── User.js ├── components │ ├── ScrollViewWithHeader.js │ ├── Header.js │ └── Agenda.js └── App.js ├── README.md ├── app.json ├── react-native.config.js ├── .firebaserc ├── ios ├── splash_base.png ├── stdrenegade │ ├── Images.xcassets │ │ ├── Contents.json │ │ └── AppIcon.appiconset │ │ │ ├── 100.png │ │ │ ├── 114.png │ │ │ ├── 120.png │ │ │ ├── 144.png │ │ │ ├── 152.png │ │ │ ├── 167.png │ │ │ ├── 180.png │ │ │ ├── 20.png │ │ │ ├── 29.png │ │ │ ├── 40.png │ │ │ ├── 50.png │ │ │ ├── 57.png │ │ │ ├── 58.png │ │ │ ├── 60.png │ │ │ ├── 72.png │ │ │ ├── 76.png │ │ │ ├── 80.png │ │ │ ├── 87.png │ │ │ ├── 1024.png │ │ │ └── Contents.json │ ├── main.m │ ├── Renegade.entitlements │ ├── AppDelegate.h │ ├── Info.plist │ ├── Base.lproj │ │ └── LaunchScreen.xib │ └── AppDelegate.m ├── stdrenegade-Bridging-Header.h ├── stdrenegade.xcodeproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── xcschemes │ │ ├── stdrenegade.xcscheme │ │ └── stdrenegade-tvOS.xcscheme ├── stdrenegade.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── stdrenegadeTests │ ├── Info.plist │ └── stdrenegadeTests.m ├── stdrenegade-tvOSTests │ └── Info.plist ├── Podfile ├── GoogleService-Info.plist ├── stdrenegade-tvOS │ └── Info.plist └── Podfile.lock ├── .gitattributes ├── android ├── app │ ├── debug.keystore │ ├── src │ │ ├── main │ │ │ ├── res │ │ │ │ ├── values │ │ │ │ │ ├── strings.xml │ │ │ │ │ ├── color.xml │ │ │ │ │ └── styles.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── drawable-hdpi │ │ │ │ │ └── ic_stat_notif_icon.png │ │ │ │ ├── drawable-mdpi │ │ │ │ │ └── ic_stat_notif_icon.png │ │ │ │ ├── drawable-xhdpi │ │ │ │ │ └── ic_stat_notif_icon.png │ │ │ │ ├── drawable-xxhdpi │ │ │ │ │ └── ic_stat_notif_icon.png │ │ │ │ └── drawable-xxxhdpi │ │ │ │ │ └── ic_stat_notif_icon.png │ │ │ ├── assets │ │ │ │ └── fonts │ │ │ │ │ ├── Entypo.ttf │ │ │ │ │ ├── Feather.ttf │ │ │ │ │ ├── Ionicons.ttf │ │ │ │ │ ├── Octicons.ttf │ │ │ │ │ ├── Zocial.ttf │ │ │ │ │ ├── EvilIcons.ttf │ │ │ │ │ ├── Foundation.ttf │ │ │ │ │ ├── FontAwesome.ttf │ │ │ │ │ ├── MaterialIcons.ttf │ │ │ │ │ ├── SimpleLineIcons.ttf │ │ │ │ │ ├── Montserrat-Light.ttf │ │ │ │ │ ├── Montserrat-Medium.ttf │ │ │ │ │ └── MaterialCommunityIcons.ttf │ │ │ ├── java │ │ │ │ └── fr │ │ │ │ │ └── studiorenegade │ │ │ │ │ ├── MainActivity.java │ │ │ │ │ ├── MainApplication.java │ │ │ │ │ └── ReactNativeFlipper.java │ │ │ └── AndroidManifest.xml │ │ └── debug │ │ │ └── AndroidManifest.xml │ ├── proguard-rules.pro │ ├── build_defs.bzl │ ├── _BUCK │ ├── google-services.json │ └── build.gradle ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── settings.gradle ├── build.gradle ├── gradle.properties ├── gradlew.bat └── gradlew ├── babel.config.js ├── assets └── fonts │ ├── Montserrat-Light.ttf │ └── Montserrat-Medium.ttf ├── firebase.json ├── .buckconfig ├── index.js ├── .prettierrc.js ├── __tests__ └── App-test.js ├── metro.config.js ├── .gitignore ├── LICENSE ├── package.json └── .flowconfig /.watchmanconfig: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | android 3 | ios -------------------------------------------------------------------------------- /src/res/colors/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | darkRed: "#b50812", 3 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Studio Renegade 2 | 3 | Studio Renegade mobile application 4 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "stdrenegade", 3 | "displayName": "stdrenegade" 4 | } 5 | -------------------------------------------------------------------------------- /react-native.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | assets: ["./assets/fonts/"], 3 | } 4 | -------------------------------------------------------------------------------- /.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "projects": { 3 | "renegade": "studio-renegade-9c4bd" 4 | } 5 | } -------------------------------------------------------------------------------- /ios/splash_base.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/ios/splash_base.png -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.pbxproj -text 2 | 3 | # specific for windows script files 4 | *.bat text eol=crlf 5 | -------------------------------------------------------------------------------- /src/res/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/src/res/images/logo.png -------------------------------------------------------------------------------- /android/app/debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/debug.keystore -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ["module:metro-react-native-babel-preset"], 3 | } 4 | -------------------------------------------------------------------------------- /src/res/images/paypal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/src/res/images/paypal.png -------------------------------------------------------------------------------- /src/res/images/twitch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/src/res/images/twitch.png -------------------------------------------------------------------------------- /src/res/images/signature.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/src/res/images/signature.png -------------------------------------------------------------------------------- /src/res/images/Tipeee_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/src/res/images/Tipeee_logo.png -------------------------------------------------------------------------------- /src/res/images/header-back.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/src/res/images/header-back.jpg -------------------------------------------------------------------------------- /src/res/images/twitch_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/src/res/images/twitch_round.png -------------------------------------------------------------------------------- /assets/fonts/Montserrat-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/assets/fonts/Montserrat-Light.ttf -------------------------------------------------------------------------------- /android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Renegade 3 | 4 | -------------------------------------------------------------------------------- /assets/fonts/Montserrat-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/assets/fonts/Montserrat-Medium.ttf -------------------------------------------------------------------------------- /firebase.json: -------------------------------------------------------------------------------- 1 | { 2 | "functions": { 3 | "predeploy": ["npm --prefix \"$RESOURCE_DIR\" run lint"] 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /ios/stdrenegade/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Entypo.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/assets/fonts/Entypo.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Feather.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/assets/fonts/Feather.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Ionicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/assets/fonts/Ionicons.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Octicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/assets/fonts/Octicons.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Zocial.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/assets/fonts/Zocial.ttf -------------------------------------------------------------------------------- /.buckconfig: -------------------------------------------------------------------------------- 1 | 2 | [android] 3 | target = Google Inc.:Google APIs:23 4 | 5 | [maven_repositories] 6 | central = https://repo1.maven.org/maven2 7 | -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/EvilIcons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/assets/fonts/EvilIcons.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Foundation.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/assets/fonts/Foundation.ttf -------------------------------------------------------------------------------- /ios/stdrenegade-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/FontAwesome.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/assets/fonts/FontAwesome.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/MaterialIcons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/assets/fonts/MaterialIcons.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/SimpleLineIcons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/assets/fonts/SimpleLineIcons.ttf -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Montserrat-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/assets/fonts/Montserrat-Light.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Montserrat-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/assets/fonts/Montserrat-Medium.ttf -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/color.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #B60102 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /ios/stdrenegade/Images.xcassets/AppIcon.appiconset/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/ios/stdrenegade/Images.xcassets/AppIcon.appiconset/100.png -------------------------------------------------------------------------------- /ios/stdrenegade/Images.xcassets/AppIcon.appiconset/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/ios/stdrenegade/Images.xcassets/AppIcon.appiconset/114.png -------------------------------------------------------------------------------- /ios/stdrenegade/Images.xcassets/AppIcon.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/ios/stdrenegade/Images.xcassets/AppIcon.appiconset/120.png -------------------------------------------------------------------------------- /ios/stdrenegade/Images.xcassets/AppIcon.appiconset/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/ios/stdrenegade/Images.xcassets/AppIcon.appiconset/144.png -------------------------------------------------------------------------------- /ios/stdrenegade/Images.xcassets/AppIcon.appiconset/152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/ios/stdrenegade/Images.xcassets/AppIcon.appiconset/152.png -------------------------------------------------------------------------------- /ios/stdrenegade/Images.xcassets/AppIcon.appiconset/167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/ios/stdrenegade/Images.xcassets/AppIcon.appiconset/167.png -------------------------------------------------------------------------------- /ios/stdrenegade/Images.xcassets/AppIcon.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/ios/stdrenegade/Images.xcassets/AppIcon.appiconset/180.png -------------------------------------------------------------------------------- /ios/stdrenegade/Images.xcassets/AppIcon.appiconset/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/ios/stdrenegade/Images.xcassets/AppIcon.appiconset/20.png -------------------------------------------------------------------------------- /ios/stdrenegade/Images.xcassets/AppIcon.appiconset/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/ios/stdrenegade/Images.xcassets/AppIcon.appiconset/29.png -------------------------------------------------------------------------------- /ios/stdrenegade/Images.xcassets/AppIcon.appiconset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/ios/stdrenegade/Images.xcassets/AppIcon.appiconset/40.png -------------------------------------------------------------------------------- /ios/stdrenegade/Images.xcassets/AppIcon.appiconset/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/ios/stdrenegade/Images.xcassets/AppIcon.appiconset/50.png -------------------------------------------------------------------------------- /ios/stdrenegade/Images.xcassets/AppIcon.appiconset/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/ios/stdrenegade/Images.xcassets/AppIcon.appiconset/57.png -------------------------------------------------------------------------------- /ios/stdrenegade/Images.xcassets/AppIcon.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/ios/stdrenegade/Images.xcassets/AppIcon.appiconset/58.png -------------------------------------------------------------------------------- /ios/stdrenegade/Images.xcassets/AppIcon.appiconset/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/ios/stdrenegade/Images.xcassets/AppIcon.appiconset/60.png -------------------------------------------------------------------------------- /ios/stdrenegade/Images.xcassets/AppIcon.appiconset/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/ios/stdrenegade/Images.xcassets/AppIcon.appiconset/72.png -------------------------------------------------------------------------------- /ios/stdrenegade/Images.xcassets/AppIcon.appiconset/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/ios/stdrenegade/Images.xcassets/AppIcon.appiconset/76.png -------------------------------------------------------------------------------- /ios/stdrenegade/Images.xcassets/AppIcon.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/ios/stdrenegade/Images.xcassets/AppIcon.appiconset/80.png -------------------------------------------------------------------------------- /ios/stdrenegade/Images.xcassets/AppIcon.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/ios/stdrenegade/Images.xcassets/AppIcon.appiconset/87.png -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-hdpi/ic_stat_notif_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/res/drawable-hdpi/ic_stat_notif_icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-mdpi/ic_stat_notif_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/res/drawable-mdpi/ic_stat_notif_icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /ios/stdrenegade/Images.xcassets/AppIcon.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/ios/stdrenegade/Images.xcassets/AppIcon.appiconset/1024.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xhdpi/ic_stat_notif_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/res/drawable-xhdpi/ic_stat_notif_icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxhdpi/ic_stat_notif_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/res/drawable-xxhdpi/ic_stat_notif_icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-xxxhdpi/ic_stat_notif_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psegalen/stdrenegade/HEAD/android/app/src/main/res/drawable-xxxhdpi/ic_stat_notif_icon.png -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'stdrenegade' 2 | apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) 3 | include ':app' 4 | -------------------------------------------------------------------------------- /ios/stdrenegade.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @format 3 | */ 4 | 5 | import { AppRegistry } from "react-native" 6 | import App from "./src/App" 7 | import { name as appName } from "./app.json" 8 | 9 | AppRegistry.registerComponent(appName, () => App) 10 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-all.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /ios/stdrenegade/main.m: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | #import "AppDelegate.h" 4 | 5 | int main(int argc, char * argv[]) { 6 | @autoreleasepool { 7 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | printWidth: 120, 3 | useTabs: false, 4 | tabWidth: 4, 5 | semi: false, 6 | singleQuote: false, 7 | trailingComma: "es5", 8 | bracketSpacing: true, 9 | jsxBracketSameLine: false, 10 | arrowParens: "always", 11 | } 12 | -------------------------------------------------------------------------------- /src/data/store.js: -------------------------------------------------------------------------------- 1 | import { createStore, combineReducers } from "redux" 2 | import renegadeReducer from "./renegade/reducer" 3 | 4 | const rootReducer = combineReducers({ 5 | renegade: renegadeReducer, 6 | }) 7 | 8 | const store = createStore(rootReducer) 9 | 10 | export default store 11 | -------------------------------------------------------------------------------- /ios/stdrenegade/Renegade.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | aps-environment 6 | development 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/stdrenegade.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/stdrenegade.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/stdrenegade.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /__tests__/App-test.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @format 3 | */ 4 | 5 | import "react-native" 6 | import React from "react" 7 | import App from "../App" 8 | 9 | // Note: test renderer must be required after react-native. 10 | import renderer from "react-test-renderer" 11 | 12 | it("renders correctly", () => { 13 | renderer.create() 14 | }) 15 | -------------------------------------------------------------------------------- /src/data/renegade/actions.js: -------------------------------------------------------------------------------- 1 | export const renegadeActions = { 2 | FETCH_RENEGADE_DATA: "FETCH_RENEGADE_DATA", 3 | STORE_RENEGADE_DATA: "STORE_RENEGADE_DATA", 4 | } 5 | 6 | export const fetchRenegadeData = () => ({ type: renegadeActions.FETCH_RENEGADE_DATA }) 7 | 8 | export const storeRenegadeData = (data) => ({ 9 | type: renegadeActions.STORE_RENEGADE_DATA, 10 | data, 11 | }) 12 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /metro.config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Metro configuration for React Native 3 | * https://github.com/facebook/react-native 4 | * 5 | * @format 6 | */ 7 | 8 | module.exports = { 9 | transformer: { 10 | getTransformOptions: async () => ({ 11 | transform: { 12 | experimentalImportSupport: false, 13 | inlineRequires: false, 14 | }, 15 | }), 16 | }, 17 | } 18 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /ios/stdrenegade/AppDelegate.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Facebook, Inc. and its affiliates. 3 | * 4 | * This source code is licensed under the MIT license found in the 5 | * LICENSE file in the root directory of this source tree. 6 | */ 7 | 8 | #import 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (nonatomic, strong) UIWindow *window; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /android/app/src/main/java/fr/studiorenegade/MainActivity.java: -------------------------------------------------------------------------------- 1 | package fr.studiorenegade; 2 | 3 | import com.facebook.react.ReactActivity; 4 | 5 | public class MainActivity extends ReactActivity { 6 | 7 | /** 8 | * Returns the name of the main component registered from JavaScript. 9 | * This is used to schedule rendering of the component. 10 | */ 11 | @Override 12 | protected String getMainComponentName() { 13 | return "stdrenegade"; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | -------------------------------------------------------------------------------- /src/tools/Storage.js: -------------------------------------------------------------------------------- 1 | import AsyncStorage from "@react-native-community/async-storage" 2 | 3 | const storageKeys = { 4 | RENEGADE_RESUB_DATE: "RENEGADE_RESUB_DATE", 5 | } 6 | 7 | const Storage = { 8 | set: (key, value) => AsyncStorage.setItem(key, value), 9 | get: (key) => AsyncStorage.getItem(key), 10 | setResubDate: (date) => Storage.set(storageKeys.RENEGADE_RESUB_DATE, `${date.getTime()}`), 11 | getResubDate: () => 12 | Storage.get(storageKeys.RENEGADE_RESUB_DATE).then((value) => value && new Date(parseInt(value))), 13 | } 14 | 15 | export default Storage 16 | -------------------------------------------------------------------------------- /src/screens/home/Home.js: -------------------------------------------------------------------------------- 1 | import React from "react" 2 | import { SafeAreaView, View } from "react-native" 3 | import Agenda from "../../components/Agenda" 4 | import Header from "../../components/Header" 5 | import Device from "../../tools/Device" 6 | 7 | const Home = (props) => ( 8 | 9 | 10 | 11 | 12 | 13 | ); 14 | 15 | export default Home; 16 | -------------------------------------------------------------------------------- /android/app/build_defs.bzl: -------------------------------------------------------------------------------- 1 | """Helper definitions to glob .aar and .jar targets""" 2 | 3 | def create_aar_targets(aarfiles): 4 | for aarfile in aarfiles: 5 | name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")] 6 | lib_deps.append(":" + name) 7 | android_prebuilt_aar( 8 | name = name, 9 | aar = aarfile, 10 | ) 11 | 12 | def create_jar_targets(jarfiles): 13 | for jarfile in jarfiles: 14 | name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")] 15 | lib_deps.append(":" + name) 16 | prebuilt_jar( 17 | name = name, 18 | binary_jar = jarfile, 19 | ) 20 | -------------------------------------------------------------------------------- /ios/stdrenegadeTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/tools/Date.js: -------------------------------------------------------------------------------- 1 | export const remainingTime = (timestamp) => { 2 | const days = ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"] 3 | const now = new Date() 4 | const then = new Date(timestamp) 5 | const diff = timestamp - now.getTime() 6 | if (then.toDateString() == now.toDateString()) { 7 | // Later today 8 | return `Aujourd'hui à ${then.getHours()}h${zeroPad(then.getMinutes())}` 9 | } 10 | if (diff < 48 * 3600 * 1000 && then.getDay() === (now.getDay() + 1) % 7) { 11 | // Tomorrow 12 | return `Demain à ${then.getHours()}h${zeroPad(then.getMinutes())}` 13 | } 14 | return `${days[then.getDay()]} ${then.getDate()} à ${then.getHours()}h${zeroPad(then.getMinutes())}` 15 | } 16 | 17 | export const zeroPad = (number) => { 18 | return number > 9 ? `${number}` : `0${number}` 19 | } 20 | -------------------------------------------------------------------------------- /ios/stdrenegade-tvOSTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /ios/Podfile: -------------------------------------------------------------------------------- 1 | require_relative '../node_modules/react-native/scripts/react_native_pods' 2 | require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' 3 | 4 | platform :ios, '10.0' 5 | 6 | target 'stdrenegade' do 7 | config = use_native_modules! 8 | use_react_native!(:path => config["reactNativePath"]) 9 | 10 | # Required by RNFirebase 11 | pod 'Firebase/Core', '~> 6.3.0' 12 | pod 'Firebase/Messaging', '~> 6.3.0' 13 | 14 | target 'stdrenegadeTests' do 15 | inherit! :complete 16 | # Pods for testing 17 | end 18 | 19 | # Enables Flipper. 20 | # 21 | # Note that if you have use_frameworks! enabled, Flipper will not work and 22 | # you should disable these next few lines. 23 | use_flipper! 24 | post_install do |installer| 25 | flipper_post_install(installer) 26 | end 27 | end 28 | 29 | target 'stdrenegade-tvOS' do 30 | # Pods for stdrenegade-tvOS 31 | 32 | target 'stdrenegade-tvOSTests' do 33 | inherit! :search_paths 34 | # Pods for testing 35 | end 36 | 37 | end 38 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OSX 2 | # 3 | .DS_Store 4 | 5 | # Xcode 6 | # 7 | build/ 8 | *.pbxuser 9 | !default.pbxuser 10 | *.mode1v3 11 | !default.mode1v3 12 | *.mode2v3 13 | !default.mode2v3 14 | *.perspectivev3 15 | !default.perspectivev3 16 | xcuserdata 17 | *.xccheckout 18 | *.moved-aside 19 | DerivedData 20 | *.hmap 21 | *.ipa 22 | *.xcuserstate 23 | 24 | # Android/IntelliJ 25 | # 26 | build/ 27 | .idea 28 | .gradle 29 | local.properties 30 | *.iml 31 | 32 | # node.js 33 | # 34 | node_modules/ 35 | npm-debug.log 36 | yarn-error.log 37 | 38 | # BUCK 39 | buck-out/ 40 | \.buckd/ 41 | *.keystore 42 | *.jks 43 | !debug.keystore 44 | 45 | # fastlane 46 | # 47 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 48 | # screenshots whenever they are needed. 49 | # For more information about the recommended setup visit: 50 | # https://docs.fastlane.tools/best-practices/source-control/ 51 | 52 | */fastlane/report.xml 53 | */fastlane/Preview.html 54 | */fastlane/screenshots 55 | 56 | # Bundle artifact 57 | *.jsbundle 58 | 59 | # CocoaPods 60 | /ios/Pods/ 61 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Pierre Segalen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/screens/home/index.js: -------------------------------------------------------------------------------- 1 | import React from "react" 2 | import { createStackNavigator } from "react-navigation-stack" 3 | 4 | import Home from "./Home" 5 | import ProgramsDetails from "../programs/ProgramsDetails" 6 | 7 | import Header from "../../components/Header" 8 | 9 | export const HomeRoutes = { 10 | homeHome: "HOME_HOME", 11 | homeDetails: "HOME_DETAILS", 12 | } 13 | 14 | export default createStackNavigator( 15 | { 16 | [HomeRoutes.homeHome]: Home, 17 | [HomeRoutes.homeDetails]: ProgramsDetails, 18 | }, 19 | { 20 | defaultNavigationOptions: ({ navigation }) => { 21 | const { params = {} } = navigation.state 22 | const { scrollContentYOffset } = params 23 | return { 24 | header: ({scene}) => ( 25 |
31 | ), 32 | } 33 | }, 34 | } 35 | ) 36 | -------------------------------------------------------------------------------- /src/screens/programs/index.js: -------------------------------------------------------------------------------- 1 | import React from "react" 2 | import { createStackNavigator } from "react-navigation-stack" 3 | 4 | import Programs from "./Programs" 5 | import ProgramsDetails from "./ProgramsDetails" 6 | 7 | import Header from "../../components/Header" 8 | 9 | export const ProgramRoutes = { 10 | programsHome: "PROGRAMS_HOME", 11 | programsDetails: "PROGRAMS_DETAILS", 12 | } 13 | 14 | export default createStackNavigator( 15 | { 16 | [ProgramRoutes.programsHome]: Programs, 17 | [ProgramRoutes.programsDetails]: ProgramsDetails, 18 | }, 19 | { 20 | defaultNavigationOptions: ({ navigation }) => { 21 | const { params = {} } = navigation.state 22 | const { scrollContentYOffset } = params 23 | return { 24 | header: ({ scene }) => ( 25 |
31 | ), 32 | } 33 | }, 34 | } 35 | ) 36 | -------------------------------------------------------------------------------- /src/tools/Device.js: -------------------------------------------------------------------------------- 1 | import { Platform, StatusBar, Linking } from "react-native" 2 | import DeviceInfo from "react-native-device-info" 3 | 4 | const Device = { 5 | isAndroid() { 6 | return Platform.OS === "android" 7 | }, 8 | getStatusBarPadding() { 9 | return Platform.select({ ios: 0, android: StatusBar.currentHeight || 0 }) 10 | }, 11 | getStatusBarHeight() { 12 | if (Platform.OS === "ios") { 13 | return DeviceInfo.hasNotch() ? 40 : 20 14 | } 15 | return StatusBar.currentHeight 16 | }, 17 | getBackArrowPosition(statusBarHeight) { 18 | return statusBarHeight + 10 19 | }, 20 | getDeviceName() { 21 | return DeviceInfo.getDeviceName() 22 | }, 23 | getDeviceModel() { 24 | return `${DeviceInfo.getBrand()} - ${DeviceInfo.getModel()}` 25 | }, 26 | openTwitch() { 27 | const twitchWeb = "https://twitch.tv/studiorenegade" 28 | const twitchApp = "twitch://stream/studiorenegade" 29 | Linking.canOpenURL(twitchApp).then((canOpen) => { 30 | if (canOpen) { 31 | Linking.openURL(twitchApp) 32 | } else { 33 | Linking.openURL(twitchWeb) 34 | } 35 | }) 36 | }, 37 | } 38 | 39 | export default Device 40 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | ext { 5 | buildToolsVersion = "29.0.2" 6 | minSdkVersion = 21 7 | compileSdkVersion = 29 8 | targetSdkVersion = 29 9 | } 10 | repositories { 11 | google() 12 | jcenter() 13 | } 14 | dependencies { 15 | classpath("com.android.tools.build:gradle:3.5.3") 16 | classpath 'com.google.gms:google-services:4.2.0' 17 | 18 | // NOTE: Do not place your application dependencies here; they belong 19 | // in the individual module build.gradle files 20 | } 21 | } 22 | 23 | allprojects { 24 | repositories { 25 | google() 26 | mavenLocal() 27 | jcenter() 28 | maven { url 'https://www.jitpack.io' } 29 | maven { 30 | // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm 31 | url "$rootDir/../node_modules/react-native/android" 32 | } 33 | maven { 34 | // Android JSC is installed from npm 35 | url("$rootDir/../node_modules/jsc-android/dist") 36 | } 37 | } 38 | } 39 | 40 | subprojects { 41 | afterEvaluate {project -> 42 | if (project.hasProperty("android")) { 43 | android { 44 | compileSdkVersion 28 45 | buildToolsVersion "28.0.3" 46 | } 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /android/app/_BUCK: -------------------------------------------------------------------------------- 1 | # To learn about Buck see [Docs](https://buckbuild.com/). 2 | # To run your application with Buck: 3 | # - install Buck 4 | # - `npm start` - to start the packager 5 | # - `cd android` 6 | # - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"` 7 | # - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck 8 | # - `buck install -r android/app` - compile, install and run application 9 | # 10 | 11 | load(":build_defs.bzl", "create_aar_targets", "create_jar_targets") 12 | 13 | lib_deps = [] 14 | 15 | create_aar_targets(glob(["libs/*.aar"])) 16 | 17 | create_jar_targets(glob(["libs/*.jar"])) 18 | 19 | android_library( 20 | name = "all-libs", 21 | exported_deps = lib_deps, 22 | ) 23 | 24 | android_library( 25 | name = "app-code", 26 | srcs = glob([ 27 | "src/main/java/**/*.java", 28 | ]), 29 | deps = [ 30 | ":all-libs", 31 | ":build_config", 32 | ":res", 33 | ], 34 | ) 35 | 36 | android_build_config( 37 | name = "build_config", 38 | package = "com.stdrenegade", 39 | ) 40 | 41 | android_resource( 42 | name = "res", 43 | package = "com.stdrenegade", 44 | res = "src/main/res", 45 | ) 46 | 47 | android_binary( 48 | name = "app", 49 | keystore = "//android/keystores:debug", 50 | manifest = "src/main/AndroidManifest.xml", 51 | package_type = "debug", 52 | deps = [ 53 | ":app-code", 54 | ], 55 | ) 56 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m 13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true 19 | 20 | APP_RELEASE_STORE_FILE=renegade-upload-key.keystore 21 | APP_RELEASE_KEY_ALIAS=upload 22 | APP_RELEASE_STORE_PASSWORD=RenegadeApp 23 | APP_RELEASE_KEY_PASSWORD=RenegadeApp 24 | 25 | # AndroidX package structure to make it clearer which packages are bundled with the 26 | # Android operating system, and which are packaged with your app's APK 27 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 28 | android.useAndroidX=true 29 | # Automatically convert third-party libraries to use AndroidX 30 | android.enableJetifier=true 31 | 32 | # Version of flipper SDK to use with React Native 33 | FLIPPER_VERSION=0.37.0 34 | -------------------------------------------------------------------------------- /ios/GoogleService-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AD_UNIT_ID_FOR_BANNER_TEST 6 | ca-app-pub-3940256099942544/2934735716 7 | AD_UNIT_ID_FOR_INTERSTITIAL_TEST 8 | ca-app-pub-3940256099942544/4411468910 9 | CLIENT_ID 10 | 92918735411-rq1s8nc0ndin7svmft84brggfgmqtfg1.apps.googleusercontent.com 11 | REVERSED_CLIENT_ID 12 | com.googleusercontent.apps.92918735411-rq1s8nc0ndin7svmft84brggfgmqtfg1 13 | API_KEY 14 | AIzaSyBNba6fp4CzsA1DMxiBtSONS-tuhH1soLI 15 | GCM_SENDER_ID 16 | 92918735411 17 | PLIST_VERSION 18 | 1 19 | BUNDLE_ID 20 | fr.studiorenegade.application 21 | PROJECT_ID 22 | studio-renegade-9c4bd 23 | STORAGE_BUCKET 24 | studio-renegade-9c4bd.appspot.com 25 | IS_ADS_ENABLED 26 | 27 | IS_ANALYTICS_ENABLED 28 | 29 | IS_APPINVITE_ENABLED 30 | 31 | IS_GCM_ENABLED 32 | 33 | IS_SIGNIN_ENABLED 34 | 35 | GOOGLE_APP_ID 36 | 1:92918735411:ios:1facbd5ff74f3787 37 | DATABASE_URL 38 | https://studio-renegade-9c4bd.firebaseio.com 39 | 40 | -------------------------------------------------------------------------------- /ios/stdrenegade-tvOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | NSAppTransportSecurity 26 | 27 | NSExceptionDomains 28 | 29 | localhost 30 | 31 | NSExceptionAllowsInsecureHTTPLoads 32 | 33 | 34 | 35 | 36 | NSLocationWhenInUseUsageDescription 37 | 38 | UILaunchStoryboardName 39 | LaunchScreen 40 | UIRequiredDeviceCapabilities 41 | 42 | armv7 43 | 44 | UISupportedInterfaceOrientations 45 | 46 | UIInterfaceOrientationPortrait 47 | UIInterfaceOrientationLandscapeLeft 48 | UIInterfaceOrientationLandscapeRight 49 | 50 | UIViewControllerBasedStatusBarAppearance 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /src/screens/index.js: -------------------------------------------------------------------------------- 1 | import React from "react" 2 | import { createBottomTabNavigator } from "react-navigation-tabs" 3 | import IconII from "react-native-vector-icons/Ionicons" 4 | import IconFA from "react-native-vector-icons/FontAwesome" 5 | 6 | import HomeNavigator, { HomeRoutes } from "./home" 7 | import ProgramsNavigator, { ProgramRoutes } from "./programs" 8 | 9 | import Colors from "../res/colors" 10 | import User from "./User" 11 | import { createAppContainer } from "react-navigation" 12 | 13 | export const Routes = { 14 | home: "HOME", 15 | programs: "PROGRAMS", 16 | user: "USER", 17 | } 18 | 19 | HomeNavigator.navigationOptions = { 20 | tabBarIcon: ({ tintColor }) => , 21 | tabBarLabel: "Accueil", 22 | tabBarOnPress: (tab) => { 23 | tab.navigation.navigate({ routeName: HomeRoutes.homeHome }) 24 | }, 25 | } 26 | 27 | ProgramsNavigator.navigationOptions = { 28 | tabBarIcon: ({ tintColor }) => , 29 | tabBarLabel: "Émissions", 30 | tabBarOnPress: (tab) => { 31 | tab.navigation.navigate({ routeName: ProgramRoutes.programsHome }) 32 | }, 33 | } 34 | 35 | User.navigationOptions = { 36 | tabBarIcon: ({ tintColor }) => , 37 | tabBarLabel: "Paramètres", 38 | } 39 | 40 | const bottom = createBottomTabNavigator( 41 | { 42 | [Routes.home]: HomeNavigator, 43 | [Routes.programs]: ProgramsNavigator, 44 | [Routes.user]: User, 45 | }, 46 | { 47 | tabBarOptions: { 48 | activeTintColor: Colors.darkRed, 49 | inactiveTintColor: "gray", 50 | }, 51 | } 52 | ) 53 | 54 | export default createAppContainer(bottom) 55 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "stdrenegade", 3 | "version": "0.0.1", 4 | "private": true, 5 | "scripts": { 6 | "android": "react-native run-android", 7 | "ios": "react-native run-ios", 8 | "start": "react-native start", 9 | "test": "jest", 10 | "prettier-project": "prettier --write '**/*.{js,jsx,json}'", 11 | "precommit": "pretty-quick --staged", 12 | "lint": "eslint ." 13 | }, 14 | "dependencies": { 15 | "@react-native-community/async-storage": "1.12.0", 16 | "@react-native-community/masked-view": "0.1.10", 17 | "react": "16.13.1", 18 | "react-native": "0.63.2", 19 | "react-native-date-picker": "3.2.3", 20 | "react-native-device-info": "6.0.2", 21 | "react-native-firebase": "^5.5.6", 22 | "react-native-gesture-handler": "1.8.0", 23 | "react-native-reanimated": "1.13.0", 24 | "react-native-safe-area-context": "3.1.7", 25 | "react-native-screens": "2.10.1", 26 | "react-native-vector-icons": "7.1.0", 27 | "react-navigation": "4.4.0", 28 | "react-navigation-stack": "2.8.2", 29 | "react-navigation-tabs": "2.9.0", 30 | "react-redux": "7.2.1", 31 | "redux": "4.0.5" 32 | }, 33 | "devDependencies": { 34 | "@babel/core": "7.8.4", 35 | "@babel/runtime": "7.8.4", 36 | "@react-native-community/eslint-config": "1.1.0", 37 | "babel-jest": "25.1.0", 38 | "eslint": "6.5.1", 39 | "husky": "4.3.0", 40 | "jest": "25.1.0", 41 | "metro-react-native-babel-preset": "0.59.0", 42 | "prettier": "2.1.1", 43 | "pretty-quick": "3.0.2", 44 | "react-test-renderer": "16.13.1" 45 | }, 46 | "jest": { 47 | "preset": "react-native" 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /ios/stdrenegadeTests/stdrenegadeTests.m: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | #import 5 | #import 6 | 7 | #define TIMEOUT_SECONDS 600 8 | #define TEXT_TO_LOOK_FOR @"Welcome to React" 9 | 10 | @interface stdrenegadeTests : XCTestCase 11 | 12 | @end 13 | 14 | @implementation stdrenegadeTests 15 | 16 | - (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test 17 | { 18 | if (test(view)) { 19 | return YES; 20 | } 21 | for (UIView *subview in [view subviews]) { 22 | if ([self findSubviewInView:subview matching:test]) { 23 | return YES; 24 | } 25 | } 26 | return NO; 27 | } 28 | 29 | - (void)testRendersWelcomeScreen 30 | { 31 | UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController]; 32 | NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; 33 | BOOL foundElement = NO; 34 | 35 | __block NSString *redboxError = nil; 36 | #ifdef DEBUG 37 | RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { 38 | if (level >= RCTLogLevelError) { 39 | redboxError = message; 40 | } 41 | }); 42 | #endif 43 | 44 | while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { 45 | [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 46 | [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 47 | 48 | foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) { 49 | if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { 50 | return YES; 51 | } 52 | return NO; 53 | }]; 54 | } 55 | 56 | #ifdef DEBUG 57 | RCTSetLogFunction(RCTDefaultLogFunction); 58 | #endif 59 | 60 | XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); 61 | XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); 62 | } 63 | 64 | 65 | @end 66 | -------------------------------------------------------------------------------- /src/tools/Notification.js: -------------------------------------------------------------------------------- 1 | import firebase from "react-native-firebase" 2 | import { Platform } from "react-native" 3 | import Storage from "./Storage" 4 | 5 | const Notification = { 6 | cancelNotifications: () => { 7 | firebase.notifications().cancelAllNotifications() 8 | firebase.notifications().removeAllDeliveredNotifications() 9 | }, 10 | createScheduledNotification: (title, body, date) => { 11 | const notification = new firebase.notifications.Notification() 12 | .setNotificationId(`RenegadeScheduledNotif${parseInt(Math.random() * 1000000)}`) 13 | .setTitle(title) 14 | .setBody(body) 15 | .setData({ action: "resub" }) 16 | 17 | if (Platform.OS === "android") { 18 | notification.android 19 | .setChannelId("renegade") 20 | .android.setSmallIcon("ic_stat_notif_icon") 21 | .android.setColor("#B60102") 22 | } 23 | 24 | console.log(notification, date) 25 | 26 | firebase 27 | .notifications() 28 | .scheduleNotification(notification, { 29 | fireDate: date.getTime(), 30 | }) 31 | .then((res) => console.log(res)) 32 | }, 33 | renewNotification: (date) => { 34 | Storage.setResubDate(date) 35 | Notification.cancelNotifications() 36 | Notification.createScheduledNotification( 37 | "Renegade Resub", 38 | "Pensez à renouveler votre abonnement Twitch Prime à la chaîne !", 39 | date 40 | ) 41 | }, 42 | createChannel: () => { 43 | if (Platform.OS === "android") { 44 | const channel = new firebase.notifications.Android.Channel( 45 | "renegade", 46 | "Studio Renegade", 47 | firebase.notifications.Android.Importance.Max 48 | ).setDescription("Notifications du Studio Renegade") 49 | 50 | firebase.notifications().android.createChannel(channel) 51 | } 52 | }, 53 | } 54 | 55 | export default Notification 56 | -------------------------------------------------------------------------------- /src/data/renegade/reducer.js: -------------------------------------------------------------------------------- 1 | import { renegadeActions } from "./actions" 2 | import { remainingTime } from "../../tools/Date" 3 | 4 | const initialState = { 5 | events: [], 6 | programs: [], 7 | streamers: [], 8 | streams: [], 9 | isLoading: false, 10 | } 11 | 12 | const renegadeReducer = (state = initialState, action) => { 13 | switch (action.type) { 14 | case renegadeActions.STORE_RENEGADE_DATA: 15 | const filteredEvents = action.data.events 16 | .sort((a, b) => a.time_start - b.time_start) 17 | .filter((value) => new Date().getTime() < value.time_start * 1000) 18 | const programs = action.data.programs.map((program) => { 19 | const nextLive = filteredEvents.find((event) => event.program === program.id) 20 | const anim = [] 21 | program.streamers.map((streamerId) => 22 | anim.push(action.data.streamers.find((streamer) => streamer.id === streamerId)) 23 | ) 24 | return { 25 | ...program, 26 | nextLive: nextLive ? remainingTime(nextLive.time_start * 1000) : "", 27 | anim, 28 | } 29 | }) 30 | const streams = action.data.streams.map((stream) => { 31 | const nextLive = filteredEvents.find((event) => event.stream === stream.id) 32 | return { 33 | ...stream, 34 | nextLive: nextLive ? remainingTime(nextLive.time_start * 1000) : "", 35 | } 36 | }) 37 | return { 38 | ...state, 39 | events: action.data.events, 40 | programs, 41 | streamers: action.data.streamers, 42 | streams, 43 | isLoading: false, 44 | } 45 | case renegadeActions.FETCH_RENEGADE_DATA: 46 | return { 47 | ...state, 48 | isLoading: true, 49 | } 50 | default: 51 | return state 52 | } 53 | } 54 | 55 | export default renegadeReducer 56 | -------------------------------------------------------------------------------- /.flowconfig: -------------------------------------------------------------------------------- 1 | [ignore] 2 | ; We fork some components by platform 3 | .*/*[.]android.js 4 | 5 | ; Ignore "BUCK" generated dirs 6 | /\.buckd/ 7 | 8 | ; Ignore polyfills 9 | node_modules/react-native/Libraries/polyfills/.* 10 | 11 | ; These should not be required directly 12 | ; require from fbjs/lib instead: require('fbjs/lib/warning') 13 | node_modules/warning/.* 14 | 15 | ; Flow doesn't support platforms 16 | .*/Libraries/Utilities/LoadingView.js 17 | 18 | [untyped] 19 | .*/node_modules/@react-native-community/cli/.*/.* 20 | 21 | [include] 22 | 23 | [libs] 24 | node_modules/react-native/interface.js 25 | node_modules/react-native/flow/ 26 | 27 | [options] 28 | emoji=true 29 | 30 | esproposal.optional_chaining=enable 31 | esproposal.nullish_coalescing=enable 32 | 33 | module.file_ext=.js 34 | module.file_ext=.json 35 | module.file_ext=.ios.js 36 | 37 | munge_underscores=true 38 | 39 | module.name_mapper='^react-native/\(.*\)$' -> '/node_modules/react-native/\1' 40 | module.name_mapper='^@?[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> '/node_modules/react-native/Libraries/Image/RelativeImageStub' 41 | 42 | suppress_type=$FlowIssue 43 | suppress_type=$FlowFixMe 44 | suppress_type=$FlowFixMeProps 45 | suppress_type=$FlowFixMeState 46 | 47 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\) 48 | suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)?:? #[0-9]+ 49 | suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError 50 | 51 | [lints] 52 | sketchy-null-number=warn 53 | sketchy-null-mixed=warn 54 | sketchy-number=warn 55 | untyped-type-import=warn 56 | nonstrict-import=warn 57 | deprecated-type=warn 58 | unsafe-getters-setters=warn 59 | unnecessary-invariant=warn 60 | signature-verification-failure=warn 61 | deprecated-utility=error 62 | 63 | [strict] 64 | deprecated-type 65 | nonstrict-import 66 | sketchy-null 67 | unclear-type 68 | unsafe-getters-setters 69 | untyped-import 70 | untyped-type-import 71 | 72 | [version] 73 | ^0.122.0 74 | -------------------------------------------------------------------------------- /src/screens/User.js: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from "react" 2 | import { StyleSheet, Text, Button } from "react-native" 3 | import DatePicker from "react-native-date-picker" 4 | 5 | import ScrollViewWithHeader from "../components/ScrollViewWithHeader" 6 | import Storage from "../tools/Storage" 7 | import Notification from "../tools/Notification" 8 | import { zeroPad } from "../tools/Date" 9 | 10 | const styles = StyleSheet.create({ 11 | root: { 12 | flex: 1, 13 | backgroundColor: "#F2EDE9", 14 | }, 15 | textContainer: { 16 | textAlign: "justify", 17 | fontSize: 16, 18 | marginTop: 10, 19 | fontFamily: "Montserrat-Light", 20 | color: "#000", 21 | }, 22 | }) 23 | 24 | const User = () => { 25 | const [ date, setDate ] = useState(new Date()) 26 | const [ storedDate, setStoredDate ] = useState(undefined) 27 | 28 | useEffect(() => { 29 | Storage.getResubDate().then((storageDate) => { 30 | if (storageDate) { 31 | setDate(storageDate) 32 | setStoredDate(storageDate) 33 | } 34 | }) 35 | }, []) 36 | 37 | const handleResubDate = () => { 38 | Notification.renewNotification(date) 39 | setStoredDate(date) 40 | } 41 | 42 | return ( 43 | 44 | Fin de mon abonnement Prime à la chaîne : 45 | 46 | {storedDate 47 | ? `Le ${storedDate.toLocaleDateString()} à ${storedDate.getHours()}h${zeroPad( 48 | storedDate.getMinutes() 49 | )}` 50 | : "A définir"} 51 | 52 | setDate(pickerDate)} 55 | locale="fr" 56 | style={{ marginTop: 10, alignSelf: "center" }} 57 | minuteInterval={5} 58 | fadeToColor="#F2EDE9" 59 | textColor="#000000" 60 | /> 61 |