├── .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 |
19 |
20 |
Home
21 |
22 |
23 |
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 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /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 |
23 | 24 |
25 |
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 |
27 |
28 |
29 |
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 |
24 | 25 |
26 |
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 --------------------------------------------------------------------------------