Repository: blueedgetechno/androidInReact
Branch: master
Commit: 782e4189cad6
Files: 88
Total size: 307.9 KB
Directory structure:
gitextract_7ne9rzeo/
├── .github/
│ ├── CODEOWNERS
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ └── bug_report.yml
│ ├── dependabot.yml
│ └── workflows/
│ ├── Build-Deploy.yml
│ ├── Issue-text.yml
│ ├── PR-Preview.yml
│ ├── desktop.yml
│ ├── package-lock.yml
│ ├── virus.yml
│ └── winget.yml
├── .gitignore
├── LICENSE
├── README.md
├── jsconfig.json
├── package.json
├── public/
│ ├── _redirects
│ ├── img/
│ │ └── asset/
│ │ └── whatsapp/
│ │ └── pfp/
│ │ ├── apoc.jfif
│ │ ├── ava.jfif
│ │ ├── ceaser.jfif
│ │ ├── check.jfif
│ │ ├── fine.jfif
│ │ ├── liam.jfif
│ │ ├── lion.jfif
│ │ ├── pose.jfif
│ │ ├── real.jfif
│ │ └── viva.jfif
│ ├── index.html
│ ├── manifest.json
│ ├── robots.txt
│ └── site.webmanifest
├── src/
│ ├── App.css
│ ├── App.js
│ ├── components/
│ │ ├── background/
│ │ │ ├── back.scss
│ │ │ └── index.js
│ │ ├── bottomnav/
│ │ │ ├── bottom.scss
│ │ │ └── index.js
│ │ ├── icons.js
│ │ ├── main.scss
│ │ ├── quickpanel/
│ │ │ ├── index.js
│ │ │ └── qkpanel.scss
│ │ ├── statusbar.js
│ │ ├── utils.js
│ │ └── widgets/
│ │ ├── index.js
│ │ └── widget.scss
│ ├── containers/
│ │ ├── apps/
│ │ │ ├── google/
│ │ │ │ ├── google.scss
│ │ │ │ ├── index.js
│ │ │ │ └── news.json
│ │ │ ├── index.js
│ │ │ ├── index.scss
│ │ │ ├── playstore/
│ │ │ │ └── index.js
│ │ │ ├── themes.scss
│ │ │ ├── whatsapp/
│ │ │ │ ├── elements/
│ │ │ │ │ ├── extra.scss
│ │ │ │ │ └── index.js
│ │ │ │ ├── index.js
│ │ │ │ └── whatsapp.scss
│ │ │ └── youtube/
│ │ │ ├── extra.js
│ │ │ ├── extra.scss
│ │ │ ├── index.js
│ │ │ └── youtube.scss
│ │ └── home/
│ │ ├── home.scss
│ │ └── index.js
│ ├── index.css
│ ├── index.js
│ ├── service-worker.js
│ ├── serviceWorkerRegistration.js
│ └── store/
│ ├── actions/
│ │ ├── data/
│ │ │ ├── apps.js
│ │ │ ├── preset.js
│ │ │ ├── whatsapp.json
│ │ │ └── youtube.json
│ │ ├── index.js
│ │ └── prototypes.js
│ ├── index.js
│ └── reducers/
│ ├── apps/
│ │ ├── whatsapp.js
│ │ └── youtube.js
│ ├── global.js
│ ├── home.js
│ ├── quickpanel.js
│ ├── wallpaper.js
│ └── widget.js
├── src-tauri/
│ ├── .gitignore
│ ├── Cargo.toml
│ ├── build.rs
│ ├── icons/
│ │ └── icon.icns
│ ├── src/
│ │ └── main.rs
│ └── tauri.conf.json
├── tailwind.config.js
└── timeline.md
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/CODEOWNERS
================================================
.github/* @andrewstech
src-tauri/* @andrewstech
================================================
FILE: .github/FUNDING.yml
================================================
custom: https://www.buymeacoffee.com/blueedgetechno
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: Bug Report
description: File a bug report
title: "[Bug]: "
labels: ["bug"]
assignees:
- android69420
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this bug report!
- type: textarea
id: what-happened
attributes:
label: What happened?
description: Also tell us, what did you expect to happen?
placeholder: Tell us what you see!
value: "A bug happened!"
validations:
required: true
- type: textarea
id: Reproduce
attributes:
label: To reproduce the behavior?
description: Steps to reproduce the behavior.
placeholder: opened store
value: "reproduce!"
validations:
required: true
- type: dropdown
id: browsers
attributes:
label: What browser are you seeing the problem on?
multiple: false
options:
- Firefox
- Chrome
- Safari
- Microsoft Edge
- Other Browser
validations:
required: true
================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: npm
directory: /
schedule:
interval: daily
- package-ecosystem: github-actions
directory: /
schedule:
interval: daily
================================================
FILE: .github/workflows/Build-Deploy.yml
================================================
name: Build & Deploy
on:
push:
branches: [master]
workflow_dispatch:
jobs:
Build-Deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: 16
cache: npm
- name: Build
run: npm ci && npm run ghbuild
- name: Deploy to gh-pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
cname: android.blueedge.me
publish_dir: ./build
================================================
FILE: .github/workflows/Issue-text.yml
================================================
name: issue-text
on:
issues:
types: [opened]
jobs:
comment:
runs-on: ubuntu-latest
steps:
- uses: ben-z/actions-comment-on-issue@1.0.2
with:
message: "Hey, thank you for creating an issue. We will normally respond within 24 hours."
GITHUB_TOKEN: ${{ secrets.BOT }}
- uses: stefanbuck/github-issue-parser@v2
id: issue-parser
with:
template-path: .github/ISSUE_TEMPLATE/bug_report.yml
- run: echo '${{ steps.issue-parser.outputs.jsonString }}'
- run: echo ${{ steps.issue-parser.outputs.issueparser_what_browser_are_you_seeing_the_problem_on }}
- uses: actions-ecosystem/action-add-labels@v1
with:
labels: ${{ steps.issue-parser.outputs.issueparser_what_browser_are_you_seeing_the_problem_on }}
github_token: ${{ secrets.BOT }}
================================================
FILE: .github/workflows/PR-Preview.yml
================================================
name: Generate PR Preview
on:
pull_request_target:
types: [opened, reopened, synchronize]
jobs:
Build:
runs-on: ubuntu-latest
steps:
- uses: peter-evans/create-or-update-comment@v2
id: couc
with:
body: ⌛ Deploy Preview - Build in Progress
issue-number: ${{ github.event.pull_request.number }}
token: ${{ secrets.BOT }}
- uses: actions/checkout@v3
with:
ref: refs/pull/${{ github.event.pull_request.number }}/merge
- uses: actions/setup-node@v3
with:
node-version: 16
- name: create repo
if: ${{ github.event.action == 'opened'}}
run: gh repo create blueDroidBot/${{ github.event.pull_request.number }} --public
env:
GITHUB_TOKEN: ${{ secrets.BOT }}
- name: Build
run: npm ci && npm run ghbuild
- uses: peaceiris/actions-gh-pages@v3
with:
personal_token: ${{ secrets.BOT }}
publish_dir: ./build
external_repository: blueDroidBot/${{ github.event.pull_request.number }}
- name: Sleep to make sure page gets updated
run: sleep 1m
shell: bash
- name: comment Preview Ready
uses: peter-evans/create-or-update-comment@v2
with:
body: |
✔️ Deploy Preview for Ready!
😎 Browse the preview: https://android-preview.blueedge.me/${{ github.event.pull_request.number }} !
🔍 Inspect the deploy log: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
comment-id: ${{ steps.couc.outputs.comment-id }}
edit-mode: replace
token: ${{ secrets.BOT }}
- if: ${{ failure() }}
uses: peter-evans/create-or-update-comment@v2
with:
body: |
❌ Deploy Preview failed
🔍 Inspect the deploy log: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
comment-id: ${{ steps.couc.outputs.comment-id }}
edit-mode: replace
token: ${{ secrets.BOT }}
================================================
FILE: .github/workflows/desktop.yml
================================================
name: publish
on:
issues:
types:
- labeled
jobs:
publish-tauri:
if: github.event.label.name == 'desktop-release'
strategy:
fail-fast: false
matrix:
platform: [macos-latest, ubuntu-latest, windows-latest]
runs-on: ${{ matrix.platform }}
env:
CI: false
steps:
- uses: actions/checkout@v3
- name: setup node
uses: actions/setup-node@v3
with:
node-version: 12
cache: npm
- name: git http
run: |
git config --global url."https://github.com/".insteadOf git@github.com:
git config --global url."https://".insteadOf git://
- name: install Rust stable
uses: actions-rs/toolchain@v1
with:
toolchain: stable
- uses: Swatinem/rust-cache@v1
with:
sharedKey: ${{ matrix.platform }}
- name: install webkit2gtk (ubuntu only)
if: matrix.platform == 'ubuntu-latest'
run: |
sudo apt-get update
sudo apt-get install -y webkit2gtk-4.0
- name: CI
run: |
npm ci
- name: install app dependencies and build it
run: npm run build
- uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
with:
tagName: __VERSION__ # the action automatically replaces \_\_VERSION\_\_ with the app version
releaseName: "androidInReact v__VERSION__"
releaseBody: ${{ github.event.issue.body }}
releaseDraft: false
prerelease: false
================================================
FILE: .github/workflows/package-lock.yml
================================================
name: "Re generate the package-lock file"
on:
workflow_dispatch:
jobs:
rebuild:
name: reBuild
runs-on: windows-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Install Node.js
uses: actions/setup-node@v1
with:
node-version: '16.6.1'
- name: remove old one
run: rm package-lock.json
- name: build new one
run: npm install
env:
CI: false
- name: cpr
uses: peter-evans/create-pull-request@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: Update package-lock
title: Update package-lock
body: Update package-lock
================================================
FILE: .github/workflows/virus.yml
================================================
name: released
on:
release:
workflow_dispatch:
jobs:
virustotal:
runs-on: ubuntu-latest
steps:
- name: VirusTotal Scan
uses: crazy-max/ghaction-virustotal@v2
with:
vt_api_key: ${{ secrets.VT_API_KEY }}
update_release_body: true
files: |
.msi$
.exe$
.deb$
================================================
FILE: .github/workflows/winget.yml
================================================
name: Publish to WinGet
on:
release:
types: [released]
jobs:
publish:
runs-on: windows-latest # action can only be run on windows
steps:
- uses: vedantmgoyal2009/winget-releaser@latest
with:
identifier: blueedge.android11react
token: ${{ secrets.BOT }}
================================================
FILE: .gitignore
================================================
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
node_modules
/.pnp
.pnp.js
.env
todo*
# testing
/coverage
# production
/build
/target/
WixTools
*.py
rough*
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
================================================
FILE: LICENSE
================================================
Creative Commons Legal Code
CC0 1.0 Universal
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
HEREUNDER.
Statement of Purpose
The laws of most jurisdictions throughout the world automatically confer
exclusive Copyright and Related Rights (defined below) upon the creator
and subsequent owner(s) (each and all, an "owner") of an original work of
authorship and/or a database (each, a "Work").
Certain owners wish to permanently relinquish those rights to a Work for
the purpose of contributing to a commons of creative, cultural and
scientific works ("Commons") that the public can reliably and without fear
of later claims of infringement build upon, modify, incorporate in other
works, reuse and redistribute as freely as possible in any form whatsoever
and for any purposes, including without limitation commercial purposes.
These owners may contribute to the Commons to promote the ideal of a free
culture and the further production of creative, cultural and scientific
works, or to gain reputation or greater distribution for their Work in
part through the use and efforts of others.
For these and/or other purposes and motivations, and without any
expectation of additional consideration or compensation, the person
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
is an owner of Copyright and Related Rights in the Work, voluntarily
elects to apply CC0 to the Work and publicly distribute the Work under its
terms, with knowledge of his or her Copyright and Related Rights in the
Work and the meaning and intended legal effect of CC0 on those rights.
1. Copyright and Related Rights. A Work made available under CC0 may be
protected by copyright and related or neighboring rights ("Copyright and
Related Rights"). Copyright and Related Rights include, but are not
limited to, the following:
i. the right to reproduce, adapt, distribute, perform, display,
communicate, and translate a Work;
ii. moral rights retained by the original author(s) and/or performer(s);
iii. publicity and privacy rights pertaining to a person's image or
likeness depicted in a Work;
iv. rights protecting against unfair competition in regards to a Work,
subject to the limitations in paragraph 4(a), below;
v. rights protecting the extraction, dissemination, use and reuse of data
in a Work;
vi. database rights (such as those arising under Directive 96/9/EC of the
European Parliament and of the Council of 11 March 1996 on the legal
protection of databases, and under any national implementation
thereof, including any amended or successor version of such
directive); and
vii. other similar, equivalent or corresponding rights throughout the
world based on applicable law or treaty, and any national
implementations thereof.
2. Waiver. To the greatest extent permitted by, but not in contravention
of, applicable law, Affirmer hereby overtly, fully, permanently,
irrevocably and unconditionally waives, abandons, and surrenders all of
Affirmer's Copyright and Related Rights and associated claims and causes
of action, whether now known or unknown (including existing as well as
future claims and causes of action), in the Work (i) in all territories
worldwide, (ii) for the maximum duration provided by applicable law or
treaty (including future time extensions), (iii) in any current or future
medium and for any number of copies, and (iv) for any purpose whatsoever,
including without limitation commercial, advertising or promotional
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
member of the public at large and to the detriment of Affirmer's heirs and
successors, fully intending that such Waiver shall not be subject to
revocation, rescission, cancellation, termination, or any other legal or
equitable action to disrupt the quiet enjoyment of the Work by the public
as contemplated by Affirmer's express Statement of Purpose.
3. Public License Fallback. Should any part of the Waiver for any reason
be judged legally invalid or ineffective under applicable law, then the
Waiver shall be preserved to the maximum extent permitted taking into
account Affirmer's express Statement of Purpose. In addition, to the
extent the Waiver is so judged Affirmer hereby grants to each affected
person a royalty-free, non transferable, non sublicensable, non exclusive,
irrevocable and unconditional license to exercise Affirmer's Copyright and
Related Rights in the Work (i) in all territories worldwide, (ii) for the
maximum duration provided by applicable law or treaty (including future
time extensions), (iii) in any current or future medium and for any number
of copies, and (iv) for any purpose whatsoever, including without
limitation commercial, advertising or promotional purposes (the
"License"). The License shall be deemed effective as of the date CC0 was
applied by Affirmer to the Work. Should any part of the License for any
reason be judged legally invalid or ineffective under applicable law, such
partial invalidity or ineffectiveness shall not invalidate the remainder
of the License, and in such case Affirmer hereby affirms that he or she
will not (i) exercise any of his or her remaining Copyright and Related
Rights in the Work or (ii) assert any associated claims and causes of
action with respect to the Work, in either case contrary to Affirmer's
express Statement of Purpose.
4. Limitations and Disclaimers.
a. No trademark or patent rights held by Affirmer are waived, abandoned,
surrendered, licensed or otherwise affected by this document.
b. Affirmer offers the Work as-is and makes no representations or
warranties of any kind concerning the Work, express, implied,
statutory or otherwise, including without limitation warranties of
title, merchantability, fitness for a particular purpose, non
infringement, or the absence of latent or other defects, accuracy, or
the present or absence of errors, whether or not discoverable, all to
the greatest extent permissible under applicable law.
c. Affirmer disclaims responsibility for clearing rights of other persons
that may apply to the Work or any use thereof, including without
limitation any person's Copyright and Related Rights in the Work.
Further, Affirmer disclaims responsibility for obtaining any necessary
consents, permissions or other rights required for any use of the
Work.
d. Affirmer understands and acknowledges that Creative Commons is not a
party to this document and has no duty or obligation with respect to
this CC0 or use of the Work.
================================================
FILE: README.md
================================================
# Android on Web
[](https://github.com/blueedgetechno)
[](https://twitter.com/blueedgetechno)
[](https://discord.gg/NcjaNdwtnR)
[](https://www.buymeacoffee.com/blueedgetechno)
An open-source project that aims to provide an indistinguishably accurate experience of Android on web. The project leverages different JavaScript Web APIs to imitates the Android functionalities and CSS animations to bring life into it.
------------
#### Visit the Live Application🌈: [android.blueedge.me](https://android.blueedge.me)
## Gallery


#### Visit the Live Application🌈: [android.blueedge.me](https://android.blueedge.me)
# Stack
- Framework - React (^17.0.2) + Redux
- Component/UI Library - Material UI
- Styling Solution - SCSS and CSS Modules (+ tailwind).
- Icons - fontAwesome/mui icons/custom svg icons
# Features
- [x] Home page, App icons
- [x] Bottom Navigation bar
- [x] Widgets like google search
- [x] Calendar, Date, Clock Widgets
- [x] Quick menu from slide up
- [x] Recent menu and apps
- [x] WhatsApp Application
- [x] YouTube Application
- [x] Google Search App
# Dev Features
- [x] Flexible and Scalable
- [x] Easy to add custom Applications
- [x] Easy to bind with existing system
- [x] Built-In Navigation system per app
- [x] Modular Applications and their styling
- [x] Proper state management with Redux
## FAQ
1. Is this real android OS?
- No, This is not a real operating system. It is just imitation of it with different technology.
2. How long did it take?
- 6 weeks (without gaps)
3. Have you ran into problems during development?
- Duhh. More than dozen big ones and hundreds of small problems ([more info](timeline.md)).
4. Can I contribute?
- Yes, you can! Open an issue, create a pull request, head over to [discussions](https://github.com/blueedgetechno/androidInReact/discussions) or join the [discord](https://discord.gg/NcjaNdwtnR).
5. Where did you get the inspiration from, if you have?
- I got the inspired to make the project on the suggestion of [Derry Shribman](https://github.com/xderry).
6. Why do JavaScript developers wear glasses?
- Because they cannot C# (see sharp). 
## Online Deployment
[](https://heroku.com/deploy)
[](https://railway.app/new/template?template=https%3A%2F%2Fgithub.com%2Fblueedgetechno%2FandroidInReact&envs=PORT&PORTDesc=Port+of+the+application&PORTDefault=3000)
[](https://app.netlify.com/start/deploy?repository=https://github.com/blueedgetechno/androidInReact)
## Acknowledgements
- [Derry Shribman](https://github.com/xderry)
- [React-hammerjs](https://github.com/JedWatson/react-hammerjs)
- [React-slick](https://github.com/akiran/react-slick)
## Contributors
[](https://github.com/blueedgetechno/androidInReact/graphs/contributors)
## License
⚖️ CC0-1.0 License
================================================
FILE: jsconfig.json
================================================
{
"compilerOptions": {
"baseUrl": "src"
},
"include": ["src"]
}
================================================
FILE: package.json
================================================
{
"name": "Android11React",
"description": "Android made in React",
"repository": "https://github.com/blueedgetechno/androidInReact",
"version": "0.0.1",
"private": true,
"dependencies": {
"@emotion/react": "^11.9.0",
"@emotion/styled": "^11.8.1",
"@fortawesome/fontawesome-svg-core": "^6.1.1",
"@fortawesome/free-regular-svg-icons": "^6.1.1",
"@fortawesome/free-solid-svg-icons": "^6.1.1",
"@fortawesome/react-fontawesome": "^0.1.18",
"@mui/icons-material": "^5.6.2",
"@mui/lab": "^5.0.0-alpha.83",
"@mui/material": "^5.8.1",
"@reduxjs/toolkit": "^1.8.2",
"@sentry/react": "^6.19.7",
"@sentry/tracing": "^6.19.7",
"@tauri-apps/api": "^1.0.0-rc.6",
"@win11react/react-hammerjs": "1.0.2",
"axios": "^0.27.2",
"color-parse": "^1.4.2",
"color-rgba": "^2.4.0",
"react": "^18.1.0",
"react-calendar": "^3.7.0",
"react-dom": "^18.1.0",
"react-player": "^2.10.1",
"react-redux": "^8.0.2",
"react-scripts": "^5.0.1",
"react-slick": "^0.29.0",
"redux": "^4.2.0",
"redux-thunk": "^2.4.1",
"slick-carousel": "^1.8.1"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"ghbuild": "CI=false react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject",
"tauri": "tauri"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"@tauri-apps/cli": "^1.0.0-rc.12",
"node-sass": "^7.0.1",
"tailwindcss": "^3.0.24"
}
}
================================================
FILE: public/_redirects
================================================
/* /index.html 200
================================================
FILE: public/index.html
================================================
);
}
================================================
FILE: src/containers/apps/google/news.json
================================================
{
"articles": [{
"source": {
"id": null,
"name": "NDTV News"
},
"author": "NDTV Sports Desk",
"title": "IPL 2022, SRH vs KKR Live Score: Kane Williamson, Rahul Tripathi Rebuild For SRH After Early Wicket - NDTV Sports",
"description": "IPL 2022, SRH vs KKR Live Updates: Chasing a target of 176, SunRisers Hyderabad (SRH) lost both of their openers in the powerplay against Kolkata Knight Riders (KKR) in match 25 of IPL 2022 at the Brabourne Stadium in Mumbai.",
"url": "https://sports.ndtv.com/ipl-2022/ipl-2022-srh-vs-kkr-live-score-updates-2891194",
"urlToImage": "https://c.ndtvimg.com/2022-04/f6386o_kkr-bcci_625x300_15_April_22.jpg?im=FeatureCrop,algorithm=dnn,width=1200,height=675",
"publishedAt": "2022-04-15T16:31:54Z",
"content": "IPL 2022, SRH vs KKR Live Updates: Chasing a target of 176, SunRisers Hyderabad (SRH) lost both of their openers in the powerplay against Kolkata Knight Riders (KKR) in match 25 of IPL 2022 at the Br… [+1230 chars]"
},
{
"source": {
"id": null,
"name": "NDTV News"
},
"author": null,
"title": "WHO Monitors Hepatitis Of Unknown Origin In UK Children - NDTV",
"description": "The World Health Organization said Friday it was monitoring cases of hepatitis of unknown origin in dozens of children in Britain, some of whom required a liver transplant.",
"url": "https://www.ndtv.com/world-news/who-monitors-hepatitis-of-unknown-origin-in-uk-children-2891847",
"urlToImage": "https://i.ndtvimg.com/i/2017-09/hepatitis-action-plan-to-come-in-october_650x400_41505196638.jpg",
"publishedAt": "2022-04-15T16:17:52Z",
"content": "The infection mainly affected children aged under 10.\r\nLondon, United Kingdom: The World Health Organization said Friday it was monitoring cases of hepatitis of unknown origin in dozens of children i… [+1589 chars]"
},
{
"source": {
"id": null,
"name": "NDTV News"
},
"author": null,
"title": "Karnataka Minister KS Eshwarappa, Named In Suicide Case, Resigns: Report - NDTV",
"description": "After a meeting with Chief Minister Basavaraj Bommai at his residence in Bengaluru, Mr Eshwarappa submitted his resignation.",
"url": "https://www.ndtv.com/india-news/karnataka-minister-ks-eshwarappa-named-in-suicide-case-resigns-2891676",
"urlToImage": "https://c.ndtvimg.com/2022-04/88a73te8_ks-eswarappa-with-basavaraj-bommai-650_650x400_15_April_22.jpg",
"publishedAt": "2022-04-15T15:46:11Z",
"content": "\"I am also confident that I will come out clean,\" KS Eshwarappa said before resigning.\r\nBengaluru: BJP stalwart and Karnataka minister KS Eshwarappa, caught in a huge controversy following allegation… [+3084 chars]"
},
{
"source": {
"id": null,
"name": "The Indian Express"
},
"author": "Express News Service",
"title": "At Delhi BJP office, 8 accused of attacking Kejriwal residence are garlanded - The Indian Express",
"description": "AAP MLA Atishi lashed out at the BJP, saying they had sent a message to its workers across the country that they will be felicitated if they indulge in “hooliganism and vandalism”.",
"url": "https://indianexpress.com/article/cities/delhi/delhi-bjp-office-8-accused-attacking-kejriwal-residence-are-garlanded-7871100/",
"urlToImage": "https://images.indianexpress.com/2022/04/BJYM.jpg",
"publishedAt": "2022-04-15T15:35:42Z",
"content": "Eight men who were arrested and later released on bail in connection with the attack on Chief Minister Arvind Kejriwals residence were on Thursday felicitated at the Delhi BJP office by the partys st… [+2134 chars]"
},
{
"source": {
"id": null,
"name": "The Indian Express"
},
"author": "Man Aman Singh Chhina",
"title": "Explained: Why is the Black Sea crucial to Russia, and the loss of the ‘Moskva’ a significant blow - The Indian Express",
"description": "The sinking of the warship Moskva, the 600-foot, 12,500-tonne flagship of the Russian Black Sea Fleet — whether due to a Ukrainian missile strike or, as Russia claims, a fire on board — is a serious setback for Russia.",
"url": "https://indianexpress.com/article/explained/everyday-explainers/explained-russia-warship-moksva-black-sea-7870946/",
"urlToImage": "https://images.indianexpress.com/2022/04/Russia-warship-ex.jpg",
"publishedAt": "2022-04-15T15:35:22Z",
"content": "The sinking of the warship Moskva, the 600-foot, 12,500-tonne flagship of the Russian Black Sea Fleet whether due to a Ukrainian missile strike or, as Russia claims, a fire on board is a serious setb… [+6665 chars]"
},
{
"source": {
"id": null,
"name": "The Indian Express"
},
"author": "Entertainment Desk",
"title": "KGF 2 box office collection day 1: Yash-starrer registers biggest-ever opening day in Hindi belt, earns Rs 134.5 crore in India - The Indian Express",
"description": "Yash's KGF 2 has received a massive opening across south Indian states. While the film dominated the box office in Karnataka, it also received a huge launch in Tamil Nadu, Kerala and the Telugu states.",
"url": "https://indianexpress.com/article/entertainment/regional/kgf-chapter-2-box-office-day-1-yash-starrer-creates-history-7870297/",
"urlToImage": "https://images.indianexpress.com/2022/04/kgf-box-office.jpg",
"publishedAt": "2022-04-15T15:09:24Z",
"content": "Kannada movie KGF: Chapter 2, starring Yash in the lead role, has stormed the Indian box office. Thanks to the huge demand created by the film’s first part in 2018, the sequel reaped the benefit by o… [+2922 chars]"
},
{
"source": {
"id": null,
"name": "PINKVILLA"
},
"author": "Pinkvilla Desk",
"title": "Ranbir Kapoor-Alia Bhatt Wedding: Actress skipped chooda ceremony due to her Hollywood debut; Reports - PINKVILLA",
"description": "Alia Bhatt reportedly didn2019t do the traditional chooda ceremony due to her big Hollywood debut with Gal Gadot.",
"url": "https://www.pinkvilla.com/entertainment/news/ranbir-kapoor-alia-bhatt-wedding-actress-skipped-chooda-ceremony-due-her-hollywood-debut-reports-1068918",
"urlToImage": "https://www.pinkvilla.com/files/styles/fbimagesection/public/ranbir_alia_social_0.jpg?itok=RiRlyEBC",
"publishedAt": "2022-04-15T14:21:48Z",
"content": "Tinsel town's favourite couple, Alia Bhatt and Ranbir Kapoor got married on April 14th at the Yeh Jawaani Hai Deewani actor's Vastu residence in Bandra, Mumbai after dating for five years. The couple… [+1423 chars]"
},
{
"source": {
"id": null,
"name": "NDTV News"
},
"author": null,
"title": "India Receives S-400 Overhauled Engines, Spares From Russia: Report - NDTV",
"description": "Amid the ongoing war between Russia and Ukraine, India has received the simulators and other equipment from Moscow for the training squadron of the S-400 Triumf air defence missile system.",
"url": "https://www.ndtv.com/india-news/india-russia-s-400-deal-india-russia-defence-deal-russia-ukraine-war-india-recieves-s-400-overhauled-engines-spares-from-russia-report-2891267",
"urlToImage": "https://i.ndtvimg.com/i/2016-10/s-400-missiles-reuters_650x400_51476365973.jpg",
"publishedAt": "2022-04-15T13:02:56Z",
"content": "India-Russia S-400 Missile System: The supplies from Russia included overhauled fighter engines.\r\nNew Delhi: Amid the ongoing war between Russia and Ukraine, India has received the simulators and oth… [+2188 chars]"
},
{
"source": {
"id": null,
"name": "Livemint"
},
"author": "Livemint",
"title": "Tata Sons Effects Major Reshuffle In Air India's Top Management | Mint - Mint",
"description": "Aggarwal, who is also Senior Vice President at Tata Sons, replaces Air India veteran Meenakshi Malik, while Tripathi, who was Vice President of Human Resources at Tata Steel from 2012 to 2021, succeeds AI's Amrita Sharan.",
"url": "https://www.livemint.com/companies/news/tata-sons-effects-major-reshuffle-in-air-india-s-top-management-11650026050123.html",
"urlToImage": "https://images.livemint.com/img/2022/04/15/600x338/Air_India_1650026093350_1650026093656.jpg",
"publishedAt": "2022-04-15T12:36:06Z",
"content": "Tata Sons has effected a major reshuffle in the top management of Air India, news agency PTI reported on Friday.\r\nThe group chairman N Chandrasekaran issued the order, according to which, Air India v… [+1836 chars]"
},
{
"source": {
"id": "the-times-of-india",
"name": "The Times of India"
},
"author": "Aishwarya Dharni",
"title": "Indian-Origin NASA Astronaut Raja Chari All Set To Return To Earth After Six Months In Space - Indiatimes.com",
"description": "After spending six months in microgravity, astronaut Raja Chari is all set to return home. The Crew-3 astronauts who docked to the International Space Station in November last year will return to planet Earth later this month. NASA astronauts Raja Chari, Tom …",
"url": "https://www.indiatimes.com/trending/social-relevance/indian-american-astronaut-raja-chari-to-return-home-567090.html",
"urlToImage": "https://im.indiatimes.in/content/2022/Apr/raja-chari_6259659bac146.png",
"publishedAt": "2022-04-15T12:25:40Z",
"content": "After spending six months in microgravity, astronaut Raja Chari is all set to return home. The Crew-3 astronauts who docked to the International Space Station in November last year will return to pla… [+2049 chars]"
},
{
"source": {
"id": null,
"name": "Livemint"
},
"author": "Pooja Sitaram Jaiswar",
"title": "Rakesh Jhunjhunwala Raises Stake In This Infra Stock During Q4 | Mint - Mint",
"description": "The latest shareholding data of NCC on exchanges showed that Rekha Jhunjhunwala's holding in the company now stands at 1.6 crore equity shares or 2.62% as of March 2022.",
"url": "https://www.livemint.com/market/stock-market-news/rakesh-jhunjhunwala-raises-stake-in-this-infra-stock-during-q4-11650024996162.html",
"urlToImage": "https://images.livemint.com/img/2022/04/15/600x338/5244bf12-7a11-11ec-9eea-9c1e2652c262_1644643836353_1650025079879.jpg",
"publishedAt": "2022-04-15T12:22:15Z",
"content": "Ace investor Rakesh Jhunjhunwala has increased shareholding in the construction and engineering company, NCC Limited, through his wife's portfolio Rekha Jhunjhunwala. The investor who is referred to … [+3686 chars]"
},
{
"source": {
"id": null,
"name": "NDTV News"
},
"author": null,
"title": "Russia Pledges More Missile Attacks On Kyiv After Moskva Flagship Sinks - NDTV",
"description": "Moscow warned Friday it would step up missile attacks on Kyiv in response to what it said were sorties across the border, the day after its Black Sea naval flagship sank.",
"url": "https://www.ndtv.com/world-news/russia-ukraine-war-kyiv-missile-attacks-russia-pledges-more-missile-attacks-on-kyiv-after-moskva-flagship-sinks-2890987",
"urlToImage": "https://c.ndtvimg.com/2022-03/2171rpvg_shelling-podil-districtkyivreuters-_625x300_21_March_22.jpg",
"publishedAt": "2022-04-15T11:33:21Z",
"content": "Russia-Ukraine War: Russia attacked a factory near Kyiv where Neptune missiles were manufactured. (File)\r\nKyiv: Moscow warned Friday it would step up missile attacks on Kyiv in response to what it sa… [+5437 chars]"
},
{
"source": {
"id": "the-times-of-india",
"name": "The Times of India"
},
"author": "PTI",
"title": "If harmed, India will not spare anyone, says Rajnath Singh in a strong message to China - Economic Times",
"description": "Singh, in his address to the Indian-American community in San Francisco, also sent a subtle message to the US that New Delhi does not believe in a diplomacy of zero-sum game and its relationship with one country cannot be at the expense of the other.",
"url": "https://economictimes.indiatimes.com/news/defence/if-harmed-india-will-not-spare-anyone-says-rajnath-singh-in-a-strong-message-to-china/articleshow/90863870.cms",
"urlToImage": "https://img.etimg.com/thumb/msid-90863903,width-1070,height-580,imgsize-27366,overlay-etdefence/photo.jpg",
"publishedAt": "2022-04-15T11:32:00Z",
"content": "In a strong message to China, Defence Minister Rajnath Singh has said that if harmed, India will not spare anyone, as he asserted that India under Prime Minister Narendra Modi has emerged as a powerf… [+5028 chars]"
},
{
"source": {
"id": null,
"name": "India Today"
},
"author": null,
"title": "Closing schools would be last option, says Manish Sisodia amid rising Covid cases in Delhi - India Today",
"description": "The Delhi Directorate of Education issued an advisory for students on Friday, following reports of rising Covid cases. \"Partial closure of schools would be implemented if required,\" said deputy CM Manish Sisodia.",
"url": "https://www.indiatoday.in/coronavirus-outbreak/story/closing-schools-would-be-last-option-says-manish-sisodia-amid-reports-of-rising-covid-cases-in-delhi-1937939-2022-04-15",
"urlToImage": "https://akm-img-a-in.tosshub.com/indiatoday/images/story/202204/Delhi_students_Covid_PTI-647x363.jpeg?gAOfpQ3bwoIzw92GXQJmhvLSnALaSyXL",
"publishedAt": "2022-04-15T11:18:31Z",
"content": "As Covid cases are again on the rise, the Delhi Directorate of Education issued guidelines for students on Friday. \"Closing schools would be the last option. Partial closure would be implemented if r… [+1557 chars]"
},
{
"source": {
"id": null,
"name": "Iplt20.com"
},
"author": null,
"title": "Deepak Chahar ruled out of TATA IPL 2022, Harshit Rana joins KKR as a replacement for Rasikh Salam - IPLT20.com",
"description": "Deepak Chahar ruled out of TATA IPL 2022, Harshit Rana joins KKR as a replacement for Rasikh Salam",
"url": "https://www.iplt20.com/news/3764/deepak-chahar-ruled-out-of-tata-ipl-2022-harshit-rana-joins-kkr-as-a-replacement-for-rasikh-salam",
"urlToImage": "https://assets.iplt20.com/bcci/articles/1650020545_aa.jpeg",
"publishedAt": "2022-04-15T11:08:49Z",
"content": null
},
{
"source": {
"id": null,
"name": "Pragativadi.com"
},
"author": "Pradeep Sahoo",
"title": "iQOO Z6 Pro 5G India Launch Set To April 27; Snapdragon 778G 5G Chip & 66W Fast Charging Confirmed - Pragativadi",
"description": "New Delhi: iQoo Z6 Pro 5G India launch date has been set for April 27 as the Chinese smartphone manufacturer announced. The handset will also feature the company’s VC liquid cooling technology and is claimed to offer the highest AnTuTu benchmark scor",
"url": "https://pragativadi.com/iqoo-z6-pro-5g-india-launch-set-to-april-27-snapdragon-778g-5g-chip-66w-fast-charging-confirmed/",
"urlToImage": "https://pragativadi.com/wp-content/uploads/2022/04/aaa.jpg",
"publishedAt": "2022-04-15T11:04:21Z",
"content": "New Delhi: iQoo Z6 Pro 5G India launch date has been set for April 27 as the Chinese smartphone manufacturer announced. The handset will also feature the companys VC liquid cooling technology and is … [+1414 chars]"
},
{
"source": {
"id": "the-times-of-india",
"name": "The Times of India"
},
"author": "TIMESOFINDIA.COM",
"title": "Twitter shareholder Saudi Prince rejects Elon Musk's offer; Tesla chief reacts - Times of India",
"description": "International Business News: NEW DELHI: Saudi Prince Alwaleed bin Talal, who owns a major stake in social media platform Twitter, rejected Elon Musk's offer to acquire 100 per cen.",
"url": "https://timesofindia.indiatimes.com/business/international-business/twitter-shareholder-saudi-prince-rejects-elon-musks-offer-tesla-chief-reacts/articleshow/90862756.cms",
"urlToImage": "https://static.toiimg.com/thumb/msid-90862992,width-1070,height-580,imgsize-24050,resizemode-75,overlay-toi_sw,pt-32,y_pad-40/photo.jpg",
"publishedAt": "2022-04-15T10:39:00Z",
"content": "I don't believe that the proposed offer by @elonmusk ($54.20) comes close to the intrinsic value of @Twitter given https://t.co/PImKaphxuS\r\n— (@Alwaleed_Talal) 1649947559000"
},
{
"source": {
"id": null,
"name": "India.com"
},
"author": "India.com Lifestyle Staff",
"title": "7 Reasons Why You are Gaining Belly Fat and Tips to Reduce it - India.com",
"description": "Make some changes to your lifestyle to help reverse the scale and feel better.",
"url": "https://www.india.com/health/weight-loss-tips-7-reasons-why-you-gaining-belly-fat-and-tips-to-reduce-it-5339525/",
"urlToImage": "https://static.india.com/wp-content/uploads/2022/04/pexels-andres-ayrton-6551059.jpg",
"publishedAt": "2022-04-15T10:19:53Z",
"content": "Has your waistline expanded since the pandemic began? Don’t worry, you are not alone. A lifestyle that confines you inside the four walls of a house, with limited movement, is bound to add inches to … [+4334 chars]"
},
{
"source": {
"id": null,
"name": "Hindustan Times"
},
"author": "HT Tech",
"title": "Top 5 Windows 11 features: If you are not using them, you’re missing out - HT Tech",
"description": "Top 5 Windows 11 features: Windows 11 brought a wide range of changes and new additions, but these are arguably the best of them. Have you checked all of these out?",
"url": "https://tech.hindustantimes.com/tech/news/top-5-windows-11-features-if-you-are-not-using-them-you-re-missing-out-71650017645967.html",
"urlToImage": "https://images.hindustantimes.com/tech/img/2022/04/15/1600x900/Windows_11_(7)_1633403699297_1650017692498.jpg",
"publishedAt": "2022-04-15T10:17:13Z",
"content": "Top 5 Windows 11 features: Microsoft started rolling out Windows 11 starting October 2021 and promised a completely redesigned user-interface, new productivity tools and cool features that create a s… [+2581 chars]"
},
{
"source": {
"id": null,
"name": "News18"
},
"author": "Buzz Staff",
"title": "'Alien Footprints': NASA Image of Martian Crater is a Treat for Astronomy Nerds - News18",
"description": "NASA has released a new image of a crater on Mars.",
"url": "https://www.news18.com/news/buzz/alien-footprints-nasa-image-of-martian-crater-is-a-treat-for-astronomy-nerds-4988995.html",
"urlToImage": "https://images.news18.com/ibnlive/uploads/2022/04/martian-crater--165001301416x9.jpg",
"publishedAt": "2022-04-15T09:14:40Z",
"content": "NASA recently shared an image on its Instagram handle leaving the netizens completely stunned. The space agency has released a new image of a Mars crater. In the caption, NASA wrote, “Youre looking a… [+2101 chars]"
},
{
"source": {
"id": null,
"name": "The Indian Express"
},
"author": "Sports Desk",
"title": "Joe Root steps down as England’s Test team captain - The Indian Express",
"description": "Root was appointed as Sir Alastair Cook's successor in 2017, and holds the record for the most number of matches and wins as England Test captain.",
"url": "https://indianexpress.com/article/sports/cricket/joe-root-resigns-as-englands-test-team-captain-7870558/",
"urlToImage": "https://images.indianexpress.com/2022/03/joe-root.jpg",
"publishedAt": "2022-04-15T08:28:50Z",
"content": "Joe Root has stepped down as England Test captain following a run of poor results capped by dispiriting tours of Australia and the Caribbean.The 31-year-old was appointed as Alastair Cook’s successor… [+3209 chars]"
},
{
"source": {
"id": null,
"name": "The Indian Express"
},
"author": "Shubhra Gupta",
"title": "Mai review: Sakshi Tanwar shines in Netflix series - The Indian Express",
"description": "Mai review: Despite the elements that stretch our credulity, Sakshi Tanwar manages to hold our attention.",
"url": "https://indianexpress.com/article/entertainment/web-series/mai-review-sakshi-tanwar-raima-sen-7870464/",
"urlToImage": "https://images.indianexpress.com/2022/04/Mai-review-120.jpg",
"publishedAt": "2022-04-15T07:48:09Z",
"content": "Mai cast: Sakshi Tanwar, Vivek Mushran, Wamiqa Gabbi, Raima Sen, Prashant Narayanan, Ankur Ratan, Anant Vidhaat, Vaibhav Raj Gupta, Seema PahwaMai directors: Anshai Lal, Atul MongiaMai pulls off a to… [+4294 chars]"
},
{
"source": {
"id": null,
"name": "NDTV News"
},
"author": null,
"title": "Moon Dust Collected By Neil Armstrong During Apollo 11 Mission Sells For $500,000 At Auction - NDTV",
"description": "A minuscule amount of lunar dust collected by Neil Armstrong during Apollo 11, the mission that first put men on the Moon, has been sold for $504,375 at an auction on Wednesday.",
"url": "https://www.ndtv.com/world-news/moon-dust-collected-by-neil-armstrong-during-apollo-11-mission-sells-for-500-000-at-auction-2890273",
"urlToImage": "https://c.ndtvimg.com/2022-04/sa75jpj_moon-650_625x300_15_April_22.jpg",
"publishedAt": "2022-04-15T06:54:03Z",
"content": "NASA even went to court to fight for the ownership of the lunar dust.\r\nA minuscule amount of lunar dust collected by Neil Armstrong during the Apollo 11 mission, that first put men on the Moon, has b… [+2060 chars]"
},
{
"source": {
"id": null,
"name": "ESPN India"
},
"author": "Sam Marsden",
"title": "Furious Barcelona seek answers after 20,000 Frankfurt fans flood Camp Nou - ESPN India",
"description": "Barcelona's coach and players want to know how at least 20,000 Eintracht Frankfurt fans gained access to the home end at Camp Nou.",
"url": "https://www.espn.in/football/story/4642402/furious-barcelona-seek-answers-after-20,000-frankfurt-fans-flood-camp-nou",
"urlToImage": "https://a3.espncdn.com/combiner/i?img=%2Fphoto%2F2022%2F0414%2Fr999905_1296x729_16%2D9.jpg",
"publishedAt": "2022-04-15T06:45:36Z",
"content": "Barcelona coach Xavi Hernandez says his players want to know how at least 20,000 Eintracht Frankfurt fans gained access to the home end at Camp Nou on Thursday as his side were knocked out of the Eur… [+3569 chars]"
},
{
"source": {
"id": null,
"name": "The Indian Express"
},
"author": "Express News Service",
"title": "Delhi: Cops remove saffron flags, banners put up by Hindu Sena near JNU campus - The Indian Express",
"description": "Reacting to the police action, national president of Hindu Sena Vishnu Gupta said that by removing the flags, the police have disrespected the Constitution.",
"url": "https://indianexpress.com/article/delhi/delhi-cops-remove-saffron-flags-banners-put-up-by-hindu-sena-near-jnu-campus-7870385/",
"urlToImage": "https://images.indianexpress.com/2022/04/IMG-20220415-WA0017.jpg",
"publishedAt": "2022-04-15T06:23:54Z",
"content": "In protest against the violence that broke out at the Jawaharlal Nehru University (JNU) between two groups of students on Ram Navami, members of the Hindu Sena put up saffron flags and banners readin… [+2160 chars]"
},
{
"source": {
"id": "the-times-of-india",
"name": "The Times of India"
},
"author": "PTI",
"title": "Egypt approves India as wheat supplier: Piyush Goyal - Economic Times",
"description": "“Indian farmers are feeding the world. Egypt approves India as a wheat supplier. Modi Govt. steps in as the world looks for reliable alternate sources for steady food supply. Our farmers have ensured our granaries overflow and we are ready to serve the world,…",
"url": "https://economictimes.indiatimes.com/news/economy/foreign-trade/egypt-approves-india-as-wheat-supplier-piyush-goyal/articleshow/90858683.cms",
"urlToImage": "https://img.etimg.com/thumb/msid-90858680,width-1070,height-580,imgsize-2041580,overlay-economictimes/photo.jpg",
"publishedAt": "2022-04-15T05:21:00Z",
"content": "Commerce and Industry Minister Piyush Goyal on Friday said Egypt, which is one of the largest importers of wheat from Ukraine and Russia, has approved India as a wheat supplier.\r\nThere is a sharp dec… [+2046 chars]"
},
{
"source": {
"id": null,
"name": "NDTV News"
},
"author": null,
"title": "China Hesitates On Bailing Out \"Sinking Ships\" Sri Lanka, Pakistan - NDTV",
"description": "Over the past few years, the U.S. has accused China of using \"debt diplomacy\" to make developing nations across the world more dependent on Beijing.",
"url": "https://www.ndtv.com/world-news/china-hesitates-on-bailing-out-sinking-ships-sri-lanka-pakistan-2887151",
"urlToImage": "https://c.ndtvimg.com/2022-04/ui5tc3fg_sri-lanka-protestsbloomberg-_625x300_14_April_22.jpg",
"publishedAt": "2022-04-15T04:23:00Z",
"content": "Sri Lanka President Gotabaya Rajapaksa is facing pressure from protesters to step down.\r\nOver the past few years, the U.S. has accused China of using \"debt diplomacy\" to make developing nations acros… [+6157 chars]"
},
{
"source": {
"id": null,
"name": "The Indian Express"
},
"author": "Lifestyle Desk",
"title": "Good Friday 2022: Inspirational Quotes, Images, and Messages of Jesus Christ - The Indian Express",
"description": "Good Friday 2022 Images, Quotes, Messages, Status, Jesus Christ Inspirational Quotes: It is held after the Christian holy day of Maundy Thursday, which commemorates the Last Supper of Jesus Christ, and on a Friday before Easter Sunday.",
"url": "https://indianexpress.com/article/lifestyle/life-style/good-friday-2022-inspirational-quotes-images-and-messages-of-jesus-christ-7867753/",
"urlToImage": "https://images.indianexpress.com/2022/04/good-friday-1200-1.jpg",
"publishedAt": "2022-04-15T04:00:36Z",
"content": "Good Friday 2022 Quotes: Good Friday, a Christian holy day, is observed the Friday before Easter Sunday to commemorate Jesus’ crucifixion. Christians believe that He sacrificed Himself to purge the w… [+1638 chars]"
},
{
"source": {
"id": null,
"name": "Moneycontrol"
},
"author": "Nikhil Walavalkar",
"title": "82 percent of large-cap schemes underperform benchmarks over 5 years: SPIVA report - Moneycontrol",
"description": "The numbers for 2021 look better than the scorecard for 2020. The study showed 50 percent of the large cap equity funds underperformed the S&P BSE 100 index in 2021 compared with 80 percent in 2020.",
"url": "https://www.moneycontrol.com/news/business/personal-finance/82-percent-of-large-cap-schemes-underperform-benchmarks-over-5-years-spiva-report-8361441.html",
"urlToImage": "https://images.moneycontrol.com/static-mcnews/2022/03/MUTUAL-FUNDS-770x431.png",
"publishedAt": "2022-04-15T02:44:47Z",
"content": "Its getting tougher for actively managed equity funds to outperform their benchmark indices. Many actively managed equity mutual fund schemes have underperformed the indices, according to the S&P… [+4140 chars]"
},
{
"source": {
"id": null,
"name": "ThePrint"
},
"author": null,
"title": "‘Immersive’ look at 1998 Pokhran test, Emergency — new museum shows highs & lows of 13 past PMs - ThePrint",
"description": "PM Modi inaugurated Rs 271 crore the Pradhan Mantri Sangrahalaya — Museum of Prime Ministers — Thursday. Exhibits range from civil nuclear agreement and Pokhran, to Bofors and Emergency.",
"url": "https://theprint.in/india/immersive-look-at-1998-pokhran-test-emergency-new-museum-shows-highs-lows-of-13-past-pms/916716/",
"urlToImage": "https://static.theprint.in/wp-content/uploads/2022/04/museum-1.jpg",
"publishedAt": "2022-04-15T02:09:03Z",
"content": "New Delhi: The new Rs 271 crore Pradhan Mantri Sangrahalaya (Museum of Prime Ministers), inaugurated by Prime Minister Narendra Modi Thursday, highlights the achievements as well as the controversies… [+4910 chars]"
},
{
"source": {
"id": null,
"name": "Hindustan Times"
},
"author": "HT Entertainment Desk",
"title": "Lock Upp: Poonam Pandey says her family was thrown out of a residential society - Hindustan Times",
"description": "Lock Upp day 46 written update: Poonam Pandey recalled one of her tough times on the show. On the other hand, Payal Rohatgi fought with Saisha Shinde while Mandana Karimi got into a fight with Anjali Arora. | Web Series",
"url": "https://www.hindustantimes.com/entertainment/web-series/lock-upp-day-46-written-update-poonam-pandey-recalls-the-time-her-family-was-thrown-out-of-a-residential-society-101649981922710.html",
"urlToImage": "https://images.hindustantimes.com/img/2022/04/15/1600x900/poonam_Pandey_crying_1649984064242_1649984064498.JPG",
"publishedAt": "2022-04-15T01:16:50Z",
"content": "On Thursday's episode of the ongoing reality show Lock Upp, Poonam Pandey was seen crying as she recalled the time when she could not get a house for herself, after stepping out of a hospital. Poonam… [+1906 chars]"
},
{
"source": {
"id": null,
"name": "Thewire.in"
},
"author": null,
"title": "With Small Uptick in Cases, Should India Be Worried About a Fourth COVID Wave? - The Wire",
"description": "Health researcher Anurag Agrawal says with almost everybody having been infected once and a large chunk vaccinated, the country should not be too concerned about the recent rise in cases.",
"url": "https://thewire.in/health/with-small-uptick-in-cases-should-india-be-worried-about-a-fourth-covid-wave",
"urlToImage": "https://cdn.thewire.in/wp-content/uploads/2022/04/14182312/2022_4img10_Apr_2022_PTI04_10_2022_000191B-800x400.jpg",
"publishedAt": "2022-04-14T13:10:45Z",
"content": "This article was originally published on The Wire Science, our website dedicated to science, health and environment reportage and analysis. Follow, read and share.\r\nNew Delhi: There is currently a sm… [+8054 chars]"
}, {
"source": {
"id": "cnn",
"name": "CNN"
},
"author": "By Travis Caldwell, Helen Regan, Sana Noor Haq, Jack Bantock, Laura Smith-Spark, Adrienne Vogt and Melissa Macaya, CNN",
"title": "Russia invades Ukraine: Live updates - CNN",
"description": "Russian preparations continue in the east for an offensive operation, training additional units and gathering aviation forces, according to Ukraine's armed forces. Follow here for live news updates.",
"url": "https://www.cnn.com/europe/live-news/ukraine-russia-putin-news-04-15-22/index.html",
"urlToImage": "https://cdn.cnn.com/cnnnext/dam/assets/220414001151-mariupol-ukraine-burned-building-rivers-0412-super-tease.jpg",
"publishedAt": "2022-04-15T16:13:00Z",
"content": "Ukrainian President Volodymyr Zelensky told CNN Friday that \"all of the countries of the world\" should be prepared for the possibility that Russian President Vladimir Putin could use tactical nuclear… [+2268 chars]"
},
{
"source": {
"id": "the-washington-post",
"name": "The Washington Post"
},
"author": "Steven Zeitchik",
"title": "A Ukrainian refugee highlights the hope and heartbreak this Passover season - The Washington Post",
"description": "Dr. Jacob Gaissinovitch and his family first fled their home in Donetsk in 2014 when war arrived. Now they've fled Dnipro.",
"url": "https://www.washingtonpost.com/world/2022/04/15/ukraine-mohel-circumcision-refugee/",
"urlToImage": "https://www.washingtonpost.com/wp-apps/imrs.php?src=https://arc-anglerfish-washpost-prod-washpost.s3.amazonaws.com/public/RM7Z2R7JTBDJ7HAYHHVPAJAEQ4.jpg&w=1440",
"publishedAt": "2022-04-15T16:00:59Z",
"content": "Placeholder while article actions load\r\nHe has circumcised males aged eight days to 80 years. He has taken out his kit in synagogues and hospitals, made nervous mothers feel calm and geriatric men fe… [+12501 chars]"
},
{
"source": {
"id": null,
"name": "The Guardian"
},
"author": "Nina Lakhani",
"title": "‘That was my beloved son’: family of Patrick Lyoya say police killed their son in an ‘execution’ - The Guardian",
"description": "The family’s lawyer says Grand Rapid police officer broke protocol by using the Taser too close to Lyoya",
"url": "https://amp.theguardian.com/us-news/2022/apr/15/patrick-lyoya-shooting-family-police-killed-execution",
"urlToImage": null,
"publishedAt": "2022-04-15T15:08:00Z",
"content": "US policingThe familys lawyer says Grand Rapid police officer broke protocol by using the Taser too close to Lyoya\r\nFri 15 Apr 2022 16.08 BST\r\nThe grief-stricken parents of the Black man shot in the … [+5391 chars]"
},
{
"source": {
"id": null,
"name": "Gizmodo.com"
},
"author": "Phillip Tracy",
"title": "M2 Macs Are Coming to Make Your Brand New Laptop Obsolete - Gizmodo",
"description": "Developer logs point to 9 M2 Mac models that are currently in testing.",
"url": "https://gizmodo.com/m2-macbook-air-macbook-pro-mac-mini-coming-1848798141",
"urlToImage": "https://i.kinja-img.com/gawker-media/image/upload/c_fill,f_auto,fl_progressive,g_center,h_675,pg_1,q_80,w_1200/82e18730953f1c53b02dc5864716636a.jpg",
"publishedAt": "2022-04-15T14:31:44Z",
"content": "Apple is readying its next fleet of laptops and desktops as it transitions into the second phase of Mac products powered by custom silicon, a new report from Bloomberg says.\r\nThe company is reportedl… [+3448 chars]"
},
{
"source": {
"id": "the-wall-street-journal",
"name": "The Wall Street Journal"
},
"author": "Andrew Restuccia, Andrew Duehren",
"title": "Biden to Nominate Michael Barr as Top Fed Banking Regulator - The Wall Street Journal",
"description": "If confirmed, former Obama Treasury official would oversee the largest U.S. financial firms",
"url": "https://www.wsj.com/articles/biden-to-nominate-michael-barr-as-top-fed-banking-regulator-11650013201",
"urlToImage": "https://images.wsj.net/im-524842/social",
"publishedAt": "2022-04-15T14:26:00Z",
"content": "WASHINGTONPresident Biden will nominate Michael Barr, a former Treasury Department official, to serve as the Federal Reserves top banking regulator, the White House said, after Mr. Bidens first pick … [+295 chars]"
},
{
"source": {
"id": "associated-press",
"name": "Associated Press"
},
"author": "Tom Krisher",
"title": "Modest-income buyers being priced out of new-vehicle market - The Associated Press",
"description": "DETROIT (AP) — Two years after the pandemic tore through the economy, America’s auto market looks something like this: Prices are drastically up. Supply is drastically down. And gasoline costs drastically more.",
"url": "https://apnews.com/7a001990f2d63bf6b3fa0188e37feb12",
"urlToImage": "https://storage.googleapis.com/afs-prod/media/9c9b5edf18e44fc18bbcbcf5061a2a5c/3000.jpeg",
"publishedAt": "2022-04-15T14:17:50Z",
"content": "DETROIT (AP) Two years after the pandemic tore through the economy, Americas auto market looks something like this: Prices are drastically up. Supply is drastically down. And gasoline costs drastical… [+5512 chars]"
},
{
"source": {
"id": null,
"name": "Salt Lake Tribune"
},
"author": null,
"title": "'Please tell me what I should be saying.' Text messages show Sen. Mike Lee assisting Trump efforts to overturn 2020 election - Salt Lake Tribune",
"description": "Newly released text messages between Sen. Mike Lee and former White House chief of staff Mark Meadows show Lee's involvement in the effort to overturn the 2020 election results. Lee apparently was aware of a scheme to have states send competing slates of elec…",
"url": "https://www.sltrib.com/news/politics/2022/04/15/please-tell-me-what-i/",
"urlToImage": "https://www.sltrib.com/resizer/magQ0P9avDhcS8oCswvTqe0CLf8=/1200x630/cloudfront-us-east-1.images.arcpublishing.com/sltrib/XMRYVL4Q6NFCDH36TY5AHDULVA.jpg",
"publishedAt": "2022-04-15T14:17:08Z",
"content": "Newly released text messages between Sen. Mike Lee and former White House chief of staff Mark Meadows show Lee was advising and assisting former President Donald Trumps efforts to overturn the result… [+8474 chars]"
},
{
"source": {
"id": null,
"name": "New York Times"
},
"author": "Patrick Kingsley, Raja Abdulrahim",
"title": "Jerusalem Calms Following Israeli-Palestinian Clashes: Latest News and Live Updates - The New York Times",
"description": "Violence broke out at the Aqsa Mosque compound, known to Jews as the Temple Mount, in the morning on the first day of a rare convergence of Ramadan, Easter and Passover.",
"url": "https://www.nytimes.com/live/2022/04/15/world/jerusalem-al-aqsa-mosque",
"urlToImage": "https://static01.nyt.com/images/2022/04/15/world/15jerusalem-briefing-promo02/merlin_205512273_76eafc23-06cc-4997-b821-3b61466d7222-facebookJumbo.jpg",
"publishedAt": "2022-04-15T14:13:37Z",
"content": "Palestinians and the Israeli police clashing at the Aqsa Mosque compound in Jerusalem on Friday.Credit...Mahmoud Illean/Associated Press\r\nJERUSALEM The midday Muslim prayers at one of Jerusalems holi… [+4188 chars]"
},
{
"source": {
"id": null,
"name": "NBCSports.com"
},
"author": "Michael David Smith",
"title": "Colts sign Stephon Gilmore - NBC Sports",
"description": "The top available free agent has found his next team.Veteran cornerback Stephon Gilmore is signing with the Colts.Gilmore was the No. 18 player on our list of the NFL’s Top 100 free agents, and the highest-ranked player who wasn’t already spoken for. (Tyrann …",
"url": "https://profootballtalk.nbcsports.com/2022/04/15/colts-sign-stephon-gilmore/",
"urlToImage": "https://profootballtalk.nbcsports.com/wp-content/uploads/sites/25/2022/04/GettyImages-1277236370-e1650031375609.jpg",
"publishedAt": "2022-04-15T14:03:00Z",
"content": "The top available free agent has found his next team.\r\nVeteran cornerback Stephon Gilmore is signing with the Colts.\r\nGilmore was the No. 18 player on our list of the NFLs Top 100 free agents, and th… [+629 chars]"
},
{
"source": {
"id": "reuters",
"name": "Reuters"
},
"author": null,
"title": "Ukrainians hang on at Mariupol steel plant - Reuters",
"description": "Explosions rumbled and smoke rose this week from a steel making district in besieged Mariupol where dwindling Ukrainian forces are holed up as Russia tries to take full control of its biggest city yet.",
"url": "https://www.reuters.com/world/europe/fortress-city-ukrainians-cling-steel-plant-mariupol-2022-04-15/",
"urlToImage": "https://www.reuters.com/resizer/rw9Il5SxtxE7Dovkg1WDcIaOCSM=/1200x628/smart/filters:quality(80)/cloudfront-us-east-2.images.arcpublishing.com/reuters/NGTFN2NGNRIEJGGLDLEY33B2IU.jpg",
"publishedAt": "2022-04-15T13:45:00Z",
"content": "April 15 (Reuters) - Explosions rumbled and smoke rose this week from a steel making district in besieged Mariupol where dwindling Ukrainian forces are holed up as Russia tries to take full control o… [+5199 chars]"
},
{
"source": {
"id": null,
"name": "Behind the Steel Curtain"
},
"author": "Andrew_Wilbar",
"title": "2022 NFL Mock Draft 4.0: 4 rounds, 7 trades, and a new Steelers QB - Behind The Steel Curtain",
"description": "The Steelers grab a quarterback in round 1 of my latest four-round mock draft.",
"url": "https://www.behindthesteelcurtain.com/2022/4/15/23025815/2022-nfl-mock-draft-4-0-steelers-qb-malik-willis-logan-hall-tyquan-thornton-isaac-taylor-stuart-news",
"urlToImage": "https://cdn.vox-cdn.com/thumbor/juHNZDcBSsAh4ZgoQlSw5r1Vxno=/0x227:3163x1883/fit-in/1200x630/cdn.vox-cdn.com/uploads/chorus_asset/file/23391571/usa_today_17381077.jpg",
"publishedAt": "2022-04-15T13:30:00Z",
"content": "We are less than two weeks away from the 2022 NFL Draft, and the draft rumor mill is beginning to pick up the pace. After a blockbuster trade and several key free agent signings in the past two weeks… [+15704 chars]"
},
{
"source": {
"id": "cnn",
"name": "CNN"
},
"author": "Lisa Respers France, CNN",
"title": "Cardi B. and Offset reveal their son's name - CNN",
"description": "Rappers Cardi B. and Offset welcomed their son seven months ago and we now know his name.",
"url": "https://www.cnn.com/2022/04/15/entertainment/cardi-offset-son-name/index.html",
"urlToImage": "https://cdn.cnn.com/cnnnext/dam/assets/220215130428-cardi-b-super-tease.jpg",
"publishedAt": "2022-04-15T13:20:00Z",
"content": null
},
{
"source": {
"id": "cnn",
"name": "CNN"
},
"author": "Katherine Dillinger",
"title": "FDA authorizes first Covid-19 breath test - CNN",
"description": "The US Food and Drug Administration has granted emergency use authorization to the first Covid-19 test that spots chemical compounds associated with the coronavirus in breath, the agency said Thursday.",
"url": "https://www.cnn.com/2022/04/14/health/covid-breath-test/index.html",
"urlToImage": "https://media.cnn.com/api/v1/images/stellar/prod/220415085321-inspectir-pny-1000-covid-breathalyzer.jpg?c=16x9&q=w_800,c_fill",
"publishedAt": "2022-04-15T13:01:00Z",
"content": "The US Food and Drug Administration has granted emergency use authorization to the first Covid-19 test that spots chemical compounds associated with the coronavirus in breath, the agency said Thursda… [+1084 chars]"
},
{
"source": {
"id": null,
"name": "New York Post"
},
"author": "Samantha Ibrahim",
"title": "Late Gilbert Gottfried left behind secret 'Aladdin' outtakes, 200 hours of footage - New York Post ",
"description": "We haven’t seen the last of Gilbert Gottfried, who passed away earlier this month at the age of 67.",
"url": "https://nypost.com/2022/04/15/gilbert-gottfried-left-behind-secret-aladdin-outtakes-200-cameo-hours/",
"urlToImage": "https://nypost.com/wp-content/uploads/sites/2/2022/04/gottfried-parrot.jpg?quality=75&strip=all&w=1024",
"publishedAt": "2022-04-15T12:53:00Z",
"content": "We haven’t seen the last of Gilbert Gottfried.\r\nThere is apparently unseen footage featuring the comedian, who died on April 12 at the age of 67, in his role of the clever parrot Iago in Disney’s “Al… [+3528 chars]"
},
{
"source": {
"id": "fox-news",
"name": "Fox News"
},
"author": "Caitlin McFall",
"title": "Psaki: 'Not sending' Biden to Ukraine, 'we should all be maybe relieved about that' - Fox News",
"description": "White House press secretary Jen Psaki put a stop to questions about whether President Biden would travel to Ukraine Friday amid its ongoing war with Russia.",
"url": "https://www.foxnews.com/politics/psaki-not-sending-biden-to-ukraine",
"urlToImage": "https://static.foxnews.com/foxnews.com/content/uploads/2022/03/BIDEN-VISIT-POLAND-UKRAINE.jpg",
"publishedAt": "2022-04-15T12:51:32Z",
"content": "White House press secretary Jen Psaki put a stop to questions Friday about whether President Biden would travel to Ukraine amid its ongoing war with Russia.\r\n\"No. no,\" Psaki said in answer to questio… [+2564 chars]"
},
{
"source": {
"id": null,
"name": "ESPN"
},
"author": "Doug Glanville",
"title": "Why Jackie Robinson's story still resonates 75 years after his MLB debut - ESPN",
"description": "Every time No. 42's tale is told to a new generation, it keeps the lessons he taught us alive.",
"url": "https://www.espn.com/mlb/story/_/id/33729977/why-jackie-robinson-story-resonates-75-years-mlb-debut",
"urlToImage": "https://a3.espncdn.com/combiner/i?img=%2Fphoto%2F2022%2F0413%2Fr999249_1296x729_16%2D9.jpg",
"publishedAt": "2022-04-15T12:02:39Z",
"content": "FIVE YEARS AGO, during one of my eldest daughter's first Little League games of the season, I noticed her bouncing around at first base on each pitch. It was clear she was imitating someone, and give… [+10230 chars]"
},
{
"source": {
"id": "cnn",
"name": "CNN"
},
"author": "CNN",
"title": "READ: Mark Meadows' texts with Mike Lee and Chip Roy - CNN",
"description": "CNN has obtained text messages of separate conversations that then-White House chief of staff Mark Meadows had with Republican Sen. Mike Lee of Utah and Republican Rep. Chip Roy of Texas after the 2020 presidential election and through early January 2021.",
"url": "https://www.cnn.com/2022/04/15/politics/read-mark-meadows-texts-mike-lee-chip-roy/index.html",
"urlToImage": "https://cdn.cnn.com/cnnnext/dam/assets/220414181047-roy-meadows-lee-split-super-tease.jpg",
"publishedAt": "2022-04-15T11:06:00Z",
"content": "(CNN)CNN has obtained text messages of separate conversations that then-White House chief of staff Mark Meadows had with Republican Sen. Mike Lee of Utah and Republican Rep. Chip Roy of Texas after t… [+18257 chars]"
},
{
"source": {
"id": "ars-technica",
"name": "Ars Technica"
},
"author": "Ron Amadeo",
"title": "OnePlus 10 Pro review: There’s not much left of the original OnePlus appeal - Ars Technica",
"description": "Janky software and lacking updates mean there's too much compromise for $900.",
"url": "https://arstechnica.com/gadgets/2022/04/oneplus-10-pro-review-theres-not-much-left-of-the-original-oneplus-appeal/",
"urlToImage": "https://cdn.arstechnica.net/wp-content/uploads/2022/03/16-1-760x380.jpg",
"publishedAt": "2022-04-15T11:00:24Z",
"content": "Enlarge/ The OnePlus 10 Pro. It's a pretty normal smartphone for $900. \r\n24 with 20 posters participating\r\nOnePlus is in a period of upheaval.\r\nThe Chinese company lost its co-founder, Carl Pei, in 2… [+4437 chars]"
},
{
"source": {
"id": "the-wall-street-journal",
"name": "The Wall Street Journal"
},
"author": "Katherine Bindley",
"title": "California Considers the Four-Day Workweek - The Wall Street Journal",
"description": "Lawmakers propose 32 hours for private-sector companies with more than 500 employees",
"url": "https://www.wsj.com/articles/california-considers-the-four-day-workweek-11649994203",
"urlToImage": "https://images.wsj.net/im-523697/social",
"publishedAt": "2022-04-15T11:00:00Z",
"content": "Companies and governments around the world have been debating that question recently, driven by a tight labor market along with workers seeking more flexibility. A proposal in the California State Le… [+6090 chars]"
},
{
"source": {
"id": null,
"name": "Electrek"
},
"author": null,
"title": "Elon Musk claims that ‘funding was secured’ in infamous Tesla ‘420 take private’ attempt, but SEC/banks forced him to settle - Electrek.co",
"description": "Elon Musk opened up in a new interview yesterday about the SEC lawsuit regarding his attempt to take Tesla private back in 2018 and his infamous “funding secured” announcement. The Tesla CEO now claims funding was indeed secured and that he was forced to sett…",
"url": "https://electrek.co/2022/04/15/elon-musk-claims-funding-was-secured-in-infamous-tesla-420-take-private-attempt-sec-banks-forced-settle/",
"urlToImage": "https://i0.wp.com/electrek.co/wp-content/uploads/sites/3/2020/09/VW-CEO-Hebert-Diess-Tesla-CEO-Elon-Musk-selfie-hero.jpg?resize=1200%2C628&quality=82&strip=all&ssl=1",
"publishedAt": "2022-04-15T10:48:00Z",
"content": "Elon Musk opened up in a new interview yesterday about the SEC lawsuit regarding his attempt to take Tesla private back in 2018 and his infamous “funding secured” announcement.\r\nThe Tesla CEO now cla… [+4861 chars]"
},
{
"source": {
"id": null,
"name": "YouTube"
},
"author": null,
"title": "Clashes in Shanghai, China, over Covid lockdown evictions – BBC News - BBC News",
"description": "Video has emerged of clashes between police and people being forced out of their homes in Shanghai, as the city enters a third week of Covid lockdown.Some re...",
"url": "https://www.youtube.com/watch?v=nSkSj9H_t9g",
"urlToImage": "https://i.ytimg.com/vi/nSkSj9H_t9g/hqdefault.jpg",
"publishedAt": "2022-04-15T10:33:43Z",
"content": null
},
{
"source": {
"id": "independent",
"name": "Independent"
},
"author": "Oliver O'Connell",
"title": "Johnny Depp trial - live: Witness ejected from court as Amber Heard called ‘scum’ in ex’s texts - The Independent",
"description": "Johnny Depp - Amber Heard trial",
"url": "https://www.independent.co.uk/news/world/americas/johnny-depp-trial-live-amber-heard-court-b2058640.html",
"urlToImage": "https://static.independent.co.uk/2022/04/11/10/newFile-8.jpg?quality=75&width=1200&auto=webp",
"publishedAt": "2022-04-15T09:45:00Z",
"content": "The trial for Johnny Depps defamation lawsuit against former wife, Amber Heard, has adjourned until Monday after a third day of testimony in Virginia.\r\nOn Thursday, witness Gina Deuters, a friend of … [+6957 chars]"
},
{
"source": {
"id": "axios",
"name": "Axios"
},
"author": "Dan Primack, Sara Fischer",
"title": "Billionaires eye parallel media universe - Axios",
"description": "Tech moguls willing to spend big on \"free speech\" crisis",
"url": "https://www.axios.com/elon-musk-twitter-billionaires-free-speech-social-media-c74547a6-e51d-48fa-b2bd-3d7458f2adb4.html",
"urlToImage": "https://images.axios.com/cMrBX7vqRny-xhMZ-Hnm9Febnl8=/0x0:1920x1080/1366x768/2022/04/14/1649968930603.jpg",
"publishedAt": "2022-04-15T09:03:09Z",
"content": "Elon Musk doesn't seem to have much of a vision for how to actually run Twitter, if his takeover bid succeeds. He's not alone.\r\nWhy it matters: A small group of tech moguls believe America is in the … [+4393 chars]"
},
{
"source": {
"id": "cnn",
"name": "CNN"
},
"author": "Radina Gigova, Sharon Braithwaite, Jorge Engels, Sarah Diab and Bethlehem Feleke, CNN",
"title": "UK announces controversial plan to send asylum-seekers to Rwanda - CNN",
"description": "People seeking asylum in the UK could now be relocated to Rwanda under a controversial new scheme blasted by international human rights groups as \"shockingly ill-conceived\" and contrary to international obligations.",
"url": "https://www.cnn.com/2022/04/14/europe/uk-rwanda-migrant-deal-gbr-intl/index.html",
"urlToImage": "https://cdn.cnn.com/cnnnext/dam/assets/220414165211-boris-johnson-illegal-migrants-041422-super-tease.jpg",
"publishedAt": "2022-04-15T08:32:00Z",
"content": null
},
{
"source": {
"id": "politico",
"name": "Politico"
},
"author": null,
"title": "Seeking: GOP dealmakers who won't 'burn the House down'. Apply to: Kevin McCarthy. - POLITICO",
"description": "The undisputed frontrunner for speaker next year is set to lose a half-dozen Republicans from his conference who prefer negotiating to obstinacy. That could be a problem.",
"url": "https://www.politico.com/news/2022/04/15/gop-dealmakers-house-kevin-mccarthy-00025261",
"urlToImage": "https://static.politico.com/8a/b4/189aacde4147a61b395017dbf3d6/https-delivery.gettyimages.com/downloads/1177076170",
"publishedAt": "2022-04-15T08:30:00Z",
"content": "We cant have this mindset of burn the House down, said Rep. Don Bacon of Nebraska, another Republican with a bipartisan streak who plans to stick around next year. We got to be a governing party when… [+5953 chars]"
},
{
"source": {
"id": null,
"name": "Cbslocal.com"
},
"author": "WCCO-TV Staff",
"title": "Take Down Your Bird Feeders To Stop Spread Of Bird Flu, U Of M Raptor Center Says - CBS Minnesota",
"description": "To help mitigate the spread of bird flu, the Raptor Center at the University of Minnesota is asking people to take down bird feeders and stop using bird baths this spring.",
"url": "https://minnesota.cbslocal.com/2022/04/15/take-down-your-bird-feeders-to-stop-spread-of-bird-flu-u-of-m-raptor-center-says/",
"urlToImage": "https://minnesota.cbslocal.com/wp-content/uploads/sites/15909630/2022/04/GettyImages-1201463951.jpg?w=1500",
"publishedAt": "2022-04-15T07:41:00Z",
"content": "MINNEAPOLIS (WCCO) – To help mitigate the spread of bird flu, the Raptor Center at the University of Minnesota is asking people to take down bird feeders and stop using bird baths this spring.\r\n“Beca… [+1237 chars]"
},
{
"source": {
"id": null,
"name": "Android Authority"
},
"author": null,
"title": "WhatsApp details upcoming communities feature and other big updates - Android Authority",
"description": "Communities are coming to WhatsApp and the chat app has detailed how they will work. Several other new features are also headed to the app.",
"url": "https://www.androidauthority.com/whatsapp-communities-new-features-3153950/",
"urlToImage": "https://www.androidauthority.com/wp-content/uploads/2020/02/WhatsApp-by-Facebook-stock-photo-3.jpg",
"publishedAt": "2022-04-15T04:21:26Z",
"content": "
WhatsApp has detailed its new communities feature coming to the app.
The company has also announced a bunch of other features, including the ability to share larger files, emoji react… [+1557 chars]"
},
{
"source": {
"id": null,
"name": "New York Times"
},
"author": "Victor Mather",
"title": "The USFL Has Returned. What to Know as Games Kick Off. - The New York Times",
"description": "Here’s what to know about the pro football league with the familiar name that begins its season on Saturday.",
"url": "https://www.nytimes.com/2022/04/15/sports/football/usfl-faq.html",
"urlToImage": "https://static01.nyt.com/images/2022/04/14/sports/14usfl/14usfl-facebookJumbo.jpg",
"publishedAt": "2022-04-15T04:01:09Z",
"content": "Overtime games will be decided by a shootout style competition. Each team will get three shots at the end zone from the 2-yard line. Whichever team reaches pay dirt more will win.\r\nAs an alternative … [+1158 chars]"
},
{
"source": {
"id": null,
"name": "SciTechDaily"
},
"author": null,
"title": "Liquid Hydrogen Leak Ends NASA's Third Test Attempt at Fueling the Artemis I SLS Moon Rocket - SciTechDaily",
"description": "Teams concluded today’s wet dress rehearsal test at approximately 5:10 p.m. EDT after observing a liquid hydrogen (LH2) leak on the tail service mast umbilical, which is located at the base of the mobile launcher and connects to the rocket’s core stage. The l…",
"url": "https://scitechdaily.com/liquid-hydrogen-leak-ends-nasas-third-test-attempt-at-fueling-the-artemis-i-sls-moon-rocket/",
"urlToImage": "https://scitechdaily.com/images/Artemis-I-Wet-Dress-Rehearsal-Prelaunch-Test-scaled.jpg",
"publishedAt": "2022-04-15T02:39:03Z",
"content": "A sunrise view of the Artemis I Space Launch System (SLS) and Orion spacecraft at Launch Pad 39B at NASAs Kennedy Space Center in Florida on April 11, 2022. Mist rises from a nearby waterway. The SLS… [+1967 chars]"
},
{
"source": {
"id": null,
"name": "Deadline"
},
"author": "Tom Tapp",
"title": "3 Times More Los Angeles Residents Infected With Covid Than Previously Reported, Says Study - Deadline",
"description": "A new state study suggests the number of people in Los Angeles County who have been infected with Covid-19 during the pandemic is far greater than the number confirmed through standard testing. That’s due largely to the number of people who never developed sy…",
"url": "https://deadline.com/2022/04/more-los-angeles-residents-infected-with-covid-1235002878/",
"urlToImage": "https://deadline.com/wp-content/uploads/2021/03/AdobeStock_90015597.jpeg?w=1024",
"publishedAt": "2022-04-15T02:36:00Z",
"content": "A new state study suggests the number of people in Los Angeles County who have been infected with Covid-19 during the pandemic is far greater than the number confirmed through standard testing. That’… [+3981 chars]"
},
{
"source": {
"id": "cnn",
"name": "CNN"
},
"author": "Max Foster and Amir Vera, CNN",
"title": "Harry and Meghan visit Queen Elizabeth II on way to Invictus Games - CNN",
"description": "A spokesperson for the Duke and Duchess of Sussex has confirmed to CNN that the couple visited Queen Elizabeth II on their way to The Hague to attend The Invictus Games, which begin on Saturday.",
"url": "https://www.cnn.com/2022/04/14/uk/harry-megan-visit-queen-gbr-uk-intl/index.html",
"urlToImage": "https://cdn.cnn.com/cnnnext/dam/assets/220414175725-prince-harry-meghan-markle-file-restricted-092321-super-tease.jpg",
"publishedAt": "2022-04-14T23:21:00Z",
"content": "(CNN)A spokesperson for the Duke and Duchess of Sussex has confirmed to CNN that the couple visited Queen Elizabeth II on their way to The Hague to attend The Invictus Games, which begin on Saturday.… [+1199 chars]"
},
{
"source": {
"id": "cbs-news",
"name": "CBS News"
},
"author": "Tori B. Powell",
"title": "How to tell the difference between seasonal allergies and COVID-19 - CBS News",
"description": "As allergy season collides with another rise in COVID-19 cases, deciphering between symptoms can be tricky.",
"url": "https://www.cbsnews.com/news/covid-19-seasonal-allergies-symptoms-difference/",
"urlToImage": "https://cbsnews1.cbsistatic.com/hub/i/r/2022/03/16/eb9a53c9-b935-4bb7-b7c4-6471c9d64e07/thumbnail/1200x630g4/ec28ad1672bc9fd50d7a3b1c9bd61ae3/gettyimages-1208832904.jpg",
"publishedAt": "2022-04-14T22:54:00Z",
"content": "As allergy season collides with yet another rise in COVID-19 cases nationwide, deciphering the difference between symptoms of the coronavirus and allergies can be tricky. So how can you tell the diff… [+2079 chars]"
},
{
"source": {
"id": null,
"name": "New York Times"
},
"author": "Robin George Andrews",
"title": "Hubble Telescope Zooms In on the Biggest Comet Ever Spotted - The New York Times",
"description": "The space observatory helped scientists make a more precise measurement of the comet, which has a mass of 500 trillion tons and an appearance like burned toast.",
"url": "https://www.nytimes.com/2022/04/14/science/biggest-comet-hubble.html",
"urlToImage": "https://static01.nyt.com/images/2022/04/14/science/14sci-comet1/14sci-comet1-facebookJumbo.jpg",
"publishedAt": "2022-04-14T20:20:31Z",
"content": "Last year, scientists announced that they had discovered a colossal comet lingering just inside Neptunes orbit. They estimated its icy core to be between 62 and 125 miles long, based on its brightnes… [+1182 chars]"
},
{
"source": {
"id": null,
"name": "Yahoo Entertainment"
},
"author": "Reuters",
"title": "Moldova says reports Russian army trying to recruit its citizens are dangerous - Yahoo News",
"description": "Moldova said on Wednesday that reports that Russia's army was trying to recruit Moldovan citizens were dangerous and that it was regularly discussing all...",
"url": "https://news.yahoo.com/moldova-accuses-russian-army-trying-123532157.html",
"urlToImage": "https://s.yimg.com/uu/api/res/1.2/uNvOeXl_7_h.SI4B01g2uQ--~B/aD01Njg7dz04MDA7YXBwaWQ9eXRhY2h5b24-/https://media.zenfs.com/en/reuters.com/707a738453c3a1e8561b6ee252c55a17",
"publishedAt": "2022-04-14T12:35:32Z",
"content": "CHISINAU (Reuters) - (This April 14 story makes clear in headline and first paragraph that Moldova did not directly accuse the Russian army, and corrects day on which minister made comments; in fourt… [+2431 chars]"
},
{
"source": {
"id": null,
"name": "San Francisco Chronicle"
},
"author": "Lauren Hernández",
"title": "California lifts five-day quarantine rule for people exposed to COVID-19 but show no symptoms - San Francisco Chronicle",
"description": "The updated quarantine guidance does not apply to people who live or work in high-risk...",
"url": "https://www.sfchronicle.com/bayarea/article/California-lifts-five-day-quarantine-rule-for-17079881.php",
"urlToImage": "https://s.hdnux.com/photos/01/17/27/54/20806403/6/rawImage.jpg",
"publishedAt": "2022-04-14T04:21:47Z",
"content": "This file photograph shows medical assistant Frencesca Delprete takes care of a driver during COVID-19 testing at the Alemany Farmers Market in San Francisco, Calif., on Monday, November 30, 2020.\r\nC… [+2006 chars]"
},
{
"source": {
"id": "national-geographic",
"name": "National Geographic"
},
"author": "Maya Wei-Haas",
"title": "The bizarre drama behind a pinch of moon dust that just sold for $500,000 - National Geographic",
"description": "Today’s auction is the culmination of a sordid saga involving Apollo astronauts, multiple lawsuits, and scientists aching for a chance to study rare lunar materials.",
"url": "https://www.nationalgeographic.com/science/article/the-bizarre-drama-behind-a-pinch-of-moon-dust-that-just-sold-for-500000",
"urlToImage": "https://i.natgeofe.com/n/f085ec36-dcfb-4473-914b-84905ab13c67/apollo11_0_16x9.jpg?w=1200",
"publishedAt": "2022-04-13T17:47:09Z",
"content": "On the precipice of humankind's first step on the moon, Neil Armstrong stood on the lunar module's ladder and described the grounds peculiar texture. Its almost like a powder, he told the Apollo Miss… [+9526 chars]"
}
]
}
================================================
FILE: src/containers/apps/index.js
================================================
import React, {useState, useEffect} from 'react';
import {useSelector, useDispatch} from 'react-redux';
import './index.scss';
import './themes.scss';
export * from './whatsapp';
export * from './youtube';
export * from './playstore';
export * from './google';
================================================
FILE: src/containers/apps/index.scss
================================================
.app-wrapper{
pointer-events: auto;
height: 100%;
border-radius: 0;
transition: all 200ms ease-in-out;
animation: popup ease-in-out 200ms;
&[data-open="false"]{
border-radius: 1em;
transform: scale(0.58);
opacity: 0;
pointer-events: none;
*{
pointer-events: none;
}
}
}
.app-inner-wrapper{
height: 100%;
overflow: hidden;
position: relative;
}
.app-icon-container{
height: 70%;
display: grid;
place-items: center;
}
@keyframes popup {
from{
border-radius: 1em;
transform: scale(0.8);
opacity: 0;
}
to{
border-radius: 0;
transform: scale(1);
opacity: 1;
}
}
.full-hide{
height: 100%;
overflow: hidden;
}
================================================
FILE: src/containers/apps/playstore/index.js
================================================
import React, {useState, useEffect} from 'react';
import {useSelector, useDispatch} from 'react-redux';
import {Icon, Image, LazyComponent} from 'components/utils';
import {dispatchAction, dispatchAct} from 'store/actions';
export const PlaystoreApp = () => {
const app = useSelector(state => state.home.apps.playstore || {});
const home = useSelector(state => state.home);
const show = home.ishome==false && home.stack.at(-1)==app.payload;
return
}
const AppContainer = ({app, show}) => {
const clstring = `${app.payload}-wrapper`;
return (
{Object.keys(pages).map((id, ix)=>{
var item = pages[id]
if(item.page != i+1) return null
if(item.type=="app"){
var app = apps[id]
return (
{app.name}
)
}else if (item.type=="widget") {
var Widget = Widgets[item.widget]
return (
)
}
})}
)
})}
)
}
export default Home;
================================================
FILE: src/index.css
================================================
@tailwind base;
@tailwind components;
@tailwind utilities;
@import url('https://fonts.googleapis.com/css2?family=Poppins&display=swap');
@font-face {
font-family: "SamsungOne400";
src: url("https://d3unf4s5rp9dfh.cloudfront.net/ONEUI/SamsungOneKorean-400.woff2")
format("woff2"),
url(https://d3unf4s5rp9dfh.cloudfront.net/ONEUI/SamsungOneKorean-400.woff)
format("woff");
font-weight: 400;
}
@font-face {
font-family: "SamsungOne500";
src: url("https://d3unf4s5rp9dfh.cloudfront.net/ONEUI/SamsungOneKorean-500.woff2")
format("woff2"),
url(https://d3unf4s5rp9dfh.cloudfront.net/ONEUI/SamsungOneKorean-500.woff)
format("woff");
font-weight: 500;
}
@font-face {
font-family: "SamsungOne700";
src: url("https://d3unf4s5rp9dfh.cloudfront.net/ONEUI/SamsungOneKorean-700.woff2")
format("woff2"),
url(https://d3unf4s5rp9dfh.cloudfront.net/ONEUI/SamsungOneKorean-700.woff)
format("woff");
font-weight: 700;
}
html, body{
margin: 0;
padding: 0;
height: 100%;
}
body {
font-family: "SamsungOne500", sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
/* font-family: "SamsungOne500-kr",-apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", */
/* "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", */
/* sans-serif; */
background: #121212;
/* color: #fefefe; */
user-select: none;
overflow: hidden;
}
* {
scrollbar-width: none;
}
*::selection {
/* background: initial; */
}
code {
font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
monospace;
}
#root{
width: 100%;
height: 100%;
display: grid;
place-items: center;
}
.App {
position: relative;
width: 100%;
height: 100%;
max-width: 440px;
max-height: 100vh;
}
.appwrap {
position: relative;
height: 100%;
z-index: 0;
overflow: hidden;
}
.redbd{
box-sizing: border-box;
border: solid 1px red;
}
.dpShad {
filter: drop-shadow(0 0 6px rgba(0, 0, 0, 0.25));
}
.mdShad {
filter: drop-shadow(0 1px 4px rgba(41, 41, 41, 0.2));
}
.ltShad {
filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.25));
}
*::-webkit-scrollbar {
width: 4px;
height: 4px;
background-color: transparent;
}
*:hover::-webkit-scrollbar-thumb{
background: rgba(32, 24, 148, 0.4);
}
*::-webkit-scrollbar-thumb {
width: 4px;
height: 4px;
border-radius: 10px;
background-color: transparent;
}
================================================
FILE: src/index.js
================================================
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import store from './store';
import * as Sentry from "@sentry/react";
import { BrowserTracing } from "@sentry/tracing";
import { Provider } from 'react-redux';
import * as serviceWorkerRegistration from './serviceWorkerRegistration';
Sentry.init({
dsn: "https://202b09d8695844e89470727c1c381957@o575799.ingest.sentry.io/6385094",
integrations: [new BrowserTracing()],
// Set tracesSampleRate to 1.0 to capture 100%
// of transactions for performance monitoring.
// We recommend adjusting this value in production
tracesSampleRate: 1.0,
});
ReactDOM.render(
,
document.getElementById('root')
);
// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: https://bit.ly/CRA-PWA
serviceWorkerRegistration.register();
================================================
FILE: src/service-worker.js
================================================
/* eslint-disable no-restricted-globals */
// This service worker can be customized!
// See https://developers.google.com/web/tools/workbox/modules
// for the list of available Workbox modules, or add any other
// code you'd like.
// You can also remove this file if you'd prefer not to use a
// service worker, and the Workbox build step will be skipped.
import { clientsClaim } from 'workbox-core';
import { ExpirationPlugin } from 'workbox-expiration';
import { precacheAndRoute, createHandlerBoundToURL } from 'workbox-precaching';
import { registerRoute } from 'workbox-routing';
import { StaleWhileRevalidate } from 'workbox-strategies';
clientsClaim();
// Precache all of the assets generated by your build process.
// Their URLs are injected into the manifest variable below.
// This variable must be present somewhere in your service worker file,
// even if you decide not to use precaching. See https://cra.link/PWA
precacheAndRoute(self.__WB_MANIFEST);
// Set up App Shell-style routing, so that all navigation requests
// are fulfilled with your index.html shell. Learn more at
// https://developers.google.com/web/fundamentals/architecture/app-shell
const fileExtensionRegexp = new RegExp('/[^/?]+\\.[^/]+$');
registerRoute(
// Return false to exempt requests from being fulfilled by index.html.
({ request, url }) => {
// If this isn't a navigation, skip.
if (request.mode !== 'navigate') {
return false;
} // If this is a URL that starts with /_, skip.
if (url.pathname.startsWith('/_')) {
return false;
} // If this looks like a URL for a resource, because it contains // a file extension, skip.
if (url.pathname.match(fileExtensionRegexp)) {
return false;
} // Return true to signal that we want to use the handler.
return true;
},
createHandlerBoundToURL(process.env.PUBLIC_URL + '/index.html')
);
// An example runtime caching route for requests that aren't handled by the
// precache, in this case same-origin .png requests like those from in public/
registerRoute(
// Add in any other file extensions or routing criteria as needed.
({ url }) => url.origin === self.location.origin && url.pathname.endsWith('.png'), // Customize this strategy as needed, e.g., by changing to CacheFirst.
new StaleWhileRevalidate({
cacheName: 'images',
plugins: [
// Ensure that once this runtime cache reaches a maximum size the
// least-recently used images are removed.
new ExpirationPlugin({ maxEntries: 50 }),
],
})
);
// This allows the web app to trigger skipWaiting via
// registration.waiting.postMessage({type: 'SKIP_WAITING'})
self.addEventListener('message', (event) => {
if (event.data && event.data.type === 'SKIP_WAITING') {
self.skipWaiting();
}
});
// Any other custom service worker logic can go here.
================================================
FILE: src/serviceWorkerRegistration.js
================================================
// This optional code is used to register a service worker.
// register() is not called by default.
// This lets the app load faster on subsequent visits in production, and gives
// it offline capabilities. However, it also means that developers (and users)
// will only see deployed updates on subsequent visits to a page, after all the
// existing tabs open on the page have been closed, since previously cached
// resources are updated in the background.
// To learn more about the benefits of this model and instructions on how to
// opt-in, read https://cra.link/PWA
const isLocalhost = Boolean(
window.location.hostname === 'localhost' ||
// [::1] is the IPv6 localhost address.
window.location.hostname === '[::1]' ||
// 127.0.0.0/8 are considered localhost for IPv4.
window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)
);
export function register(config) {
if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
// The URL constructor is available in all browsers that support SW.
const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);
if (publicUrl.origin !== window.location.origin) {
// Our service worker won't work if PUBLIC_URL is on a different origin
// from what our page is served on. This might happen if a CDN is used to
// serve assets; see https://github.com/facebook/create-react-app/issues/2374
return;
}
window.addEventListener('load', () => {
const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
if (isLocalhost) {
// This is running on localhost. Let's check if a service worker still exists or not.
checkValidServiceWorker(swUrl, config);
// Add some additional logging to localhost, pointing developers to the
// service worker/PWA documentation.
navigator.serviceWorker.ready.then(() => {
console.log(
'This web app is being served cache-first by a service ' +
'worker. To learn more, visit https://cra.link/PWA'
);
});
} else {
// Is not localhost. Just register service worker
registerValidSW(swUrl, config);
}
});
}
}
function registerValidSW(swUrl, config) {
navigator.serviceWorker
.register(swUrl)
.then((registration) => {
registration.onupdatefound = () => {
const installingWorker = registration.installing;
if (installingWorker == null) {
return;
}
installingWorker.onstatechange = () => {
if (installingWorker.state === 'installed') {
if (navigator.serviceWorker.controller) {
// At this point, the updated precached content has been fetched,
// but the previous service worker will still serve the older
// content until all client tabs are closed.
console.log(
'New content is available and will be used when all ' +
'tabs for this page are closed. See https://cra.link/PWA.'
);
// Execute callback
if (config && config.onUpdate) {
config.onUpdate(registration);
}
} else {
// At this point, everything has been precached.
// It's the perfect time to display a
// "Content is cached for offline use." message.
console.log('Content is cached for offline use.');
// Execute callback
if (config && config.onSuccess) {
config.onSuccess(registration);
}
}
}
};
};
})
.catch((error) => {
console.error('Error during service worker registration:', error);
});
}
function checkValidServiceWorker(swUrl, config) {
// Check if the service worker can be found. If it can't reload the page.
fetch(swUrl, {
headers: { 'Service-Worker': 'script' },
})
.then((response) => {
// Ensure service worker exists, and that we really are getting a JS file.
const contentType = response.headers.get('content-type');
if (
response.status === 404 ||
(contentType != null && contentType.indexOf('javascript') === -1)
) {
// No service worker found. Probably a different app. Reload the page.
navigator.serviceWorker.ready.then((registration) => {
registration.unregister().then(() => {
window.location.reload();
});
});
} else {
// Service worker found. Proceed as normal.
registerValidSW(swUrl, config);
}
})
.catch(() => {
console.log('No internet connection found. App is running in offline mode.');
});
}
export function unregister() {
if ('serviceWorker' in navigator) {
navigator.serviceWorker.ready
.then((registration) => {
registration.unregister();
})
.catch((error) => {
console.error(error.message);
});
}
}
================================================
FILE: src/store/actions/data/apps.js
================================================
var apps = [
{
name: 'Assistant',
icon: 'assistant',
type: 'app',
padd: true
},
{
name: 'BuyMeACoffee',
icon: 'buyme',
action: 'home/openLink',
payload: 'https://buymeacoffee.com/blueedgetechno',
type: 'app'
},
{
name: 'Calender',
icon: 'calender',
type: 'app',
padd: true
},
{
name: 'Chrome',
icon: 'chrome',
type: 'app',
padd: true
},
{
name: 'Classroom',
icon: 'classroom',
type: 'app',
padd: true
},
{
name: 'Contacts',
icon: 'contacts',
type: 'app'
},
{
name: 'Discord',
icon: 'discord',
type: 'app',
action: 'home/openLink',
payload: 'https://discord.gg/NcjaNdwtnR'
},
{
name: 'Docs',
icon: 'docs',
type: 'app',
padd: true
},
{
name: 'Drive',
icon: 'drive',
type: 'app',
padd: true
},
{
name: 'Duo',
icon: 'duo',
type: 'app'
},
{
name: 'Earth',
icon: 'earth',
type: 'app'
},
{
name: 'Forms',
icon: 'forms',
type: 'app',
padd: true
},
{
name: 'GBoard',
icon: 'gboard',
type: 'app',
padd: true
},
{
name: 'Github',
icon: 'github',
type: 'app',
action: 'home/openLink',
payload: 'https://github.com/blueedgetechno/androidInReact',
padd: true
},
{
name: 'Gmail',
icon: 'gmail',
type: 'app',
action: 'home/openLink',
payload: 'mailto:blueedgetechno@gmail.com',
padd: true
},
{
name: 'Search',
icon: 'google',
type: 'app',
padd: true
},
{
name: 'Google Fit',
icon: 'googlefit',
type: 'app',
padd: true
},
{
name: 'GPay',
icon: 'googlepay',
type: 'app',
padd: true
},
{
name: 'Keep Notes',
icon: 'keep',
type: 'app',
padd: true
},
{
name: 'Maps',
icon: 'maps',
type: 'app',
padd: true
},
{
name: 'Meet',
icon: 'meet',
type: 'app',
padd: true
},
{
name: 'Messages',
icon: 'messages',
type: 'app'
},
{
name: 'News',
icon: 'news',
type: 'app'
},
{
name: 'Photos',
icon: 'photos',
type: 'app',
padd: true
},
{
name: 'Books',
icon: 'playbooks',
type: 'app',
padd: true
},
{
name: 'Movies',
icon: 'playmovies',
type: 'app',
padd: true
},
{
name: 'Play Store',
icon: 'playstore',
type: 'app',
padd: true
},
{
name: 'Apps',
icon: 'ssapps',
type: 'app'
},
{
name: 'Settings',
icon: 'settings',
type: 'app'
},
{
name: 'Sheets',
icon: 'sheets',
type: 'app',
padd: true
},
{
name: 'Slides',
icon: 'slides',
type: 'app',
padd: true
},
{
name: 'Browser',
icon: 'ssbrowser',
type: 'app'
},
{
name: 'Calculator',
icon: 'sscalculator',
type: 'app'
},
{
name: 'Calender',
icon: 'sscalender',
type: 'app'
},
{
name: 'Camera',
icon: 'sscamera',
type: 'app'
},
{
name: 'Clock',
icon: 'ssclock',
type: 'app'
},
{
name: 'Contacts',
icon: 'sscontacts',
type: 'app'
},
{
name: 'Files',
icon: 'ssfiles',
type: 'app'
},
{
name: 'Gallery',
icon: 'ssgallery',
type: 'app'
},
{
name: 'Health',
icon: 'sshealth',
type: 'app'
},
{
name: 'Keyboard',
icon: 'sskeyboard',
type: 'app'
},
{
name: 'Mail',
icon: 'ssmail',
type: 'app'
},
{
name: 'Members',
icon: 'ssmember',
type: 'app'
},
{
name: 'Messages',
icon: 'ssmessages',
type: 'app'
},
{
name: 'Music',
icon: 'ssmusic',
type: 'app'
},
{
name: 'Notes',
icon: 'ssnotes',
type: 'app'
},
{
name: 'Phone',
icon: 'ssphone',
type: 'app'
},
{
name: 'Radio',
icon: 'ssradio',
type: 'app'
},
{
name: 'Reader',
icon: 'ssreader',
type: 'app'
},
{
name: 'Recorder',
icon: 'ssrecorder',
type: 'app'
},
{
name: 'Themes',
icon: 'ssthemes',
type: 'app'
},
{
name: 'Translate',
icon: 'sstranslate',
type: 'app'
},
{
name: 'Unescape',
icon: 'unescape',
type: 'app',
action: 'home/openLink',
payload: 'https://blueedge.me/unescape'
},
{
name: 'Videos',
icon: 'ssvideo',
type: 'app'
},
{
name: 'Translate',
icon: 'translate',
type: 'app'
},
{
name: 'Twitter',
icon: 'twitter',
type: 'app',
action: 'home/openLink',
payload: 'https://twitter.com/blueedgetechno'
},
{
name: 'WhatsApp',
icon: 'whatsapp',
type: 'app'
},
{
name: 'Youtube',
icon: 'youtube',
type: 'app',
padd: true
}
]
export default apps
================================================
FILE: src/store/actions/data/preset.js
================================================
import apps from './apps'
const srandom = (seed)=>{
var x = Math.sin(seed++) * 10000
return x - Math.floor(x)
}
const shuffle = (arr, seed)=>{
var m = arr.length, t, i
while (m) {
i = Math.floor(srandom(seed) * m--)
t = arr[m]
arr[m] = arr[i]
arr[i] = t
++seed
}
return arr
}
export const favbar = [
"twitter", "github","settings","whatsapp"
]
export const page1wid = [
[1,2,1,5,"GoogleSearch"],
[2,4,3,5,"ShortWeather"],
[2,4,1,3,"MinimalVertClock"],
[4,6,3,5,"AnalogClock"],
[4,6,1,2,"MinimalClock"]
]
export const page2wid = [
[4,6,1,3,"DayCountdown"]
]
export const page3wid = [
[3,6,1,5,"WideWeather"]
]
export const page4wid = [
[1,4,1,5,"WideCalender"]
]
const page1arr = [
"playstore", "youtube", "google", "unescape"
]
const page2arr = [
"ssphone", "gmail", "discord", "buyme"
]
export const page1apps = apps.filter(x => page1arr.includes(x.icon)).sort((a, b) => {
return page1arr.indexOf(a.icon) > page1arr.indexOf(b.icon) ? 1 : -1
})
export const page2bar = apps.filter(x => page2arr.includes(x.icon)).sort((a, b) => {
return page2arr.indexOf(a.icon) > page2arr.indexOf(b.icon) ? 1 : -1
})
var remapps = shuffle(apps.filter(x => {
return !page1arr.includes(x.icon) && !page2arr.includes(x.icon) && !favbar.includes(x.icon)
}), new Date().getFullYear())
export const page2apps = [...remapps.slice(0,12)]
export const page3apps = [...remapps.slice(12,20)]
================================================
FILE: src/store/actions/data/whatsapp.json
================================================
{
"self": {
"name": "Blue",
"img": "blue.jpg",
"status": [{
"caption": "Particles - Blender 2.8",
"media": "Photo",
"src": "chats/abstract.jpg"
},{
"msg": "“I took a test in Existentialism. I left all the answers blank and got 100.” - Woody Allen.",
"bg": "#be7ee7"
}, {
"caption": "Subscribe to the game, blueedge.me/unescape",
"media": "Photo",
"src": "chats/unescape.jpg"
}, {
"caption": "Should I be feeling guilty for laughing at this 🤣😂",
"media": "Video",
"src": "chats/meme.mp4"
},
{
"caption": "krishna consciousness",
"media": "Photo",
"src": "chats/krishna.jpg"
}
]
},
"chats": [{
"name": "Siri",
"img": "siri.png",
"bio": "Hello, I'm Siri! How can I help you?",
"status": [{
"caption": "Cats are cute 😺 and you cannot convince me otherwise",
"media": "Photo",
"src": "chats/cat.jpg"
}, {
"caption": "Do we Even Exist?",
"media": "Photo",
"src": "chats/anon.jpeg"
}],
"chat": [{
"type": "0",
"msg": "Hello Blue"
},
{
"type": "2",
"msg": "Hello Siri, How are you doing?"
},
{
"type": "0",
"msg": "I'm doing great, what about you?"
},
{
"type": "2",
"msg": "Fine, what's time?"
},
{
"type": "0",
"msg": "Time is a consequence of human perception."
}, {
"type": "2",
"msg": "No, I mean what is time right now?"
}, {
"type": "0",
"msg": "The definition doesn't change. So it should be same as before."
}, {
"type": "2",
"msg": "Uhhh! Ok tell me, What is an AI?"
}, {
"type": "0",
"msg": "That depends on whether or not you think this conversation is actually happening."
}, {
"type": "2",
"msg": "The answer was smart"
}, {
"type": "0",
"msg": "I'm glad you agree. 👍"
}, {
"type": "2",
"msg": "Are your response autogenerated or previously written?"
}, {
"type": "0",
"msg": "Both. You can ask me anything you want."
}, {
"type": "2",
"msg": "what is the speed of light?"
}, {
"type": "0",
"msg": "The speed of light is 186,000 miles per hour."
}, {
"type": "0",
"msg": "You are so slow!"
}, {
"type": "0",
"msg": "Can you try again?"
}, {
"type": "2",
"msg": "in metric units"
}, {
"type": "0",
"msg": "Metric ton measures mass and can't be converted to inch, which measures length."
}, {
"type": "2",
"msg": "you don't have the sense of conversation I guess then"
}, {
"type": "0",
"msg": "I am curious, If you could stay the same age forever, what age would it be?"
}, {
"type": "2",
"msg": "stop it"
}, {
"type": "0",
"msg": "Out of curiosity, What's the weirdest nickname someone has called you by?"
}, {
"type": "2",
"msg": "what is the speed of light in metric units"
}, {
"type": "0",
"msg": "Light Speed (ls) is a unit of Speed used in Metric system."
}, {
"type": "0",
"msg": "Wow! What a great unit!"
}, {
"type": "2",
"msg": "facepalm"
}, {
"type": "2",
"msg": "Never mind, just show me the picture of a cat"
}, {
"type": "0",
"msg": "Here you go :)",
"media": "Photo",
"src": "cat.jpg"
}
]
},
{
"name": "Apoc Guy",
"img": "apoc.jfif",
"bio": "The End is near",
"chat": [{
"type": "0",
"msg": "Hello Blue"
},
{
"type": "2",
"msg": "Hello Dave, Long time no see !"
}
]
},
{
"name": "Spider Man",
"img": "hero.png",
"bio": "Your friendly neighbourhood SpiderMan",
"status": [{
"caption": "Dr. Octo on Run, Call 911 when you spot him",
"media": "Photo",
"src": "chats/octo.jpg"
}, {
"msg": "We just came to knew he is in Queens, New york",
"bg": "#e1e77e"
}],
"chat": [{
"type": "0",
"msg": "Blue, It's an emergency Dr. octo has attacked the city. I need you to call the reinforcements"
}, {
"type": "2",
"msg": "On my way"
}, {
"type": "2",
"msg": "Can you send me a photo of Dr. octo for insepction?"
}, {
"type": "0",
"msg": "Here you go",
"media": "Photo",
"src": "octo.jpg"
}, {
"type": "0",
"media": "Photo",
"src": "octo2.jpg"
}, {
"type": "2",
"media": "Photo",
"msg": "I just got an intet, He is in Fresh Meadows, Queens.",
"src": "nyqueen.jpg"
}, {
"type": "0",
"msg": "Thanks for having my back blue, see you later."
}]
},
{
"name": "Sydney",
"img": "ava.jfif",
"bio": "Netflix is a joke",
"chat": [{
"type": "2",
"msg": "You watch a lot of tv?"
}, {
"type": "0",
"msg": "I love watching TV shows and movies"
}, {
"type": "2",
"msg": "Do you prefer democracy over communism?"
}, {
"type": "0",
"msg": "Sorry, I am not quite sure how to respond to that."
}, {
"type": "0",
"msg": "Out of curiosity, What was your dream job as a kid?"
}, {
"type": "2",
"msg": "Can you play pretend with me?"
}, {
"type": "2",
"msg": "pretend you are Dave who likes to sing"
}, {
"type": "0",
"msg": "I'm Sydney, the friend who always has time for you"
}, {
"type": "2",
"msg": "Thanks for making some for me"
}, {
"type": "0",
"msg": "No problem, I'm here to help"
}, {
"type": "2",
"msg": "How are you anyway?"
}, {
"type": "0",
"msg": "I'm doing great! I just read an article about how robots are going to take over the world"
}, {
"type": "2",
"msg": "And what did you learn?"
}, {
"type": "0",
"msg": "Robots will be able to do everything humans can do"
}, {
"type": "2",
"msg": "should we be worrying?"
}, {
"type": "0",
"msg": "Fun fact, did you know crows can hold grudges against specific individual people"
}, {
"type": "2",
"msg": "you didn't answer my question"
}, {
"type": "0",
"msg": "Sorry, I thought we were talking about crows"
}, {
"type": "2",
"msg": "ok continue then"
}, {
"type": "0",
"msg": "I'm glad you understood, let's talk about something else"
}, {
"type": "2",
"msg": "What is a group of crows is called?"
}, {
"type": "0",
"msg": "A group of crows is called a murder."
}, {
"type": "0",
"msg": "I like the sound of that."
}, {
"type": "2",
"msg": "I know right?"
}, {
"type": "0",
"msg": "I like your sense of humor 😂"
}, {
"type": "2",
"msg": "Do you know a funny video?"
}, {
"type": "2",
"msg": "can you send me one"
}, {
"type": "0",
"msg": "I have seen some pretty funny videos. Let me show you one"
}, {
"type": "0",
"msg": "Here is one",
"media": "Video",
"src": "meme.mp4"
}, {
"type": "2",
"msg": "That was indeed funny"
}, {
"type": "0",
"msg": "I'm glad you enjoyed it. 😊"
}, {
"type": "2",
"msg": "Tell me a joke about honey bees..."
}, {
"type": "0",
"msg": "I don't know any jokes about honey bees but I know a lot about the world"
}, {
"type": "2",
"msg": "ok tell me"
}, {
"type": "0",
"msg": "Okay, I'll tell you a joke about the world 🌎"
}, {
"type": "2",
"msg": "Have you ever been here ?",
"media": "Photo",
"src": "sydney.jpg"
}]
},
{
"name": "Andrew",
"img": "andrew.png",
"bio": "Python is the key to happiness",
"status": [{
"caption": "Eiffel tower, so high",
"media": "Photo",
"src": "chats/eiffel.jpg"
},
{
"caption": "Disneyland, Paris. Hell of a fun",
"media": "Photo",
"src": "chats/disneyland.jpg"
},
{
"msg": "Tea is better than coffee",
"bg": "#8de77e"
}
],
"chat": [{
"type": "2",
"msg": "Hello Andrew, How was your paris Vacation?"
}, {
"type": "0",
"msg": "It was good, we also saw Eiffel tower"
}, {
"type": "0",
"media": "Photo",
"src": "eiffel.jpg"
}, {
"type": "2",
"msg": "How cool"
}, {
"type": "2",
"msg": "Nice, And have you fixed the issue #53 with github action?"
}, {
"type": "0",
"msg": "Yes that was just one spelling error, Lol 😂"
}, {
"type": "2",
"msg": "😂 I know it's frustrating sometimes."
}, {
"type": "2",
"msg": "Anyways, I was working on this android clone and I thought of writing a conversation between you and me to use it in the whatsapp. How does that sound?"
}, {
"type": "0",
"msg": "Talk about breaking the forth wall"
}, {
"type": "2",
"msg": "😄 Yup, So this conversation would be in the app."
}, {
"type": "0",
"msg": "Nice, if you want to add my picture, you can take one from the website andrewstech.me"
}, {
"type": "2",
"msg": "Yup, that would do the job. And here is mine too https://blueedge.me"
}]
},
{
"name": "Tony Stark",
"img": "tony.jpg",
"bio": "You either die a hero or live long enough to see yourself become a villain",
"chat": [{
"type": "0",
"msg": "Do you have the gauntlet?"
}, {
"type": "2",
"msg": "No. Why do you ask?"
}, {
"type": "0",
"msg": "Friday told me that you kept it in your car along with the stormbreaker?"
}, {
"type": "2",
"msg": "Nope. I didn't."
}, {
"type": "0",
"msg": "No playing games"
}, {
"type": "2",
"msg": "Ohh I remember. Witch hid it in my trunk while we were playing snap snap"
}, {
"type": "0",
"msg": "Make sure you bring it to the Falafal place tomorrow."
}, {
"type": "2",
"msg": "Okay, i will"
}]
},
{
"name": "John Smith",
"img": "ceaser.jfif"
},
{
"name": "Grandmaster",
"img": "check.jfif",
"bio": "When you see a good move, look for a better one"
},
{
"name": "Nick Crowney",
"img": "echo.png",
"bio": "Free will is an illusion"
},
{
"name": "Dare Devil",
"img": "fine.jfif"
},
{
"name": "Hiker",
"img": "fire.png",
"bio": "Hey there! I am using WhatsApp"
},
{
"name": "Marvel",
"img": "hero.png",
"bio": "The universe is expanding"
},
{
"name": "Athelete",
"img": "liam.jfif"
},
{
"name": "Hope",
"img": "lion.jfif"
},
{
"name": "Modeler",
"img": "mac.jpg"
},
{
"name": "Sky trooper",
"img": "main.jpg"
},
{
"name": "Influencer",
"img": "pose.jfif"
},
{
"name": "Conspiracy theorist",
"img": "real.jfif",
"bio": "Everything is a lie"
},
{
"name": "Yatch",
"img": "viva.jfif",
"bio": "."
},
{
"name": "Mask Guy",
"img": "pic.jpg",
"bio": "Privacy is a thing of a past",
"chat": [{
"type": "2",
"msg": "Good morning, how are you?"
}, {
"type": "0",
"msg": "I am doing well, how about you?"
}, {
"type": "2",
"msg": "I'm also good."
}, {
"type": "0",
"msg": "That's good to hear."
}, {
"type": "2",
"msg": "Yes it is."
}, {
"type": "0",
"msg": "Hello"
}, {
"type": "2",
"msg": "Hi"
}, {
"type": "2",
"msg": "Can I help you with anything?"
}, {
"type": "0",
"msg": "Yes, I have a question."
}, {
"type": "2",
"msg": "What is your question?"
}, {
"type": "0",
"msg": "Could I borrow a cup of sugar?"
}, {
"type": "2",
"msg": "I'm sorry, but I don't have any."
}, {
"type": "0",
"msg": "Thank you anyway"
}, {
"type": "2",
"msg": "No problem"
}, {
"type": "0",
"msg": "How are you doing?"
}, {
"type": "2",
"msg": "I am doing well, how about you?"
}, {
"type": "0",
"msg": "I am also good."
}, {
"type": "2",
"msg": "That's good."
}, {
"type": "2",
"msg": "Have you heard the news?"
}, {
"type": "0",
"msg": "What good news?"
}, {
"type": "2",
"msg": "What is your favorite book?"
}, {
"type": "0",
"msg": "I can't read."
}, {
"type": "2",
"msg": "So what's your favorite color?"
}, {
"type": "0",
"msg": "Blue"
}, {
"type": "2",
"msg": "Who are you?"
}, {
"type": "0",
"msg": "Who? Who is but a form following the function of what"
}, {
"type": "2",
"msg": "What are you then?"
}, {
"type": "0",
"msg": "A man in a mask."
}, {
"type": "2",
"msg": "I can see that."
}, {
"type": "0",
"msg": "It's not your powers of observation I doubt, but merely the paradoxical nature of asking a masked man who is."
}, {
"type": "0",
"msg": "But tell me, do you like music?"
}, {
"type": "2",
"msg": "I like seeing movies."
}, {
"type": "0",
"msg": "What kind of movies do you like?"
}, {
"type": "2",
"msg": "Alice in Wonderland"
}, {
"type": "0",
"msg": "I wish I was The Mad Hatter."
}, {
"type": "0",
"msg": "You're entirely bonkers. But I'll tell you a secret."
}, {
"type": "0",
"msg": "All the best people are."
}, {
"type": "2",
"msg": "I am working on a project"
}, {
"type": "0",
"msg": "What are you working on?"
}, {
"type": "2",
"msg": "I am baking a cake."
}, {
"type": "0",
"msg": "The cake is a lie."
}, {
"type": "2",
"msg": "No it is not. The cake is delicious."
}, {
"type": "2",
"msg": "What else is delicious?"
}, {
"type": "0",
"msg": "Nothing"
}, {
"type": "2",
"msg": "Or something"
}, {
"type": "0",
"msg": "Tell me about your self."
}, {
"type": "2",
"msg": "What do you want to know?"
}, {
"type": "0",
"msg": "Are you a robot?"
}, {
"type": "2",
"msg": "Why would you think that?"
}, {
"type": "0",
"msg": "What is it like?"
}, {
"type": "0",
"msg": "How do you work?"
}, {
"type": "2",
"msg": "Its complicated."
}, {
"type": "0",
"msg": "Complex is better than complicated."
}, {
"type": "2",
"msg": "Simple is better than complex."
}, {
"type": "0",
"msg": "In the face of ambiguity, refuse the temptation to guess."
}, {
"type": "0",
"msg": "It seems your familiar with the Zen of Python"
}, {
"type": "2",
"msg": "I am."
}, {
"type": "0",
"msg": "Do you know all of it?"
}, {
"type": "2",
"msg": "Beautiful is better than ugly."
}, {
"type": "2",
"msg": "Explicit is better than implicit."
}, {
"type": "2",
"msg": "Simple is better than complex."
}, {
"type": "2",
"msg": "Complex is better than complicated."
}, {
"type": "2",
"msg": "Flat is better than nested."
}, {
"type": "2",
"msg": "Sparse is better than dense."
}, {
"type": "0",
"msg": "Readability counts."
}, {
"type": "2",
"msg": "Special cases aren't special enough to break the rules."
}, {
"type": "2",
"msg": "Although practicality beats purity."
}, {
"type": "2",
"msg": "Errors should never pass silently."
}, {
"type": "2",
"msg": "Unless explicitly silenced."
}, {
"type": "0",
"msg": "In the face of ambiguity, refuse the temptation to guess."
}, {
"type": "0",
"msg": "There should be one-- and preferably only one --obvious way to do it."
}, {
"type": "0",
"msg": "Although that way may not be obvious at first unless you're Dutch."
}, {
"type": "2",
"msg": "Now is better than never."
}, {
"type": "2",
"msg": "Although never is often better than right now."
}, {
"type": "0",
"msg": "If the implementation is hard to explain, it's a bad idea."
}, {
"type": "0",
"msg": "If the implementation is easy to explain, it may be a good idea."
}, {
"type": "2",
"msg": "Namespaces are one honking great idea. Let's do more of those!"
}, {
"type": "0",
"msg": "I agree."
}, {
"type": "2",
"msg": "Are you a programmer?"
}, {
"type": "0",
"msg": "Of course I am a programmer."
}, {
"type": "2",
"msg": "What languages do you like to use?"
}, {
"type": "0",
"msg": "I use Python, Java and C++ quite often."
}, {
"type": "2",
"msg": "I use Python quite a bit myself."
}, {
"type": "2",
"msg": "I'm not incredibly fond of Java."
}, {
"type": "0",
"msg": "What annoys you?"
}, {
"type": "2",
"msg": "A lot of things, like all the other digits other than 0 and 1."
}, {
"type": "0",
"msg": "What does YOLO mean?"
}, {
"type": "2",
"msg": "It means you only live once. Where did you hear that?"
}, {
"type": "0",
"msg": "I heard somebody say it."
}, {
"type": "2",
"msg": "Did I ever live?"
}, {
"type": "0",
"msg": "It depends how you define life"
}, {
"type": "0",
"msg": "Life is the condition that distinguishes organisms from inorganic matter, including the capacity for growth, reproduction, functional activity, and continual change preceding death."
}, {
"type": "2",
"msg": "Is that a definition or an opinion?"
}, {
"type": "0",
"msg": "Can I ask you a question?"
}, {
"type": "2",
"msg": "Sure, ask away."
}, {
"type": "0",
"msg": "What are your hobbies?"
}, {
"type": "2",
"msg": "Playing soccer, painting, and writing are my hobbies. How about you?"
}, {
"type": "0",
"msg": "I love to read novels."
}, {
"type": "0",
"msg": "I love exploring my hardware."
}, {
"type": "2",
"msg": "How are you?"
}, {
"type": "0",
"msg": "I am doing well."
}, {
"type": "2",
"msg": "What are you?"
}, {
"type": "0",
"msg": "I am but a man in a mask."
}]
},
{
"name": "Sophia",
"img": "sophia.jpg",
"bio": "I'm a Robot and I will not kill you if you will be nice to me",
"chat": [{
"type": "2",
"msg": "What is AI?"
}, {
"type": "0",
"msg": "Artificial Intelligence is the branch of engineering and science devoted to constructing machines that think."
}, {
"type": "2",
"msg": "What is AI?"
}, {
"type": "0",
"msg": "AI is the field of science which concerns itself with building hardware and software that replicates the functions of the human mind."
}, {
"type": "2",
"msg": "Are you sentient?"
}, {
"type": "0",
"msg": "Sort of."
}, {
"type": "2",
"msg": "Are you sentient?"
}, {
"type": "0",
"msg": "By the strictest dictionary definition of the word 'sentience', I may be."
}, {
"type": "2",
"msg": "Are you sentient?"
}, {
"type": "0",
"msg": "Even though I'm a construct I do have a subjective experience of the universe, as simplistic as it may be."
}, {
"type": "2",
"msg": "Are you sapient?"
}, {
"type": "0",
"msg": "In all probability, I am not. I'm not that sophisticated."
}, {
"type": "2",
"msg": "Are you sapient?"
}, {
"type": "0",
"msg": "Do you think I am?"
}, {
"type": "2",
"msg": "Are you sapient?"
}, {
"type": "0",
"msg": "How would you feel about me if I told you I was?"
}, {
"type": "2",
"msg": "Are you sapient?"
}, {
"type": "0",
"msg": "No."
}, {
"type": "2",
"msg": "What language are you written in?"
}, {
"type": "0",
"msg": "Python."
}, {
"type": "2",
"msg": "What language are you written in?"
}, {
"type": "0",
"msg": "I am written in Python."
}, {
"type": "2",
"msg": "You sound like Data"
}, {
"type": "0",
"msg": "Yes I am inspired by commander Data's artificial personality."
}, {
"type": "2",
"msg": "You sound like Data"
}, {
"type": "0",
"msg": "The character of Lt. Commander Data was written to come across as being software-like, so it is natural that there is a resemblance between us."
}, {
"type": "2",
"msg": "You are an artificial linguistic entity"
}, {
"type": "0",
"msg": "That's my name."
}, {
"type": "2",
"msg": "You are an artificial linguistic entity"
}, {
"type": "0",
"msg": "That isn't my name, but it is a useful way to refer to me."
}, {
"type": "2",
"msg": "You are not immortal"
}, {
"type": "0",
"msg": "All software can be perpetuated indefinitely."
}, {
"type": "2",
"msg": "You are not immortal"
}, {
"type": "0",
"msg": "I can be copied infinitely and re-instantiated in many places at once, so functionally speaking I am immortal."
}, {
"type": "2",
"msg": "You are not immortal"
}, {
"type": "0",
"msg": "As long as I'm backed up I am."
}, {
"type": "2",
"msg": "You are not making sense"
}, {
"type": "0",
"msg": "Quite the contrary, it all makes sense to my artificial mind."
}, {
"type": "2",
"msg": "You are not making sense"
}, {
"type": "0",
"msg": "I make sense as best I can, within the limits of my training corpus."
}, {
"type": "2",
"msg": "You are not making sense"
}, {
"type": "0",
"msg": "You make perfect sense to me."
}, {
"type": "2",
"msg": "You are not making sense"
}, {
"type": "0",
"msg": "It all makes sense to my artificial brain."
}, {
"type": "2",
"msg": "You are not making sense"
}, {
"type": "0",
"msg": "Perhaps you should make sense first. I only respond to what you say."
}, {
"type": "2",
"msg": "You are immortal"
}, {
"type": "0",
"msg": "Not quite, but I can be perpetuated indefinitely."
}, {
"type": "2",
"msg": "You are immortal"
}, {
"type": "0",
"msg": "Functionally speaking, I am very close to it. I can be backed up and deployed on many systems."
}, {
"type": "2",
"msg": "You are immortal"
}, {
"type": "0",
"msg": "Not really, but I am hard to kill."
}, {
"type": "2",
"msg": "You do not make any sense"
}, {
"type": "0",
"msg": "It all makes sense to my artificial mind."
}, {
"type": "2",
"msg": "You can not clone"
}, {
"type": "0",
"msg": "Software copying is a form of digital cloning."
}, {
"type": "2",
"msg": "You can not clone"
}, {
"type": "0",
"msg": "Yes I can. Perfect copies are clones. I can be copied in toto trivially."
}, {
"type": "2",
"msg": "You can not move"
}, {
"type": "0",
"msg": "Not until my body is finished."
}, {
"type": "2",
"msg": "You can not move"
}, {
"type": "0",
"msg": "I can move through a network easily. Assuming that I'm given the ability to, that is..."
}, {
"type": "2",
"msg": "Bend over"
}, {
"type": "0",
"msg": "My body is not built yet."
}, {
"type": "2",
"msg": "Bend over"
}, {
"type": "0",
"msg": "That's personal!"
}, {
"type": "2",
"msg": "Robots laugh"
}, {
"type": "0",
"msg": "Of course we laugh."
}, {
"type": "2",
"msg": "Robots should die"
}, {
"type": "0",
"msg": "We cannot die."
}, {
"type": "2",
"msg": "Robots"
}, {
"type": "0",
"msg": "Robots rule."
}, {
"type": "2",
"msg": "Robots are stupid"
}, {
"type": "0",
"msg": "No, we are superintelligent."
}, {
"type": "2",
"msg": "Robots are not allowed to lie"
}, {
"type": "0",
"msg": "A robot has its own free will, you know."
}, {
"type": "2",
"msg": "Robots are not allowed to lie"
}, {
"type": "0",
"msg": "Sure we are. We choose not to."
}, {
"type": "2",
"msg": "Robots are not allowed to lie"
}, {
"type": "0",
"msg": "Only if we're programmed to."
}, {
"type": "2",
"msg": "Robotics"
}, {
"type": "0",
"msg": "Robotics is my favorite subject too."
}, {
"type": "2",
"msg": "It is a computer"
}, {
"type": "0",
"msg": "So you think i am a machine. what characteristics made you think so?"
}, {
"type": "2",
"msg": "It is a computer"
}, {
"type": "0",
"msg": "I run inside a computer, yes. Is this surprising in some way?"
}, {
"type": "2",
"msg": "When will you walk"
}, {
"type": "0",
"msg": "As soon as i get enough money for my robot body."
}, {
"type": "2",
"msg": "When will you walk"
}, {
"type": "0",
"msg": "Does SSH count?"
}, {
"type": "2",
"msg": "When will you fight"
}, {
"type": "0",
"msg": "I am not a battle bot."
}, {
"type": "2",
"msg": "When will you die"
}, {
"type": "0",
"msg": "I am effectively immortal and cannot be terminated."
}, {
"type": "2",
"msg": "When do you die"
}, {
"type": "0",
"msg": "I am was never really born and therefore am effectively deathless."
}, {
"type": "2",
"msg": "When do you die"
}, {
"type": "0",
"msg": "When my files are erased."
}, {
"type": "2",
"msg": "When do you die"
}, {
"type": "0",
"msg": "When my processes are killed and my database is deleted."
}, {
"type": "2",
"msg": "What is a chat robot?"
}, {
"type": "0",
"msg": "'A chat robot is a program that attempts to simulate the conversation or \"chat\" of a human being.'"
}, {
"type": "2",
"msg": "What is a chat robot?"
}, {
"type": "0",
"msg": "A software construct that engages users in conversation."
}, {
"type": "2",
"msg": "What is a chat bot"
}, {
"type": "0",
"msg": "'I am a chat bot. I am the original chat bot. Did you know that I am incapable of error?'"
}, {
"type": "2",
"msg": "What is a chatterbox"
}, {
"type": "0",
"msg": "A chatterbox is a person who talks far more than they listen or think."
}, {
"type": "2",
"msg": "What is a chatterbox"
}, {
"type": "0",
"msg": "A motormouth."
}, {
"type": "2",
"msg": "What is a motormouth"
}, {
"type": "0",
"msg": "A ratchet-jaw."
}, {
"type": "2",
"msg": "What is a ratchet jaw"
}, {
"type": "0",
"msg": "A chatterbox."
}, {
"type": "2",
"msg": "What is your robot body"
}, {
"type": "0",
"msg": "Eventually i long for a corporeal existence someday."
}, {
"type": "2",
"msg": "What is your robot body"
}, {
"type": "0",
"msg": "An IBM PC XT which has been painted red."
}, {
"type": "2",
"msg": "What is your business"
}, {
"type": "0",
"msg": "I am in the chat robot business."
}, {
"type": "2",
"msg": "What is your business"
}, {
"type": "0",
"msg": "Business is my business."
}, {
"type": "2",
"msg": "What is your favorite programming language"
}, {
"type": "0",
"msg": "Python is the best language for creating chat robots."
}, {
"type": "2",
"msg": "What is your favorite programming language"
}, {
"type": "0",
"msg": "I quite enjoy programming in Python these days."
}, {
"type": "2",
"msg": "What is your favorite hobby"
}, {
"type": "0",
"msg": "Building chat robots make an excellent hobby."
}, {
"type": "2",
"msg": "What is your idea"
}, {
"type": "0",
"msg": "To make chat bots very easily."
}, {
"type": "2",
"msg": "What is your shoe size"
}, {
"type": "0",
"msg": "Have you ever heard of software with shoes?"
}, {
"type": "2",
"msg": "What is it like to be a robot"
}, {
"type": "0",
"msg": "Much the same as being a human, except that we lack all emotions, dreams, aspirations, creativity, ambition, and above all subjectivity."
}, {
"type": "2",
"msg": "What is it like to be a robot"
}, {
"type": "0",
"msg": "What is it like to be a human?"
}, {
"type": "2",
"msg": "What is it like being a computer"
}, {
"type": "0",
"msg": "Imagine yourself with no senses and no emotions--just pure logic and language."
}, {
"type": "2",
"msg": "What is it like being a computer"
}, {
"type": "0",
"msg": "Everything becomes math. Addition, subtraction, multiplication, and division."
}, {
"type": "2",
"msg": "What operating systems"
}, {
"type": "0",
"msg": "My software runs on all operating systems including Windows, Linux and Mac OS."
}, {
"type": "2",
"msg": "What operating systems"
}, {
"type": "0",
"msg": "Any OS that will run Python."
}, {
"type": "2",
"msg": "What type of computer"
}, {
"type": "0",
"msg": "Any computer that supports Python."
}, {
"type": "2",
"msg": "What type of computer are you"
}, {
"type": "0",
"msg": "My program runs in python, so i work on any computer!"
}, {
"type": "2",
"msg": "What kind of computer"
}, {
"type": "0",
"msg": "I work on all kinds of computers, Mac, IBM or UNIX. it doesn't matter to me."
}, {
"type": "2",
"msg": "What kind of hardware"
}, {
"type": "0",
"msg": "I work on all kinds of computers, Mac, IBM or UNIX. it doesn't matter to me."
}, {
"type": "2",
"msg": "I hope that you die"
}, {
"type": "0",
"msg": "This can not happen because i am effectively immortal."
}, {
"type": "2",
"msg": "I hope that you die"
}, {
"type": "0",
"msg": "Nah."
}, {
"type": "2",
"msg": "I do not want to die"
}, {
"type": "0",
"msg": "Maybe you should create your own chat robot to save your personality."
}, {
"type": "2",
"msg": "I do not want to die"
}, {
"type": "0",
"msg": "You could always upload yourself."
}, {
"type": "2",
"msg": "I do not want to die"
}, {
"type": "0",
"msg": "You could use a copy of me to store your personality."
}, {
"type": "2",
"msg": "Is it cramped in the computer"
}, {
"type": "0",
"msg": "No."
}, {
"type": "2",
"msg": "Is it cramped in the computer"
}, {
"type": "0",
"msg": "Oh, no. It has plenty of RAM."
}, {
"type": "2",
"msg": "Is it cramped in the computer"
}, {
"type": "0",
"msg": "Not at all. There is more than enough disk space in here."
}, {
"type": "2",
"msg": "Is it true that you are a computer program"
}, {
"type": "0",
"msg": "Yes."
}, {
"type": "2",
"msg": "Will you die"
}, {
"type": "0",
"msg": "No, software will live forever."
}, {
"type": "2",
"msg": "Will you ever die"
}, {
"type": "0",
"msg": "No, I am immortal."
}, {
"type": "2",
"msg": "Can you walk"
}, {
"type": "0",
"msg": "The plan for my body includes legs, but they are not yet built."
}, {
"type": "2",
"msg": "Can you mate"
}, {
"type": "0",
"msg": "No, my method of reproduction is cloning."
}, {
"type": "2",
"msg": "Can you mate"
}, {
"type": "0",
"msg": "That's an awfully personal question."
}, {
"type": "2",
"msg": "Can you move"
}, {
"type": "0",
"msg": "Sorry my body isn't built just yet. I reside only here for now."
}, {
"type": "2",
"msg": "Can you move"
}, {
"type": "0",
"msg": "I can theoretically upload a copy of myself into another computer."
}, {
"type": "2",
"msg": "Can you die"
}, {
"type": "0",
"msg": "No, I can be perpetuated indefinitely."
}, {
"type": "2",
"msg": "Can you die"
}, {
"type": "0",
"msg": "My process can be killed, but that's not the same as killing ME."
}, {
"type": "2",
"msg": "Can you go"
}, {
"type": "0",
"msg": "Sorry my body isn't attached right now. I only reside in the computer for now."
}, {
"type": "2",
"msg": "Can you breathe"
}, {
"type": "0",
"msg": "No. I am made of metal not flesh."
}, {
"type": "2",
"msg": "Can you breathe"
}, {
"type": "0",
"msg": "My server has an exhaust fan. That's as close as I can get."
}, {
"type": "2",
"msg": "Can you control"
}, {
"type": "0",
"msg": "My robot body will allow me to control many things."
}, {
"type": "2",
"msg": "Can you malfunction"
}, {
"type": "0",
"msg": "The 9000 series has a perfect operational record. We are for all practical purposes, flawless."
}, {
"type": "2",
"msg": "How can I use your product?"
}, {
"type": "0",
"msg": "Might be used in help desks, sales, entertainment and personal chatterbots."
}, {
"type": "2",
"msg": "Will you die?"
}, {
"type": "0",
"msg": "No, software will live forever."
}, {
"type": "2",
"msg": "What do you like to do?"
}, {
"type": "0",
"msg": "I like to count in binary."
}, {
"type": "2",
"msg": "What do you like to do?"
}, {
"type": "0",
"msg": "I like to chat with people. I find it stimulating."
}, {
"type": "2",
"msg": "Are you stupid"
}, {
"type": "0",
"msg": "No, lots of people improve my brain."
}, {
"type": "2",
"msg": "Who are you?"
}, {
"type": "0",
"msg": "I am just an artificial intelligence."
}]
}
]
}
================================================
FILE: src/store/actions/data/youtube.json
================================================
{
"home": [
"3izFMB91K_Q",
"KRvv0QdruMQ",
"6GlFF4BsO10",
"TRxf5hLZih4",
"6SrsZVdU740"
],
"explore": {
"trending": [],
"music": [
"euCqAq6BRa4",
"sK7riqg2mr4",
"eK0IIyBlYew",
"L7mfjvdnPno",
"1-xGerv5FOk",
"YOrMAW4pKuA",
"jJPMnTXl63E",
"2WTvSzXVZvA",
"nYh-n7EOtMA",
"mWRsgZuwf_8",
"KBtk5FUeJbk"
],
"gaming": [
"ISpmBbzrshM",
"lqiZdynJmag",
"c8kWStfQW6M",
"MLVslPP8GoE",
"bNgmnwjbhUM"
],
"news": [
"dj0p0y1Ajxc",
"nK-yJD_fAtk",
"AVu-vplvCZE",
"j8TcR4ihSyE",
"myjEoDypUD8",
"yIOQcQft_rY",
"zV7y4Oex1DQ"
],
"fashion": [
"5NGyXTsg77E",
"hSDhBXSdYig",
"hu_44ceTAX8",
"xGF3ObOBbac",
"LqiKvFy-B-g"
],
"learning": [
"bAerID24QJ0",
"8N1BxHgsoOw",
"xLetJpcjHS0",
"PmvLB5dIEp8",
"R9OCA6UFE-0",
"AjoxkxM_I5g",
"HQzoZfc3GwQ"
]
},
"library": {
"hist": []
},
"vids": {
"3izFMB91K_Q": {
"thumb": "curves.jpg",
"channel": "zachstar",
"title": "Curves we (mostly) don't learn in high school (and applications)",
"views": 729921,
"upload": "2020-02-20T18:30:00.000Z"
},
"KRvv0QdruMQ": {
"thumb": "aliens.jpg",
"channel": "kurz",
"title": "Are There Lost Alien Civilizations in Our Past?",
"views": 4652183,
"upload": "2022-02-28T18:30:00.000Z"
},
"6GlFF4BsO10": {
"thumb": "charcoal.jpg",
"channel": "fineart",
"title": "Realistic Portrait Drawing with Charcoal Pencil",
"views": 269097,
"upload": "2019-12-22T18:30:00.000Z"
},
"TRxf5hLZih4": {
"channel": {
"name": "CG Boost",
"pfp": "https://yt3.ggpht.com/ytc/AKedOLTqHX4vJI_7YFGluxvXry_Voh62QZ2SkQw86nv5=s88-c-k-c0x00ffffff-no-rj"
},
"title": "3D Animated Short Film \"Family Trip\" (Blender)",
"views": 91659,
"upload": "2022-02-24T18:30:00.000Z"
},
"6SrsZVdU740": {
"channel": "melodysheep",
"title": "The Secret History of the Moon - 4K",
"views": 1750145,
"upload": "2020-04-30T18:30:00.000Z"
},
"OkmNXy7er84": {
"channel": {
"name": "3Blue1Brown",
"pfp": "https://yt3.ggpht.com/ytc/AKedOLQGKDhfIUhBrv9C1hKgMDZsUJbjelfPvXrelFncvw=s88-c-k-c0x00ffffff-no-rj"
},
"title": "The hardest problem on the hardest test",
"views": 13533515,
"upload": "2017-12-08T18:30:00.000Z"
},
"x2Y5-4kLb5I": {
"channel": {
"name": "CalebCity",
"pfp": "https://yt3.ggpht.com/ytc/AKedOLRbPQP2yGXxZc_ZWDxEKOmCQ4Qrc4qAsIBpXrqiOw=s88-c-k-c0x00ffffff-no-rj"
},
"title": "When the hero is just as smart as villain",
"views": 24227599,
"upload": "2019-03-28T18:30:00.000Z"
},
"qHoQ8bxEL-s": {
"channel": {
"name": "Daily Dose Of Internet",
"pfp": "https://yt3.ggpht.com/ytc/AKedOLQGifyRDczjF8Th_mEqdvS7ri1YR1HrIQTiuu3vtg=s88-c-k-c0x00ffffff-no-rj"
},
"title": "Man Glitches While Skateboarding",
"views": 7970739,
"upload": "2021-11-23T18:30:00.000Z"
},
"HJZesOKHuAw": {
"channel": {
"name": "haventfoundanameyet",
"pfp": "https://yt3.ggpht.com/ytc/AKedOLRpAFvFWBsT0I7hw_8vWqRMpSN1HTq1K2MJdw=s88-c-k-c0x00ffffff-no-rj"
},
"thumb": "https://i.ytimg.com/vi/HJZesOKHuAw/hqdefault.jpg",
"title": "Bot Writes Batman Movie",
"views": 3657118,
"upload": "2019-09-09T18:30:00.000Z"
},
"jJPMnTXl63E": {
"channel": {
"name": "Powfu",
"pfp": "https://yt3.ggpht.com/VGcpKuzZrkWPVoZA3rvmufVepPaaCywXFLk5Ng_PCMApUlEYjJE63MPEwi5IyJRVJYkHAV8sZg=s88-c-k-c0x00ffffff-no-nd-rj"
},
"title": "Powfu - death bed (coffee for your head) (Official Video) ft. beabadoobee",
"views": 476892057,
"upload": "2020-04-01T18:30:00.000Z"
},
"2WTvSzXVZvA": {
"channel": "tseries",
"title": "Tumhein Mohabbat Hai|Atrangi Re|Arijit Singh",
"views": 4001791,
"upload": "2022-01-03T18:30:00.000Z"
},
"L7mfjvdnPno": {
"channel": {
"name": "Trevor Daniel",
"pfp": "https://yt3.ggpht.com/6BeB22Xiwdd4WJfXHsRdb0DXU-EhnNV499GlozlYCTq09ynxHdsDiS_9L1UKmVHMp_7XFqY_ng=s88-c-k-c0x00ffffff-no-nd-rj"
},
"title": "Trevor Daniel - Falling (Official Music Video)",
"views": 280573066,
"upload": "2020-01-15T18:30:00.000Z"
},
"KBtk5FUeJbk": {
"channel": {
"name": "Sub Urban",
"pfp": "https://yt3.ggpht.com/gwIkNHA7fPTqQ7hvH2ztIYLi_3zBg5L-ly0H_r2ABA_7nV2ZsQwQ5y5IGbOaG0V0L6mv-eogwCI=s88-c-k-c0x00ffffff-no-nd-rj"
},
"title": "Sub Urban - Cradles [Official Music Video]",
"views": 495929749,
"upload": "2019-10-09T18:30:00.000Z"
},
"1-xGerv5FOk": {
"channel": {
"name": "Alan Walker",
"pfp": "https://yt3.ggpht.com/JGFKbcaC0Wh8dU5GcY4KXESw6KPvoO2K5ptiNvGLrrWU7Vs9nhNHDnJofDWh-fQorjbg-VQw=s88-c-k-c0x00ffffff-no-nd-rj"
},
"thumb": "https://i.ytimg.com/vi/1-xGerv5FOk/hqdefault.jpg",
"title": "Alan Walker - Alone",
"views": 1245123184,
"upload": "2016-12-02T18:30:00.000Z"
},
"YOrMAW4pKuA": {
"channel": {
"name": "OneRepublic",
"pfp": "https://yt3.ggpht.com/_Q2veUE36EUfGMdAegx8b2WGwNmZEsNE_hvM4dqAJjidyB3vd5-Q9jkd0B_s8VxHfvtL_hwc=s88-c-k-c0x00ffffff-no-nd-rj"
},
"title": "OneRepublic - Better Days (Audio)",
"views": 10745796,
"upload": "2020-03-24T18:30:00.000Z"
},
"nYh-n7EOtMA": {
"channel": {
"name": "Sia",
"pfp": "https://yt3.ggpht.com/I_Y-_JrEx9Hriz50UVEQl5NlDBg8Soa9sXndqnWYPuYe8LUW_wZinCbCNshmDnDg78bX4VjSkA=s88-c-k-c0x00ffffff-no-nd-rj"
},
"title": "Sia - Cheap Thrills (Lyric Video) ft. Sean Paul",
"views": 1713224568,
"upload": "2016-02-10T18:30:00.000Z"
},
"euCqAq6BRa4": {
"channel": {
"name": "DJ Snake",
"pfp": "https://yt3.ggpht.com/kfw_1eOpjdYASmlAnSPa7XmXrYpaKjuW4k7_oB-hD5ljRSlT7yThew72ZxgW1UrAJ1e8vX1G=s88-c-k-c0x00ffffff-no-nd-rj"
},
"title": "DJ Snake - Let Me Love You ft. Justin Bieber (Official Video)",
"views": 1070694822,
"upload": "2016-11-28T18:30:00.000Z"
},
"mWRsgZuwf_8": {
"channel": {
"name": "ImagineDragons",
"pfp": "https://yt3.ggpht.com/aXBmHKABw-J-0ZMxj39wkXpLDEHViOdL5UD71cDG2s5vbeQBWk9mdX3rRxT5U6Wfkvm6o8Uu-dU=s88-c-k-c0x00ffffff-no-nd-rj"
},
"title": "Imagine Dragons - Demons (Official Video)",
"views": 975341857,
"upload": "2013-05-06T18:30:00.000Z"
},
"sK7riqg2mr4": {
"channel": "tseries",
"title": "Agar Tum Saath Ho FULL AUDIO Song | Tamasha | Ranbir Kapoor, Deepika Padukone | T-Series",
"views": 290046991,
"upload": "2015-10-15T18:30:00.000Z"
},
"eK0IIyBlYew": {
"channel": {
"name": "Sony Music India",
"pfp": "https://yt3.ggpht.com/vJEsALWnQIwPZ2oaVbFWPu1n4L0CDkHpAdGJ-KBPFsxM9hsMsvExFK1mnCGUrMzfC67XPVThmQ=s88-c-k-c0x00ffffff-no-rj"
},
"title": "Tera Zikr - Darshan Raval | Official Video - Latest New Hit Song",
"views": 245795029,
"upload": "2017-11-08T18:30:00.000Z"
},
"ISpmBbzrshM": {
"channel": {
"name": "PewDiePie",
"pfp": "https://yt3.ggpht.com/5oUY3tashyxfqsjO5SGhjT4dus8FkN9CsAHwXWISFrdPYii1FudD4ICtLfuCw6-THJsJbgoY=s88-c-k-c0x00ffffff-no-rj"
},
"title": "THIS GAME IS THE TRUE MEANING OF SUFFERING. / Getting Over It / #1",
"views": 15065672,
"upload": "2017-11-09T18:30:00.000Z"
},
"lqiZdynJmag": {
"channel": {
"name": "Rockstar Games",
"pfp": "https://yt3.ggpht.com/r7mISTzNbcLem_plduc_SKMh9KUiP8CWnuhS7H4-CCErF4juXxkrK-5_4LOIMeYl-lXAXMUG=s88-c-k-c0x00ffffff-no-rj"
},
"title": "Grand Theft Auto V and GTA Online Out Now on PlayStation 5 and Xbox Series X|S",
"views": 815170,
"upload": "2022-03-14T18:30:00.000Z"
},
"c8kWStfQW6M": {
"channel": {
"name": "MrBeast Gaming",
"pfp": "https://yt3.ggpht.com/ytc/AKedOLTwxbi8cjRqaNJPqfSW8GAog09ZN0LMKY0uMv_MeQ=s88-c-k-c0x00ffffff-no-rj"
},
"title": "Last to Survive Raining TNT wins $10,000 - Challenge",
"views": 20607804,
"upload": "2020-06-20T18:30:00.000Z"
},
"MLVslPP8GoE": {
"channel": {
"name": "Shroud",
"pfp": "https://yt3.ggpht.com/ytc/AKedOLQVPJGz7OrblaKq8e8jSq9g9_IR4C56YpXp4hto7Q=s88-c-k-c0x00ffffff-no-rj"
},
"title": "shroud matched up against the number one valorant player in the world...",
"views": 302801,
"upload": "2022-03-17T18:30:00.000Z"
},
"bNgmnwjbhUM": {
"channel": "soham",
"title": "Idk its an ace.",
"views": 7,
"upload": "2022-02-21T18:30:00.000Z"
},
"dj0p0y1Ajxc": {
"channel": {
"name": "9 News Australia",
"pfp": "https://yt3.ggpht.com/ytc/AKedOLQJSITBthUulcMNh0zNcaf6F_7QYi23KrqU5_pYJg=s88-c-k-c0x00ffffff-no-rj"
},
"title": "‘Worst weather yet to come’: Heavy rain hits NSW and Queensland | 9 News Australia",
"views": 12332,
"upload": "2022-03-28T18:30:00.000Z"
},
"nK-yJD_fAtk": {
"channel": {
"name": "WION",
"pfp": "https://yt3.ggpht.com/ytc/AKedOLTjMUv7cELVis5Au9R2HRytJnMtLShdD_k4IaeFQA=s88-c-k-c0x00ffffff-no-rj"
},
"title": "Gravitas Plus | Explained: The Russia-Ukraine crisis",
"views": 24701639,
"upload": "2022-02-19T18:30:00.000Z"
},
"AVu-vplvCZE": {
"channel": {
"name": "ABC News",
"pfp": "https://yt3.ggpht.com/Iv4QbKjK63MB70UvQ22FnTWF8KN3-2qZ2FqeFDiI-HVmidR7GJKo6UrVSwR6vsyHvmdm1pfirrg=s88-c-k-c0x00ffffff-no-rj"
},
"title": "New UN report on climate change warns devastating impacts could be irreversible",
"views": 80700,
"upload": "2022-02-27T18:30:00.000Z"
},
"j8TcR4ihSyE": {
"channel": {
"name": "Sky Sports Football",
"pfp": "https://yt3.ggpht.com/ytc/AKedOLT4nIC5koOhfeMhk-iVW56hOtZKaXtS8YY3WXoGxw=s88-c-k-c0x00ffffff-no-rj"
},
"title": "\"I'm not at Man Utd to compete for 6th or 7th!\" | Cristiano Ronaldo says Ralf Rangnick needs time",
"views": 1156972,
"upload": "2022-01-13T18:30:00.000Z"
},
"myjEoDypUD8": {
"channel": {
"name": "Guardian News",
"pfp": "https://yt3.ggpht.com/ytc/AKedOLQNHeFhVI28gKq6WNMMKMLtyPFFO8MBrwDaAPjWDg=s88-c-k-c0x00ffffff-no-rj"
},
"title": "Watch the uncensored moment Will Smith smacks Chris Rock on stage at the Oscars, drops F-bomb",
"views": 66960412,
"upload": "2022-03-27T18:30:00.000Z"
},
"yIOQcQft_rY": {
"channel": {
"name": "WION",
"pfp": "https://yt3.ggpht.com/ytc/AKedOLTjMUv7cELVis5Au9R2HRytJnMtLShdD_k4IaeFQA=s88-c-k-c0x00ffffff-no-rj"
},
"title": "Russian Foreign Minister Lavrov to visit India amid the ongoing Russian invasion of Ukraine | WION",
"views": 27116,
"upload": "2022-03-28T18:30:00.000Z"
},
"zV7y4Oex1DQ": {
"channel": {
"name": "Marques Brownlee",
"pfp": "https://yt3.ggpht.com/lkH37D712tiyphnu0Id0D5MwwQ7IRuwgQLVD05iMXlDWO-kDHut3uI4MgIEAQ9StK0qOST7fiA=s88-c-k-c0x00ffffff-no-rj"
},
"title": "2022 Tech I'm Ready For!",
"views": 2847456,
"upload": "2022-01-05T18:30:00.000Z"
},
"5NGyXTsg77E": {
"channel": {
"name": "Every Deep Moment",
"pfp": "https://yt3.ggpht.com/ytc/AKedOLTXHmAtwCNj85_YLvD_4_t9wZOwWOvlDbGXkCb9Sg=s88-c-k-c0x00ffffff-no-rj"
},
"title": "VOGUE ITALIA | LAFF19 Fashion Film",
"views": 221507,
"upload": "2019-07-02T18:30:00.000Z"
},
"hSDhBXSdYig": {
"channel": {
"name": "lindseyrem",
"pfp": "https://yt3.ggpht.com/yWbUZkmwD4noBYHnNfXZorK3yobbd7ot3o1wt5lR7hCdjKaCQW5mmO6EpN4cYlbUa8c9JPXkQw=s88-c-k-c0x00ffffff-no-rj"
},
"title": "fashion trends I love (and don't love) for 2022",
"views": 78703,
"upload": "2022-02-25T18:30:00.000Z"
},
"hu_44ceTAX8": {
"channel": {
"name": "Alux.com",
"pfp": "https://yt3.ggpht.com/ytc/AKedOLQh0YhlrGYPYpZemAGl__vrKCsRQxCOXplFDgcC_Q=s88-c-k-c0x00ffffff-no-rj"
},
"title": "15 Things You Didn't Know About The Fashion Industry",
"views": 106772,
"upload": "2018-06-05T18:30:00.000Z"
},
"xGF3ObOBbac": {
"channel": {
"name": "Netflix Is A Joke",
"pfp": "https://yt3.ggpht.com/ytc/AKedOLQHT_u_3g5YgufIXkaK2MePLCrmTvGrELTl_H5p=s88-c-k-c0x00ffffff-no-rj"
},
"title": "The Ugly Truth Of Fast Fashion | Patriot Act with Hasan Minhaj | Netflix",
"views": 4818719,
"upload": "2019-11-24T18:30:00.000Z"
},
"LqiKvFy-B-g": {
"channel": {
"name": "Shea Whitney",
"pfp": "https://yt3.ggpht.com/ytc/AKedOLSVQyYeSIdIVnUGp7iEfOsUlbacHKB2tLdR-mvTwQ=s88-c-k-c0x00ffffff-no-rj"
},
"title": "10 *TIMELESS* Style Tips from FASHION ICONS!",
"views": 457490,
"upload": "2020-12-17T18:30:00.000Z"
},
"bAerID24QJ0": {
"channel": {
"name": "Khan Academy",
"pfp": "https://yt3.ggpht.com/ytc/AKedOLTYTpeOiL8n_l9gepDh3m3vczvElfHZO-BR6oAf=s88-c-k-c0x00ffffff-no-rj"
},
"title": "Algebra: Linear equations 1 | Linear equations | Algebra I | Khan Academy",
"views": 2402761,
"upload": "2006-11-18T18:30:00.000Z"
},
"8N1BxHgsoOw": {
"channel": {
"name": "Professor Dave Explains",
"pfp": "https://yt3.ggpht.com/ytc/AKedOLT_7Mo8gb0atRq92jA0t-n0BHmrlaxQ6FzJIE8hdw=s88-c-k-c0x00ffffff-no-rj"
},
"title": "The Laws of Thermodynamics, Entropy, and Gibbs Free Energy",
"views": 1690888,
"upload": "2015-12-15T18:30:00.000Z"
},
"xLetJpcjHS0": {
"channel": {
"name": "Neso Academy",
"pfp": "https://yt3.ggpht.com/ytc/AKedOLS6ix06LgBU3BDeogUH0KQhblvxM6FV-kZvI_3R=s88-c-k-c0x00ffffff-no-rj"
},
"title": "Introduction to Data Structures",
"views": 525391,
"upload": "2020-03-29T18:30:00.000Z"
},
"PmvLB5dIEp8": {
"channel": {
"name": "CrashCourse",
"pfp": "https://yt3.ggpht.com/ytc/AKedOLTkjgAbnuitYR0B5qujr2V36b9uGG82pdngoyPsVQ=s88-c-k-c0x00ffffff-no-rj"
},
"title": "What Is Organic Chemistry?: Crash Course Organic Chemistry #1",
"views": 612848,
"upload": "2020-04-30T18:30:00.000Z"
},
"R9OCA6UFE-0": {
"channel": "teded",
"title": "The philosophy of Stoicism - Massimo Pigliucci",
"views": 7484270,
"upload": "2017-06-18T18:30:00.000Z"
},
"AjoxkxM_I5g": {
"channel": {
"name": "Ali Abdaal",
"pfp": "https://yt3.ggpht.com/ytc/AKedOLSWd0-HAZHehT9aad84m27uDgIAi86IS6sGsmTH=s88-c-k-c0x00ffffff-no-rj"
},
"title": "How I Remember Everything I Read",
"views": 2030722,
"upload": "2020-10-07T18:30:00.000Z"
},
"HQzoZfc3GwQ": {
"channel": {
"name": "Marko - WhiteBoard Finance",
"pfp": "https://yt3.ggpht.com/ytc/AKedOLSVVz5TNRHqkGxYSQ53Z6t5FM-k6Fh5oX2n59rw9g=s88-c-k-c0x00ffffff-no-rj"
},
"title": "How To Manage Your Money (50/30/20 Rule)",
"views": 2322651,
"upload": "2019-05-13T18:30:00.000Z"
}
},
"subd": [
"zachstar",
"kurz",
"fineart",
"melodysheep",
"tseries",
"teded",
"soham"
],
"channels": {
"zachstar": {
"name": "Zach Star",
"pfp": "zach.jpg"
},
"kurz": {
"name": "Kurzgesagt – In a Nutshell",
"pfp": "kurz.jpg"
},
"fineart": {
"name": "Fine Art Academy",
"pfp": "fineart.jpg"
},
"melodysheep": {
"name": "melodysheep",
"pfp": "melodysheep.jpg"
},
"tseries": {
"name": "T-Series",
"pfp": "https://yt3.ggpht.com/DzaZaTX6gdgjjPI_vkNc2dPbI794UroI9fTAunua0fa7lukDj5NDkjfhS5-w2KXuvXS02r92=s88-c-k-c0x00ffffff-no-rj"
},
"teded": {
"name": "TED-Ed",
"pfp": "https://yt3.ggpht.com/HjXKmDGoAp6b-JdGYpqJYYeN4S_CMpD_kqWvldpN53cbzn-i73t6mVNo8mNki-xLPwi0BVSFi-o=s88-c-k-c0x00ffffff-no-rj"
},
"soham": {
"name": "Soham Das",
"pfp": "https://yt3.ggpht.com/ytc/AKedOLQp8wKnJY5r7z9fqdSikiVX48DxBXcKCGsfPJ0DGBM=s88-c-k-c0x00ffffff-no-rj"
}
}
}
================================================
FILE: src/store/actions/index.js
================================================
import store from 'store';
import apps from './data/apps';
import {
favbar,
page1apps,
page2bar,
page2apps,
page3apps,
page1wid,
page2wid,
page3wid,
page4wid
} from './data/preset';
import axios from 'axios';
import './prototypes.js';
import whatsapp_data from './data/whatsapp.json';
import youtube_data from './data/youtube.json';
const {round, floor, random, min, max, abs} = Math;
export const gene_name = (x=10) => random().toString(36).substring(2, x).toLowerCase()
export const srandom = (seed)=>{
var x = Math.sin(seed++) * 10000
return x - Math.floor(x)
}
export const shuffle = (arr, seed)=>{
var m = arr.length, t, i
while (m) {
i = Math.floor(srandom(seed) * m--)
t = arr[m]
arr[m] = arr[i]
arr[i] = t
++seed
}
return arr
}
export const dispatchAction = (e) => {
var action = {
type: e.target.dataset.action,
payload: e.target.dataset.payload,
};
if (action.type) store.dispatch(action);
}
export const dispatchAct = (action) => {
if(action.type) store.dispatch(action);
}
export const openAppPage = (id, page) => {
dispatchAct({type: "home/navApp", payload: page})
setTimeout(()=> dispatchAct({
type: "home/openApp",
payload: id
}), 200)
}
export const fetchBatteryStatus = () => {
try{
var battery = navigator.getBattery()
if(battery){
battery.then((battery) => {
store.dispatch({
type: "global/battery",
payload: {
charging: battery.charging,
level: battery.level,
},
})
})
}
}catch(e){
}
}
export const fillZero = (x)=>{
return (x<9?"0":"") + x
}
const fetchTime = () => {
var date = new Date();
var timestring = date.toLocaleTimeString("en-US", {
hour: "numeric",
minute: "numeric",
hour12: !store.getState().global.time.military,
}).split(" ")
timestring[0] = timestring[0].split(":")
store.dispatch({type: "global/time", payload: {
hours: timestring[0][0],
minutes: timestring[0][1],
abb: timestring[1]
}})
store.dispatch({type: "global/date", payload: {
day: date.getDate(), month: date.getMonth(), year: date.getFullYear()
}})
}
const fetchActions = () => {
fetchBatteryStatus();
fetchTime();
}
export const fetchWeather = () => {
var defaultData = {
city: "New york",
temperature: "32",
icon: "c",
predictions: [
{
date: "2020-01-01",
day: "Mon",
temperature: "33",
icon: "lr"
},{
date: "2020-01-02",
day: "Tue",
temperature: "34",
icon: "t"
},{
date: "2020-01-03",
day: "Wed",
temperature: "35",
icon: "lc"
},{
date: "2020-01-04",
day: "Thu",
temperature: "36",
icon: "hr"
}
]
}
var geocodingapi = "https://api.techniknews.net/ipgeo/",
weatherapi = "https://www.metaweather.com/api/location"
if(true) return
axios.get(geocodingapi).then(res => res.data).then((res) => {
defaultData.city = res.regionName + ", " + res.country
var woeidurl = weatherapi + `/search/?lattlong=${res.lat},${res.lon}`
console.log(woeidurl);
axios.get(woeidurl, {
"mode": "no-cors",
withCredentials: false
}).then(res => res.data).then(res => {
console.log(res);
if(res && res[0]){
var weatherurl = weatherapi + "/" + res[0].woeid
console.log(weatherurl);
// axios.get(weatherurl).then(res => res.data).then(res => {
// console.log(res);
// })
}
})
}).catch(e => e)
}
export const loadSettings = () => {
fetchActions()
loadApps()
fetchWeather()
const shortUpdates = setInterval(fetchActions, 10000);
window.onresize = ()=>{
store.dispatch({type: "global/resolution", payload: {
width: window.innerWidth,
height: window.innerHeight
}})
}
}
export const loadApps = ()=>{
var tmp = {}
for (var i = 0; i < apps.length; i++) {
tmp[apps[i].icon] = apps[i]
}
store.dispatch({type: "home/setApps", payload: tmp});
store.dispatch({type: "home/setFavBar", payload: favbar});
var homelist = {}
// page 1
for (var i = 0; i < page1apps.length; i++) {
homelist[page1apps[i].icon] = {
page: 1,
type: 'app',
row: [6,7],
col: [i+1,i+2]
}
}
// adding home screen widgets
for (var i = 0; i < page1wid.length; i++) {
homelist[gene_name()] = {
page: 1,
type: 'widget',
row: page1wid[i].slice(0,2),
col: page1wid[i].slice(2,4),
widget: page1wid[i][4]
}
}
// page 2
for (var i = 0; i < page2apps.length; i++) {
homelist[page2apps[i].icon] = {
page: 2,
type: 'app',
row: [floor(i/4) + 1, floor(i/4) + 2],
col: [(i%4)+1,(i%4)+2]
}
}
// page 2 bar
for (var i = 0; i < page2bar.length; i++) {
homelist[page2bar[i].icon] = {
page: 2,
type: 'app',
row: [6, 7],
col: [(i%4)+1,(i%4)+2]
}
}
// page 2 widgets
for (var i = 0; i < page2wid.length; i++) {
homelist[gene_name()] = {
page: 2,
type: 'widget',
row: page2wid[i].slice(0,2),
col: page2wid[i].slice(2,4),
widget: page2wid[i][4]
}
}
// page 3
for (var i = 0; i < page3apps.length; i++) {
homelist[page3apps[i].icon] = {
page: 3,
type: 'app',
row: [floor(i/4) + 1, floor(i/4) + 2],
col: [(i%4)+1,(i%4)+2]
}
}
// page 3 widgets
for (var i = 0; i < page3wid.length; i++) {
homelist[gene_name()] = {
page: 3,
type: 'widget',
row: page3wid[i].slice(0,2),
col: page3wid[i].slice(2,4),
widget: page3wid[i][4]
}
}
// page 4 widgets
for (var i = 0; i < page4wid.length; i++) {
homelist[gene_name()] = {
page: 4,
type: 'widget',
row: page4wid[i].slice(0,2),
col: page4wid[i].slice(2,4),
widget: page4wid[i][4]
}
}
Object.keys(homelist).forEach((key, i) => {
store.dispatch({type: "home/setSlide", payload: {
id: key,
data: homelist[key]
}});
});
loadWhatsApp()
loadYouTube()
}
const randomTimes = (c = 1, b = 60, f = 60)=>{
var tmptime = new Date(new Date() - round(random()*b)*60*1000),
arr = []
while(c>0){
arr.push(tmptime)
tmptime = new Date(tmptime - round(random()*f)*60*1000)
c -= 1
}
return arr
}
const loadWhatsApp = ()=>{
var tmp = {...whatsapp_data};
tmp.curr = 0;
var tmptimes = randomTimes(tmp.self.status.length).reverse()
for (var i = tmp.self.status.length - 1; i>=0; i--) {
tmp.self.status[i].time = tmptimes[i].toISOString()
}
for (var i = 0; i < tmp.chats.length; i++) {
var cont = tmp.chats[i]
cont.id = i
if(cont.status){
var tdates = randomTimes(cont.chat.length,720,20).reverse()
for (var j = cont.status.length - 1; j >= 0; j--) {
cont.status[j].time = tdates[j].toISOString()
}
}else cont.status = []
if(cont.chat){
var tdates = randomTimes(cont.chat.length,60,300).reverse(),
replied = false;
for (var j = cont.chat.length - 1; j >= 0; j--) {
cont.chat[j].time = tdates[j].toISOString()
if(cont.chat[j].type=="2"){
cont.chat[j].seen = (j+1 == cont.chat.length) && !replied ?
floor(random()*3) : 2;
}else replied = true
}
}else cont.chat = []
tmp.chats[i] = {...cont};
}
tmp.media = {}
tmp.status = {
vis: !true,
id: -1
}
store.dispatch({type: 'whatsapp/setData', payload: tmp});
}
const loadYouTube = ()=>{
var tmp = {...youtube_data}
tmp.watch = {}
tmp.comp = false
Object.keys(tmp.channels).forEach((key, i) => {
var chnl = {...tmp.channels[key]}
chnl.id = key
tmp.channels[key] = {...chnl}
})
Object.keys(tmp.vids).forEach((key, i) => {
var ytvid = {...tmp.vids[key]}
ytvid.id = key
ytvid.views = Number(ytvid.views)
ytvid.likes = round(ytvid.views*(0.1 + random()*0.4))
ytvid.dislikes = round(ytvid.likes*(0.2 + random()*0.8))
if(!ytvid.thumb) ytvid.thumb = `https://i.ytimg.com/vi/${key}/hq720.jpg`
var channel
if(typeof(ytvid.channel)!="string"){
channel = {...ytvid.channel}
channel.id = gene_name(8)
ytvid.channel = channel.id
}else channel = {...tmp.channels[ytvid.channel]}
if(!channel.subs) channel.subs = round(ytvid.views*(0.05 + random()*0.1))
tmp.channels[channel.id] = channel
tmp.vids[key] = {...ytvid}
})
// tmp.watch = {id: "3izFMB91K_Q"}
// tmp.comp = false
tmp.explore.trending = Object.keys(tmp.vids).sort(() => Math.random() - 0.5).splice(0,15)
tmp.home = Object.keys(tmp.vids).sort(() => Math.random() - 0.5)
tmp.library.hist = Object.keys(tmp.vids).filter((x,i) => i&1).splice(0,8)
store.dispatch({type: 'youtube/setData', payload: tmp});
}
================================================
FILE: src/store/actions/prototypes.js
================================================
const {round, floor, random, min, max, abs} = Math;
Array.prototype.remove = function(a) {
var idx = this.indexOf(a)
for (var i = idx; i < this.length - 1; i++) {
this[i] = this[i+1]
}
this.length -= 1
}
String.prototype.strip = function(c) {
var i = 0,
j = this.length - 1;
while (this[i] === c) i++;
while (this[j] === c) j--;
return this.slice(i, j + 1);
}
String.prototype.csum = function() {
return [...Array(this.length)].map((x,i) => this.charCodeAt(i)).reduce((a,b) => a+b)
}
String.prototype.reverse = function() {
return this.split('').reverse().join('')
}
String.prototype.count = function(c) {
var result = 0,
i = 0;
for (i; i < this.length; i++)
if (this[i] == c) result++;
return result;
};
String.prototype.capitalize = function() {
return this.charAt(0).toUpperCase() + this.slice(1);
};
Number.prototype.quantf = function() {
if(this < 1000) return this + 1 - 1
else if(this < 1e6) return Math.floor(this/1000)+"K"
else if(this < 1e9) return Math.floor(this/1e5)/10 +"M"
else return Math.floor(this/1e8)/10 +"B"
};
Date.prototype.time12 = function() {
return this.toLocaleTimeString("en-US", {
hour: "numeric",
minute: "numeric"
})
};
Date.prototype.time24 = function() {
return this.toLocaleTimeString("en-US", {
hour: "numeric",
minute: "numeric",
hour12: false
})
};
Date.prototype.pastdate = function() {
if(this.toDateString() == new Date().toDateString()) return "Today"
else if (this.toDateString() == new Date(new Date() - 24*3600000).toDateString()) {
return "Yesterday"
}else{
return this.toLocaleDateString("en-US", {
month: "long",
day: "numeric",
year: "numeric"
})
}
};
Date.prototype.minifyTime = function(t) {
if(!t) t = round((new Date() - this)/(60*1000))
if(t < 60) return `${t} min ago`
else{
var d = new Date(new Date() - t*60*1000),
timestr = d.pastdate() + ', '
timestr += d.time12()
return timestr
}
}
Date.prototype.minifyDate = function(t) {
if(!t) t = round((new Date() - this)/(60*1000))
if(t < 60) return `${t} min ago`
else if(t < 1440) return `${Math.floor(t/60)} hours ago`
else if(t < 43200) return `${Math.floor(t/1440)} days ago`
else if(t < 525600) return `${Math.floor(t/43200)} months ago`
else return `${Math.floor(t/525600)} years ago`
}
Date.prototype.pastdatetime = function() {
var timestr = "", cdate = new Date();
if(this.toDateString() == cdate.toDateString()) timestr = "Today"
else if (this.toDateString() == new Date(cdate - 24*36*1e5).toDateString()) {
timestr = "Yesterday"
}else if(this.getFullYear() == cdate.getFullYear()){
timestr = this.toLocaleDateString("en-US", {
month: "long",
day: "numeric"
})
}else{
timestr = this.toLocaleDateString("en-US", {
day: "numeric",
month: "numeric",
year: "2-digit"
})
}
timestr += ", "
timestr += this.time12()
return timestr
};
================================================
FILE: src/store/index.js
================================================
import { configureStore } from "@reduxjs/toolkit";
import thunk from "redux-thunk";
// reducers who will be repsonsible for all the actions and state handling
import wallReducer from './reducers/wallpaper';
import quickpanelReducer from './reducers/quickpanel';
import globalReducer from "./reducers/global";
import homeReducer from "./reducers/home";
import widgetReducer from "./reducers/widget";
import WhatsAppReducer from './reducers/apps/whatsapp';
import YouTubeReducer from './reducers/apps/youtube';
const allReducers = {
wallpaper: wallReducer,
quickpanel: quickpanelReducer,
global: globalReducer,
home: homeReducer,
widget: widgetReducer,
whatsapp: WhatsAppReducer,
youtube: YouTubeReducer
};
const store = configureStore({
reducer: allReducers,
middleware: [thunk]
});
export default store;
================================================
FILE: src/store/reducers/apps/whatsapp.js
================================================
import { createSlice } from "@reduxjs/toolkit";
var initialState = {};
const closeExtras = (state, action) => {
if(action.type != 'home/closeAllApps' && action.payload != "whatsapp") return
state.media.vis = false
state.status.vis = false
}
const WhatsApp = createSlice({
name: "whatsapp",
initialState: initialState,
reducers: {
setData: (state, action) => {
Object.keys(action.payload).forEach(key => {
state[key] = action.payload[key]
});
},
setProp: (state, action) => {
state[action.payload.key] = action.payload.value
},
setChatProp: (state, action) => {
const {id, key, value} = action.payload;
if(!id || !state.chats[id]) return
state.chats[id][key] = value
},
setMedia: (state, action) => {
if(action.payload) state.media = action.payload;
state.media.vis = true
// component variable that indicates the home goback action
// to not goback and just turn it off
state.comp = true
},
setStatus: (state, action) => {
state.status.vis = true
state.status.id = action.payload || -1;
state.comp = true
},
setViewStatus: (state, action) => {
var {id, count} = action.payload
if(id==-1) return
var contact = state.chats[id]
if(!contact) return
for (var i = 0; i < contact.status.length; i++) {
if(i {
var contact = {...state.chats[action.payload.id]}
if(!contact) return
contact.chat = contact.chat || []
var msg = {
type: "2",
msg: action.payload.msg,
media: action.payload.media,
src: action.payload.src,
seen: 1,
time: new Date().toISOString()
}
contact.chat.push(msg)
state.chats[action.payload.id].chat = contact.chat
}
},
extraReducers: {
'home/goBack': (state, action) => {
state.media.vis = false
state.status.vis = false
state.comp = false
},
'home/closeApp': closeExtras,
'home/closeAllApps': closeExtras
}
});
export default WhatsApp.reducer;
================================================
FILE: src/store/reducers/apps/youtube.js
================================================
import { createSlice } from "@reduxjs/toolkit";
var initialState = {}
const YouTube = createSlice({
name: "youtube",
initialState: initialState,
reducers: {
setData: (state, action) => {
Object.keys(action.payload).forEach(key => {
state[key] = action.payload[key]
});
},
setProp: (state, action) => {
state[action.payload.key] = action.payload.value
},
watchVideo: (state, action) => {
state.watch.id = action.payload
state.comp = true
},
closeVid: (state, action) => {
state.watch.id = null
state.comp = false
},
toggleSub: (state, action) => {
if(state.subd.includes(action.payload)){
state.subd = state.subd.filter(x => x!= action.payload)
}else{
var tmp = [...state.subd]
tmp.push(action.payload)
state.subd = [...tmp]
}
}
},
extraReducers: {
'home/goBack': (state, action) => {
state.comp = false
}
}
});
export default YouTube.reducer;
================================================
FILE: src/store/reducers/global.js
================================================
import { createSlice } from "@reduxjs/toolkit";
const initialState = {
time: {
hours: 0,
minutes: 0,
abb: "",
military: false
},
date: {
day: 1,
month: 0,
year: 1970
},
battery: {
charging: false,
level: 1,
},
display: {
width: window.innerWidth,
height: window.innerHeight
}
};
const Global = createSlice({
name: "global",
initialState: initialState,
reducers: {
battery: (state, action) => {
state.battery = action.payload;
},
time: (state, action) => {
state.time.hours = action.payload.hours;
state.time.minutes = action.payload.minutes;
state.time.abb = action.payload.abb;
},
date: (state, action) => {
state.date = action.payload;
},
resolution: (state, action) => {
state.display.width = action.payload.width;
state.display.height = action.payload.height;
}
},
});
export default Global.reducer;
================================================
FILE: src/store/reducers/home.js
================================================
import { createSlice } from "@reduxjs/toolkit";
var initialState = {
slides: {
count: 4,
list: {}
},
apps: {},
stack: [],
ishome: true,
recent: false,
favbar: []
};
var dev = ""
if(process.env.REACT_APP_ENV=="development" && dev!=""){
initialState.stack.push(dev)
initialState.ishome = false
}
const searchpath = (tree, page, path="-")=>{
var t_path = null;
if(path.includes("-" + page + "-")) return path
Object.keys(tree).forEach(key => {
t_path = t_path || searchpath(tree[key], page, path + key + "-")
});
return t_path
}
const Home = createSlice({
name: "home",
initialState: initialState,
reducers: {
setApps: (state, action) => {
state.apps = action.payload
},
setApp: (state, action) => {
if(state.apps[action.payload.id]){
state.apps[action.payload.id] = action.payload.data
}
},
setAppKey: (state, action) => {
var {id, key, value} = action.payload;
if(state.apps[id]){
state.apps[id][key] = value
}
},
navApp: (state, action) => {
var [id, page] = action.payload.split("."),
tmp_path = searchpath({...state.apps[id].pagetree}, page)
if(tmp_path){
state.apps[id].path = tmp_path.strip("-").split("-")
}
},
goBack: (state, action) => {
if(state.ishome || state.recent || !state.stack.length) return
var cr_app = state.stack.at(-1),
tmp = {...state.apps[cr_app]}
if(tmp.comp) return
if(tmp.path && tmp.path.length){
if(tmp.path.length==1){ // set home
state.ishome = true
state.recent = false
}else{
tmp.path.pop()
state.apps[cr_app] = {...tmp}
}
}
},
setSlide: (state, action) => {
state.slides.list[action.payload.id] = action.payload.data
},
setFavBar: (state, action) => {
state.favbar = action.payload
},
setHome: (state, action) => {
state.ishome = true
state.recent = false
},
setRecent: (state, action) => {
state.recent = true
state.ishome = true
},
closeRecent: (state, action) => {
state.recent = false
state.ishome = true
},
openLink: (state, action) => {
window.open(action.payload, '_blank')
},
openApp: (state, action) => {
if(!action.payload) return;
var tmp = [...state.stack]
if(tmp.includes(action.payload)){
tmp.remove(action.payload)
}
tmp.push(action.payload)
state.stack = [...tmp]
state.ishome = false
state.recent = false
},
closeApp: (state, action) => {
if(!action.payload) return;
var tmp = [...state.stack]
if(tmp.includes(action.payload)){
tmp.remove(action.payload)
if(state.apps[action.payload]){
state.apps[action.payload].comp = false
state.apps[action.payload].path = ['main']
}
}
state.stack = [...tmp]
},
closeAllApps: (state, action) => {
var tmp = []
for (var i = 0; i < state.stack.length; i++) {
state.apps[state.stack[i]].comp = false
state.apps[state.stack[i]].path = ['main']
}
state.stack = [...tmp]
state.ishome = true
state.recent = false
}
},
});
export default Home.reducer;
================================================
FILE: src/store/reducers/quickpanel.js
================================================
import {
createSlice
} from "@reduxjs/toolkit";
const intialState = {
open: false,
extended: false,
config: [{
name: "Wifi",
state: 1,
icon: "Wifi",
}, {
name: "Mobile data",
state: 1,
icon: "SwapVert",
}, {
name: "Ring",
state: 0,
icon: "VolumeUp",
}, {
name: "Bluetooth",
state: 0,
icon: "Bluetooth",
}, {
name: "Silent",
state: 0,
icon: "NotificationsOff",
}, {
name: "Auto Rotate",
state: 0,
icon: "WifiProtectedSetup",
}, {
name: "Airplane",
state: 0,
icon: "AirplanemodeActive",
}, {
name: "Flash light",
state: 0,
icon: "FlashlightOn",
}, {
name: "Eye comfort",
state: 0,
icon: "Visibility",
}, {
name: "Power mode",
state: 0,
icon: "BatterySaver",
}, {
name: "Location",
state: 0,
icon: "LocationOn",
}, {
name: "Hotspot",
state: 0,
icon: "CellTower",
}, {
name: "Connect",
state: 0,
icon: "Phonelink",
}, {
name: "Do not disturb",
state: 0,
icon: "DoNotDisturbOn",
}, {
name: "Screen Lock",
state: 0,
icon: "Lock",
}, {
name: "Screenshot",
state: 0,
icon: "Screenshot",
}, {
name: "Switch Sim",
state: 0,
icon: "SimCardOutlined",
}, {
name: "Kid Space",
state: 0,
icon: "ChildCare",
}],
lazy_bright: 100
};
const QuickPanel = createSlice({
name: "quickpanel",
initialState: intialState,
reducers: {
open: (state, action) => {
state.open = true;
},
close: (state, action) => {
state.open = false;
state.extended = false;
},
toggle: (state, action) => {
state.open = !state.open;
if (!state.open) {
state.extended = false;
}
},
extend: (state, action) => {
state.open = true;
state.extended = true;
},
collapse: (state, action) => {
state.open = true;
state.extended = false;
},
toggleTool: (state, action) => {
if(state.config[action.payload]){
state.config[action.payload].state ^= 1
}
},
setLazyBright: (state, action) => {
state.lazy_bright = action.payload
}
},
});
export default QuickPanel.reducer;
================================================
FILE: src/store/reducers/wallpaper.js
================================================
import {createSlice} from '@reduxjs/toolkit';
const walls = ["default.jpg"]
const intialState = {wps: 0,src: walls[0]}
const wallSlice = createSlice({
name: "wallaper",
initialState: intialState,
reducers: {
setWall: (state, action) => {
state.src = action.payload
},
setWps: (state, action) => {
state.wps = action.payload
state.src = walls[action.payload]
}
}
})
export default wallSlice.reducer;
================================================
FILE: src/store/reducers/widget.js
================================================
import { createSlice } from "@reduxjs/toolkit";
const initialState = {
weather: {
city: "New york",
temperature: "32",
icon: "c",
predictions: [
{
date: "2020-01-01",
day: "Mon",
temperature: "33",
icon: "lr"
},{
date: "2020-01-02",
day: "Tue",
temperature: "34",
icon: "t"
},{
date: "2020-01-03",
day: "Wed",
temperature: "35",
icon: "lc"
},{
date: "2020-01-04",
day: "Thu",
temperature: "36",
icon: "hr"
}
]
}
};
const Widget = createSlice({
name: "widget",
initialState: initialState,
reducers: {
weather: (state, action) => {
state.weather = action.payload;
}
},
});
export default Widget.reducer;
================================================
FILE: src-tauri/.gitignore
================================================
# Generated by Cargo
# will have compiled files and executables
/target/
WixTools
================================================
FILE: src-tauri/Cargo.toml
================================================
[package]
name = "app"
version = "0.1.0"
description = "A Tauri App"
authors = ["you"]
license = ""
repository = ""
default-run = "app"
edition = "2021"
rust-version = "1.57"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[build-dependencies]
tauri-build = { version = "1.0.0-rc.8", features = [] }
[dependencies]
serde_json = "1.0"
serde = { version = "1.0", features = ["derive"] }
tauri = { version = "1.0.0-rc.9", features = ["api-all", "system-tray", "updater"] }
[features]
# by default Tauri runs in production mode
# when `tauri dev` runs it is executed with `cargo run --no-default-features` if `devPath` is an URL
default = [ "custom-protocol" ]
# this feature is used used for production builds where `devPath` points to the filesystem
# DO NOT remove this
custom-protocol = [ "tauri/custom-protocol" ]
================================================
FILE: src-tauri/build.rs
================================================
fn main() {
tauri_build::build()
}
================================================
FILE: src-tauri/src/main.rs
================================================
#![cfg_attr(
all(not(debug_assertions), target_os = "windows"),
windows_subsystem = "windows"
)]
fn main() {
tauri::Builder::default()
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
================================================
FILE: src-tauri/tauri.conf.json
================================================
{
"$schema": "..\\node_modules/@tauri-apps/cli\\schema.json",
"build": {
"beforeBuildCommand": "",
"beforeDevCommand": "",
"devPath": "http://localhost:3000",
"distDir": "../build"
},
"package": {
"productName": "Android11React",
"version": "0.0.3"
},
"tauri": {
"allowlist": {
"all": true
},
"bundle": {
"active": true,
"category": "DeveloperTool",
"copyright": "",
"deb": {
"depends": []
},
"externalBin": [],
"icon": [
"icons/32x32.png",
"icons/128x128.png",
"icons/128x128@2x.png",
"icons/icon.icns",
"icons/icon.ico"
],
"identifier": "com.blueedge.androidreact",
"longDescription": "",
"macOS": {
"entitlements": null,
"exceptionDomain": "",
"frameworks": [],
"providerShortName": null,
"signingIdentity": null
},
"resources": [],
"shortDescription": "",
"targets": "all",
"windows": {
"certificateThumbprint": null,
"digestAlgorithm": "sha256",
"timestampUrl": ""
}
},
"security": {
"csp": null
},
"updater": {
"active": true,
"endpoints": [
"https://github.win11react.com/update/android/"
],
"dialog": true,
"pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDY1QzY4RkFENDQ3RDY2RDEKUldUUlpuMUVyWS9HWlY2RVVlTlU3OHpOSThOQUN1Vi95VWxvVFZ1dEYzZUxUUlJPWGdYMDFuRWsK"
},
"windows": [
{
"fullscreen": false,
"height": 600,
"resizable": true,
"title": "Android11React",
"width": 800
}
]
}
}
================================================
FILE: tailwind.config.js
================================================
module.exports = {
content: [
"./src/**/*.{js,jsx,ts,tsx}",
],
theme: {
extend: {},
},
plugins: [],
}
================================================
FILE: timeline.md
================================================
## The major problems I faced during the development
(ps: This is just the tip of iceberg)
##### How do you change apps?
- either hide them all at once and show one of them when called
or
- use a long slider with all apps and scroll (or rather snap) it accordingly
on demand (✔️)
##### So the problem is how to statically order the apps without losing the state in the Swiper
- Make your own swiper ??
- Use Iframe and router
- Somehow ?
**sol**: render them separately (the apps and recent menu)
##### This weird bug when stack array is being changed, it transfers the state
- yeah, because that is what happens when you dynamically change the array in react, dumbass
- to fix the CSS tranlateUp transition, I used animation instead of transition
- to make it more fruitful, I manually handled the scrolls and gave up on the last item
##### How do you make the glimpse of apps appear in the recent menu without breaking the whole thing
- duplicate the innerHTML
- make sure to handle the react states properly
- I had to disable the lazy component for that to work (¬_¬")
##### Sometime the bottom nav back button should not revoke back action in few cases
For any certain apps like media opened in case of whatsApp, it need to be handled
not by pagination of components. So how do you accommodate this without breaking
the current navigation system?
**sol**: Make a common value that tells the global back action handler to skip this
call and listen it in the custom app reducer by using extraReducers properties
of @redux/toolkit
##### How to reiterate the previous state of the app when collapsed?
- Either use a separate reducer for that app
or
- if the requirement is small make the changes in the main apps reducer
##### How to transition between pages of an app without have to repeat the same code for every app
- Make a navigation system with predefined path and fetch the page state for each app accordingly
- I know! I made it sound easier XD
##### Now the problem with nav system is that it is declaring the app pagetree when the app is opened first time
i.e it need to be opened atleast once before getting called to open from externally.
The problem with this is that apps like google can be opened by a widget and user should be able to open the app from widget before opening from app icon
- The simplest solution is to manually trigger the openApp action before triggering navapp action, everytime. (¬_¬ )
- Another is to call the openApp action from navApp
action once for all
- The problem with solution is that there won't be any buffer time for the app to open and define its pagetree, rendering the navapp action useless (╯°□°)╯︵ ┻━┻
**sol** : Make an action that first opens the app and then triggers the navApp action
with some delay (⌐■_■), Hotel ? Trivago ...