├── .appveyor.yml
├── .editorconfig
├── .eslintignore
├── .eslintrc
├── .github
├── ISSUE_TEMPLATE.md
└── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── .npmignore
├── .travis.yml
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── RELEASENOTES.json
├── app
├── fonts
│ ├── ionicons.eot
│ ├── ionicons.svg
│ ├── ionicons.ttf
│ └── ionicons.woff
├── html
│ └── main.html
├── images
│ ├── darwin-tray-icon-default-Template.png
│ ├── darwin-tray-icon-default-Template@2x.png
│ ├── darwin-tray-icon-transparent-Template.png
│ ├── darwin-tray-icon-transparent-Template@2x.png
│ ├── darwin-tray-icon-transparent-pause-Template.png
│ ├── darwin-tray-icon-transparent-pause-Template@2x.png
│ ├── icon-home.svg
│ ├── linux-tray-icon-default.png
│ ├── linux-tray-icon-transparent-pause.png
│ ├── linux-tray-icon-transparent.png
│ ├── logo-text.png
│ ├── logo.png
│ ├── tray-item-appAutoUpdate-Template.png
│ ├── tray-item-appAutoUpdate-Template@2x.png
│ ├── tray-item-appLaunchOnStartup-Template.png
│ ├── tray-item-appLaunchOnStartup-Template@2x.png
│ ├── tray-item-appReset-Template.png
│ ├── tray-item-appReset-Template@2x.png
│ ├── tray-item-appRestart-Template.png
│ ├── tray-item-appRestart-Template@2x.png
│ ├── tray-item-appShowBadgeCount-Template.png
│ ├── tray-item-appShowBadgeCount-Template@2x.png
│ ├── tray-item-appTrayOnly-Template.png
│ ├── tray-item-appTrayOnly-Template@2x.png
│ ├── tray-item-pushbulletClipboardEnabled-Template.png
│ ├── tray-item-pushbulletClipboardEnabled-Template@2x.png
│ ├── tray-item-pushbulletHideNotificationBody-Template.png
│ ├── tray-item-pushbulletHideNotificationBody-Template@2x.png
│ ├── tray-item-pushbulletNotificationFilterFilePath-Template.png
│ ├── tray-item-pushbulletNotificationFilterFilePath-Template@2x.png
│ ├── tray-item-pushbulletRepeatRecentNotifications-Template.png
│ ├── tray-item-pushbulletRepeatRecentNotifications-Template@2x.png
│ ├── tray-item-pushbulletSmsEnabled-Template.png
│ ├── tray-item-pushbulletSmsEnabled-Template@2x.png
│ ├── tray-item-pushbulletSoundEnabled-Template.png
│ ├── tray-item-pushbulletSoundEnabled-Template@2x.png
│ ├── tray-item-pushbulletSoundFilePath-Template.png
│ ├── tray-item-pushbulletSoundFilePath-Template@2x.png
│ ├── tray-item-snooze-Template.png
│ ├── tray-item-snooze-Template@2x.png
│ ├── tray-item-windowTopmost-Template.png
│ ├── tray-item-windowTopmost-Template@2x.png
│ ├── win32-tray-icon-default.png
│ ├── win32-tray-icon-transparent-pause.png
│ └── win32-tray-icon-transparent.png
├── scripts
│ ├── app.js
│ ├── main-process
│ │ ├── components
│ │ │ └── globals.js
│ │ ├── index.js
│ │ ├── managers
│ │ │ └── configuration-manager.js
│ │ ├── menus
│ │ │ ├── app-menu.js
│ │ │ └── tray-menu.js
│ │ ├── services
│ │ │ └── snoozer-service.js
│ │ └── windows
│ │ │ └── main-window.js
│ └── renderer-process
│ │ ├── index.js
│ │ ├── pushbullet
│ │ ├── clipboard.js
│ │ ├── device.js
│ │ ├── push.js
│ │ └── sms.js
│ │ └── webviews
│ │ └── pushbullet-webview.js
├── styles
│ ├── elements
│ │ ├── spinner.css
│ │ ├── supplemental-menu.css
│ │ ├── titlebar.css
│ │ ├── views.css
│ │ └── window.css
│ ├── global
│ │ └── animations.css
│ ├── injected
│ │ └── pushbullet-webview.css
│ ├── styles.css
│ └── variables
│ │ ├── colors.css
│ │ ├── sizes.css
│ │ ├── timing-functions.css
│ │ └── z-indices.css
└── user-settings
│ └── filter-template.txt
├── bin
└── cli.js
├── icons
├── linux
│ └── png
│ │ ├── 1024x1024.png
│ │ ├── 128x128.png
│ │ ├── 16x16.png
│ │ ├── 24x24.png
│ │ ├── 256x256.png
│ │ ├── 32x32.png
│ │ ├── 48x48.png
│ │ ├── 512x512.png
│ │ ├── 64x64.png
│ │ ├── 96x96.png
│ │ └── icon.png
├── mac
│ └── icon.icns
└── win
│ └── icon.ico
├── package-lock.json
├── package.json
├── pushbullet.d.ts
├── resources
├── extensions
│ ├── chrome
│ │ └── 336_0
│ │ │ ├── _locales
│ │ │ ├── ar
│ │ │ │ └── messages.json
│ │ │ ├── bg
│ │ │ │ └── messages.json
│ │ │ ├── ca
│ │ │ │ └── messages.json
│ │ │ ├── da
│ │ │ │ └── messages.json
│ │ │ ├── de
│ │ │ │ └── messages.json
│ │ │ ├── en
│ │ │ │ └── messages.json
│ │ │ ├── es
│ │ │ │ └── messages.json
│ │ │ ├── fi
│ │ │ │ └── messages.json
│ │ │ ├── fr
│ │ │ │ └── messages.json
│ │ │ ├── he
│ │ │ │ └── messages.json
│ │ │ ├── hu
│ │ │ │ └── messages.json
│ │ │ ├── id
│ │ │ │ └── messages.json
│ │ │ ├── it
│ │ │ │ └── messages.json
│ │ │ ├── ja
│ │ │ │ └── messages.json
│ │ │ ├── ko
│ │ │ │ └── messages.json
│ │ │ ├── nl
│ │ │ │ └── messages.json
│ │ │ ├── no
│ │ │ │ └── messages.json
│ │ │ ├── pl
│ │ │ │ └── messages.json
│ │ │ ├── pt_BR
│ │ │ │ └── messages.json
│ │ │ ├── pt_PT
│ │ │ │ └── messages.json
│ │ │ ├── ro
│ │ │ │ └── messages.json
│ │ │ ├── ru
│ │ │ │ └── messages.json
│ │ │ ├── sk
│ │ │ │ └── messages.json
│ │ │ ├── sl
│ │ │ │ └── messages.json
│ │ │ ├── sv
│ │ │ │ └── messages.json
│ │ │ ├── th
│ │ │ │ └── messages.json
│ │ │ ├── tr
│ │ │ │ └── messages.json
│ │ │ ├── vi
│ │ │ │ └── messages.json
│ │ │ ├── zh_CN
│ │ │ │ └── messages.json
│ │ │ └── zh_TW
│ │ │ │ └── messages.json
│ │ │ ├── _metadata
│ │ │ ├── computed_hashes.json
│ │ │ └── verified_contents.json
│ │ │ ├── action_android.png
│ │ │ ├── action_cancel.png
│ │ │ ├── action_halt.png
│ │ │ ├── action_overflow.png
│ │ │ ├── action_reply.png
│ │ │ ├── action_tick.png
│ │ │ ├── action_undo.png
│ │ │ ├── action_web.png
│ │ │ ├── alert.ogg
│ │ │ ├── alive.js
│ │ │ ├── analytics.js
│ │ │ ├── awake.js
│ │ │ ├── base.css
│ │ │ ├── bg_apple.png
│ │ │ ├── bg_sam.png
│ │ │ ├── bg_windows.png
│ │ │ ├── big.css
│ │ │ ├── bullet@2x.png
│ │ │ ├── chat-push.js
│ │ │ ├── chat-sms.js
│ │ │ ├── chat-ui.css
│ │ │ ├── chat-ui.js
│ │ │ ├── chat-window.css
│ │ │ ├── chat-window.html
│ │ │ ├── chat-window.js
│ │ │ ├── chats.js
│ │ │ ├── chip_add.png
│ │ │ ├── chip_browser.png
│ │ │ ├── chip_channel.png
│ │ │ ├── chip_desktop.png
│ │ │ ├── chip_everything.png
│ │ │ ├── chip_group.png
│ │ │ ├── chip_home.png
│ │ │ ├── chip_laptop.png
│ │ │ ├── chip_other.png
│ │ │ ├── chip_person.png
│ │ │ ├── chip_phone.png
│ │ │ ├── chip_tablet.png
│ │ │ ├── chip_watch.png
│ │ │ ├── chip_work.png
│ │ │ ├── clipboard.js
│ │ │ ├── connection.js
│ │ │ ├── context-menu.js
│ │ │ ├── control_popout.png
│ │ │ ├── control_settings.png
│ │ │ ├── device.js
│ │ │ ├── dropzone.css
│ │ │ ├── dropzone.js
│ │ │ ├── end-to-end.js
│ │ │ ├── fake-notifications.css
│ │ │ ├── fake-notifications.js
│ │ │ ├── files.js
│ │ │ ├── forge.min.js
│ │ │ ├── http.js
│ │ │ ├── icon_128.png
│ │ │ ├── icon_16.png
│ │ │ ├── icon_19.png
│ │ │ ├── icon_19_gray.png
│ │ │ ├── icon_38.png
│ │ │ ├── icon_38_gray.png
│ │ │ ├── icon_48.png
│ │ │ ├── keyboard-shortcuts.js
│ │ │ ├── licenses.html
│ │ │ ├── link.png
│ │ │ ├── listeners.js
│ │ │ ├── local.js
│ │ │ ├── lock.png
│ │ │ ├── log-request.js
│ │ │ ├── logo.png
│ │ │ ├── logo@2x.png
│ │ │ ├── main.js
│ │ │ ├── manifest.json
│ │ │ ├── mirroring.js
│ │ │ ├── moment.js
│ │ │ ├── more.html
│ │ │ ├── more.js
│ │ │ ├── notifier.js
│ │ │ ├── options.html
│ │ │ ├── options.js
│ │ │ ├── page.js
│ │ │ ├── panel-messaging-push.css
│ │ │ ├── panel-messaging-push.js
│ │ │ ├── panel-messaging-sms.css
│ │ │ ├── panel-messaging-sms.js
│ │ │ ├── panel-messaging.css
│ │ │ ├── panel-messaging.js
│ │ │ ├── panel-notifications.js
│ │ │ ├── panel.css
│ │ │ ├── panel.html
│ │ │ ├── panel.js
│ │ │ ├── pb.js
│ │ │ ├── picker.css
│ │ │ ├── picker.js
│ │ │ ├── pong.js
│ │ │ ├── pushes.js
│ │ │ ├── pushfont.woff
│ │ │ ├── pushing.js
│ │ │ ├── quick-reply.css
│ │ │ ├── quick-reply.html
│ │ │ ├── quick-reply.js
│ │ │ ├── ribbon.png
│ │ │ ├── settings.js
│ │ │ ├── sms.js
│ │ │ ├── track_chat.png
│ │ │ ├── track_files.png
│ │ │ ├── track_links.png
│ │ │ ├── upload.png
│ │ │ └── utils.js
│ └── safari
│ │ ├── Icon-64.png
│ │ ├── Info.plist
│ │ ├── Safari.plist
│ │ ├── action_android.png
│ │ ├── action_cancel.png
│ │ ├── action_halt.png
│ │ ├── action_overflow.png
│ │ ├── action_reply.png
│ │ ├── action_tick.png
│ │ ├── action_undo.png
│ │ ├── action_web.png
│ │ ├── alert.ogg
│ │ ├── alive.js
│ │ ├── analytics.js
│ │ ├── awake.js
│ │ ├── base.css
│ │ ├── bg_apple.png
│ │ ├── bg_sam.png
│ │ ├── bg_windows.png
│ │ ├── big.css
│ │ ├── bullet@2x.png
│ │ ├── changelog.html
│ │ ├── changelog.js
│ │ ├── chat-push.js
│ │ ├── chat-sms.js
│ │ ├── chat-ui.css
│ │ ├── chat-ui.js
│ │ ├── chat-window.css
│ │ ├── chat-window.html
│ │ ├── chat-window.js
│ │ ├── chats.js
│ │ ├── chip_add.png
│ │ ├── chip_browser.png
│ │ ├── chip_channel.png
│ │ ├── chip_desktop.png
│ │ ├── chip_everything.png
│ │ ├── chip_group.png
│ │ ├── chip_home.png
│ │ ├── chip_laptop.png
│ │ ├── chip_other.png
│ │ ├── chip_person.png
│ │ ├── chip_phone.png
│ │ ├── chip_tablet.png
│ │ ├── chip_watch.png
│ │ ├── chip_work.png
│ │ ├── clipboard.js
│ │ ├── connection.js
│ │ ├── context-menu.js
│ │ ├── control_popout.png
│ │ ├── control_settings.png
│ │ ├── device.js
│ │ ├── dropzone.css
│ │ ├── dropzone.js
│ │ ├── end-script.js
│ │ ├── end-to-end.js
│ │ ├── events.js
│ │ ├── fake-notifications.css
│ │ ├── fake-notifications.js
│ │ ├── files.js
│ │ ├── forge.min.js
│ │ ├── global.html
│ │ ├── http.js
│ │ ├── icon_128.png
│ │ ├── icon_16.png
│ │ ├── icon_19.png
│ │ ├── icon_19_gray.png
│ │ ├── icon_32.png
│ │ ├── icon_38.png
│ │ ├── icon_38_gray.png
│ │ ├── icon_48.png
│ │ ├── icon_64.png
│ │ ├── link.png
│ │ ├── listeners.js
│ │ ├── local.js
│ │ ├── lock.png
│ │ ├── log-request.js
│ │ ├── logo.png
│ │ ├── logo@2x.png
│ │ ├── main.js
│ │ ├── mirroring.js
│ │ ├── moment.js
│ │ ├── notifier-chrome.js
│ │ ├── notifier-firefox.js
│ │ ├── notifier-safari.js
│ │ ├── notifier.js
│ │ ├── options.html
│ │ ├── options.js
│ │ ├── page.js
│ │ ├── panel-messaging-push.css
│ │ ├── panel-messaging-push.js
│ │ ├── panel-messaging-sms.css
│ │ ├── panel-messaging-sms.js
│ │ ├── panel-messaging.css
│ │ ├── panel-messaging.js
│ │ ├── panel-notifications.js
│ │ ├── panel.css
│ │ ├── panel.html
│ │ ├── panel.js
│ │ ├── pb.js
│ │ ├── picker.css
│ │ ├── picker.js
│ │ ├── pong.js
│ │ ├── pushes.js
│ │ ├── pushfont.woff
│ │ ├── pushing.js
│ │ ├── quick-reply.css
│ │ ├── quick-reply.html
│ │ ├── quick-reply.js
│ │ ├── ribbon.png
│ │ ├── safari_logo.png
│ │ ├── safari_logo@2x.png
│ │ ├── settings.js
│ │ ├── sms.js
│ │ ├── tabs.js
│ │ ├── text.js
│ │ ├── track_chat.png
│ │ ├── track_files.png
│ │ ├── track_links.png
│ │ ├── upload.png
│ │ ├── utils.js
│ │ ├── x-ray.html
│ │ └── x-ray.js
├── graphics
│ ├── icon-beta.png
│ ├── icon-flavoured.ai
│ ├── icon-preview.png
│ ├── icon-setup.png
│ ├── icon-tray-opaque.svg
│ ├── icon-tray-paused.psd
│ ├── icon-tray-transparent-pause.svg
│ ├── icon-tray-transparent.svg
│ ├── icon-tray.psd
│ ├── icon.ai
│ ├── icon.png
│ └── icon.psd
├── screenshots
│ ├── screenshot-linux.png
│ ├── screenshot-macos.png
│ └── screenshot-win32.png
├── setup
│ ├── dmg-background.png
│ ├── dmg-icon.icns
│ ├── nsis-installer-header-icon.ico
│ ├── nsis-installer-header.bmp
│ ├── nsis-installer-icon.ico
│ └── nsis-installer-sidebar.bmp
└── web
│ └── pushbullet.js
├── sounds
├── android-1.wav
├── android-10.wav
├── android-11.wav
├── android-12.wav
├── android-14.wav
├── android-15.wav
├── android-16.wav
├── android-17.wav
├── android-18.wav
├── android-19.wav
├── android-2.wav
├── android-3.wav
├── android-4.wav
├── android-5.wav
├── android-6.wav
├── android-7.wav
├── android-8.wav
├── android-9.wav
├── default.wav
├── generic-1.wav
├── generic-2.wav
├── generic-3.wav
├── generic-4.wav
├── google-absurd_bird.wav
├── google-be_mine.wav
├── google-beginning.wav
├── google-bellhop.wav
├── google-big_freedia_came_to_slay.wav
├── google-big_freedia_girl_down.wav
├── google-big_freedia_release_your_wiggle.wav
├── google-big_freedia_you_already_know.wav
├── google-bike_ride.wav
├── google-birdsong.wav
├── google-blacksmith.wav
├── google-bolt.wav
├── google-boomerang.wav
├── google-bubble.wav
├── google-bud.wav
├── google-bulb.wav
├── google-butterfly.wav
├── google-cakes_da_killa_free_to_be.wav
├── google-champagne_pop.wav
├── google-changing_keys.wav
├── google-cheers.wav
├── google-chef_s_special.wav
├── google-chime.wav
├── google-clink.wav
├── google-coconuts.wav
├── google-coin_toss.wav
├── google-coins.wav
├── google-cowbell.wav
├── google-crosswalk.wav
├── google-cyclist.wav
├── google-dew.wav
├── google-dj.wav
├── google-doorbell.wav
├── google-duet.wav
├── google-eerie.wav
├── google-end_note.wav
├── google-fade.wav
├── google-finale.wav
├── google-flick.wav
├── google-flower.wav
├── google-fraidy_cat.wav
├── google-fruit.wav
├── google-gems.wav
├── google-gentle_gong.wav
├── google-gibbon_call.wav
├── google-gigi_gorgeous_gorgeous.wav
├── google-gigi_gorgeous_kiss.wav
├── google-gigi_gorgeous_stay_gorgeous.wav
├── google-gobble_gobble.wav
├── google-grand_opening.wav
├── google-guardian_angel.wav
├── google-guitar_chord.wav
├── google-hey.wav
├── google-holiday_magic.wav
├── google-honk_honk.wav
├── google-jackpot.wav
├── google-leaf.wav
├── google-magic.wav
├── google-magic_trick.wav
├── google-mallet.wav
├── google-morgxn_home.wav
├── google-night_sky.wav
├── google-nightlife.wav
├── google-note.wav
├── google-orders_up.wav
├── google-paper_clip.wav
├── google-party_favor.wav
├── google-petals.wav
├── google-piano_flourish.wav
├── google-piano_flutter.wav
├── google-ping-pong.wav
├── google-ping.wav
├── google-pipes.wav
├── google-pollen.wav
├── google-popcorn.wav
├── google-portal.wav
├── google-reward.wav
├── google-rock_concert.wav
├── google-roots.wav
├── google-royal_fanfare.wav
├── google-sad_trombone.wav
├── google-seedling.wav
├── google-shopkeeper.wav
├── google-sleigh_bells.wav
├── google-snowflake.wav
├── google-spell.wav
├── google-spring_strings.wav
├── google-stem.wav
├── google-sticks_and_stones.wav
├── google-strum.wav
├── google-summer_surf.wav
├── google-swan_song.wav
├── google-sweetheart.wav
├── google-trill.wav
├── google-tropical_frog.wav
├── google-tuneup.wav
├── google-tweeter.wav
├── google-twinkle.wav
├── google-tyler_oakley_hi_friends.wav
├── google-unlock.wav
├── google-welcome.wav
├── google-winter_wind.wav
├── ios-1.wav
├── ios-10.wav
├── ios-2.wav
├── ios-3.wav
├── ios-4.wav
├── ios-5.wav
├── ios-6.wav
├── ios-7.wav
├── ios-8.wav
├── ios-9.wav
├── macos-1.wav
├── macos-2.wav
├── macos-3.wav
├── macos-4.wav
├── nintendo-1.wav
├── nintendo-2.wav
├── nintendo-3.wav
├── nintendo-4.wav
├── nintendo-5.wav
├── slack-1.wav
├── slack-2.wav
├── slack-3.wav
├── slack-4.wav
├── slack-5.wav
├── slack-6.wav
├── slack-7.wav
├── slack-8.wav
├── tesla-1.wav
├── tesla-2.wav
├── tesla-3.wav
├── voiceover-1.wav
├── voiceover-10.wav
├── voiceover-11.wav
├── voiceover-12.wav
├── voiceover-13.wav
├── voiceover-14.wav
├── voiceover-15.wav
├── voiceover-16.wav
├── voiceover-17.wav
├── voiceover-18.wav
├── voiceover-19.wav
├── voiceover-2.wav
├── voiceover-3.wav
├── voiceover-4.wav
├── voiceover-5.wav
├── voiceover-6.wav
├── voiceover-7.wav
├── voiceover-8.wav
├── voiceover-9.wav
├── windows-1.wav
├── windows-10.wav
├── windows-11.wav
├── windows-12.wav
├── windows-14.wav
├── windows-15.wav
├── windows-16.wav
├── windows-17.wav
├── windows-18.wav
├── windows-19.wav
├── windows-2.wav
├── windows-20.wav
├── windows-21.wav
├── windows-3.wav
├── windows-4.wav
├── windows-5.wav
├── windows-6.wav
├── windows-7.wav
├── windows-8.wav
└── windows-9.wav
└── yarn.lock
/.appveyor.yml:
--------------------------------------------------------------------------------
1 | os: Visual Studio 2019
2 |
3 | platform:
4 | - x64
5 |
6 | branches:
7 | only:
8 | - master
9 |
10 | version: '{build}-{branch}'
11 |
12 | cache:
13 | - "node_modules"
14 | - "%LOCALAPPDATA%\\Yarn"
15 |
16 | test: off
17 |
18 | init:
19 | - cmd: echo 🚦 Verifying Build
20 | - ps: if ($env:OS -eq "Windows_NT" -And $env:DEPLOY_WINDOWS -eq "0") { $host.SetShouldExit(0) }
21 |
22 | install:
23 | - cmd: echo 🔧 Preparing Build Environment (Git)
24 | - cmd: git config --global core.autocrlf input
25 | - cmd: echo 🔧 Preparing Build Environment (Node.js)
26 | - ps: Update-NodeJsInstallation 14.8.0 x64
27 | - cmd: npm --global install yarn
28 |
29 | before_build:
30 | - cmd: echo 📥 Installing Dependencies
31 | - cmd: yarn install
32 |
33 | build_script:
34 | - cmd: echo 📦 Building Project
35 | - cmd: npm run build
36 |
37 | deploy_script:
38 | - cmd: echo 📮 Deploying Project
39 | - cmd: npm run deploy
40 |
41 | artifacts:
42 | - path: build\output\*.exe
43 |
44 | notifications:
45 | - provider: Webhook
46 | url: https://webhooks.gitter.im/e/65966d679f4ebeae4b3b
47 | method: GET
48 | on_build_success: true
49 | on_build_failure: true
50 | on_build_status_changed: true
51 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # http://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | indent_style = space
6 | indent_size = 4
7 | end_of_line = lf
8 | charset = utf-8
9 | trim_trailing_whitespace = true
10 | insert_final_newline = true
11 |
12 | [.eslintrc]
13 | indent_size = 2
14 |
15 | [*.json]
16 | indent_size = 2
17 |
18 | [*.ts]
19 | indent_size = 2
20 |
21 | [*.md]
22 | trim_trailing_whitespace = false
23 |
24 | [*.yml]
25 | indent_size = 2
26 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | resources/**
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## 🤷🏽♂️ Current Behaviour
4 |
8 | Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
9 |
10 | ## 🎯 Expected Behaviour
11 |
15 | At vero eos et accusam et justo duo dolores et ea rebum.
16 |
17 | ## 👟 Steps to Reproduce (S2R)
18 |
21 | 1. At vero eos et accusam,
22 | 2. justo duo dolores et ea rebum,
23 | 3. stet clita kasd gubergren,
24 | 3. no sea takimata sanctus est.
25 |
26 | ## 🏡 Environmental Context
27 |
30 | **App Version**
31 | v0.0.1
32 | **Installation Type**
33 | Setup
34 | **Operating System**
35 | Windows 10 Enterprise x64 (15042.00)
36 |
37 |
38 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## 📋 Description
4 |
7 | Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.
8 |
9 | ## 🗂 Type
10 |
13 | - [ ] 🍾 Feature
14 | - [ ] 🚨 Bugfix
15 | - [ ] 📒 Documentation
16 | - [ ] 👷 Internals
17 |
18 | ## 🔥 Severity
19 |
22 | - [ ] 💎 Non-Breaking Changes
23 | - [ ] 💔 Breaking Changes
24 |
25 | ## 🖥 Platforms
26 |
29 | - [x] 🍏 macOS
30 | - [x] 💾 Windows
31 | - [x] 🐧 Linux
32 |
33 | ## 🛃 Tests
34 |
37 | - [ ] My changes have been tested manually.
38 | - [ ] My changes are covered by automated testing methods.
39 |
40 | ## 👨🎓 Miscellaneous
41 |
44 | - [ ] My changes follow the style guide.
45 | - [ ] My changes require updates to the documentation.
46 |
47 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## BASELINE
2 | # macOS
3 | .DS_Store
4 |
5 | # Logs
6 | logs
7 | *.log
8 |
9 | # Temporary
10 | temp
11 | tmp
12 |
13 | # Cache
14 | .cache
15 | cache
16 | .sass-cache
17 |
18 | # JetBrains
19 | .idea
20 | *.sln.iml
21 |
22 | # VSCode
23 | .vscode
24 |
25 | # nodeJS
26 | node_modules
27 | jspm_packages
28 | bower_components
29 |
30 | # Compiled
31 | build
32 |
33 | # Generated documentation
34 | RELEASENOTES.md
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | ## BASELINE
2 | # macOS
3 | .DS_Store
4 |
5 | # Logs
6 | logs
7 | *.log
8 |
9 | # Temporary
10 | temp
11 | tmp
12 |
13 | # Cache
14 | .cache
15 | cache
16 | .sass-cache
17 |
18 | # JetBrains
19 | .idea
20 | *.sln.iml
21 |
22 | # VSCode
23 | .vscode
24 |
25 | # nodeJS
26 | node_modules
27 | jspm_packages
28 | bower_components
29 |
30 | # Compiled
31 | build
32 |
33 | # Generated documentation
34 | RELEASENOTES.md
35 |
36 |
37 | ## NPM
38 | # Runtime data
39 | pids
40 | *.pid
41 | *.seed
42 |
43 | # Directory for instrumented libs generated by jscoverage/JSCover
44 | lib-cov
45 |
46 | # Coverage directory used by tools like istanbul
47 | coverage
48 |
49 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
50 | .grunt
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | matrix:
2 | include:
3 | - os: linux
4 | dist: bionic
5 | group: edge
6 | compiler: clang
7 |
8 | language: c
9 |
10 | branches:
11 | only:
12 | - master
13 |
14 | env:
15 | global:
16 | - LC_ALL: "C.UTF-8"
17 | - LANG: "C.UTF-8"
18 | - PATH: "/snap/bin:${PATH}"
19 |
20 | cache:
21 | directories:
22 | - "./node_modules"
23 | - "${HOME}/.yarn-cache"
24 | - ${TRAVIS_BUILD_DIR}/snaps-cache
25 |
26 | addons:
27 | apt:
28 | packages:
29 | - bsdtar
30 | - g++-multilib
31 | - gcc-multilib
32 | - graphicsmagick
33 | - icnsutils
34 | - libopenjp2-tools
35 | - libxss-dev:i386
36 | - rpm
37 | - snapd
38 | - xz-utils
39 | snaps:
40 | - name: multipass
41 | confinement: classic
42 | channel: edge
43 | - name: snapcraft
44 | confinement: classic
45 | channel: edge
46 |
47 | before_install:
48 | - echo "🔧 Preparing Build Environment (Node.js)"
49 | - curl -o- https://raw.githubusercontent.com/creationix/nvm/master/install.sh | NVM_DIR="${HOME}"/.nvm sh
50 | - source "${HOME}"/.nvm/nvm.sh && nvm install 14.8.0 && nvm use 14.8.0
51 | - npm --global update npm
52 | - npm --global install yarn
53 |
54 | install:
55 | - echo "📥 Installing Dependencies"
56 | - yarn install
57 |
58 | script:
59 | - echo "📦 Building Project"
60 | - npm run build
61 |
62 | after_success:
63 | - echo "📮 Deploying Project"
64 | - npm run deploy
65 |
66 | notifications:
67 | webhooks:
68 | on_failure: always
69 | on_start: never
70 | on_success: change
71 | urls:
72 | - https://webhooks.gitter.im/e/24d905038aa07dda37df
73 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing
2 |
3 | ## Creating Issues
4 |
5 | To file bug reports and feature suggestions, use the ["Issues"](https://github.com/sidneys/pb-for-desktop/issues?q=is%3Aissue) page.
6 |
7 | 1. Make sure the issue has not been filed before.
8 | 1. Create a new issue by filling out [the issue form](https://github.com/sidneys/pb-for-desktop/issues/new).
9 | 1. If an issue requires more information and receives no further input, it will be closed.
10 |
11 |
12 | ## Creating Pull Requests
13 |
14 | To create pull requests, use the ["Pull Requests"](https://github.com/sidneys/pb-for-desktop/pulls) page.
15 |
16 | 1. [Create a new Issue](#creating-issues) describing the Bug or Feature you are addressing, to let others know you are working on it.
17 | 1. If a related issue exists, add a comment to let others know that you'll submit a pull request.
18 | 1. Create a new pull request by filling out [the pull request form](https://github.com/sidneys/pb-for-desktop/pulls/compare).
19 |
20 |
21 | ### Setup
22 |
23 | 1. Fork the repository.
24 | 1. Clone your fork.
25 | 1. Make a branch for your change.
26 | 1. Run `npm install`.
27 |
28 | ## Commit Message
29 |
30 | Use the AngularJS commit message format:
31 |
32 | ```
33 | type(scope): subject
34 | ```
35 |
36 | #### type
37 | - `feat` New feature
38 | - `fix` A bugfix
39 | - `refactor` Code changes which are neither bugfix nor feature
40 | - `docs`: Documentation changes
41 | - `test`: New tests or changes to existing tests
42 | - `chore`: Changes to tooling or library changes
43 |
44 | #### scope
45 | The context of the changes, e.g. `preferences-window` or `compiler`. Use consistent names.
46 |
47 | #### subject
48 | A **brief, yet descriptive** description of the changes, using the following format:
49 |
50 | - present tense
51 | - lowercase
52 | - no period at the end
53 | - describe what the commit does
54 | - reference to issues via their id – e.g. `(#1337)`
55 |
56 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2018 sidneys.github.io
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4 |
5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6 |
7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
8 |
--------------------------------------------------------------------------------
/app/fonts/ionicons.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/fonts/ionicons.eot
--------------------------------------------------------------------------------
/app/fonts/ionicons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/fonts/ionicons.ttf
--------------------------------------------------------------------------------
/app/fonts/ionicons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/fonts/ionicons.woff
--------------------------------------------------------------------------------
/app/html/main.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
Connecting
14 |
15 |
16 |
17 |
18 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/app/images/darwin-tray-icon-default-Template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/darwin-tray-icon-default-Template.png
--------------------------------------------------------------------------------
/app/images/darwin-tray-icon-default-Template@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/darwin-tray-icon-default-Template@2x.png
--------------------------------------------------------------------------------
/app/images/darwin-tray-icon-transparent-Template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/darwin-tray-icon-transparent-Template.png
--------------------------------------------------------------------------------
/app/images/darwin-tray-icon-transparent-Template@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/darwin-tray-icon-transparent-Template@2x.png
--------------------------------------------------------------------------------
/app/images/darwin-tray-icon-transparent-pause-Template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/darwin-tray-icon-transparent-pause-Template.png
--------------------------------------------------------------------------------
/app/images/darwin-tray-icon-transparent-pause-Template@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/darwin-tray-icon-transparent-pause-Template@2x.png
--------------------------------------------------------------------------------
/app/images/icon-home.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/images/linux-tray-icon-default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/linux-tray-icon-default.png
--------------------------------------------------------------------------------
/app/images/linux-tray-icon-transparent-pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/linux-tray-icon-transparent-pause.png
--------------------------------------------------------------------------------
/app/images/linux-tray-icon-transparent.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/linux-tray-icon-transparent.png
--------------------------------------------------------------------------------
/app/images/logo-text.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/logo-text.png
--------------------------------------------------------------------------------
/app/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/logo.png
--------------------------------------------------------------------------------
/app/images/tray-item-appAutoUpdate-Template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-appAutoUpdate-Template.png
--------------------------------------------------------------------------------
/app/images/tray-item-appAutoUpdate-Template@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-appAutoUpdate-Template@2x.png
--------------------------------------------------------------------------------
/app/images/tray-item-appLaunchOnStartup-Template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-appLaunchOnStartup-Template.png
--------------------------------------------------------------------------------
/app/images/tray-item-appLaunchOnStartup-Template@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-appLaunchOnStartup-Template@2x.png
--------------------------------------------------------------------------------
/app/images/tray-item-appReset-Template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-appReset-Template.png
--------------------------------------------------------------------------------
/app/images/tray-item-appReset-Template@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-appReset-Template@2x.png
--------------------------------------------------------------------------------
/app/images/tray-item-appRestart-Template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-appRestart-Template.png
--------------------------------------------------------------------------------
/app/images/tray-item-appRestart-Template@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-appRestart-Template@2x.png
--------------------------------------------------------------------------------
/app/images/tray-item-appShowBadgeCount-Template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-appShowBadgeCount-Template.png
--------------------------------------------------------------------------------
/app/images/tray-item-appShowBadgeCount-Template@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-appShowBadgeCount-Template@2x.png
--------------------------------------------------------------------------------
/app/images/tray-item-appTrayOnly-Template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-appTrayOnly-Template.png
--------------------------------------------------------------------------------
/app/images/tray-item-appTrayOnly-Template@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-appTrayOnly-Template@2x.png
--------------------------------------------------------------------------------
/app/images/tray-item-pushbulletClipboardEnabled-Template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-pushbulletClipboardEnabled-Template.png
--------------------------------------------------------------------------------
/app/images/tray-item-pushbulletClipboardEnabled-Template@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-pushbulletClipboardEnabled-Template@2x.png
--------------------------------------------------------------------------------
/app/images/tray-item-pushbulletHideNotificationBody-Template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-pushbulletHideNotificationBody-Template.png
--------------------------------------------------------------------------------
/app/images/tray-item-pushbulletHideNotificationBody-Template@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-pushbulletHideNotificationBody-Template@2x.png
--------------------------------------------------------------------------------
/app/images/tray-item-pushbulletNotificationFilterFilePath-Template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-pushbulletNotificationFilterFilePath-Template.png
--------------------------------------------------------------------------------
/app/images/tray-item-pushbulletNotificationFilterFilePath-Template@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-pushbulletNotificationFilterFilePath-Template@2x.png
--------------------------------------------------------------------------------
/app/images/tray-item-pushbulletRepeatRecentNotifications-Template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-pushbulletRepeatRecentNotifications-Template.png
--------------------------------------------------------------------------------
/app/images/tray-item-pushbulletRepeatRecentNotifications-Template@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-pushbulletRepeatRecentNotifications-Template@2x.png
--------------------------------------------------------------------------------
/app/images/tray-item-pushbulletSmsEnabled-Template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-pushbulletSmsEnabled-Template.png
--------------------------------------------------------------------------------
/app/images/tray-item-pushbulletSmsEnabled-Template@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-pushbulletSmsEnabled-Template@2x.png
--------------------------------------------------------------------------------
/app/images/tray-item-pushbulletSoundEnabled-Template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-pushbulletSoundEnabled-Template.png
--------------------------------------------------------------------------------
/app/images/tray-item-pushbulletSoundEnabled-Template@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-pushbulletSoundEnabled-Template@2x.png
--------------------------------------------------------------------------------
/app/images/tray-item-pushbulletSoundFilePath-Template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-pushbulletSoundFilePath-Template.png
--------------------------------------------------------------------------------
/app/images/tray-item-pushbulletSoundFilePath-Template@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-pushbulletSoundFilePath-Template@2x.png
--------------------------------------------------------------------------------
/app/images/tray-item-snooze-Template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-snooze-Template.png
--------------------------------------------------------------------------------
/app/images/tray-item-snooze-Template@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-snooze-Template@2x.png
--------------------------------------------------------------------------------
/app/images/tray-item-windowTopmost-Template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-windowTopmost-Template.png
--------------------------------------------------------------------------------
/app/images/tray-item-windowTopmost-Template@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/tray-item-windowTopmost-Template@2x.png
--------------------------------------------------------------------------------
/app/images/win32-tray-icon-default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/win32-tray-icon-default.png
--------------------------------------------------------------------------------
/app/images/win32-tray-icon-transparent-pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/win32-tray-icon-transparent-pause.png
--------------------------------------------------------------------------------
/app/images/win32-tray-icon-transparent.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/app/images/win32-tray-icon-transparent.png
--------------------------------------------------------------------------------
/app/scripts/app.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 |
4 | /**
5 | * Modules (Node.js)
6 | * @constant
7 | */
8 | const path = require('path')
9 |
10 | /**
11 | * Modules (Node.js)
12 | * @constant
13 | */
14 | const appRootPath = require('app-root-path')
15 | const appModulePath = require('app-module-path')
16 |
17 | /**
18 | * Module Configuration
19 | */
20 | appRootPath.setPath(path.resolve(path.join(__dirname), '..', '..'))
21 | appModulePath.addPath(appRootPath.path)
22 |
23 |
24 | /**
25 | * Initialize Main Process
26 | */
27 | require('app/scripts/main-process')
28 |
--------------------------------------------------------------------------------
/app/scripts/main-process/components/globals.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 |
4 | /**
5 | * Modules (Node.js)
6 | * @constant
7 | */
8 | const os = require('os')
9 | const path = require('path')
10 |
11 | /**
12 | * Modules (Third party)
13 | * @constant
14 | */
15 | const appRootPathDirectory = require('app-root-path').path
16 | const logger = require('@sidneys/logger')({ write: true })
17 | const electronSettings = require('electron-settings')
18 | const isDebug = require('@sidneys/is-env')('debug')
19 | const platformTools = require('@sidneys/platform-tools')
20 |
21 | /**
22 | * Modules (Local)
23 | * @constant
24 | */
25 | const packageJson = require(path.join(appRootPathDirectory, 'package.json'))
26 |
27 | /**
28 | * Global Application Manifest
29 | * @global
30 | * @constant
31 | * @namespace global.appManifest
32 | */
33 | global.appManifest = {
34 | appId: packageJson.appId || `com.${packageJson.author}.${packageJson.name}`,
35 | homepage: packageJson.homepage,
36 | name: packageJson.name,
37 | productName: packageJson.productName || packageJson.name,
38 | version: packageJson.version
39 | }
40 |
41 | /**
42 | * Global Application Filesystem
43 | * @global
44 | * @constant
45 | * @namespace global.appFilesystem
46 | */
47 | global.appFilesystem = {
48 | resources: process.resourcesPath,
49 | settings: path.join(path.dirname(electronSettings.file()), `${packageJson.name}.json`),
50 | sounds: path.join(appRootPathDirectory, 'sounds').replace('app.asar', 'app.asar.unpacked'),
51 | tempdir: (isDebug && process.defaultApp) ? path.join(appRootPathDirectory, 'temp') : os.tmpdir(),
52 | logs: logger.getConfiguration().logfile,
53 | icon: path.join(appRootPathDirectory, 'icons', platformTools.type, `icon${platformTools.iconImageExtension(platformTools.type)}`)
54 | }
55 |
56 | /**
57 | * @exports
58 | */
59 | module.exports = global
60 |
--------------------------------------------------------------------------------
/app/styles/elements/supplemental-menu.css:
--------------------------------------------------------------------------------
1 | /* ==========================================================================
2 | CONTROLS-EXTRA
3 | ========================================================================== */
4 |
5 | /* #supplemental-menu
6 | ========================================================================== */
7 |
8 | #supplemental-menu
9 | {
10 | z-index: var(--z-index-front);
11 | position: fixed;
12 | bottom: 20px;
13 | left: 20px;
14 | border-radius: 100px;
15 | background-color: var(--color-white-translucent-90);
16 | border: 1px solid var(--color-grey);
17 | padding: 12px;
18 | font-size: 16px;
19 | cursor: pointer;
20 | box-shadow: 0 0 1px 5px var(--color-black-translucent-10);
21 |
22 | transition: opacity 600ms;
23 | opacity: 0;
24 | pointer-events: none;
25 | }
26 |
27 | #supplemental-menu.show
28 | {
29 | opacity: 1;
30 | pointer-events: auto;
31 | }
32 |
33 | #supplemental-menu:hover
34 | {
35 | background-color: rgba(255, 255, 255, 1.0);
36 | }
37 |
38 | /* #supplemental-menu__button
39 | ========================================================================== */
40 |
41 | #supplemental-menu .supplemental-menu__button
42 | {
43 | transition: 0.25s;
44 | cursor: pointer;
45 | color: inherit;
46 | text-decoration: underline;
47 | }
48 |
49 | #supplemental-menu .supplemental-menu__button .title
50 | {
51 | font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
52 | overflow: hidden;
53 | white-space: nowrap;
54 | float: left;
55 | color: #95a5a6;
56 | height: 26px;
57 | line-height: 26px;
58 | width: 0;
59 | padding-left: 0;
60 | transition: all 0.25s ease-in-out;
61 | }
62 |
63 | #supplemental-menu:hover .supplemental-menu__button .title
64 | {
65 | width: 75px;
66 | padding-left: 10px;
67 | transition: all 0.25s ease-in-out;
68 | }
69 |
70 | #supplemental-menu .supplemental-menu__button .icon
71 | {
72 | float: right;
73 | color: #95a5a6;
74 | width: 26px;
75 | height: 26px;
76 | padding: 0;
77 | font-size: 28px;
78 | line-height: 26px;
79 | text-align: center;
80 | overflow: hidden;
81 | background-position: inherit;
82 | background-repeat: no-repeat;
83 | }
84 |
85 | #supplemental-menu .supplemental-menu__button.home .icon
86 | {
87 | background-image: url("../../images/icon-home.svg");
88 | }
89 |
--------------------------------------------------------------------------------
/app/styles/elements/titlebar.css:
--------------------------------------------------------------------------------
1 | /* ==========================================================================
2 | TITLEBAR
3 | ========================================================================== */
4 |
5 | /* ==========================================================================
6 | .titlebar
7 | ========================================================================== */
8 |
9 | .titlebar
10 | {
11 | z-index: var(--z-index-default);
12 | position: absolute;
13 | }
14 |
15 | html.darwin .titlebar
16 | {
17 | display: flex;
18 | }
19 |
20 | html.win32 .titlebar,
21 | html.linux .titlebar
22 | {
23 | display: none;
24 | }
25 |
26 | .titlebar.top
27 | {
28 | /* background-color: var(--color-accent); */
29 | background: linear-gradient(rgba(0, 0, 0, 0.4) 0%, rgba(0, 0, 0, 0) 100%), var(--color-accent);
30 | left: 0;
31 | right: 0;
32 | height: var(--margin-titlebar);
33 | }
34 |
35 | .titlebar.left, .titlebar.right
36 | {
37 | padding-top: var(--margin-titlebar);
38 | }
39 |
40 | .titlebar.right
41 | {
42 | right: 0;
43 | visibility: hidden;
44 | }
45 |
46 | .titlebar.draggable
47 | {
48 | -webkit-app-region: drag;
49 | }
50 |
51 | @media all and (max-width: 550px)
52 | {
53 | .titlebar.left
54 | {
55 | left: 64px;
56 | height: 64px;
57 | width: 100%;
58 | }
59 | }
60 |
61 | @media all and (min-width: 551px)
62 | {
63 | .titlebar
64 | {
65 | height: 80px;
66 | }
67 |
68 | .titlebar.left
69 | {
70 | left: 80px;
71 | width: 32%;
72 | }
73 | }
74 |
75 | @media all and (min-width: 900px)
76 | {
77 | .titlebar.right
78 | {
79 | visibility: visible;
80 | right: 80px;
81 | width: 10%;
82 | }
83 | }
84 |
85 | @media all and (min-width: 1200px)
86 | {
87 | .titlebar.right
88 | {
89 | width: 25%;
90 | }
91 | }
92 |
93 | @media all and (min-width: 2000px)
94 | {
95 | .titlebar.right
96 | {
97 | width: 30%;
98 | }
99 | }
--------------------------------------------------------------------------------
/app/styles/elements/views.css:
--------------------------------------------------------------------------------
1 | /* ==========================================================================
2 | WEBVIEW
3 | ========================================================================== */
4 |
5 | /* #webview
6 | ========================================================================== */
7 |
8 | #webview
9 | {
10 | bottom: 0;
11 | flex-direction: column;
12 | justify-content: center;
13 | left: 0;
14 | margin: 0;
15 | padding: 0;
16 | right: 0;
17 | position: absolute;
18 | }
19 |
20 | html.darwin #webview
21 | {
22 | top: var(--margin-titlebar);
23 | }
24 |
25 | html.win32 #webview,
26 | html.linux #webview
27 | {
28 | top: 0;
29 | }
--------------------------------------------------------------------------------
/app/styles/elements/window.css:
--------------------------------------------------------------------------------
1 | /* ==========================================================================
2 | WINDOW
3 | ========================================================================== */
4 |
5 | /* html
6 | ========================================================================== */
7 |
8 | html
9 | {
10 | font-size: 62.5%;
11 | -webkit-font-smoothing: antialiased;
12 | background-color: transparent;
13 | margin: 0;
14 | padding: 0;
15 | width: 100%;
16 | height: 100%;
17 | overflow: hidden;
18 | }
19 |
20 | /* body
21 | ========================================================================== */
22 |
23 | body
24 | {
25 | margin: 0;
26 | padding: 0;
27 | width: 100%;
28 | height: 100%;
29 | display: flex;
30 | flex-direction: column;
31 | overflow: hidden;
32 | }
33 |
--------------------------------------------------------------------------------
/app/styles/styles.css:
--------------------------------------------------------------------------------
1 | /* ==========================================================================
2 | VARIABLES
3 | ========================================================================== */
4 |
5 | @import url("./variables/colors.css");
6 | @import url("./variables/sizes.css");
7 | @import url('./variables/timing-functions.css');
8 | @import url("./variables/z-indices.css");
9 |
10 | /* ==========================================================================
11 | GLOBAL
12 | ========================================================================== */
13 |
14 | @import url("./global/animations.css");
15 |
16 | /* ==========================================================================
17 | ELEMENTS
18 | ========================================================================== */
19 |
20 | @import url("./elements/supplemental-menu.css");
21 | @import url("./elements/spinner.css");
22 | @import url("./elements/titlebar.css");
23 | @import url("./elements/views.css");
24 | @import url("./elements/window.css");
25 |
--------------------------------------------------------------------------------
/app/styles/variables/colors.css:
--------------------------------------------------------------------------------
1 | /* ==========================================================================
2 | COLORS
3 | ========================================================================== */
4 |
5 | :root
6 | {
7 | --color-accent: rgb(74, 179, 103);
8 | --color-accent-light: rgb(93, 187, 118);
9 | --color-accent-dark: rgb(30, 62, 8);
10 | --color-grey: rgb(206, 209, 213);
11 | --color-black-translucent-10: rgba(0, 0, 0, 0.10);
12 | --color-black-translucent-25: rgba(0, 0, 0, 0.25);
13 | --color-white: rgb(255, 255, 255);
14 | --color-white-translucent-25: rgba(255, 255, 255, 0.25);
15 | --color-white-translucent-90: rgba(255, 255, 255, 0.9);
16 | }
17 |
--------------------------------------------------------------------------------
/app/styles/variables/sizes.css:
--------------------------------------------------------------------------------
1 | /* ==========================================================================
2 | SIZES
3 | ========================================================================== */
4 |
5 | :root
6 | {
7 | --margin-titlebar: 20px;
8 | }
--------------------------------------------------------------------------------
/app/styles/variables/timing-functions.css:
--------------------------------------------------------------------------------
1 | /* ==========================================================================
2 | TIMING-FUNCTIONS
3 | ========================================================================== */
4 |
5 | :root
6 | {
7 | --timing-function-ease-in-out-quad: cubic-bezier(0.455, 0.03, 0.515, 0.955);
8 | }
9 |
--------------------------------------------------------------------------------
/app/styles/variables/z-indices.css:
--------------------------------------------------------------------------------
1 | /* ==========================================================================
2 | Z-INDICES
3 | ========================================================================== */
4 |
5 | :root
6 | {
7 | --z-index-default: 1;
8 | --z-index-front: 12;
9 | }
10 |
--------------------------------------------------------------------------------
/app/user-settings/filter-template.txt:
--------------------------------------------------------------------------------
1 | // PB FOR DESKTOP
2 | // Pushbullet Notification Filter
3 | //
4 | // USAGE:
5 | // - add a text entry to hide all notifications containing that text
6 | // - one entry per line
7 | // - entries starting with '//' are ignored
8 | // - case-insensitive
9 | // - supports regular expressions
10 | //
11 | // EXAMPLE:
12 | // politics
13 | // censorship
14 | // *mark*zuckerberg*
15 |
16 |
--------------------------------------------------------------------------------
/icons/linux/png/1024x1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/icons/linux/png/1024x1024.png
--------------------------------------------------------------------------------
/icons/linux/png/128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/icons/linux/png/128x128.png
--------------------------------------------------------------------------------
/icons/linux/png/16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/icons/linux/png/16x16.png
--------------------------------------------------------------------------------
/icons/linux/png/24x24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/icons/linux/png/24x24.png
--------------------------------------------------------------------------------
/icons/linux/png/256x256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/icons/linux/png/256x256.png
--------------------------------------------------------------------------------
/icons/linux/png/32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/icons/linux/png/32x32.png
--------------------------------------------------------------------------------
/icons/linux/png/48x48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/icons/linux/png/48x48.png
--------------------------------------------------------------------------------
/icons/linux/png/512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/icons/linux/png/512x512.png
--------------------------------------------------------------------------------
/icons/linux/png/64x64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/icons/linux/png/64x64.png
--------------------------------------------------------------------------------
/icons/linux/png/96x96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/icons/linux/png/96x96.png
--------------------------------------------------------------------------------
/icons/linux/png/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/icons/linux/png/icon.png
--------------------------------------------------------------------------------
/icons/mac/icon.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/icons/mac/icon.icns
--------------------------------------------------------------------------------
/icons/win/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/icons/win/icon.ico
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/action_android.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/action_android.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/action_cancel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/action_cancel.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/action_halt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/action_halt.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/action_overflow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/action_overflow.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/action_reply.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/action_reply.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/action_tick.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/action_tick.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/action_undo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/action_undo.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/action_web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/action_web.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/alert.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/alert.ogg
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/alive.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | var reportAlive = function() {
4 | checkClipboardPermissions(function(granted) {
5 | pb.trackPerDay({
6 | 'name': 'alive',
7 | 'signed_in': !!localStorage.apiKey,
8 | 'language': navigator.userLanguage || navigator.language,
9 | 'clipboard_sync': granted,
10 | 'e2e_enabled': pb.e2e.enabled
11 | })
12 | })
13 | }
14 |
15 | setTimeout(function() {
16 | reportAlive()
17 | }, 30 * 1000) // After 30 seconds, giving bootstrapping time to finish but not bound to events in case we're not signed in
18 |
19 | setInterval(function() {
20 | reportAlive()
21 | }, 18 * 60 * 60 * 1000) // Every 18 hours
22 |
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/analytics.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | var lastReported = {}
4 |
5 | pb.track = function(event) {
6 | if (!chrome.runtime.getManifest().key) {
7 | pb.log('Not reporting ' + event.name + ' from dev installation')
8 | console.log(event)
9 | return
10 | }
11 |
12 | if (!event || !event.name) {
13 | pb.log('Ignoring event without name')
14 | return
15 | }
16 |
17 | event.client_type = pb.browser
18 | event.name = event.client_type + '_' + event.name
19 | event.client_version = pb.version
20 | event.language = navigator.language
21 | event.browser_version = pb.browserVersion
22 | event.platform = navigator.platform
23 | event.client_id = localStorage.client_id
24 |
25 | if (pb.local.user) {
26 | event.user_iden = pb.local.user.iden
27 | }
28 |
29 | var xhr = new XMLHttpRequest()
30 | xhr.open('POST', pb.andrelytics, true)
31 | xhr.setRequestHeader('X-User-Agent', pb.userAgent)
32 | xhr.setRequestHeader('Content-type', 'application/json')
33 | xhr.setRequestHeader('Accept', 'application/json')
34 | xhr.onreadystatechange = function() {
35 | if (xhr.readyState === 4) {
36 | try {
37 | if (xhr.status === 200) {
38 | pb.log('Reported ' + event.name)
39 | } else {
40 | pb.log('Failed to report ' + event.name)
41 | }
42 | } catch (e) {
43 | }
44 | }
45 | }
46 | xhr.send(JSON.stringify(event))
47 | }
48 |
49 | pb.trackPerHour = function(event) {
50 | var hour = 60 * 60
51 | trackPer(hour, event)
52 | }
53 |
54 | pb.trackPerDay = function(event) {
55 | var frequency = 12 * 60 * 60
56 | trackPer(frequency, event)
57 | }
58 |
59 | var trackPer = function(time, event) {
60 | var key = event.name + 'LastReported'
61 | var now = Math.floor(Date.now() / 1000)
62 |
63 | if (!lastReported[key] || parseInt(lastReported[key]) + time < now) {
64 | lastReported[key] = now
65 | pb.track(event)
66 | } else if (!chrome.runtime.getManifest().key) {
67 | pb.log('Ignoring ' + event.name + ', last reported ' + (now - parseInt(lastReported[key])) + ' seconds ago')
68 | }
69 | }
70 |
71 | window.onerror = function(message, file, line, column, error) {
72 | pb.track({
73 | 'name': 'error',
74 | 'stack': error ? error.stack : file + ':' + line + ':' + column,
75 | 'message': message
76 | })
77 | }
78 |
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/awake.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | pb.awakeState = {}
4 | pb.awakeTimeout = 60 * 1000
5 |
6 | pb.setAwake = function(reason, awake) {
7 | pb.awakeState[reason] = {
8 | 'awake': awake,
9 | 'timestamp': Date.now()
10 | }
11 |
12 | updateAwake(false)
13 | }
14 |
15 | pb.fallAsleep = function() {
16 | Object.keys(pb.awakeState).forEach(function(key) {
17 | pb.awakeState[key].awake = false
18 | })
19 |
20 | setAwake(false)
21 | }
22 |
23 | var updateAwake = function(interval) {
24 | var awake = false
25 | Object.keys(pb.awakeState).forEach(function(key) {
26 | var state = pb.awakeState[key]
27 | if (state.awake) {
28 | var delta = Date.now() - state.timestamp
29 | if (delta < pb.awakeTimeout) {
30 | awake = true
31 | }
32 | }
33 | })
34 |
35 | if (!interval) {
36 | setAwake(awake)
37 | } else {
38 | pb.awake = awake
39 | }
40 | }
41 |
42 | var lastReportedAwake
43 | var setAwake = function(awake) {
44 | if (!pb.local.device) {
45 | return
46 | }
47 |
48 | if (pb.awake == awake) {
49 | if (awake && Date.now() - lastReportedAwake < (pb.awakeTimeout - (10 * 1000))) {
50 | return
51 | } else if (!awake) {
52 | return
53 | }
54 | }
55 |
56 | lastReportedAwake = Date.now()
57 |
58 | pb.awake = awake
59 | pb.dispatchEvent('locals_changed')
60 |
61 | pb.post(pb.api + '/v3/set-app-state', {
62 | 'guid': 'extension-' + localStorage.client_id,
63 | 'awake': awake
64 | }, function(response) {
65 | if (response) {
66 | pb.log('Set awake state to ' + awake)
67 | } else {
68 | pb.log('Failed to set awake state to ' + awake)
69 | }
70 | })
71 | }
72 |
73 | setInterval(function() {
74 | updateAwake(true)
75 | }, 10 * 1000)
76 |
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/bg_apple.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/bg_apple.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/bg_sam.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/bg_sam.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/bg_windows.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/bg_windows.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/big.css:
--------------------------------------------------------------------------------
1 | body {
2 | font-size: 15px;
3 | line-height: 22px;
4 | }
5 | #tabs {
6 | float: left;
7 | margin-top: 15px;
8 | }
9 |
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/bullet@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/bullet@2x.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/chat-ui.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | window.onresize = function() {
4 | updateBubbleMaxWidth()
5 | }
6 |
7 | var lastBubbleMaxWidth
8 | var updateBubbleMaxWidth = function() {
9 | var maxWidth
10 |
11 | var chatScrolls = document.getElementsByClassName('chat-scroll')
12 | for (var i = 0; i < chatScrolls.length; i++) {
13 | var chatScroll = chatScrolls[i]
14 | maxWidth = chatScroll.clientWidth != 0 ? chatScroll.clientWidth - 92 : maxWidth
15 | }
16 |
17 | if (maxWidth != lastBubbleMaxWidth) {
18 | lastBubbleMaxWidth = maxWidth
19 |
20 | for (var i = 0; i < document.styleSheets.length; i++) {
21 | var styleSheet = document.styleSheets[i]
22 | if (styleSheet.href && styleSheet.href.indexOf('chat-ui.css') != -1) {
23 | for (var j = 0; j < styleSheet.cssRules.length; j++) {
24 | var rule = styleSheet.cssRules[j]
25 | if (rule.selectorText == '.chat-bubble') {
26 | rule.style.maxWidth = maxWidth + 'px'
27 | return
28 | }
29 | }
30 | }
31 | }
32 | }
33 | }
34 |
35 | var chatEmptyState = function() {
36 | var img = document.createElement('img')
37 | img.src = 'bg_sam.png'
38 |
39 | var p = document.createElement('p')
40 | p.textContent = chrome.i18n.getMessage('no_pushes')
41 |
42 | var div = document.createElement('div')
43 | div.id = 'chat-empty-state'
44 | div.appendChild(img)
45 | div.appendChild(p)
46 |
47 | return div
48 | }
49 |
50 | var chatTimeDivider = function(timestamp) {
51 | var divider = document.createElement('div')
52 | divider.className = 'chat-time-divider'
53 |
54 | var now = moment()
55 | var time = moment(timestamp)
56 | if (now.diff(timestamp, 'hours') <= 24) {
57 | divider.textContent = time.calendar()
58 | } else {
59 | divider.textContent = time.format('dddd, MMMM Do') + ' at ' + time.format('h:mm a')
60 | }
61 |
62 | return divider
63 | }
64 |
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/chat-window.css:
--------------------------------------------------------------------------------
1 | html {
2 | background-color: white;
3 | height: 100%;
4 | }
5 | body {
6 | height:100%;
7 | overflow: hidden;
8 | }
9 | #top {
10 | position: absolute;
11 | top: 0;
12 | left: 0;
13 | right: 0;
14 | height: 50px;
15 | box-shadow: 0 0 4px rgba(0,0,0,.14), 0 4px 8px rgba(0,0,0,.28);
16 | background-color: #4ab367;
17 | }
18 | #picker-holder {
19 | position: relative;
20 | }
21 | .picker {
22 | width: 260px;
23 | }
24 | .picker-input {
25 | color: white !important;
26 | border-bottom: none !important;
27 | background-color: transparent;
28 | }
29 | .picker-overlay {
30 | background-color: transparent;
31 | }
32 | .picker-overlay .picker-option {
33 | color: white;
34 | font-weight: bold;
35 | background-color: #4ab367;
36 | width: 214px;
37 | }
38 | .picker-overlay:hover {
39 | background-color: #38a06d;
40 | }
41 | .picker-overlay:hover .picker-option {
42 | background-color: #38a06d;
43 | }
44 | #chat-holder {
45 | position: absolute;
46 | top: 50px;
47 | bottom: 67px;
48 | left: 0;
49 | right: 0;
50 | }
51 | .firefox #chat-holder {
52 | bottom: 83px;
53 | }
54 | #bottom {
55 | position: absolute;
56 | bottom: 0;
57 | width: 100%;
58 | border-top: 1px solid #d0d0d0;
59 | }
60 | #messaging-banner {
61 | position: absolute;
62 | top: 0;
63 | left: 0;
64 | right: 0;
65 | padding: 10px;
66 | }
67 |
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/chats.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | var activeChats = {}
4 |
5 | pb.addEventListener('signed_in', function() {
6 | activeChats = {}
7 | })
8 |
9 | pb.setActiveChat = function(tabId, info) {
10 | pb.log('Opened/updated chat ' + tabId + ', other=' + info.other + ', focused=' + info.focused)
11 |
12 | activeChats[tabId] = info
13 |
14 | if (info.mode == 'sms' && info.focused) {
15 | Object.keys(pb.notifier.active).forEach(function(key) {
16 | if (key.indexOf('sms') != -1) {
17 | pb.notifier.dismiss(key)
18 | }
19 | })
20 | }
21 | }
22 |
23 | pb.clearActiveChat = function(tabId) {
24 | if (activeChats[tabId]) {
25 | pb.log('Closed chat ' + tabId)
26 | }
27 | delete activeChats[tabId]
28 | }
29 |
30 | pb.openChat = function(mode, other) {
31 | var found = false
32 | Object.keys(activeChats).forEach(function(tabId) {
33 | var info = activeChats[tabId]
34 | if (!info) {
35 | return
36 | } else if (info.other != other) {
37 | return
38 | } else if (tabId == 'panel') {
39 | return
40 | }
41 |
42 | found = true
43 |
44 | focusChat(tabId)
45 | })
46 |
47 | if (!found) {
48 | openChat(mode, other)
49 | }
50 | }
51 |
52 | var openChat = function(mode, other) {
53 | var spec = {
54 | 'url': chrome.extension.getURL('chat-window.html') + '?guid=' + utils.guid() + '&mode=' + mode + '#' + other,
55 | 'width': 320,
56 | 'height': 420
57 | }
58 |
59 | spec.type = 'popup'
60 |
61 | chrome.windows.create(spec, function(created) {
62 | chrome.windows.update(created.id, { 'focused': true })
63 | })
64 |
65 | pb.track({
66 | 'name': 'chat_window_opened',
67 | 'mode': mode
68 | })
69 | }
70 |
71 | var focusChat = function(tabId) {
72 | chrome.tabs.get(parseInt(tabId), function(tab) {
73 | chrome.windows.update(tab.windowId, { 'focused': true })
74 | })
75 | }
76 |
77 | pb.findChat = function(other) {
78 | var chatTabInfo
79 | Object.keys(activeChats).forEach(function(tabId) {
80 | var info = activeChats[tabId]
81 | if (info.other == other) {
82 | if (chatTabInfo && chatTabInfo.focused && !info.focused) {
83 | // We've already found a focused chat, don't clobber with this not-focused one
84 | return
85 | }
86 |
87 | chatTabInfo = info
88 | }
89 | })
90 |
91 | return chatTabInfo
92 | }
93 |
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/chip_add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/chip_add.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/chip_browser.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/chip_browser.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/chip_channel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/chip_channel.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/chip_desktop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/chip_desktop.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/chip_everything.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/chip_everything.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/chip_group.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/chip_group.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/chip_home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/chip_home.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/chip_laptop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/chip_laptop.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/chip_other.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/chip_other.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/chip_person.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/chip_person.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/chip_phone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/chip_phone.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/chip_tablet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/chip_tablet.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/chip_watch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/chip_watch.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/chip_work.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/chip_work.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/control_popout.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/control_popout.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/control_settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/control_settings.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/dropzone.css:
--------------------------------------------------------------------------------
1 | .drop-zone {
2 | position: absolute;
3 | top: 0;
4 | bottom: 0;
5 | left: 0;
6 | right: 0;
7 | z-index: 190;
8 | background-color: rgba(255, 255, 255, 0.7);
9 | display: none;
10 | }
11 | .drop-zone-image {
12 | position: absolute;
13 | top: 0;
14 | bottom: 0;
15 | left: 0;
16 | right: 0;
17 | margin: auto;
18 | width: 100px;
19 | }
20 |
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/dropzone.js:
--------------------------------------------------------------------------------
1 | var dropZoneReady = false
2 | var setUpDropZone = function(containerId, dropZoneId, ondrop) {
3 | if (dropZoneReady) {
4 | return
5 | }
6 |
7 | var chatBar = document.getElementById(containerId)
8 | var dropZone = document.getElementById(dropZoneId)
9 |
10 | chatBar.addEventListener('dragenter', function(e) {
11 | e.stopPropagation()
12 | e.preventDefault()
13 | e.dataTransfer.dropEffect = 'copy'
14 |
15 | dropZone.style.display = 'block'
16 | })
17 |
18 | dropZone.addEventListener('dragover', function(e) {
19 | e.stopPropagation()
20 | e.preventDefault()
21 | })
22 |
23 | dropZone.addEventListener('dragleave', function(e) {
24 | if (e.toElement.id == dropZoneId) {
25 | e.stopPropagation()
26 | e.preventDefault()
27 |
28 | dropZone.style.display = 'none'
29 | }
30 | })
31 |
32 | dropZone.addEventListener('drop', function(e) {
33 | e.stopPropagation()
34 | e.preventDefault()
35 |
36 | dropZone.style.display = 'none'
37 |
38 | var files = e.dataTransfer.files
39 | for (var i = 0; i < files.length; i++) {
40 | var file = files[i]
41 | ondrop(file)
42 | }
43 | })
44 |
45 | document.addEventListener('paste', function(e) {
46 | var items = (e.clipboardData || e.originalEvent.clipboardData).items
47 | for (var i = 0; i < items.length; i++) {
48 | var item = items[i]
49 | if (item.kind == 'file') {
50 | var file = item.getAsFile()
51 | e.stopPropagation()
52 | e.preventDefault()
53 | ondrop(file)
54 | }
55 | }
56 | })
57 |
58 | dropZoneReady = true
59 | }
60 |
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/fake-notifications.css:
--------------------------------------------------------------------------------
1 | .fake-notification {
2 | position: relative;
3 | font-size: 15px;
4 | line-height: 20px;
5 | color: #333;
6 | background-color: white;
7 | white-space: pre-wrap;
8 | overflow: hidden;
9 | }
10 | .fake-notification-close {
11 | position: absolute;
12 | top: 0;
13 | right: 0;
14 | height: 28px;
15 | width: 28px;
16 | padding: 6px;
17 | cursor: pointer;
18 | }
19 | .fake-notification-close:hover {
20 | background-color: #f5f5f5;
21 | }
22 | .fake-notification-image-holder {
23 | position: absolute;
24 | top: 0;
25 | left: 0;
26 | height: 80px;
27 | width: 80px;
28 | background-color: #f7f7f7;
29 | }
30 | .fake-notification-image {
31 | display: block;
32 | max-height: 100%;
33 | max-width: 100%;
34 | position: absolute;
35 | top: 0;
36 | bottom: 0;
37 | left: 0;
38 | right: 0;
39 | margin: auto;
40 | }
41 | .fake-notification-text-holder {
42 | cursor: pointer;
43 | overflow: hidden;
44 | min-height: 80px;
45 | padding: 6px 26px 0 96px;
46 | }
47 | .fake-notification-text-holder div {
48 | margin-bottom: 4px;
49 | }
50 | .fake-notification-title {
51 | overflow: hidden;
52 | white-space: nowrap;
53 | text-overflow: ellipsis;
54 | }
55 | .fake-notification-message {
56 | font-size: 13px;
57 | line-height: 16px;
58 | overflow: hidden;
59 | max-height: 82px;
60 | }
61 | .fake-notification-context-message {
62 | color: #999;
63 | font-size: 13px;
64 | line-height: 16px;
65 | overflow: hidden;
66 | white-space: nowrap;
67 | text-overflow: ellipsis;
68 | }
69 | .fake-notification-button {
70 | overflow: hidden;
71 | cursor: default;
72 | padding: 0 16px;
73 | }
74 | .fake-notification-button:hover {
75 | background-color: #f5f5f5;
76 | }
77 | .fake-notification-button-icon {
78 | float: left;
79 | display: inline-block;
80 | margin: 12px 16px 12px 0;
81 | height: 16px;
82 | width: 16px;
83 | }
84 | .fake-notification-button span {
85 | font-size: 13px;
86 | line-height: 40px;
87 | }
88 | .fake-notification-bottom-border {
89 | border-bottom: 1px solid #eee;
90 | }
91 |
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/icon_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/icon_128.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/icon_16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/icon_16.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/icon_19.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/icon_19.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/icon_19_gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/icon_19_gray.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/icon_38.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/icon_38.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/icon_38_gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/icon_38_gray.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/icon_48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/icon_48.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/keyboard-shortcuts.js:
--------------------------------------------------------------------------------
1 | chrome.commands.onCommand.addListener(function(command) {
2 | utils.wrap(function() {
3 | pb.log('Receieved command ' + command)
4 |
5 | if (command == 'dismiss-most-recent-notification') {
6 | if (Object.keys(pb.notifier.active).length > 0) {
7 | var sortedKeys = [], key
8 | for (key in pb.notifier.active) {
9 | sortedKeys.push(key)
10 | }
11 |
12 | sortedKeys.sort(function(a, b) {
13 | return pb.notifier.active[b].created - pb.notifier.active[a].created
14 | })
15 |
16 | key = sortedKeys[0]
17 | var notification = pb.notifier.active[key]
18 |
19 | pb.log('Dismissing ' + key + ' by keyboard shortcut')
20 |
21 | pb.notifier.dismiss(key)
22 | }
23 | } else if (command == 'instant-push-current-tab') {
24 | if (!pb.local.user) {
25 | pb.log('Can\'t instant push, not signed in')
26 | return
27 | } else if (!pb.settings.allowInstantPush) {
28 | pb.log('Can\'t instant push, not enabled in options')
29 | return
30 | } else if (!pb.settings.instantPushIden) {
31 | pb.log('Can\'t instant push, no device set in options')
32 | return
33 | }
34 |
35 | chrome.tabs.query({ 'active': true, 'lastFocusedWindow': true }, function(tabs) {
36 | if (!tabs || tabs.length < 1) {
37 | return
38 | }
39 |
40 | var tab = tabs[0]
41 |
42 | var push = {
43 | 'type': 'link',
44 | 'title': tab.title,
45 | 'url': tab.url,
46 | }
47 |
48 | if (pb.settings.instantPushIden != '*') {
49 | push['device_iden'] = pb.settings.instantPushIden
50 | }
51 |
52 | pb.sendPush(push)
53 | })
54 | } else if (command == 'pop-out-panel') {
55 | pb.popOutPanel()
56 | }
57 |
58 | pb.track({
59 | 'name': 'keyboard_shortcut',
60 | 'command': command
61 | })
62 | })
63 | })
64 |
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/link.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/link.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/listeners.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | pb.addEventListener('signed_in', function(e) {
4 | pb.addEventListener('active', function(e) {
5 | if (pb.local.user) {
6 | pb.trackPerHour({
7 | 'name': 'active'
8 | })
9 | }
10 | })
11 | })
12 |
13 | pb.browserState = 'active'
14 |
15 | chrome.idle.onStateChanged.addListener(function(newState) {
16 | pb.log('Chrome state changed to ' + newState)
17 | pb.browserState = newState
18 |
19 | if (newState == 'locked') {
20 | pb.fallAsleep()
21 | }
22 | })
23 |
24 | chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
25 | if (message.type == 'loopback') {
26 | sendResponse({
27 | 'tabId': sender.tab.id
28 | })
29 | }
30 | })
31 |
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/lock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/lock.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/log-request.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | pb.addEventListener('signed_in', function(e) {
4 | pb.addEventListener('stream_message', function(e) {
5 | var message = e.detail
6 | if (message.type != 'push' || !message.push) {
7 | return
8 | }
9 |
10 | var push = message.push
11 | if (push.type != 'log_request') {
12 | return
13 | }
14 |
15 | pb.log('Log data requested')
16 |
17 | pb.post(pb.api + '/v2/error-report', {
18 | 'reply_to': pb.local.user.email,
19 | 'subject': 'Browser log file requested for ' + pb.local.user.email,
20 | 'body': '',
21 | 'data': pb.rollingLog.join('\n')
22 | }, function(response) {
23 | })
24 | })
25 | })
26 |
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/logo.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/logo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/logo@2x.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "background": {
3 | "scripts": [ "forge.min.js", "utils.js", "pb.js", "http.js", "analytics.js", "settings.js", "notifier.js", "listeners.js", "end-to-end.js", "alive.js", "awake.js", "connection.js", "local.js", "device.js", "mirroring.js", "files.js", "pushing.js", "chats.js", "pushes.js", "sms.js", "clipboard.js", "context-menu.js", "log-request.js", "pong.js", "keyboard-shortcuts.js", "main.js" ]
4 | },
5 | "browser_action": {
6 | "default_icon": {
7 | "19": "icon_19.png",
8 | "38": "icon_38.png"
9 | },
10 | "default_popup": "panel.html",
11 | "default_title": "Pushbullet"
12 | },
13 | "commands": {
14 | "dismiss-most-recent-notification": {
15 | "description": "Dismiss the most recent notification",
16 | "suggested_key": {
17 | "default": "Ctrl+Shift+K",
18 | "mac": "Command+Shift+K"
19 | }
20 | },
21 | "instant-push-current-tab": {
22 | "description": "Instantly push the current tab (configure in Options)",
23 | "suggested_key": {
24 | "default": "Ctrl+Shift+X",
25 | "mac": "Command+Shift+X"
26 | }
27 | },
28 | "pop-out-panel": {
29 | "description": "Pop out the push panel",
30 | "suggested_key": {
31 | "default": "Ctrl+Shift+E",
32 | "mac": "Command+Shift+E"
33 | }
34 | }
35 | },
36 | "default_locale": "en",
37 | "description": "Bringing together your devices, friends, and the things you care about.",
38 | "homepage_url": "https://www.pushbullet.com",
39 | "icons": {
40 | "128": "icon_128.png",
41 | "16": "icon_16.png",
42 | "48": "icon_48.png"
43 | },
44 | "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDKyWCIbMIUOs36oTwHVQjwECLV/PTT6Q9ZdSNv4ZpEa+HpUf9p+ymPICoIUru44Q4onwrBH+hllZi/p7SVhawEXW8YQDr4d7UINJIsHlvnDh9MdHGBRrZEDWGZVg84HEVqGdJ0n35G6BMrTYKOtZTj3uYa9FpUSrGLPW2sKSuTPQIDAQAB",
45 | "manifest_version": 2,
46 | "minimum_chrome_version": "31",
47 | "name": "Pushbullet",
48 | "optional_permissions": [ "background", "clipboardRead", "clipboardWrite" ],
49 | "options_page": "options.html",
50 | "permissions": [ "tabs", "activeTab", "contextMenus", "cookies", "notifications", "idle", "https://*/*", "http://*/*" ],
51 | "update_url": "https://clients2.google.com/service/update2/crx",
52 | "version": "336",
53 | "web_accessible_resources": [ "icon_19.png", "icon_48.png", "icon_128.png", "action_cancel.png", "action_halt.png", "action_undo.png", "action_reply.png", "action_overflow.png", "action_android.png", "action_tick.png", "action_web.png", "chip_person.png", "chip_group.png", "lock.png" ]
54 | }
55 |
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/more.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Pushbullet
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/more.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | window.onload = function() {
4 | var params = utils.getParams(location.search)
5 | var key = params['key']
6 |
7 | chrome.runtime.sendMessage({ 'type': 'more_get_options' }, function(options) {
8 | options.onclick = function() {
9 | chrome.runtime.sendMessage({ 'type': 'more_main_click' })
10 | }
11 |
12 | for (var i = 0; i < options.allButtons.length; i++) {
13 | (function(index) {
14 | var button = options.allButtons[index]
15 | button.onclick = function() {
16 | chrome.runtime.sendMessage({ 'type': 'more_button_click', 'index': index })
17 | }
18 | })(i)
19 | }
20 |
21 | document.body.appendChild(fakeNotifications.renderNotification(options))
22 |
23 | var resizeBy = document.body.offsetHeight - window.innerHeight
24 | if (resizeBy != 0) {
25 | window.resizeBy(0, resizeBy)
26 | }
27 | })
28 | }
29 |
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/page.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | var focused = true, onFocusChanged
4 | window.addEventListener('focus', function() {
5 | focused = true
6 |
7 | if (onFocusChanged) {
8 | onFocusChanged()
9 | }
10 |
11 | pb.dispatchEvent('active')
12 | })
13 | window.addEventListener('blur', function() {
14 | focused = false
15 |
16 | if (onFocusChanged) {
17 | onFocusChanged()
18 | }
19 | })
20 |
21 | var onload = function() {
22 | onload = null
23 | window.pb = chrome.extension.getBackgroundPage().pb
24 | ready()
25 | }
26 |
27 | var ready = function() {
28 | addBodyCssClasses()
29 |
30 | window.init()
31 |
32 | pb.dispatchEvent('active')
33 | }
34 |
35 | var addBodyCssClasses = function() {
36 | if (pb.local && pb.local.user) {
37 | document.body.classList.add('signed-in')
38 | } else {
39 | document.body.classList.add('not-signed-in')
40 | }
41 |
42 | if (pb.browser == 'chrome') {
43 | document.body.classList.add('chrome')
44 | } else {
45 | document.body.classList.add('not-chrome')
46 | }
47 |
48 | if (pb.browser == 'opera') {
49 | document.body.classList.add('opera')
50 | } else {
51 | document.body.classList.add('not-opera')
52 | }
53 |
54 | if (pb.browser == 'safari') {
55 | document.body.classList.add('safari')
56 | } else {
57 | document.body.classList.add('not-safari')
58 | }
59 |
60 | if (pb.browser == 'firefox') {
61 | document.body.classList.add('firefox')
62 | } else {
63 | document.body.classList.add('not-firefox')
64 | }
65 |
66 | if (navigator.platform.indexOf('MacIntel') != -1) {
67 | document.body.classList.add('mac')
68 | } else {
69 | document.body.classList.add('not-mac')
70 | }
71 |
72 | if (navigator.platform.toLowerCase().indexOf('win') != -1) {
73 | document.body.classList.add('windows')
74 | } else {
75 | document.body.classList.add('not-windows')
76 | }
77 | }
78 |
79 | document.addEventListener('DOMContentLoaded', onload)
80 |
81 | window.onerror = function(message, file, line, column, error) {
82 | pb.track({
83 | 'name': 'error',
84 | 'stack': error ? error.stack : file + ':' + line + ':' + column,
85 | 'message': message
86 | })
87 | }
88 |
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/panel-messaging-sms.css:
--------------------------------------------------------------------------------
1 | #sms-right {
2 | width: 100%;
3 | height: 100%;
4 | }
5 | #sms-compose-right {
6 | width: 100%;
7 | height: 100%;
8 | }
9 | #sms-right-top {
10 | position: absolute;
11 | top: 0;
12 | left: 0;
13 | right: 0;
14 | bottom: 0;
15 | }
16 | #sms-right-top.with-input {
17 | bottom: 62px;
18 | }
19 | .firefox #sms-right-top.with-input {
20 | bottom: 76px;
21 | }
22 | #sms-right-bottom {
23 | position: absolute;
24 | bottom: 0;
25 | left: 0;
26 | right: 0;
27 | border-top: 1px solid #d0d0d0;
28 | }
29 | #sms-send-holder {
30 | float: right;
31 | display: table;
32 | width: 52px;
33 | height: 60px;
34 | font-size: 36px;
35 | text-align: center;
36 | color: #5c6868;
37 | }
38 | #sms-send-holder i {
39 | display: table-cell;
40 | vertical-align: middle;
41 | }
42 | #sms-send-holder:hover {
43 | cursor: pointer;
44 | color: #4ab367;
45 | }
46 | #sms-input-holder {
47 | margin-left: 10px;
48 | }
49 | #sms-input {
50 | padding: 15px 0 10px 0;
51 | border: 0;
52 | }
53 | #sms-device {
54 | border: 0;
55 | }
56 | #sms-picker-holder {
57 | background-color: white;
58 | border-bottom: 1px solid #d0d0d0;
59 | }
60 | #sms-picker-holder .picker-label {
61 | width: 64px;
62 | border: none;
63 | }
64 | #sms-picker-holder .picker-overlay {
65 | width: 175px;
66 | }
67 | #sms-device-picker {
68 | width: 200px;
69 | }
70 | #sms-disclaimer-tooltip {
71 | display: none;
72 | position: absolute;
73 | top: 56px;
74 | left: 10px;
75 | width: 220px;
76 | font-size: 12px;
77 | z-index: 100;
78 | background-color: #5c6868;
79 | color: white;
80 | padding: 6px 10px;
81 | border-radius: 10px;
82 | }
83 | #compose-message-holder {
84 | margin-right: 52px;
85 | }
86 | #compose-message {
87 | border: none;
88 | height: 350px;
89 | }
90 | #compose-send-holder {
91 | float: right;
92 | display: table;
93 | width: 52px;
94 | height: 60px;
95 | font-size: 36px;
96 | text-align: center;
97 | color: #5c6868;
98 | }
99 | #compose-send-holder i {
100 | display: table-cell;
101 | vertical-align: middle;
102 | }
103 | #compose-send-holder:hover {
104 | cursor: pointer;
105 | color: #4ab367;
106 | }
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/panel-messaging.css:
--------------------------------------------------------------------------------
1 | .stream-row {
2 | position: relative;
3 | overflow: hidden;
4 | padding: 10px;
5 | }
6 | .stream-row:hover {
7 | cursor: pointer;
8 | background-color: #f9fbfb;
9 | }
10 | .stream-row.selected {
11 | background-color: white;
12 | padding: 9px 10px;
13 | border-top: 1px solid #d0d0d0;
14 | border-bottom: 1px solid #d0d0d0;
15 | }
16 | .stream-row-image {
17 | display: block;
18 | float: left;
19 | height: 36px;
20 | width: 36px;
21 | border-radius: 18px;
22 | }
23 | .stream-row-content {
24 | margin: 0 25px 0 46px;
25 | }
26 | .stream-row-content .secondary {
27 | color: #95a5a6;
28 | }
29 | .stream-row .pop-out-stream {
30 | position: absolute;
31 | top: 0;
32 | bottom: 0;
33 | right: 0;
34 | margin: auto;
35 | width: 27px;
36 | display: none;
37 | }
38 | .stream-row:hover .pop-out-stream {
39 | display: block;
40 | }
41 | .stream-row .pop-out-stream:hover {
42 | cursor: pointer;
43 | color: #4ab367;
44 | }
45 | .stream-row .pushfont-popout {
46 | text-align: center;
47 | font-size: 24px;
48 | line-height: 54px;
49 | margin-top: 2px;
50 | vertical-align: middle;
51 | }
52 |
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/panel-notifications.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | var setUpNotificationsContent = function() {
4 | notificationsChangedListener()
5 | pb.addEventListener('notifications_changed', notificationsChangedListener)
6 | }
7 |
8 | var tearDownNotificationsContent = function() {
9 | pb.removeEventListener('notifications_changed', notificationsChangedListener)
10 | }
11 |
12 | var notificationsChangedListener = function() {
13 | if (!window) {
14 | return
15 | }
16 |
17 | var count = Object.keys(pb.notifier.active).length
18 | var tab = document.getElementById('notifications-tab')
19 | if (count > 0) {
20 | tab.textContent = chrome.i18n.getMessage('notifications') + ' (' + count + ')'
21 | } else {
22 | tab.textContent = chrome.i18n.getMessage('notifications')
23 | }
24 |
25 | updateNotifications()
26 | }
27 |
28 | var updateNotifications = function() {
29 | var notificationsHolder = document.getElementById('notifications-holder')
30 | var emptyHolder = document.getElementById('notifications-empty')
31 |
32 | while (notificationsHolder.firstChild) {
33 | notificationsHolder.removeChild(notificationsHolder.firstChild)
34 | }
35 |
36 | var keys = Object.keys(pb.notifier.active)
37 | if (keys.length > 0) {
38 | notificationsHolder.style.display = 'block'
39 | emptyHolder.style.display = 'none'
40 |
41 | keys.forEach(function(key) {
42 | var options = pb.notifier.active[key]
43 |
44 | notificationsHolder.insertBefore(fakeNotifications.renderNotification(options, function() {
45 | clearNotification(options)
46 | }), notificationsHolder.firstChild)
47 | })
48 | } else {
49 | notificationsHolder.style.display = 'none'
50 | emptyHolder.style.display = 'block'
51 | }
52 | }
53 |
54 | var clearNotification = function(options) {
55 | chrome.extension.getBackgroundPage().chrome.notifications.clear(options.key, function(wasCleared) {
56 | delete pb.notifier.active[options.key]
57 | pb.dispatchEvent('notifications_changed')
58 | if (options.onclose) {
59 | options.onclose()
60 | }
61 | })
62 | }
63 |
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/picker.css:
--------------------------------------------------------------------------------
1 | .picker {
2 | position: absolute;
3 | display: none;
4 | z-index: 200;
5 | max-height: 174px;
6 | width: 300px;
7 | background-color: #ecf0f0;
8 | margin-left: 20px;
9 | overflow:auto;
10 | box-shadow: 0 2px 4px rgba(0, 0, 0, .25);
11 | }
12 | .picker-overlay {
13 | position: absolute;
14 | overflow: hidden;
15 | cursor: pointer;
16 | left: 0;
17 | top: 0;
18 | z-index: 40;
19 | width: 100%;
20 | font-size: 14px;
21 | background-color: white;
22 | }
23 | .picker-overlay:hover {
24 | background-color: #ecf0f0;
25 | }
26 | .picker-overlay .picker-option {
27 | padding: 0 15px 0 0;
28 | height: 30px;
29 | margin: 9px 15px 9px 10px;
30 | background-color: #ecf0f0;
31 | border-radius: 15px;
32 | float: left;
33 | }
34 | .picker-overlay:hover .picker-option {
35 | background-color: #ced1d5;
36 | }
37 | .firefox .picker-overlay .picker-option {
38 | min-width: 150px;
39 | }
40 | .picker-option {
41 | cursor: pointer;
42 | line-height: 30px;
43 | padding: 10px;
44 | }
45 | .picker-option:hover {
46 | background-color: #ced1d5;
47 | }
48 | .picker-option.selected {
49 | background-color: #ced1d5;
50 | }
51 | .picker-target-image {
52 | display: block;
53 | float: left;
54 | width: 30px;
55 | height: 30px;
56 | border-radius: 15px;
57 | overflow: hidden;
58 | margin-right: -5px;
59 | }
60 | .picker-target-text {
61 | white-space: nowrap;
62 | text-overflow: ellipsis;
63 | overflow: hidden;
64 | padding-left: 15px;
65 | }
66 |
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/pong.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | pb.addEventListener('signed_in', function(e) {
4 | pb.addEventListener('stream_message', function(e) {
5 | var message = e.detail
6 | if (message.type != 'push' || !message.push) {
7 | return
8 | }
9 |
10 | var push = message.push
11 | if (push.type != 'ping') {
12 | return
13 | }
14 |
15 | if (!pb.local.device) {
16 | return
17 | }
18 |
19 | pb.log('Sending pong')
20 |
21 | var pong = {
22 | 'type': 'pong',
23 | 'device_iden': pb.local.device.iden
24 | }
25 |
26 | pb.post(pb.api + '/v2/ephemerals', {
27 | 'type': 'push',
28 | 'push': pong
29 | }, function(response) {
30 | })
31 | })
32 | })
33 |
34 | var sendPing = function() {
35 | var ping = {
36 | 'type': 'ping'
37 | }
38 |
39 | pb.post(pb.api + '/v2/ephemerals', {
40 | 'type': 'push',
41 | 'push': ping
42 | }, function(response) {
43 | })
44 | }
45 |
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/pushfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/pushfont.woff
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/pushing.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | pb.pushQueue = []
4 | pb.failedPushes = []
5 | pb.successfulPushes = {}
6 |
7 | pb.sendPush = function(push) {
8 | pb.clearFailed(push)
9 |
10 | if (push.file) {
11 | pb.pushFile(push)
12 | return
13 | }
14 |
15 | push.source_device_iden = pb.local.device ? pb.local.device.iden : null
16 | push.guid = utils.guid()
17 |
18 | push.queued = true
19 | pb.pushQueue.push(push)
20 |
21 | pb.dispatchEvent('locals_changed')
22 |
23 | processPushQueue()
24 | }
25 |
26 | pb.clearFailed = function(push) {
27 | pb.failedPushes = pb.failedPushes.filter(function(failed) {
28 | if (push != failed) {
29 | return failed
30 | }
31 | })
32 |
33 | pb.dispatchEvent('locals_changed')
34 | }
35 |
36 | var processingPush = false
37 | var processPushQueue = function() {
38 | if (processingPush) {
39 | return
40 | }
41 |
42 | var push = pb.pushQueue[0]
43 | if (!push) {
44 | return
45 | }
46 |
47 | var real = {
48 | 'type': push.type,
49 | 'title': push.title,
50 | 'body': push.body,
51 | 'url': push.url,
52 | 'file_name': push.file_name,
53 | 'file_url': push.file_url,
54 | 'file_type': push.file_type,
55 | 'email': push.email,
56 | 'device_iden': push.device_iden,
57 | 'channel_tag': push.channel_tag,
58 | 'client_iden': push.client_iden,
59 | 'source_device_iden': push.source_device_iden,
60 | 'guid': push.guid
61 | }
62 |
63 | processingPush = true
64 |
65 | pb.post(pb.api + '/v2/pushes', real, function(response) {
66 | pb.pushQueue.shift()
67 |
68 | processingPush = false
69 |
70 | if (response) {
71 | pb.successfulPushes[push.guid] = push
72 |
73 | if (response.iden) {
74 | pb.local.pushes[response.iden] = response
75 | }
76 | } else {
77 | push.failed = true
78 | pb.failedPushes.push(push)
79 | }
80 |
81 | pb.dispatchEvent('locals_changed')
82 |
83 | processPushQueue()
84 | })
85 |
86 | pb.dispatchEvent('active')
87 | }
88 |
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/quick-reply.css:
--------------------------------------------------------------------------------
1 | #header {
2 | padding: 15px;
3 | }
4 | #image-holder {
5 | float: left;
6 | background-color: white;
7 | border-radius: 34px;
8 | padding: 2px;
9 | }
10 | #image {
11 | display: block;
12 | height: 64px;
13 | width: 64px;
14 | border-radius: 32px;
15 | }
16 | #text-holder {
17 | margin-left: 90px;
18 | }
19 | #title {
20 | font-size: 19px;
21 | line-height: 36px;
22 | overflow: hidden;
23 | white-space: nowrap;
24 | text-overflow: ellipsis;
25 | }
26 | #desc {
27 | opacity: 0.5;
28 | overflow: hidden;
29 | white-space: nowrap;
30 | text-overflow: ellipsis;
31 | }
32 | #content {
33 | background-color: #ecf0f0;
34 | }
35 | #banner{
36 | padding: 15px;
37 | }
38 | #message {
39 | white-space: pre-wrap;
40 | min-height: 120px;
41 | padding: 15px;
42 | }
43 | #reply {
44 | display: block;
45 | height: 100px;
46 | width: 100%;
47 | padding: 15px;
48 | border: none;
49 | resize: none;
50 | outline: none;
51 | }
52 | #sms-counter {
53 | padding: 15px;
54 | }
55 |
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/quick-reply.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Quick-Reply
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
22 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/ribbon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/ribbon.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/track_chat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/track_chat.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/track_files.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/track_files.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/track_links.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/track_links.png
--------------------------------------------------------------------------------
/resources/extensions/chrome/336_0/upload.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/chrome/336_0/upload.png
--------------------------------------------------------------------------------
/resources/extensions/safari/Icon-64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/Icon-64.png
--------------------------------------------------------------------------------
/resources/extensions/safari/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Author
6 | Pushbullet Inc
7 | Builder Version
8 | 11601.3.9
9 | CFBundleDisplayName
10 | Pushbullet
11 | CFBundleIdentifier
12 | com.pushbullet.safari
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleShortVersionString
16 | 312.0
17 | CFBundleVersion
18 | 312
19 | Chrome
20 |
21 | Global Page
22 | global.html
23 | Popovers
24 |
25 |
26 | Filename
27 | panel.html
28 | Height
29 | 456
30 | Identifier
31 | toolbar-popover
32 | Width
33 | 640
34 |
35 |
36 | Toolbar Items
37 |
38 |
39 | Identifier
40 | toolbar-button
41 | Image
42 | safari_logo.png
43 | Label
44 | Pushbullet
45 | Popover
46 | toolbar-popover
47 |
48 |
49 |
50 | Content
51 |
52 | Scripts
53 |
54 | End
55 |
56 | end-script.js
57 |
58 |
59 | Whitelist
60 |
61 | http://*/*
62 | https://*/*
63 |
64 |
65 | Description
66 | Easily share links and more from Safari to your phone or tablet.
67 | DeveloperIdentifier
68 | EA43GFGP5M
69 | ExtensionInfoDictionaryVersion
70 | 1.0
71 | Permissions
72 |
73 | Website Access
74 |
75 | Include Secure Pages
76 |
77 | Level
78 | All
79 |
80 |
81 | Update Manifest URL
82 | https://update.pushbullet.com/Safari.plist
83 | Website
84 | https://www.pushbullet.com
85 |
86 |
87 |
--------------------------------------------------------------------------------
/resources/extensions/safari/Safari.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Extension Updates
6 |
7 |
8 | CFBundleIdentifier
9 | com.pushbullet.safari
10 | Developer Identifier
11 | EA43GFGP5M
12 | CFBundleVersion
13 | 312
14 | CFBundleShortVersionString
15 | 312.0
16 | URL
17 | https://update.pushbullet.com/extension.safariextz
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/resources/extensions/safari/action_android.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/action_android.png
--------------------------------------------------------------------------------
/resources/extensions/safari/action_cancel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/action_cancel.png
--------------------------------------------------------------------------------
/resources/extensions/safari/action_halt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/action_halt.png
--------------------------------------------------------------------------------
/resources/extensions/safari/action_overflow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/action_overflow.png
--------------------------------------------------------------------------------
/resources/extensions/safari/action_reply.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/action_reply.png
--------------------------------------------------------------------------------
/resources/extensions/safari/action_tick.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/action_tick.png
--------------------------------------------------------------------------------
/resources/extensions/safari/action_undo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/action_undo.png
--------------------------------------------------------------------------------
/resources/extensions/safari/action_web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/action_web.png
--------------------------------------------------------------------------------
/resources/extensions/safari/alert.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/alert.ogg
--------------------------------------------------------------------------------
/resources/extensions/safari/alive.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var reportAlive = function() {
4 | if (window.chrome) {
5 | checkClipboardPermissions(function(granted) {
6 | pb.trackPerDay({
7 | 'name': 'alive',
8 | 'signed_in': !!localStorage.apiKey,
9 | 'language': text.languageCode,
10 | 'clipboard_sync': granted,
11 | 'e2e_enabled': pb.e2e.enabled
12 | });
13 | });
14 | } else {
15 | pb.trackPerDay({
16 | 'name': 'alive',
17 | 'signed_in': !!localStorage.apiKey,
18 | 'language': text.languageCode,
19 | 'e2e_enabled': pb.e2e.enabled
20 | });
21 | }
22 | };
23 |
24 | setTimeout(function() {
25 | reportAlive();
26 | }, 30 * 1000); // After 30 seconds, giving bootstrapping time to finish but not bound to events in case we're not signed in
27 |
28 | setInterval(function() {
29 | reportAlive();
30 | }, 18 * 60 * 60 * 1000); // Every 18 hours
31 |
--------------------------------------------------------------------------------
/resources/extensions/safari/analytics.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | pb.track = function(event) {
4 | if (window.chrome && !chrome.runtime.getManifest().key) {
5 | pb.devtools('Not reporting ' + event.name + ' from dev installation');
6 | console.devtools(event);
7 | return;
8 | }
9 |
10 | if (!event || !event.name) {
11 | pb.devtools('Ignoring event without name');
12 | return;
13 | }
14 |
15 | event.client_type = window.chrome ? (pb.isOpera ? 'opera' : 'chrome') : (window.safari ? 'safari' : 'firefox');
16 | event.name = event.client_type + '_' + event.name;
17 | event.client_version = pb.version;
18 | event.language = navigator.language;
19 | event.browser_version = pb.browserVersion;
20 | event.platform = navigator.platform;
21 | event.client_id = localStorage.client_id;
22 |
23 | if (pb.local.user) {
24 | event.user_iden = pb.local.user.iden;
25 | }
26 |
27 | var xhr = new XMLHttpRequest();
28 | xhr.open('POST', pb.andrelytics, true);
29 | xhr.setRequestHeader('X-User-Agent', pb.userAgent);
30 | xhr.setRequestHeader('Content-type', 'application/json');
31 | xhr.setRequestHeader('Accept', 'application/json');
32 | xhr.onreadystatechange = function() {
33 | if (xhr.readyState === 4) {
34 | try {
35 | if (xhr.status === 200) {
36 | pb.devtools('Reported ' + event.name);
37 | } else {
38 | pb.devtools('Failed to report ' + event.name);
39 | }
40 | } catch (e) {
41 | }
42 | }
43 | };
44 | xhr.send(JSON.stringify(event));
45 | };
46 |
47 | pb.trackPerHour = function(event) {
48 | var hour = 60 * 60;
49 | trackPer(hour, event);
50 | };
51 |
52 | pb.trackPerDay = function(event) {
53 | var frequency = 12 * 60 * 60;
54 | trackPer(frequency, event);
55 | };
56 |
57 | var trackPer = function(time, event) {
58 | var key = event.name + 'LastReported';
59 | var now = Math.floor(Date.now() / 1000);
60 |
61 | if (!localStorage[key] || parseInt(localStorage[key]) + time < now) {
62 | localStorage[key] = now;
63 | pb.track(event);
64 | } else if (window.chrome && !chrome.runtime.getManifest().key) {
65 | pb.devtools('Ignoring ' + event.name + ', last reported ' + (now - parseInt(localStorage[key])) + ' seconds ago');
66 | }
67 | };
68 |
69 | window.onerror = function(message, file, line, column, error) {
70 | pb.track({
71 | 'name': 'error',
72 | 'stack': error ? error.stack : file + ':' + line + ':' + column,
73 | 'message': message
74 | });
75 | };
76 |
--------------------------------------------------------------------------------
/resources/extensions/safari/awake.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | pb.awakeState = {};
4 | pb.awakeTimeout = 60 * 1000;
5 |
6 | pb.setAwake = function(reason, awake) {
7 | pb.awakeState[reason] = {
8 | 'awake': awake,
9 | 'timestamp': Date.now()
10 | };
11 |
12 | updateAwake(false);
13 | };
14 |
15 | pb.fallAsleep = function() {
16 | Object.keys(pb.awakeState).forEach(function(key) {
17 | pb.awakeState[key].awake = false;
18 | });
19 |
20 | setAwake(false);
21 | };
22 |
23 | var updateAwake = function(interval) {
24 | var awake = false;
25 | Object.keys(pb.awakeState).forEach(function(key) {
26 | var state = pb.awakeState[key];
27 | if (state.awake) {
28 | var delta = Date.now() - state.timestamp;
29 | if (delta < pb.awakeTimeout) {
30 | awake = true;
31 | }
32 | }
33 | });
34 |
35 | if (!interval) {
36 | setAwake(awake);
37 | } else {
38 | pb.awake = awake;
39 | }
40 | };
41 |
42 | var lastReportedAwake;
43 | var setAwake = function(awake) {
44 | if (!pb.local.device) {
45 | return;
46 | }
47 |
48 | if (pb.awake == awake && Date.now() - lastReportedAwake < (pb.awakeTimeout - (10 * 1000))) {
49 | return;
50 | }
51 |
52 | lastReportedAwake = Date.now();
53 |
54 | pb.awake = awake;
55 | pb.dispatchEvent('locals_changed');
56 |
57 | pb.post(pb.api + '/v3/set-app-state', {
58 | 'guid': 'extension-' + localStorage.client_id,
59 | 'awake': awake
60 | }, function(response) {
61 | if (response) {
62 | pb.devtools('Set awake state to ' + awake);
63 | } else {
64 | pb.devtools('Failed to set awake state to ' + awake);
65 | }
66 | });
67 | };
68 |
69 | setInterval(function() {
70 | updateAwake(true);
71 | }, 10 * 1000);
72 |
--------------------------------------------------------------------------------
/resources/extensions/safari/bg_apple.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/bg_apple.png
--------------------------------------------------------------------------------
/resources/extensions/safari/bg_sam.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/bg_sam.png
--------------------------------------------------------------------------------
/resources/extensions/safari/bg_windows.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/bg_windows.png
--------------------------------------------------------------------------------
/resources/extensions/safari/big.css:
--------------------------------------------------------------------------------
1 | body {
2 | font-size: 15px;
3 | line-height: 22px;
4 | }
5 | #tabs {
6 | float: left;
7 | margin-top: 15px;
8 | }
9 |
--------------------------------------------------------------------------------
/resources/extensions/safari/bullet@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/bullet@2x.png
--------------------------------------------------------------------------------
/resources/extensions/safari/changelog.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Pushbullet Changelog
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
26 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/resources/extensions/safari/changelog.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var textMappings = {
4 | 'changelog-tab': 'changelog_tab'
5 | };
6 |
7 | window.init = function() {
8 | Object.keys(textMappings).forEach(function(key) {
9 | document.getElementById(key).textContent = text.get(textMappings[key]);
10 | });
11 |
12 | document.getElementById('logo-link').href = pb.www;
13 |
14 | pb.track({
15 | 'name': 'goto',
16 | 'url': '/changelog'
17 | });
18 | };
19 |
--------------------------------------------------------------------------------
/resources/extensions/safari/chat-ui.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | if (!self.port && !window.chrome && !window.safari) {
4 | throw new Error('Shouldn\'t be here');
5 | }
6 |
7 | window.onresize = function() {
8 | updateBubbleMaxWidth();
9 | };
10 |
11 | var lastBubbleMaxWidth;
12 | var updateBubbleMaxWidth = function() {
13 | var maxWidth;
14 |
15 | var chatScrolls = document.getElementsByClassName('chat-scroll');
16 | for (var i = 0; i < chatScrolls.length; i++) {
17 | var chatScroll = chatScrolls[i];
18 | maxWidth = chatScroll.clientWidth != 0 ? chatScroll.clientWidth - 72 : maxWidth;
19 | }
20 |
21 | if (maxWidth != lastBubbleMaxWidth) {
22 | lastBubbleMaxWidth = maxWidth;
23 |
24 | for (var i = 0; i < document.styleSheets.length; i++) {
25 | var styleSheet = document.styleSheets[i];
26 | if (styleSheet.href && styleSheet.href.indexOf('chat-ui.css') != -1) {
27 | for (var j = 0; j < styleSheet.cssRules.length; j++) {
28 | var rule = styleSheet.cssRules[j];
29 | if (rule.selectorText == '.chat-bubble') {
30 | rule.style.maxWidth = maxWidth + 'px';
31 | return;
32 | }
33 | }
34 | }
35 | }
36 | }
37 | };
38 |
39 | var chatEmptyState = function() {
40 | var img = document.createElement('img');
41 | img.src = 'bg_sam.png';
42 |
43 | var p = document.createElement('p');
44 | p.textContent = text.get('no_pushes');
45 |
46 | var div = document.createElement('div');
47 | div.id = 'chat-empty-state';
48 | div.appendChild(img);
49 | div.appendChild(p);
50 |
51 | return div;
52 | };
53 |
54 | var chatTimeDivider = function(timestamp) {
55 | var divider = document.createElement('div');
56 | divider.className = 'chat-time-divider';
57 |
58 | var now = moment();
59 | var time = moment(timestamp);
60 | if (now.diff(timestamp, 'hours') <= 24) {
61 | divider.textContent = time.calendar();
62 | } else {
63 | divider.textContent = time.format('dddd, MMMM Do') + ' at ' + time.format('h:mm a');
64 | }
65 |
66 | return divider;
67 | };
68 |
--------------------------------------------------------------------------------
/resources/extensions/safari/chat-window.css:
--------------------------------------------------------------------------------
1 | html {
2 | background-color: white;
3 | height: 100%;
4 | }
5 | body {
6 | height:100%;
7 | overflow: hidden;
8 | }
9 | #top {
10 | position: absolute;
11 | top: 0;
12 | left: 0;
13 | right: 0;
14 | height: 50px;
15 | box-shadow: 0 0 4px rgba(0,0,0,.14), 0 4px 8px rgba(0,0,0,.28);
16 | background-color: #4ab367;
17 | }
18 | #picker-holder {
19 | position: relative;
20 | }
21 | .picker {
22 | width: 260px;
23 | }
24 | .picker-input {
25 | color: white !important;
26 | border-bottom: none !important;
27 | background-color: transparent;
28 | }
29 | .picker-overlay {
30 | background-color: transparent;
31 | }
32 | .picker-overlay .picker-option {
33 | color: white;
34 | font-weight: bold;
35 | background-color: #4ab367;
36 | width: 214px;
37 | }
38 | .picker-overlay:hover {
39 | background-color: #38a06d;
40 | }
41 | .picker-overlay:hover .picker-option {
42 | background-color: #38a06d;
43 | }
44 | #chat-holder {
45 | position: absolute;
46 | top: 50px;
47 | bottom: 67px;
48 | left: 0;
49 | right: 0;
50 | }
51 | .firefox #chat-holder {
52 | bottom: 83px;
53 | }
54 | #bottom {
55 | position: absolute;
56 | bottom: 0;
57 | width: 100%;
58 | border-top: 1px solid #d0d0d0;
59 | }
60 | #messaging-banner {
61 | position: absolute;
62 | top: 0;
63 | left: 0;
64 | right: 0;
65 | padding: 10px;
66 | }
67 |
--------------------------------------------------------------------------------
/resources/extensions/safari/chip_add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/chip_add.png
--------------------------------------------------------------------------------
/resources/extensions/safari/chip_browser.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/chip_browser.png
--------------------------------------------------------------------------------
/resources/extensions/safari/chip_channel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/chip_channel.png
--------------------------------------------------------------------------------
/resources/extensions/safari/chip_desktop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/chip_desktop.png
--------------------------------------------------------------------------------
/resources/extensions/safari/chip_everything.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/chip_everything.png
--------------------------------------------------------------------------------
/resources/extensions/safari/chip_group.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/chip_group.png
--------------------------------------------------------------------------------
/resources/extensions/safari/chip_home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/chip_home.png
--------------------------------------------------------------------------------
/resources/extensions/safari/chip_laptop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/chip_laptop.png
--------------------------------------------------------------------------------
/resources/extensions/safari/chip_other.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/chip_other.png
--------------------------------------------------------------------------------
/resources/extensions/safari/chip_person.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/chip_person.png
--------------------------------------------------------------------------------
/resources/extensions/safari/chip_phone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/chip_phone.png
--------------------------------------------------------------------------------
/resources/extensions/safari/chip_tablet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/chip_tablet.png
--------------------------------------------------------------------------------
/resources/extensions/safari/chip_watch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/chip_watch.png
--------------------------------------------------------------------------------
/resources/extensions/safari/chip_work.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/chip_work.png
--------------------------------------------------------------------------------
/resources/extensions/safari/control_popout.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/control_popout.png
--------------------------------------------------------------------------------
/resources/extensions/safari/control_settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/control_settings.png
--------------------------------------------------------------------------------
/resources/extensions/safari/dropzone.css:
--------------------------------------------------------------------------------
1 | .drop-zone {
2 | position: absolute;
3 | top: 0;
4 | bottom: 0;
5 | left: 0;
6 | right: 0;
7 | z-index: 190;
8 | background-color: rgba(255, 255, 255, 0.7);
9 | display: none;
10 | }
11 | .drop-zone-image {
12 | position: absolute;
13 | top: 0;
14 | bottom: 0;
15 | left: 0;
16 | right: 0;
17 | margin: auto;
18 | width: 100px;
19 | }
20 |
--------------------------------------------------------------------------------
/resources/extensions/safari/dropzone.js:
--------------------------------------------------------------------------------
1 | var dropZoneReady = false;
2 | var setUpDropZone = function(containerId, dropZoneId, ondrop) {
3 | if (dropZoneReady) {
4 | return;
5 | }
6 |
7 | var chatBar = document.getElementById(containerId);
8 | var dropZone = document.getElementById(dropZoneId);
9 |
10 | chatBar.addEventListener('dragenter', function(e) {
11 | e.stopPropagation();
12 | e.preventDefault();
13 | e.dataTransfer.dropEffect = 'copy';
14 |
15 | dropZone.style.display = 'block';
16 | });
17 |
18 | dropZone.addEventListener('dragover', function(e) {
19 | e.stopPropagation();
20 | e.preventDefault();
21 | });
22 |
23 | dropZone.addEventListener('dragleave', function(e) {
24 | if (e.toElement.id == dropZoneId) {
25 | e.stopPropagation();
26 | e.preventDefault();
27 |
28 | dropZone.style.display = 'none';
29 | }
30 | });
31 |
32 | dropZone.addEventListener('drop', function(e) {
33 | e.stopPropagation();
34 | e.preventDefault();
35 |
36 | dropZone.style.display = 'none';
37 |
38 | var files = e.dataTransfer.files;
39 | for (var i = 0; i < files.length; i++) {
40 | var file = files[i];
41 | ondrop(file);
42 | }
43 | });
44 |
45 | document.addEventListener('paste', function(e) {
46 | var items = (e.clipboardData || e.originalEvent.clipboardData).items;
47 | for (var i = 0; i < items.length; i++) {
48 | var item = items[i];
49 | if (item.kind == 'file') {
50 | var file = item.getAsFile();
51 | e.stopPropagation();
52 | e.preventDefault();
53 | ondrop(file);
54 | }
55 | }
56 | });
57 |
58 | dropZoneReady = true;
59 | };
60 |
--------------------------------------------------------------------------------
/resources/extensions/safari/end-script.js:
--------------------------------------------------------------------------------
1 | document.addEventListener('contextmenu', function(e) {
2 | var userInfo = {
3 | 'selection': window.getSelection().toString(),
4 | 'tagName': e.target.tagName
5 | };
6 |
7 | if (e.target.tagName == 'IMG') {
8 | userInfo.src = e.target.src;
9 | } else if (e.target.tagName == 'A') {
10 | userInfo.url = e.target.href;
11 | } else {
12 | userInfo.title = window.document.title;
13 | userInfo.url = window.location.href;
14 | }
15 |
16 | safari.self.tab.setContextMenuEventUserInfo(e, userInfo);
17 | }, false);
18 |
19 | if (window.location.href.indexOf('https://www.pushbullet.com') == 0) {
20 | setInterval(function() {
21 | if (localStorage.desktop) {
22 | var apiKey = localStorage.desktop.slice(28,-1);
23 | safari.self.tab.dispatchMessage('api_key', { 'apiKey': apiKey });
24 | }
25 | }, 1000);
26 | }
27 |
--------------------------------------------------------------------------------
/resources/extensions/safari/events.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | pb.eventListeners = [];
4 |
5 | pb.addEventListener = function(eventName, listener) {
6 | pb.eventListeners.push({ 'eventName': eventName, 'listener': listener });
7 | window.addEventListener(eventName, listener, false);
8 | };
9 |
10 | pb.removeEventListener = function(eventName, listener) {
11 | var eventListeners = [];
12 |
13 | pb.eventListeners.forEach(function(eventListener) {
14 | if (eventListener.eventName == eventName && eventListener.listener == listener) {
15 | window.removeEventListener(eventName, listener);
16 | } else {
17 | eventListeners.push(eventListener);
18 | }
19 | });
20 |
21 | pb.eventListeners = eventListeners;
22 | };
23 |
24 | pb.clearEventListeners = function() {
25 | var eventListeners = [];
26 | var dontRemove = ['signed_in', 'signed_out'];
27 |
28 | pb.eventListeners.forEach(function(eventListener) {
29 | if (dontRemove.indexOf(eventListener.eventName) == -1) {
30 | window.removeEventListener(eventListener.eventName, eventListener.listener, false);
31 | } else {
32 | eventListeners.push(eventListener);
33 | }
34 | });
35 |
36 | pb.eventListeners = eventListeners;
37 | };
38 |
39 | pb.dispatchEvent = function(eventName, details) {
40 | if (window.chrome || window.safari) {
41 | window.dispatchEvent(new CustomEvent(eventName, { 'detail': details }));
42 | } else {
43 | var detail;
44 | if (pb.browserVersion >= 30) {
45 | detail = cloneInto({ 'detail': details }, document.defaultView);
46 | } else {
47 | detail = { 'detail': details };
48 | }
49 | window.dispatchEvent(new CustomEvent(eventName, detail));
50 | }
51 | };
52 |
--------------------------------------------------------------------------------
/resources/extensions/safari/fake-notifications.css:
--------------------------------------------------------------------------------
1 | .fake-notification {
2 | position: relative;
3 | font-size: 15px;
4 | line-height: 20px;
5 | color: #333;
6 | background-color: white;
7 | white-space: pre-wrap;
8 | overflow: hidden;
9 | }
10 | .fake-notification-close {
11 | position: absolute;
12 | top: 0;
13 | right: 0;
14 | height: 28px;
15 | width: 28px;
16 | padding: 6px;
17 | cursor: pointer;
18 | }
19 | .fake-notification-close:hover {
20 | background-color: #f5f5f5;
21 | }
22 | .fake-notification-image-holder {
23 | position: absolute;
24 | top: 0;
25 | left: 0;
26 | height: 80px;
27 | width: 80px;
28 | background-color: #f7f7f7;
29 | }
30 | .fake-notification-image {
31 | display: block;
32 | max-height: 100%;
33 | max-width: 100%;
34 | position: absolute;
35 | top: 0;
36 | bottom: 0;
37 | left: 0;
38 | right: 0;
39 | margin: auto;
40 | }
41 | .fake-notification-text-holder {
42 | cursor: pointer;
43 | overflow: hidden;
44 | min-height: 80px;
45 | padding: 6px 26px 0 96px;
46 | }
47 | .fake-notification-text-holder div {
48 | margin-bottom: 4px;
49 | }
50 | .fake-notification-title {
51 | overflow: hidden;
52 | white-space: nowrap;
53 | text-overflow: ellipsis;
54 | }
55 | .fake-notification-message {
56 | font-size: 13px;
57 | line-height: 16px;
58 | overflow: hidden;
59 | max-height: 82px;
60 | }
61 | .fake-notification-context-message {
62 | color: #999;
63 | font-size: 13px;
64 | line-height: 16px;
65 | overflow: hidden;
66 | white-space: nowrap;
67 | text-overflow: ellipsis;
68 | }
69 | .fake-notification-button {
70 | overflow: hidden;
71 | cursor: default;
72 | padding: 0 16px;
73 | }
74 | .fake-notification-button:hover {
75 | background-color: #f5f5f5;
76 | }
77 | .fake-notification-button-icon {
78 | float: left;
79 | display: inline-block;
80 | margin: 12px 16px 12px 0;
81 | height: 16px;
82 | width: 16px;
83 | }
84 | .fake-notification-button span {
85 | font-size: 13px;
86 | line-height: 40px;
87 | }
88 | .fake-notification-bottom-border {
89 | border-bottom: 1px solid #eee;
90 | }
91 |
--------------------------------------------------------------------------------
/resources/extensions/safari/global.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Pushbullet
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/resources/extensions/safari/icon_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/icon_128.png
--------------------------------------------------------------------------------
/resources/extensions/safari/icon_16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/icon_16.png
--------------------------------------------------------------------------------
/resources/extensions/safari/icon_19.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/icon_19.png
--------------------------------------------------------------------------------
/resources/extensions/safari/icon_19_gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/icon_19_gray.png
--------------------------------------------------------------------------------
/resources/extensions/safari/icon_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/icon_32.png
--------------------------------------------------------------------------------
/resources/extensions/safari/icon_38.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/icon_38.png
--------------------------------------------------------------------------------
/resources/extensions/safari/icon_38_gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/icon_38_gray.png
--------------------------------------------------------------------------------
/resources/extensions/safari/icon_48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/icon_48.png
--------------------------------------------------------------------------------
/resources/extensions/safari/icon_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/icon_64.png
--------------------------------------------------------------------------------
/resources/extensions/safari/link.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/link.png
--------------------------------------------------------------------------------
/resources/extensions/safari/lock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/lock.png
--------------------------------------------------------------------------------
/resources/extensions/safari/log-request.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | pb.addEventListener('signed_in', function(e) {
4 | pb.addEventListener('stream_message', function(e) {
5 | var message = e.detail;
6 | if (message.type != 'push' || !message.push) {
7 | return;
8 | }
9 |
10 | var push = message.push;
11 | if (push.type != 'log_request') {
12 | return;
13 | }
14 |
15 | pb.devtools('Log data requested');
16 |
17 | pb.post(pb.api + '/v2/error-report', {
18 | 'reply_to': pb.local.user.email,
19 | 'subject': 'Browser log file requested for ' + pb.local.user.email,
20 | 'body': '',
21 | 'data': pb.rollingLog.join('\n')
22 | }, function(response) {
23 | });
24 | });
25 | });
26 |
--------------------------------------------------------------------------------
/resources/extensions/safari/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/logo.png
--------------------------------------------------------------------------------
/resources/extensions/safari/logo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/logo@2x.png
--------------------------------------------------------------------------------
/resources/extensions/safari/notifier-firefox.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | pb.notifier.notify = function(options) {
4 | var spec = {
5 | 'key': options.key,
6 | 'title': options.title,
7 | 'message': options.message,
8 | 'contextMessage': options.contextMessage,
9 | 'iconUrl': options.iconUrl
10 | };
11 |
12 | if (spec.message && spec.message.length > 500) {
13 | spec.message = spec.message.substring(0, 500);
14 | }
15 |
16 | self.port.emit('show_notification', spec);
17 | };
18 |
19 | pb.notifier.dismiss = function(key) {
20 | var options = pb.notifier.active[key];
21 | if (options && options.onclose) {
22 | options.onclose();
23 | }
24 |
25 | delete pb.notifier.active[key];
26 |
27 | pb.dispatchEvent('notifications_changed');
28 | };
29 |
--------------------------------------------------------------------------------
/resources/extensions/safari/notifier-safari.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | pb.notifier.notify = function(options) {
4 | if (!window.Notification) {
5 | pb.devtools('Notifications not available');
6 | return;
7 | }
8 |
9 | if (pb.isSnoozed()) {
10 | pb.devtools('Not showing notification ' + options.key + ', snoozed');
11 |
12 | pb.notifier.active[options.key] = options;
13 | return;
14 | }
15 |
16 | var notification = new Notification(options.title, {
17 | 'body': options.message,
18 | 'tag': options.key
19 | });
20 |
21 | notification.onclick = function() {
22 | if (options.onclick) {
23 | options.onclick();
24 | }
25 |
26 | if (options.onclose) {
27 | options.onclose();
28 | }
29 | };
30 |
31 | notification.onclose = function() {
32 | delete pb.notifier.active[options.key];
33 | pb.dispatchEvent('notifications_changed');
34 | };
35 |
36 | options.notification = notification;
37 | };
38 |
39 | pb.notifier.dismiss = function(key) {
40 | var options = pb.notifier.active[key];
41 | if (options) {
42 | options.notification.close();
43 | }
44 | };
45 |
--------------------------------------------------------------------------------
/resources/extensions/safari/notifier.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | pb.notifier = {
4 | 'active': {}
5 | };
6 |
7 | pb.notifier.show = function(options) {
8 | pb.devtools('Showing notification with key ' + options.key);
9 |
10 | options.allButtons = options.buttons;
11 | options.fullMessage = options.message;
12 | options.allItems = options.items;
13 |
14 | if (pb.settings.onlyShowTitles) {
15 | if (options.type == 'list') {
16 | options.items = [];
17 | }
18 |
19 | options.message = '';
20 | }
21 |
22 | if (pb.settings.showMirrors) {
23 | if (pb.isSnoozed()) {
24 | pb.devtools('Not showing notification ' + options.key + ', snoozed');
25 | return;
26 | }
27 |
28 | pb.notifier.notify(options);
29 |
30 | if (options.key != 'update') {
31 | pb.dispatchEvent('active');
32 | }
33 | }
34 |
35 | pb.notifier.active[options.key] = options;
36 |
37 | pb.dispatchEvent('notifications_changed');
38 | };
39 |
40 | pb.notifier.dismiss = function(key) {
41 | // Stub, overwritten in notifications-chrome.js etc.
42 | };
43 |
--------------------------------------------------------------------------------
/resources/extensions/safari/panel-messaging-sms.css:
--------------------------------------------------------------------------------
1 | #sms-right {
2 | width: 100%;
3 | height: 100%;
4 | }
5 | #sms-compose-right {
6 | width: 100%;
7 | height: 100%;
8 | }
9 | #sms-right-top {
10 | position: absolute;
11 | top: 0;
12 | left: 0;
13 | right: 0;
14 | bottom: 0;
15 | }
16 | #sms-right-top.with-input {
17 | bottom: 62px;
18 | }
19 | .firefox #sms-right-top.with-input {
20 | bottom: 76px;
21 | }
22 | #sms-right-bottom {
23 | position: absolute;
24 | bottom: 0;
25 | left: 0;
26 | right: 0;
27 | border-top: 1px solid #d0d0d0;
28 | }
29 | #sms-send-holder {
30 | float: right;
31 | display: table;
32 | width: 52px;
33 | height: 60px;
34 | font-size: 36px;
35 | text-align: center;
36 | color: #5c6868;
37 | }
38 | #sms-send-holder i {
39 | display: table-cell;
40 | vertical-align: middle;
41 | }
42 | #sms-send-holder:hover {
43 | cursor: pointer;
44 | color: #4ab367;
45 | }
46 | #sms-input-holder {
47 | margin-left: 10px;
48 | }
49 | #sms-input {
50 | padding: 15px 0 10px 0;
51 | border: 0;
52 | }
53 | #sms-device {
54 | border: 0;
55 | }
56 | #sms-picker-holder {
57 | background-color: white;
58 | border-bottom: 1px solid #d0d0d0;
59 | }
60 | #sms-picker-holder .picker-label {
61 | width: 64px;
62 | border: none;
63 | }
64 | #sms-picker-holder .picker-overlay {
65 | width: 175px;
66 | }
67 | #sms-device-picker {
68 | width: 200px;
69 | }
70 | #sms-disclaimer-tooltip {
71 | display: none;
72 | position: absolute;
73 | top: 56px;
74 | left: 10px;
75 | width: 220px;
76 | font-size: 12px;
77 | z-index: 100;
78 | background-color: #5c6868;
79 | color: white;
80 | padding: 6px 10px;
81 | border-radius: 10px;
82 | }
83 | #compose-message-holder {
84 | margin-right: 52px;
85 | }
86 | #compose-message {
87 | border: none;
88 | height: 350px;
89 | }
90 | #compose-send-holder {
91 | float: right;
92 | display: table;
93 | width: 52px;
94 | height: 60px;
95 | font-size: 36px;
96 | text-align: center;
97 | color: #5c6868;
98 | }
99 | #compose-send-holder i {
100 | display: table-cell;
101 | vertical-align: middle;
102 | }
103 | #compose-send-holder:hover {
104 | cursor: pointer;
105 | color: #4ab367;
106 | }
--------------------------------------------------------------------------------
/resources/extensions/safari/panel-messaging.css:
--------------------------------------------------------------------------------
1 | .stream-row {
2 | position: relative;
3 | overflow: hidden;
4 | padding: 10px;
5 | }
6 | .stream-row:hover {
7 | cursor: pointer;
8 | background-color: #f9fbfb;
9 | }
10 | .stream-row.selected {
11 | background-color: white;
12 | padding: 9px 10px;
13 | border-top: 1px solid #d0d0d0;
14 | border-bottom: 1px solid #d0d0d0;
15 | }
16 | .stream-row-image {
17 | display: block;
18 | float: left;
19 | height: 36px;
20 | width: 36px;
21 | border-radius: 18px;
22 | }
23 | .stream-row-content {
24 | margin: 0 25px 0 46px;
25 | }
26 | .stream-row-content .secondary {
27 | color: #95a5a6;
28 | }
29 | .stream-row .pop-out-stream {
30 | position: absolute;
31 | top: 0;
32 | bottom: 0;
33 | right: 0;
34 | margin: auto;
35 | width: 27px;
36 | display: none;
37 | }
38 | .stream-row:hover .pop-out-stream {
39 | display: block;
40 | }
41 | .stream-row .pop-out-stream:hover {
42 | cursor: pointer;
43 | color: #4ab367;
44 | }
45 | .stream-row .pushfont-popout {
46 | text-align: center;
47 | font-size: 24px;
48 | line-height: 54px;
49 | margin-top: 2px;
50 | vertical-align: middle;
51 | }
52 |
--------------------------------------------------------------------------------
/resources/extensions/safari/pb.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | if (!self.port && !window.chrome && !window.safari) {
4 | throw new Error('Shouldn\'t be here');
5 | }
6 |
7 | var pb = {
8 | 'www': 'https://www.pushbullet.com',
9 | 'api': 'https://api.pushbullet.com',
10 | 'ws': 'wss://stream.pushbullet.com/websocket',
11 | 'stream': 'https://stream.pushbullet.com/streaming',
12 | 'andrelytics': 'https://zebra.pushbullet.com'
13 | };
14 |
15 | pb.isOpera = navigator.userAgent.indexOf('OPR') >= 0;
16 |
17 | if (window.chrome) {
18 | pb.version = parseInt(chrome.runtime.getManifest().version);
19 | pb.browserVersion = parseInt(window.navigator.appVersion.match(/Chrome\/(\d+)\./)[1], 10);
20 | pb.userAgent = 'Pushbullet ' + (pb.isOpera ? 'Opera' : 'Chrome') + ' ' + pb.version;
21 | } else if (window.safari) {
22 | pb.version = parseInt(safari.extension.bundleVersion);
23 | pb.browserVersion = parseInt(window.navigator.appVersion.match(/Version\/(\d+)\./)[1], 10);
24 | pb.userAgent = 'Pushbullet Safari ' + pb.version;
25 | } else {
26 | var params = utils.getParams(location.search);
27 | pb.browserVersion = parseInt(window.navigator.userAgent.match(/Firefox\/(\d+)\./)[1]);
28 | pb.version = params['version'];
29 | pb.userAgent = 'Pushbullet Firefox ' + pb.version;
30 | }
31 |
32 | pb.rollingLog = [];
33 | pb.devtools = function(message) {
34 | var line;
35 | if (message instanceof Object || message instanceof Array) {
36 | line = message;
37 | } else {
38 | line = new Date().toLocaleString() + ' - ' + message;
39 | }
40 |
41 | console.devtools(line);
42 | pb.rollingLog.push(JSON.stringify(line));
43 |
44 | if (pb.rollingLog.length > 400) {
45 | pb.rollingLog.shift();
46 | }
47 | };
48 |
49 | pb.popOutPanel = function() {
50 | pb.devtools('Popping out panel');
51 |
52 | pb.track({
53 | 'name': 'panel_popped_out'
54 | });
55 |
56 | if (window.chrome) {
57 | var popoutUrl = chrome.extension.getURL('panel.html');
58 |
59 | chrome.tabs.query({ url: popoutUrl }, function(tabs) {
60 | if (tabs.length > 0) {
61 | chrome.windows.update(tabs[0].windowId, { 'focused': true }, function() {
62 | chrome.tabs.update(tabs[0].id, { 'active': true }, function() {
63 | });
64 | });
65 | } else {
66 | chrome.windows.create({
67 | 'url': popoutUrl + '#popout',
68 | 'type': 'popup',
69 | 'width': 640,
70 | 'height': 456,
71 | 'focused': true
72 | });
73 | }
74 | });
75 | }
76 | };
77 |
--------------------------------------------------------------------------------
/resources/extensions/safari/picker.css:
--------------------------------------------------------------------------------
1 | .picker {
2 | position: absolute;
3 | display: none;
4 | z-index: 200;
5 | max-height: 174px;
6 | width: 300px;
7 | background-color: #ecf0f0;
8 | margin-left: 20px;
9 | overflow:auto;
10 | box-shadow: 0 2px 4px rgba(0, 0, 0, .25);
11 | }
12 | .picker-overlay {
13 | position: absolute;
14 | overflow: hidden;
15 | cursor: pointer;
16 | left: 0;
17 | top: 0;
18 | z-index: 40;
19 | width: 100%;
20 | font-size: 14px;
21 | background-color: white;
22 | }
23 | .picker-overlay:hover {
24 | background-color: #ecf0f0;
25 | }
26 | .picker-overlay .picker-option {
27 | padding: 0 15px 0 0;
28 | height: 30px;
29 | margin: 9px 15px 9px 10px;
30 | background-color: #ecf0f0;
31 | border-radius: 15px;
32 | float: left;
33 | }
34 | .picker-overlay:hover .picker-option {
35 | background-color: #ced1d5;
36 | }
37 | .firefox .picker-overlay .picker-option {
38 | min-width: 150px;
39 | }
40 | .picker-option {
41 | cursor: pointer;
42 | line-height: 30px;
43 | padding: 10px;
44 | }
45 | .picker-option:hover {
46 | background-color: #ced1d5;
47 | }
48 | .picker-option.selected {
49 | background-color: #ced1d5;
50 | }
51 | .picker-target-image {
52 | display: block;
53 | float: left;
54 | width: 30px;
55 | height: 30px;
56 | border-radius: 15px;
57 | overflow: hidden;
58 | margin-right: -5px;
59 | }
60 | .picker-target-text {
61 | white-space: nowrap;
62 | text-overflow: ellipsis;
63 | overflow: hidden;
64 | padding-left: 15px;
65 | }
66 |
--------------------------------------------------------------------------------
/resources/extensions/safari/pong.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | pb.addEventListener('signed_in', function(e) {
4 | pb.addEventListener('stream_message', function(e) {
5 | var message = e.detail;
6 | if (message.type != 'push' || !message.push) {
7 | return;
8 | }
9 |
10 | var push = message.push;
11 | if (push.type != 'ping') {
12 | return;
13 | }
14 |
15 | if (!pb.local.device) {
16 | return;
17 | }
18 |
19 | pb.devtools('Sending pong');
20 |
21 | var pong = {
22 | 'type': 'pong',
23 | 'device_iden': pb.local.device.iden
24 | };
25 |
26 | pb.post(pb.api + '/v2/ephemerals', {
27 | 'type': 'push',
28 | 'push': pong
29 | }, function(response) {
30 | });
31 | });
32 | });
33 |
34 | var sendPing = function() {
35 | var ping = {
36 | 'type': 'ping'
37 | };
38 |
39 | pb.post(pb.api + '/v2/ephemerals', {
40 | 'type': 'push',
41 | 'push': ping
42 | }, function(response) {
43 | });
44 | };
45 |
--------------------------------------------------------------------------------
/resources/extensions/safari/pushfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/pushfont.woff
--------------------------------------------------------------------------------
/resources/extensions/safari/pushing.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | pb.pushQueue = [];
4 | pb.failedPushes = [];
5 | pb.successfulPushes = {};
6 |
7 | pb.sendPush = function(push) {
8 | pb.clearFailed(push);
9 |
10 | if (push.file) {
11 | pb.pushFile(push);
12 | return;
13 | }
14 |
15 | push.source_device_iden = pb.local.device ? pb.local.device.iden : null;
16 | push.guid = utils.guid();
17 |
18 | push.queued = true;
19 | pb.pushQueue.push(push);
20 |
21 | pb.dispatchEvent('locals_changed');
22 |
23 | processPushQueue();
24 | };
25 |
26 | pb.clearFailed = function(push) {
27 | pb.failedPushes = pb.failedPushes.filter(function(failed) {
28 | if (push != failed) {
29 | return failed;
30 | }
31 | });
32 |
33 | pb.dispatchEvent('locals_changed');
34 | };
35 |
36 | var processingPush = false;
37 | var processPushQueue = function() {
38 | if (processingPush) {
39 | return;
40 | }
41 |
42 | var push = pb.pushQueue[0];
43 | if (!push) {
44 | return;
45 | }
46 |
47 | var real = {
48 | 'type': push.type,
49 | 'title': push.title,
50 | 'body': push.body,
51 | 'url': push.url,
52 | 'file_name': push.file_name,
53 | 'file_url': push.file_url,
54 | 'file_type': push.file_type,
55 | 'email': push.email,
56 | 'device_iden': push.device_iden,
57 | 'channel_tag': push.channel_tag,
58 | 'client_iden': push.client_iden,
59 | 'source_device_iden': push.source_device_iden,
60 | 'guid': push.guid
61 | };
62 |
63 | processingPush = true;
64 |
65 | pb.post(pb.api + '/v2/pushes', real, function(response) {
66 | pb.pushQueue.shift();
67 |
68 | processingPush = false;
69 |
70 | if (response) {
71 | pb.successfulPushes[push.guid] = push;
72 |
73 | if (response.iden) {
74 | pb.local.pushes[response.iden] = response;
75 | }
76 | } else {
77 | push.failed = true;
78 | pb.failedPushes.push(push);
79 | }
80 |
81 | pb.dispatchEvent('locals_changed');
82 |
83 | processPushQueue();
84 | });
85 |
86 | pb.dispatchEvent('active');
87 | };
88 |
--------------------------------------------------------------------------------
/resources/extensions/safari/quick-reply.css:
--------------------------------------------------------------------------------
1 | #header {
2 | padding: 15px;
3 | }
4 | #image-holder {
5 | float: left;
6 | background-color: white;
7 | border-radius: 34px;
8 | padding: 2px;
9 | }
10 | #image {
11 | display: block;
12 | height: 64px;
13 | width: 64px;
14 | border-radius: 32px;
15 | }
16 | #text-holder {
17 | margin-left: 90px;
18 | }
19 | #title {
20 | font-size: 19px;
21 | line-height: 36px;
22 | overflow: hidden;
23 | white-space: nowrap;
24 | text-overflow: ellipsis;
25 | }
26 | #desc {
27 | opacity: 0.5;
28 | overflow: hidden;
29 | white-space: nowrap;
30 | text-overflow: ellipsis;
31 | }
32 | #content {
33 | background-color: #ecf0f0;
34 | }
35 | #banner{
36 | padding: 15px;
37 | }
38 | #message {
39 | white-space: pre-wrap;
40 | min-height: 120px;
41 | padding: 15px;
42 | }
43 | #reply {
44 | display: block;
45 | height: 100px;
46 | width: 100%;
47 | padding: 15px;
48 | border: none;
49 | resize: none;
50 | outline: none;
51 | }
52 | #sms-counter {
53 | padding: 15px;
54 | }
55 |
--------------------------------------------------------------------------------
/resources/extensions/safari/quick-reply.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Quick-Reply
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
23 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/resources/extensions/safari/ribbon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/ribbon.png
--------------------------------------------------------------------------------
/resources/extensions/safari/safari_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/safari_logo.png
--------------------------------------------------------------------------------
/resources/extensions/safari/safari_logo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/safari_logo@2x.png
--------------------------------------------------------------------------------
/resources/extensions/safari/tabs.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var tabOnOpen = {};
4 | var tabOnClose = {};
5 |
6 | pb.getActiveTab = function(done) {
7 | if (window.chrome) {
8 | chrome.tabs.query({ 'active': true, 'lastFocusedWindow': true }, function(tabs) {
9 | var tab = tabs[0];
10 | done(tab);
11 | });
12 | } else if (window.safari) {
13 | var activeTab = safari.application.activeBrowserWindow.activeTab;
14 | done({
15 | 'title': activeTab.title,
16 | 'url': activeTab.url
17 | });
18 | }
19 | };
20 |
21 | pb.openTab = function(url) {
22 | openTab(url);
23 | };
24 |
25 | var openTab = function(url) {
26 | if (window.chrome) {
27 | chrome.windows.getCurrent({ 'populate': false }, function(current) {
28 | if (current) {
29 | chrome.tabs.create({ 'url': url, 'active': true }, function(tab) {
30 | chrome.windows.update(tab.windowId, { 'focused': true });
31 | });
32 | } else {
33 | chrome.windows.create({ 'url': url, 'type': 'normal', 'focused': true });
34 | }
35 | });
36 | } else if (window.safari) {
37 | var newTab;
38 | if (safari.application.browserWindows.length > 0) {
39 | if (safari.application.activeBrowserWindow) {
40 | newTab = safari.application.activeBrowserWindow.openTab();
41 | } else {
42 | newTab = safari.application.openBrowserWindow().activeTab;
43 | }
44 | } else {
45 | newTab = safari.application.openBrowserWindow().activeTab;
46 | }
47 |
48 | newTab.url = url;
49 | } else {
50 | var tabId = Date.now();
51 | self.port.emit('open_tab', { 'id': tabId, 'url': url });
52 | }
53 | };
54 |
--------------------------------------------------------------------------------
/resources/extensions/safari/track_chat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/track_chat.png
--------------------------------------------------------------------------------
/resources/extensions/safari/track_files.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/track_files.png
--------------------------------------------------------------------------------
/resources/extensions/safari/track_links.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/track_links.png
--------------------------------------------------------------------------------
/resources/extensions/safari/upload.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/extensions/safari/upload.png
--------------------------------------------------------------------------------
/resources/extensions/safari/x-ray.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Pushbullet X-Ray
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
Ordered by modified descending (most recently modified at the top)
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/resources/extensions/safari/x-ray.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | window.init = function() {
4 | var pushes = JSON.stringify(utils.asArray(pb.local.pushes), null, 4);
5 | document.getElementById('json').innerText = pushes;
6 | };
7 |
--------------------------------------------------------------------------------
/resources/graphics/icon-beta.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/graphics/icon-beta.png
--------------------------------------------------------------------------------
/resources/graphics/icon-flavoured.ai:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/graphics/icon-flavoured.ai
--------------------------------------------------------------------------------
/resources/graphics/icon-preview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/graphics/icon-preview.png
--------------------------------------------------------------------------------
/resources/graphics/icon-setup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/graphics/icon-setup.png
--------------------------------------------------------------------------------
/resources/graphics/icon-tray-paused.psd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/graphics/icon-tray-paused.psd
--------------------------------------------------------------------------------
/resources/graphics/icon-tray.psd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/graphics/icon-tray.psd
--------------------------------------------------------------------------------
/resources/graphics/icon.ai:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/graphics/icon.ai
--------------------------------------------------------------------------------
/resources/graphics/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/graphics/icon.png
--------------------------------------------------------------------------------
/resources/graphics/icon.psd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/graphics/icon.psd
--------------------------------------------------------------------------------
/resources/screenshots/screenshot-linux.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/screenshots/screenshot-linux.png
--------------------------------------------------------------------------------
/resources/screenshots/screenshot-macos.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/screenshots/screenshot-macos.png
--------------------------------------------------------------------------------
/resources/screenshots/screenshot-win32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/screenshots/screenshot-win32.png
--------------------------------------------------------------------------------
/resources/setup/dmg-background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/setup/dmg-background.png
--------------------------------------------------------------------------------
/resources/setup/dmg-icon.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/setup/dmg-icon.icns
--------------------------------------------------------------------------------
/resources/setup/nsis-installer-header-icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/setup/nsis-installer-header-icon.ico
--------------------------------------------------------------------------------
/resources/setup/nsis-installer-header.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/setup/nsis-installer-header.bmp
--------------------------------------------------------------------------------
/resources/setup/nsis-installer-icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/setup/nsis-installer-icon.ico
--------------------------------------------------------------------------------
/resources/setup/nsis-installer-sidebar.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/resources/setup/nsis-installer-sidebar.bmp
--------------------------------------------------------------------------------
/sounds/android-1.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/android-1.wav
--------------------------------------------------------------------------------
/sounds/android-10.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/android-10.wav
--------------------------------------------------------------------------------
/sounds/android-11.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/android-11.wav
--------------------------------------------------------------------------------
/sounds/android-12.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/android-12.wav
--------------------------------------------------------------------------------
/sounds/android-14.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/android-14.wav
--------------------------------------------------------------------------------
/sounds/android-15.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/android-15.wav
--------------------------------------------------------------------------------
/sounds/android-16.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/android-16.wav
--------------------------------------------------------------------------------
/sounds/android-17.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/android-17.wav
--------------------------------------------------------------------------------
/sounds/android-18.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/android-18.wav
--------------------------------------------------------------------------------
/sounds/android-19.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/android-19.wav
--------------------------------------------------------------------------------
/sounds/android-2.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/android-2.wav
--------------------------------------------------------------------------------
/sounds/android-3.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/android-3.wav
--------------------------------------------------------------------------------
/sounds/android-4.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/android-4.wav
--------------------------------------------------------------------------------
/sounds/android-5.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/android-5.wav
--------------------------------------------------------------------------------
/sounds/android-6.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/android-6.wav
--------------------------------------------------------------------------------
/sounds/android-7.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/android-7.wav
--------------------------------------------------------------------------------
/sounds/android-8.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/android-8.wav
--------------------------------------------------------------------------------
/sounds/android-9.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/android-9.wav
--------------------------------------------------------------------------------
/sounds/default.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/default.wav
--------------------------------------------------------------------------------
/sounds/generic-1.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/generic-1.wav
--------------------------------------------------------------------------------
/sounds/generic-2.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/generic-2.wav
--------------------------------------------------------------------------------
/sounds/generic-3.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/generic-3.wav
--------------------------------------------------------------------------------
/sounds/generic-4.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/generic-4.wav
--------------------------------------------------------------------------------
/sounds/google-absurd_bird.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-absurd_bird.wav
--------------------------------------------------------------------------------
/sounds/google-be_mine.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-be_mine.wav
--------------------------------------------------------------------------------
/sounds/google-beginning.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-beginning.wav
--------------------------------------------------------------------------------
/sounds/google-bellhop.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-bellhop.wav
--------------------------------------------------------------------------------
/sounds/google-big_freedia_came_to_slay.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-big_freedia_came_to_slay.wav
--------------------------------------------------------------------------------
/sounds/google-big_freedia_girl_down.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-big_freedia_girl_down.wav
--------------------------------------------------------------------------------
/sounds/google-big_freedia_release_your_wiggle.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-big_freedia_release_your_wiggle.wav
--------------------------------------------------------------------------------
/sounds/google-big_freedia_you_already_know.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-big_freedia_you_already_know.wav
--------------------------------------------------------------------------------
/sounds/google-bike_ride.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-bike_ride.wav
--------------------------------------------------------------------------------
/sounds/google-birdsong.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-birdsong.wav
--------------------------------------------------------------------------------
/sounds/google-blacksmith.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-blacksmith.wav
--------------------------------------------------------------------------------
/sounds/google-bolt.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-bolt.wav
--------------------------------------------------------------------------------
/sounds/google-boomerang.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-boomerang.wav
--------------------------------------------------------------------------------
/sounds/google-bubble.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-bubble.wav
--------------------------------------------------------------------------------
/sounds/google-bud.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-bud.wav
--------------------------------------------------------------------------------
/sounds/google-bulb.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-bulb.wav
--------------------------------------------------------------------------------
/sounds/google-butterfly.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-butterfly.wav
--------------------------------------------------------------------------------
/sounds/google-cakes_da_killa_free_to_be.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-cakes_da_killa_free_to_be.wav
--------------------------------------------------------------------------------
/sounds/google-champagne_pop.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-champagne_pop.wav
--------------------------------------------------------------------------------
/sounds/google-changing_keys.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-changing_keys.wav
--------------------------------------------------------------------------------
/sounds/google-cheers.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-cheers.wav
--------------------------------------------------------------------------------
/sounds/google-chef_s_special.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-chef_s_special.wav
--------------------------------------------------------------------------------
/sounds/google-chime.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-chime.wav
--------------------------------------------------------------------------------
/sounds/google-clink.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-clink.wav
--------------------------------------------------------------------------------
/sounds/google-coconuts.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-coconuts.wav
--------------------------------------------------------------------------------
/sounds/google-coin_toss.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-coin_toss.wav
--------------------------------------------------------------------------------
/sounds/google-coins.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-coins.wav
--------------------------------------------------------------------------------
/sounds/google-cowbell.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-cowbell.wav
--------------------------------------------------------------------------------
/sounds/google-crosswalk.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-crosswalk.wav
--------------------------------------------------------------------------------
/sounds/google-cyclist.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-cyclist.wav
--------------------------------------------------------------------------------
/sounds/google-dew.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-dew.wav
--------------------------------------------------------------------------------
/sounds/google-dj.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-dj.wav
--------------------------------------------------------------------------------
/sounds/google-doorbell.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-doorbell.wav
--------------------------------------------------------------------------------
/sounds/google-duet.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-duet.wav
--------------------------------------------------------------------------------
/sounds/google-eerie.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-eerie.wav
--------------------------------------------------------------------------------
/sounds/google-end_note.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-end_note.wav
--------------------------------------------------------------------------------
/sounds/google-fade.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-fade.wav
--------------------------------------------------------------------------------
/sounds/google-finale.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-finale.wav
--------------------------------------------------------------------------------
/sounds/google-flick.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-flick.wav
--------------------------------------------------------------------------------
/sounds/google-flower.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-flower.wav
--------------------------------------------------------------------------------
/sounds/google-fraidy_cat.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-fraidy_cat.wav
--------------------------------------------------------------------------------
/sounds/google-fruit.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-fruit.wav
--------------------------------------------------------------------------------
/sounds/google-gems.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-gems.wav
--------------------------------------------------------------------------------
/sounds/google-gentle_gong.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-gentle_gong.wav
--------------------------------------------------------------------------------
/sounds/google-gibbon_call.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-gibbon_call.wav
--------------------------------------------------------------------------------
/sounds/google-gigi_gorgeous_gorgeous.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-gigi_gorgeous_gorgeous.wav
--------------------------------------------------------------------------------
/sounds/google-gigi_gorgeous_kiss.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-gigi_gorgeous_kiss.wav
--------------------------------------------------------------------------------
/sounds/google-gigi_gorgeous_stay_gorgeous.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-gigi_gorgeous_stay_gorgeous.wav
--------------------------------------------------------------------------------
/sounds/google-gobble_gobble.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-gobble_gobble.wav
--------------------------------------------------------------------------------
/sounds/google-grand_opening.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-grand_opening.wav
--------------------------------------------------------------------------------
/sounds/google-guardian_angel.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-guardian_angel.wav
--------------------------------------------------------------------------------
/sounds/google-guitar_chord.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-guitar_chord.wav
--------------------------------------------------------------------------------
/sounds/google-hey.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-hey.wav
--------------------------------------------------------------------------------
/sounds/google-holiday_magic.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-holiday_magic.wav
--------------------------------------------------------------------------------
/sounds/google-honk_honk.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-honk_honk.wav
--------------------------------------------------------------------------------
/sounds/google-jackpot.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-jackpot.wav
--------------------------------------------------------------------------------
/sounds/google-leaf.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-leaf.wav
--------------------------------------------------------------------------------
/sounds/google-magic.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-magic.wav
--------------------------------------------------------------------------------
/sounds/google-magic_trick.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-magic_trick.wav
--------------------------------------------------------------------------------
/sounds/google-mallet.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-mallet.wav
--------------------------------------------------------------------------------
/sounds/google-morgxn_home.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-morgxn_home.wav
--------------------------------------------------------------------------------
/sounds/google-night_sky.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-night_sky.wav
--------------------------------------------------------------------------------
/sounds/google-nightlife.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-nightlife.wav
--------------------------------------------------------------------------------
/sounds/google-note.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-note.wav
--------------------------------------------------------------------------------
/sounds/google-orders_up.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-orders_up.wav
--------------------------------------------------------------------------------
/sounds/google-paper_clip.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-paper_clip.wav
--------------------------------------------------------------------------------
/sounds/google-party_favor.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-party_favor.wav
--------------------------------------------------------------------------------
/sounds/google-petals.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-petals.wav
--------------------------------------------------------------------------------
/sounds/google-piano_flourish.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-piano_flourish.wav
--------------------------------------------------------------------------------
/sounds/google-piano_flutter.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-piano_flutter.wav
--------------------------------------------------------------------------------
/sounds/google-ping-pong.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-ping-pong.wav
--------------------------------------------------------------------------------
/sounds/google-ping.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-ping.wav
--------------------------------------------------------------------------------
/sounds/google-pipes.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-pipes.wav
--------------------------------------------------------------------------------
/sounds/google-pollen.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-pollen.wav
--------------------------------------------------------------------------------
/sounds/google-popcorn.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-popcorn.wav
--------------------------------------------------------------------------------
/sounds/google-portal.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-portal.wav
--------------------------------------------------------------------------------
/sounds/google-reward.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-reward.wav
--------------------------------------------------------------------------------
/sounds/google-rock_concert.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-rock_concert.wav
--------------------------------------------------------------------------------
/sounds/google-roots.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-roots.wav
--------------------------------------------------------------------------------
/sounds/google-royal_fanfare.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-royal_fanfare.wav
--------------------------------------------------------------------------------
/sounds/google-sad_trombone.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-sad_trombone.wav
--------------------------------------------------------------------------------
/sounds/google-seedling.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-seedling.wav
--------------------------------------------------------------------------------
/sounds/google-shopkeeper.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-shopkeeper.wav
--------------------------------------------------------------------------------
/sounds/google-sleigh_bells.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-sleigh_bells.wav
--------------------------------------------------------------------------------
/sounds/google-snowflake.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-snowflake.wav
--------------------------------------------------------------------------------
/sounds/google-spell.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-spell.wav
--------------------------------------------------------------------------------
/sounds/google-spring_strings.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-spring_strings.wav
--------------------------------------------------------------------------------
/sounds/google-stem.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-stem.wav
--------------------------------------------------------------------------------
/sounds/google-sticks_and_stones.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-sticks_and_stones.wav
--------------------------------------------------------------------------------
/sounds/google-strum.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-strum.wav
--------------------------------------------------------------------------------
/sounds/google-summer_surf.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-summer_surf.wav
--------------------------------------------------------------------------------
/sounds/google-swan_song.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-swan_song.wav
--------------------------------------------------------------------------------
/sounds/google-sweetheart.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-sweetheart.wav
--------------------------------------------------------------------------------
/sounds/google-trill.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-trill.wav
--------------------------------------------------------------------------------
/sounds/google-tropical_frog.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-tropical_frog.wav
--------------------------------------------------------------------------------
/sounds/google-tuneup.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-tuneup.wav
--------------------------------------------------------------------------------
/sounds/google-tweeter.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-tweeter.wav
--------------------------------------------------------------------------------
/sounds/google-twinkle.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-twinkle.wav
--------------------------------------------------------------------------------
/sounds/google-tyler_oakley_hi_friends.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-tyler_oakley_hi_friends.wav
--------------------------------------------------------------------------------
/sounds/google-unlock.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-unlock.wav
--------------------------------------------------------------------------------
/sounds/google-welcome.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-welcome.wav
--------------------------------------------------------------------------------
/sounds/google-winter_wind.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/google-winter_wind.wav
--------------------------------------------------------------------------------
/sounds/ios-1.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/ios-1.wav
--------------------------------------------------------------------------------
/sounds/ios-10.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/ios-10.wav
--------------------------------------------------------------------------------
/sounds/ios-2.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/ios-2.wav
--------------------------------------------------------------------------------
/sounds/ios-3.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/ios-3.wav
--------------------------------------------------------------------------------
/sounds/ios-4.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/ios-4.wav
--------------------------------------------------------------------------------
/sounds/ios-5.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/ios-5.wav
--------------------------------------------------------------------------------
/sounds/ios-6.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/ios-6.wav
--------------------------------------------------------------------------------
/sounds/ios-7.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/ios-7.wav
--------------------------------------------------------------------------------
/sounds/ios-8.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/ios-8.wav
--------------------------------------------------------------------------------
/sounds/ios-9.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/ios-9.wav
--------------------------------------------------------------------------------
/sounds/macos-1.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/macos-1.wav
--------------------------------------------------------------------------------
/sounds/macos-2.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/macos-2.wav
--------------------------------------------------------------------------------
/sounds/macos-3.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/macos-3.wav
--------------------------------------------------------------------------------
/sounds/macos-4.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/macos-4.wav
--------------------------------------------------------------------------------
/sounds/nintendo-1.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/nintendo-1.wav
--------------------------------------------------------------------------------
/sounds/nintendo-2.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/nintendo-2.wav
--------------------------------------------------------------------------------
/sounds/nintendo-3.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/nintendo-3.wav
--------------------------------------------------------------------------------
/sounds/nintendo-4.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/nintendo-4.wav
--------------------------------------------------------------------------------
/sounds/nintendo-5.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/nintendo-5.wav
--------------------------------------------------------------------------------
/sounds/slack-1.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/slack-1.wav
--------------------------------------------------------------------------------
/sounds/slack-2.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/slack-2.wav
--------------------------------------------------------------------------------
/sounds/slack-3.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/slack-3.wav
--------------------------------------------------------------------------------
/sounds/slack-4.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/slack-4.wav
--------------------------------------------------------------------------------
/sounds/slack-5.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/slack-5.wav
--------------------------------------------------------------------------------
/sounds/slack-6.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/slack-6.wav
--------------------------------------------------------------------------------
/sounds/slack-7.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/slack-7.wav
--------------------------------------------------------------------------------
/sounds/slack-8.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/slack-8.wav
--------------------------------------------------------------------------------
/sounds/tesla-1.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/tesla-1.wav
--------------------------------------------------------------------------------
/sounds/tesla-2.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/tesla-2.wav
--------------------------------------------------------------------------------
/sounds/tesla-3.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/tesla-3.wav
--------------------------------------------------------------------------------
/sounds/voiceover-1.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/voiceover-1.wav
--------------------------------------------------------------------------------
/sounds/voiceover-10.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/voiceover-10.wav
--------------------------------------------------------------------------------
/sounds/voiceover-11.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/voiceover-11.wav
--------------------------------------------------------------------------------
/sounds/voiceover-12.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/voiceover-12.wav
--------------------------------------------------------------------------------
/sounds/voiceover-13.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/voiceover-13.wav
--------------------------------------------------------------------------------
/sounds/voiceover-14.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/voiceover-14.wav
--------------------------------------------------------------------------------
/sounds/voiceover-15.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/voiceover-15.wav
--------------------------------------------------------------------------------
/sounds/voiceover-16.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/voiceover-16.wav
--------------------------------------------------------------------------------
/sounds/voiceover-17.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/voiceover-17.wav
--------------------------------------------------------------------------------
/sounds/voiceover-18.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/voiceover-18.wav
--------------------------------------------------------------------------------
/sounds/voiceover-19.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/voiceover-19.wav
--------------------------------------------------------------------------------
/sounds/voiceover-2.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/voiceover-2.wav
--------------------------------------------------------------------------------
/sounds/voiceover-3.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/voiceover-3.wav
--------------------------------------------------------------------------------
/sounds/voiceover-4.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/voiceover-4.wav
--------------------------------------------------------------------------------
/sounds/voiceover-5.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/voiceover-5.wav
--------------------------------------------------------------------------------
/sounds/voiceover-6.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/voiceover-6.wav
--------------------------------------------------------------------------------
/sounds/voiceover-7.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/voiceover-7.wav
--------------------------------------------------------------------------------
/sounds/voiceover-8.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/voiceover-8.wav
--------------------------------------------------------------------------------
/sounds/voiceover-9.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/voiceover-9.wav
--------------------------------------------------------------------------------
/sounds/windows-1.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/windows-1.wav
--------------------------------------------------------------------------------
/sounds/windows-10.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/windows-10.wav
--------------------------------------------------------------------------------
/sounds/windows-11.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/windows-11.wav
--------------------------------------------------------------------------------
/sounds/windows-12.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/windows-12.wav
--------------------------------------------------------------------------------
/sounds/windows-14.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/windows-14.wav
--------------------------------------------------------------------------------
/sounds/windows-15.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/windows-15.wav
--------------------------------------------------------------------------------
/sounds/windows-16.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/windows-16.wav
--------------------------------------------------------------------------------
/sounds/windows-17.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/windows-17.wav
--------------------------------------------------------------------------------
/sounds/windows-18.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/windows-18.wav
--------------------------------------------------------------------------------
/sounds/windows-19.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/windows-19.wav
--------------------------------------------------------------------------------
/sounds/windows-2.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/windows-2.wav
--------------------------------------------------------------------------------
/sounds/windows-20.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/windows-20.wav
--------------------------------------------------------------------------------
/sounds/windows-21.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/windows-21.wav
--------------------------------------------------------------------------------
/sounds/windows-3.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/windows-3.wav
--------------------------------------------------------------------------------
/sounds/windows-4.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/windows-4.wav
--------------------------------------------------------------------------------
/sounds/windows-5.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/windows-5.wav
--------------------------------------------------------------------------------
/sounds/windows-6.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/windows-6.wav
--------------------------------------------------------------------------------
/sounds/windows-7.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/windows-7.wav
--------------------------------------------------------------------------------
/sounds/windows-8.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/windows-8.wav
--------------------------------------------------------------------------------
/sounds/windows-9.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sidneys/pb-for-desktop/7cabee720c3cbcd3951173d5b0b7c76985283dcf/sounds/windows-9.wav
--------------------------------------------------------------------------------