├── .gitignore ├── .travis.yml ├── AUTHORS ├── LICENSE ├── README.md ├── data ├── application.css ├── com.github.bartzaalberg.snaptastic.appdata.xml.in ├── com.github.bartzaalberg.snaptastic.desktop.in ├── com.github.bartzaalberg.snaptastic.gschema.xml ├── com.github.bartzaalberg.snaptastic.pkexec.policy ├── icons │ ├── 16 │ │ └── com.github.bartzaalberg.snaptastic.svg │ ├── 24 │ │ └── com.github.bartzaalberg.snaptastic.svg │ ├── 32 │ │ └── com.github.bartzaalberg.snaptastic.svg │ ├── 48 │ │ └── com.github.bartzaalberg.snaptastic.svg │ ├── 64 │ │ └── com.github.bartzaalberg.snaptastic.svg │ ├── 128 │ │ └── com.github.bartzaalberg.snaptastic.svg │ ├── icons.gresource.xml │ └── ubuntu-open.svg └── meson.build ├── debian ├── changelog ├── compat ├── control ├── copyright ├── rules └── source │ └── format ├── hooks └── pre-commit.hook ├── meson.build ├── po ├── LINGUAS ├── POTFILES ├── ca.po ├── com.github.bartzaalberg.snaptastic.pot ├── es.po ├── extra │ ├── LINGUAS │ ├── POTFILES │ ├── extra.pot │ ├── fr.po │ ├── it.po │ ├── ja.po │ ├── meson.build │ ├── nl.po │ └── ru.po ├── fr.po ├── it.po ├── ja.po ├── lt.po ├── meson.build ├── nl.po ├── ru.po └── tr.po ├── screenshot.png ├── screenshot2.png ├── screenshot3.png ├── screenshot4.png ├── screenshot5.png └── src ├── Application.vala ├── CommandHandler.vala ├── Components ├── DetailViewBanner.vala ├── HeaderBar.vala └── HeaderLabel.vala ├── Constants.vala ├── Dialogs ├── Alert.vala └── DeleteConfirm.vala ├── FileManager.vala ├── IconHandler.vala ├── InstallApplication └── DesktopFileApplication.vala ├── InstalledPackageRow.vala ├── ListBox.vala ├── ListBoxRow.vala ├── MainWindow.vala ├── Package.vala ├── ResponseTranslator.vala ├── SnapdHandler.vala ├── SnapdURIHandler.vala ├── StackManager.vala └── Views ├── DetailView.vala ├── ListView.vala ├── NotFoundView.vala ├── ProgressView.vala └── WelcomeView.vala /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | build/ 3 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | language: node_js 4 | 5 | node_js: 6 | - 10.17.0 7 | 8 | sudo: required 9 | 10 | services: 11 | - docker 12 | 13 | addons: 14 | apt: 15 | sources: 16 | - ubuntu-toolchain-r-test 17 | packages: 18 | - libstdc++-5-dev 19 | 20 | install: 21 | - npm i -g @elementaryos/houston 22 | 23 | script: 24 | - houston ci 25 | --type system-app 26 | --name-domain com.github.bartzaalberg.snaptastic 27 | --name-human Snaptastic 28 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | Bart Zaalberg 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | # Archived 5 | This repository is not maintained anymore and will not be updated to Elementary OS 6.0. You have my blessing to create a fork and update the application to post publish it in Elementary 6.0 under your own name. 6 | 7 | # Snaptastic 8 | A snap manager for Elementary OS 9 | 10 |

11 | 12 | Get it on AppCenter 13 | 14 |

15 | 16 |

17 | 19 |

20 | 21 | Install, update, remove, and view information about your installed snaps. 22 | 23 | ## Installation 24 | 25 | First you will need to install elementary SDK 26 | 27 | `sudo apt install elementary-sdk` 28 | 29 | ### Dependencies 30 | 31 | These dependencies must be present before building 32 | - `valac` 33 | - `gtk+-3.0` 34 | - `granite` 35 | - `libsnapd-glib-dev` 36 | 37 | You can install these on a Ubuntu-based system by executing this command: 38 | 39 | `sudo apt install valac libgtk-3-dev libgranite-dev libsnapd-glib-dev` 40 | 41 | ### Building 42 | ``` 43 | meson build --prefix=/usr 44 | cd build 45 | ninja 46 | ``` 47 | 48 | ### Installing 49 | `sudo ninja install` 50 | 51 | ### Use snaps from browser 52 | Run the following command to use snaps from browsers 53 | `sudo update-desktop-database /usr/share/applications` 54 | 55 | ### Recompile the schema after installation 56 | `sudo glib-compile-schemas /usr/share/glib-2.0/schemas` 57 | 58 | ### Update .pot file 59 | Call the following command from the build folder: 60 | 61 | `ninja com.github.bartzaalberg.snaptastic-pot` 62 | 63 | ## FAQ 64 | 65 | ### Snaptastic wont handle snap URLS 66 | 67 | On Firefox you sometimes have to set the Application manually. 68 | 69 | * Go to about:preferences#general 70 | * Under applications search for snap and set the dropdown to 'Use Snaptastic' 71 | -------------------------------------------------------------------------------- /data/application.css: -------------------------------------------------------------------------------- 1 | @define-color textColorPrimary #fff; 2 | @define-color textColorPrimaryShadow shade(@colorPrimary, 0.85); 3 | 4 | .h1, 5 | .h2 { 6 | font-family: Ubuntu; 7 | } 8 | 9 | .h2 { 10 | color: @colorPrimary; 11 | } 12 | 13 | .view-mode-button { 14 | color: @fff; 15 | text-shadow: 0 1px @textColorPrimaryShadow; 16 | } 17 | 18 | .detail-view-banner { 19 | background-color: #F5F5F5; 20 | } 21 | 22 | .detail-view-banner-dark { 23 | background-color: #363A3F; 24 | } 25 | 26 | .detail-view-banner-title { 27 | font-family: Ubuntu; 28 | font-size:30px; 29 | } 30 | 31 | -------------------------------------------------------------------------------- /data/com.github.bartzaalberg.snaptastic.appdata.xml.in: -------------------------------------------------------------------------------- 1 | 2 | 3 | com.github.bartzaalberg.snaptastic 4 | CC0 5 | GPL-3.0+ 6 | Snaptastic 7 | A manager for snaps 8 | 9 |

Install your snaps, both downloaded and from online stores like snapcraft.io (right from the browser!). Update with one click in the app, and more! Do everything you need to do without the necessity of opening the terminal.

10 |

Features:

11 |
    12 |
  • Install snap files
  • 13 |
  • Update, remove, and view information about your installed snaps
  • 14 |
  • Search through your installed snaps
  • 15 |
  • Install snaps from web a uri
  • 16 |
  • Choose between light and dark with dark mode
  • 17 |
18 |
19 | 20 | com.github.bartzaalberg.snaptastic 21 | 22 | 23 | none 24 | none 25 | none 26 | none 27 | none 28 | none 29 | none 30 | none 31 | none 32 | none 33 | none 34 | none 35 | none 36 | none 37 | none 38 | none 39 | none 40 | none 41 | none 42 | none 43 | none 44 | none 45 | none 46 | none 47 | none 48 | none 49 | none 50 | 51 | 52 | 53 | 54 |

Fixed the wrong Dutch translations.

55 |
    56 |
  • Reverted Dutch translations
  • 57 |
58 |
59 |
60 | 61 | 62 |

Added and updated translations

63 |
    64 |
  • Updated French translation
  • 65 |
  • Added Russian translation
  • 66 |
  • Updated Japanese translation
  • 67 |
  • Added Turkish translation
  • 68 |
69 |
70 |
71 | 72 | 73 |

Added dark mode and tooltip shortcuts

74 |
    75 |
  • Added dark mode
  • 76 |
  • Added shortcuts to the button labels
  • 77 |
78 |
79 |
80 | 81 | 82 |

Improved performance

83 |
    84 |
  • Improved the performance of the list view
  • 85 |
  • Fixed Dutch grammar issues
  • 86 |
87 |
88 |
89 | 90 | 91 |

Added French metadata translations

92 |
    93 |
  • Added French metadata translations
  • 94 |
  • Sharpened application icons
  • 95 |
96 |
97 |
98 | 99 | 100 |

Added metadata translations

101 |
    102 |
  • Added metadata translations
  • 103 |
104 |
105 |
106 | 107 | 108 |

Added screenshot

109 |
    110 |
  • Single-instancing now working
  • 111 |
  • Improved project code quality
  • 112 |
  • Remember size,position, and maximized
  • 113 |
  • Fixed bug opening welcome view from web store
  • 114 |
115 |
116 |
117 | 118 | 119 |

Added screenshot

120 |
    121 |
  • Fixed the icon not found crash
  • 122 |
  • Added screenshot for snaps
  • 123 |
  • Refactored the detail view
  • 124 |
  • Updated the screenshot for appcenter
  • 125 |
  • Fixed a lot of warnings
  • 126 |
  • Added OARS rating
  • 127 |
128 |
129 |
130 | 131 | 132 |

Icons, single-instance, and translations fix

133 |
    134 |
  • Icons finally work!
  • 135 |
  • Application is now single-instance
  • 136 |
  • Translations are working again
  • 137 |
138 |
139 |
140 | 141 | 142 |

Fixed local snap installing, added channel support, added some shortcuts

143 |
    144 |
  • Fixed opening local snap files
  • 145 |
  • Added ability to install from other channels
  • 146 |
  • Channels are now shown on list and detail pages
  • 147 |
  • Added application shortcuts
  • 148 |
149 |
150 |
151 | 152 | 153 |

Moved to meson, apps can be opened from snaptastic again

154 |
    155 |
  • Moved to Meson
  • 156 |
  • Fixed the About link
  • 157 |
  • Added French translation
  • 158 |
  • Corrected some spelling
  • 159 |
  • Fixed opening apps
  • 160 |
161 |
162 |
163 | 164 | 165 |

Juno Fixes and more translations

166 |
    167 |
  • Added Catalan and spanish translations
  • 168 |
  • Aligned DetailViewBanner for Juno
  • 169 |
170 |
171 |
172 | 173 | 174 |

Houston CI

175 |
    176 |
  • Added Houston Ci and necessary changes
  • 177 |
178 |
179 |
180 | 181 | 182 |

Japanese translation and Lithuanian translation fix

183 |
    184 |
  • Added Japanese translation
  • 185 |
  • Added a fix for the Lithuanian translation
  • 186 |
187 |
188 |
189 | 190 | 191 |

Dutch translation and navigation bugfix

192 |
    193 |
  • Added dutch translation
  • 194 |
  • Added a fix for the navigation bug
  • 195 |
196 |
197 |
198 | 199 | 200 |

Moved to glib

201 |
    202 |
  • Added 'about snaptastic' action
  • 203 |
  • Moved from snap cli to snapd-glib
  • 204 |
  • Added price for appcenter
  • 205 |
206 |
207 |
208 | 209 | 210 |

Moved to glib

211 |
    212 |
  • Added 'about snaptastic' action
  • 213 |
  • Moved from snap cli to snapd-glib
  • 214 |
  • Added price for appcenter
  • 215 |
216 |
217 |
218 | 219 | 220 |

Fixed some bugs, cleaned up some code

221 |
    222 |
  • Removed option to select multiple snaps
  • 223 |
  • Fixed bug where sometimes wrong buttons would show up in header
  • 224 |
  • Cleaned up alot of code
  • 225 |
  • Updated language files
  • 226 |
  • Updated app description
  • 227 |
228 |
229 |
230 | 231 | 232 |

Added view for not yet installed packages

233 |
    234 |
  • Added view for not yet installed packages
  • 235 |
  • Added extra screenshot for appcenter
  • 236 |
  • Switched background-color and text color for appcenter
  • 237 |
238 |
239 |
240 | 241 | 242 |

List view overhaul

243 |
    244 |
  • Updated the detail view
  • 245 |
  • Removed the buttons from the list view
  • 246 |
  • Removed delete and install button for the snap core
  • 247 |
248 |
249 |
250 | 251 | 252 |

List view overhaul, and a link to snapcraft

253 |
    254 |
  • Updated the detail view
  • 255 |
  • Removed the buttons from the list view
  • 256 |
  • Added a link to snapcraft
  • 257 |
  • Removed delete and install button for the snap core
  • 258 |
259 |
260 |
261 | 262 | 263 |

Install straight from snapcraft.io!

264 |
    265 |
  • Application will now open on snap:// links
  • 266 |
  • You can now launch your apps from the installed view
  • 267 |
  • Fixed appdata file and changed a line for appcenter
  • 268 |
269 |
270 |
271 | 272 | 273 |

Install straight from snapcraft.io!

274 |
    275 |
  • Application will now open on snap:// links
  • 276 |
  • You can now launch your apps from the installed view
  • 277 |
  • Fixed appdata file
  • 278 |
279 |
280 |
281 | 282 | 283 |

Install straight from snapcraft.io!

284 |
    285 |
  • Application will now open on snap:// links
  • 286 |
  • You can now launch your apps from the installed view
  • 287 |
288 |
289 |
290 | 291 | 292 |

The app is now Ubuntu styled

293 |
    294 |
  • Made welcome text Title Case
  • 295 |
  • Set rounded bottom corners on window
  • 296 |
  • Added ubuntu styling through whole app
  • 297 |
  • Fixed some error typos
  • 298 |
  • Fixed appcenter text color
  • 299 |
  • Added application to system category for appcenter
  • 300 |
301 |
302 |
303 | 304 | 305 |

A nicer not-found view!

306 |
    307 |
  • Vertical aligned delete dialog buttons
  • 308 |
  • Added a nicer view for no results
  • 309 |
310 |
311 |
312 | 313 | 314 |

Modified alert dialog and added snapd as dependency

315 |
    316 |
  • Changed alert cancel button to close button
  • 317 |
  • alert is now positioned to center of app
  • 318 |
  • Application now depends on snapd
  • 319 |
  • Updated icons
  • 320 |
321 |
322 |
323 | 324 | 325 |

Fixed the appdata xml

326 |
    327 |
  • Fixed xml
  • 328 |
329 |
330 |
331 | 332 | 333 |

Removed alert and fixed polkit calls

334 |
    335 |
  • Removed alert
  • 336 |
  • Fixed polkit calls
  • 337 |
338 |
339 |
340 | 341 | 342 |

Updated readme and debian/control file

343 |
    344 |
  • Updated readme, removed lines which dont apply
  • 345 |
  • Updated debian/control file
  • 346 |
347 |
348 |
349 | 350 | 351 |

First release

352 |
    353 |
  • First release
  • 354 |
355 |
356 |
357 |
358 | 359 | 360 | https://raw.githubusercontent.com/bartzaalberg/snaptastic/master/screenshot.png 361 | 362 | 363 | https://raw.githubusercontent.com/bartzaalberg/snaptastic/master/screenshot2.png 364 | 365 | 366 | https://raw.githubusercontent.com/bartzaalberg/snaptastic/master/screenshot3.png 367 | 368 | 369 | https://raw.githubusercontent.com/bartzaalberg/snaptastic/master/screenshot4.png 370 | 371 | 372 | https://raw.githubusercontent.com/bartzaalberg/snaptastic/master/screenshot5.png 373 | 374 | 375 | Bart Zaalberg 376 | 377 | #fff 378 | rgb(233, 84, 32) 379 | 3 380 | 381 | https://github.com/bartzaalberg/snaptastic 382 | https://github.com/bartzaalberg/snaptastic/issues 383 | https://github.com/bartzaalberg/snaptastic/issues 384 |
385 | -------------------------------------------------------------------------------- /data/com.github.bartzaalberg.snaptastic.desktop.in: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Snaptastic 3 | GenericName=Snaptastic 4 | Comment=A manager for snaps 5 | Categories=Utility;System;Network;Development; 6 | Exec=com.github.bartzaalberg.snaptastic %U 7 | Icon=com.github.bartzaalberg.snaptastic 8 | Terminal=false 9 | MimeType=application/vnd.snap;x-scheme-handler/snap; 10 | Type=Application 11 | X-GNOME-Gettext-Domain=snaptastic 12 | Keywords=GUI;Snaps; 13 | Actions=AboutDialog; 14 | 15 | [Desktop Action AboutDialog] 16 | Exec=xdg-open appstream://com.github.bartzaalberg.snaptastic 17 | Name=About Snaptastic 18 | -------------------------------------------------------------------------------- /data/com.github.bartzaalberg.snaptastic.gschema.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | false 5 | Maximized 6 | Whether the window is maximized 7 | 8 | 9 | (1024, 750) 10 | Window position 11 | Most recent window position (x, y) 12 | 13 | 14 | (-1, -1) 15 | Window size 16 | Most recent window size (width, height) 17 | 18 | 19 | false 20 | Dark Theme 21 | Prefer Dark Theme 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /data/com.github.bartzaalberg.snaptastic.pkexec.policy: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | GreyOk 7 | 8 | Authentication is required to install the application. 9 | com.github.bartzaalberg.snaptastic 10 | 11 | auth_admin 12 | auth_admin 13 | auth_admin 14 | 15 | /usr/local/bin/com.github.bartzaalberg.snaptastic-wizard 16 | true 17 | 18 | 19 | -------------------------------------------------------------------------------- /data/icons/128/com.github.bartzaalberg.snaptastic.svg: -------------------------------------------------------------------------------- 1 | 2 | 17 | 38 | 40 | 42 | 46 | 50 | 51 | 53 | 57 | 61 | 65 | 66 | 68 | 72 | 76 | 80 | 84 | 85 | 94 | 104 | 112 | 113 | 115 | 116 | 118 | image/svg+xml 119 | 121 | 122 | 123 | 124 | 125 | 129 | 136 | 140 | 144 | 148 | 152 | 156 | 157 | -------------------------------------------------------------------------------- /data/icons/16/com.github.bartzaalberg.snaptastic.svg: -------------------------------------------------------------------------------- 1 | 2 | 13 | 15 | 17 | 21 | 25 | 29 | 33 | 34 | 43 | 45 | 49 | 53 | 54 | 63 | 64 | 66 | 67 | 69 | image/svg+xml 70 | 72 | 73 | 74 | 75 | 76 | 83 | 87 | 91 | 95 | 99 | 103 | 104 | -------------------------------------------------------------------------------- /data/icons/24/com.github.bartzaalberg.snaptastic.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 16 | 18 | 22 | 26 | 30 | 34 | 35 | 44 | 52 | 59 | 63 | 67 | 68 | 70 | 74 | 78 | 79 | 88 | 89 | 91 | 92 | 94 | image/svg+xml 95 | 97 | 98 | 99 | 100 | 101 | 105 | 112 | 116 | 120 | 124 | 128 | 132 | 133 | -------------------------------------------------------------------------------- /data/icons/32/com.github.bartzaalberg.snaptastic.svg: -------------------------------------------------------------------------------- 1 | 2 | 13 | 15 | 17 | 21 | 25 | 29 | 30 | 40 | 42 | 46 | 50 | 54 | 58 | 59 | 68 | 70 | 74 | 78 | 79 | 88 | 89 | 91 | 92 | 94 | image/svg+xml 95 | 97 | 98 | 99 | 100 | 101 | 105 | 112 | 116 | 120 | 124 | 128 | 132 | 133 | -------------------------------------------------------------------------------- /data/icons/48/com.github.bartzaalberg.snaptastic.svg: -------------------------------------------------------------------------------- 1 | 2 | 13 | 15 | 24 | 26 | 30 | 34 | 38 | 42 | 43 | 45 | 49 | 53 | 57 | 58 | 68 | 70 | 74 | 78 | 79 | 88 | 89 | 91 | 92 | 94 | image/svg+xml 95 | 97 | 98 | 99 | 100 | 101 | 105 | 112 | 116 | 120 | 124 | 128 | 132 | 133 | -------------------------------------------------------------------------------- /data/icons/64/com.github.bartzaalberg.snaptastic.svg: -------------------------------------------------------------------------------- 1 | 2 | 13 | 15 | 24 | 26 | 30 | 34 | 38 | 42 | 43 | 53 | 55 | 59 | 63 | 64 | 74 | 76 | 80 | 84 | 85 | 94 | 95 | 97 | 98 | 100 | image/svg+xml 101 | 103 | 104 | 105 | 106 | 107 | 110 | 114 | 118 | 119 | 126 | 130 | 134 | 138 | 142 | 146 | 147 | -------------------------------------------------------------------------------- /data/icons/icons.gresource.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ubuntu-open.svg 5 | ../application.css 6 | 7 | 8 | -------------------------------------------------------------------------------- /data/meson.build: -------------------------------------------------------------------------------- 1 | icon_sizes = ['16', '24', '32', '48', '64', '128'] 2 | 3 | foreach i : icon_sizes 4 | install_data( 5 | join_paths('icons', i, meson.project_name() + '.svg'), 6 | install_dir: join_paths(get_option('datadir'), 'icons', 'hicolor', i + 'x' + i, 'apps') 7 | ) 8 | install_data( 9 | join_paths('icons', i, meson.project_name() + '.svg'), 10 | install_dir: join_paths(get_option('datadir'), 'icons', 'hicolor', i + 'x' + i + '@2', 'apps') 11 | ) 12 | endforeach 13 | 14 | install_data( 15 | join_paths(meson.project_name() + '.gschema.xml'), 16 | install_dir: join_paths(get_option('datadir'), 'glib-2.0', 'schemas') 17 | ) 18 | 19 | i18n.merge_file( 20 | input: meson.project_name() + '.desktop.in', 21 | output: meson.project_name() + '.desktop', 22 | po_dir: join_paths(meson.source_root(), 'po', 'extra'), 23 | type: 'desktop', 24 | install: true, 25 | install_dir: join_paths(get_option('datadir'), 'applications') 26 | ) 27 | 28 | i18n.merge_file( 29 | input: meson.project_name() + '.appdata.xml.in', 30 | output: meson.project_name() + '.appdata.xml', 31 | po_dir: join_paths(meson.source_root(), 'po', 'extra'), 32 | install: true, 33 | install_dir: join_paths(get_option('datadir'), 'metainfo') 34 | ) 35 | -------------------------------------------------------------------------------- /debian/changelog: -------------------------------------------------------------------------------- 1 | com.github.bartzaalberg.snaptastic (1.2.1) STABLE; urgency=low 2 | 3 | * Reverted Dutch translation 4 | 5 | -- Bart Zaalberg Tue, 21 Apr 2020 21:48:00 +0200 6 | 7 | com.github.bartzaalberg.snaptastic (1.2.0) STABLE; urgency=low 8 | 9 | * Updated French translation 10 | * Added Russian translation 11 | * Updated Japanese translation 12 | * Added Turkish translation 13 | 14 | -- Bart Zaalberg Mon, 01 Jul 2019 20:04:00 +0200 15 | 16 | com.github.bartzaalberg.snaptastic (1.1.0) STABLE; urgency=low 17 | 18 | * Added dark mode 19 | * Added shortcuts to the button labels 20 | 21 | -- Bart Zaalberg Sun, 17 Mar 2019 17:40:00 +0200 22 | 23 | com.github.bartzaalberg.snaptastic (1.0.1) STABLE; urgency=low 24 | 25 | * Improved performance 26 | * Fixed Dutch grammar issues 27 | 28 | -- Bart Zaalberg Web, 06 Feb 2019 13:58:00 +0200 29 | 30 | com.github.bartzaalberg.snaptastic (1.0.0) STABLE; urgency=low 31 | 32 | * Added French metadata translation 33 | * Added provides tag for appdata 34 | * Sharpened application icons 35 | 36 | -- Bart Zaalberg Web, 30 Jan 2019 15:37:00 +0200 37 | 38 | com.github.bartzaalberg.snaptastic (0.8.0) UNSTABLE; urgency=low 39 | 40 | * Added metadata translation 41 | 42 | -- Bart Zaalberg Sun, 27 Jan 2019 12:05:00 +0200 43 | 44 | com.github.bartzaalberg.snaptastic (0.7.2) UNSTABLE; urgency=low 45 | 46 | * Single-instancing now working 47 | * Improved project code quality 48 | * Remember size,position, and maximized 49 | * Fixed bug opening welcome view from web store 50 | 51 | -- Bart Zaalberg Web, 23 Jan 2019 18:42:00 +0200 52 | 53 | com.github.bartzaalberg.snaptastic (0.7.1) UNSTABLE; urgency=high 54 | 55 | * Fixed the icon not found crash 56 | * Added screenshot for snaps 57 | * Refactored the detail view 58 | * Updated the screenshot for appcenter 59 | * Fixed a lot of warnings 60 | * Added OARS rating 61 | 62 | -- Bart Zaalberg Tue, 22 Jan 2019 12:52:00 +0200 63 | 64 | com.github.bartzaalberg.snaptastic (0.7.0) UNSTABLE; urgency=low 65 | 66 | * Icons finally work! 67 | * Application is now single-instance 68 | * Translations are working again 69 | 70 | -- Bart Zaalberg Thu, 17 Jan 2019 10:23:00 +0200 71 | 72 | com.github.bartzaalberg.snaptastic (0.6.0) UNSTABLE; urgency=low 73 | 74 | * Fixed opening local snap files 75 | * Added ability to install from other channels 76 | * Channels are now shown on list and detail pages 77 | * Added application shortcuts 78 | 79 | -- Bart Zaalberg Sun, 13 Jan 2019 16:21:00 +0200 80 | 81 | com.github.bartzaalberg.snaptastic (0.5.0) UNSTABLE; urgency=low 82 | 83 | * Moved to Meson 84 | * Fixed the About link 85 | * Added French translation 86 | * Corrected some spelling 87 | * Fixed opening apps 88 | 89 | -- Bart Zaalberg Web, 09 Jan 2019 19:07:00 +0200 90 | 91 | com.github.bartzaalberg.snaptastic (0.4.5) UNSTABLE; urgency=low 92 | 93 | * Added Catalan and spanish translations 94 | * Aligned DetailViewBanner for Juno 95 | 96 | -- Bart Zaalberg Mon, 20 Sep 2018 16:22:00 +0200 97 | 98 | com.github.bartzaalberg.snaptastic (0.4.4) UNSTABLE; urgency=low 99 | 100 | * Addded Houston CI and necessary changes 101 | 102 | -- Bart Zaalberg Mon, 17 Sep 2018 09:12:00 +0200 103 | 104 | com.github.bartzaalberg.snaptastic (0.4.3) UNSTABLE; urgency=low 105 | 106 | * Updated lithuanian translation 107 | * Added japanese translation 108 | 109 | -- Bart Zaalberg Sun, 27 May 2018 10:31:00 +0200 110 | 111 | com.github.bartzaalberg.snaptastic (0.4.2) UNSTABLE; urgency=low 112 | 113 | * Added dutch translation 114 | * Added a fix for the navigation bug 115 | 116 | -- Bart Zaalberg Wed, 21 Feb 2018 23:44:00 +0200 117 | 118 | com.github.bartzaalberg.snaptastic (0.4.1) UNSTABLE; urgency=low 119 | 120 | * Fixed aboutdialog 121 | 122 | -- Bart Zaalberg Mon, 12 Feb 2018 21:49:00 +0200 123 | 124 | com.github.bartzaalberg.snaptastic (0.4.0) UNSTABLE; urgency=low 125 | 126 | * Added 'about snaptastic' action 127 | * Moved from snap cli to snapd-glib 128 | * Added price for appcenter 129 | 130 | -- Bart Zaalberg Mon, 12 Feb 2018 21:40:00 +0200 131 | 132 | com.github.bartzaalberg.snaptastic (0.3.1) UNSTABLE; urgency=low 133 | 134 | * Removed option to select multiple snaps 135 | * Fixed bug where sometimes wrong buttons would show up in header 136 | * Cleaned up alot of code 137 | * Updated language files 138 | * Updated app description 139 | 140 | -- Bart Zaalberg Wed, 7 Feb 2018 17:36:00 +0200 141 | 142 | com.github.bartzaalberg.snaptastic (0.3.0) UNSTABLE; urgency=low 143 | 144 | * Added detail-view for not yet installed packages 145 | * Added extra screenshot for appcenter 146 | * Switched background-color and text color for appcenter 147 | 148 | -- Bart Zaalberg Mon, 5 Feb 2018 17:32:00 +0200 149 | 150 | com.github.bartzaalberg.snaptastic (0.2.1) UNSTABLE; urgency=low 151 | 152 | * Removed the link to snapcraft 153 | 154 | -- Bart Zaalberg Sun, 4 Feb 2018 20:46:00 +0200 155 | 156 | com.github.bartzaalberg.snaptastic (0.2.0) UNSTABLE; urgency=low 157 | 158 | * Updated the detail view 159 | * Removed the buttons from the list view 160 | * Added a link to snapcraft 161 | * Removed delete and install button for the snap core 162 | 163 | -- Bart Zaalberg Sat, 3 Feb 2018 12:21:00 +0200 164 | 165 | com.github.bartzaalberg.snaptastic (0.1.3) UNSTABLE; urgency=low 166 | 167 | * Fixed appdata file and changed a line for appcenter 168 | 169 | -- Bart Zaalberg Sat, 3 Feb 2018 09:43:00 +0200 170 | 171 | com.github.bartzaalberg.snaptastic (0.1.2) UNSTABLE; urgency=low 172 | 173 | * Fixed appdata file 174 | 175 | -- Bart Zaalberg Fri, 2 Feb 2018 20:03:00 +0200 176 | 177 | com.github.bartzaalberg.snaptastic (0.1.1) UNSTABLE; urgency=low 178 | 179 | * Application will now open on snap links from the browser 180 | * You can now launch your apps from the installed view 181 | 182 | -- Bart Zaalberg Fri, 2 Feb 2018 19:46:00 +0200 183 | 184 | com.github.bartzaalberg.snaptastic (0.1.0) UNSTABLE; urgency=low 185 | 186 | * Made welcome text Title Case 187 | * Set rounded bottom corners on window 188 | * Added ubuntu styling through whole app 189 | * Fixed some error typos 190 | * Fixed appcenter text color 191 | * Added application to system category for appcenter 192 | 193 | -- Bart Zaalberg Thu, 1 Feb 2018 12:54:00 +0200 194 | 195 | com.github.bartzaalberg.snaptastic (0.0.6) UNSTABLE; urgency=low 196 | 197 | * Vertical aligned delete dialog buttons 198 | * Added a nicer view for no results 199 | 200 | -- Bart Zaalberg Tue, 30 Jan 2018 22:12:00 +0200 201 | 202 | com.github.bartzaalberg.snaptastic (0.0.5) UNSTABLE; urgency=low 203 | 204 | * Changed alert cancel button to close button 205 | * alert is now positioned to center of app 206 | * Application now depends on snapd 207 | * Updated icons 208 | 209 | -- Bart Zaalberg Tue, 30 Jan 2018 21:38:00 +0200 210 | 211 | com.github.bartzaalberg.snaptastic (0.0.4) UNSTABLE; urgency=low 212 | 213 | * Fixed xml 214 | 215 | -- Bart Zaalberg Tue, 30 Jan 2018 11:48:00 +0200 216 | 217 | com.github.bartzaalberg.snaptastic (0.0.3) UNSTABLE; urgency=low 218 | 219 | * Fixed polkit calls 220 | * Removed alerts 221 | 222 | -- Bart Zaalberg Tue, 30 Jan 2018 11:28:00 +0200 223 | 224 | com.github.bartzaalberg.snaptastic (0.0.2) UNSTABLE; urgency=low 225 | 226 | * Updated readme 227 | * Updated debian/control file 228 | 229 | -- Bart Zaalberg Tue, 30 Jan 2018 11:28:00 +0200 230 | 231 | com.github.bartzaalberg.snaptastic (0.0.1) UNSTABLE; urgency=low 232 | 233 | * First release 234 | 235 | -- Bart Zaalberg Tue, 30 Jan 2018 11:26:00 +0200 236 | -------------------------------------------------------------------------------- /debian/compat: -------------------------------------------------------------------------------- 1 | 9 -------------------------------------------------------------------------------- /debian/control: -------------------------------------------------------------------------------- 1 | Source: com.github.bartzaalberg.snaptastic 2 | Section: utils 3 | Priority: optional 4 | Maintainer: Bart Zaalberg 5 | Build-Depends: meson, 6 | debhelper (>= 10.5.1), 7 | libgranite-dev, 8 | libgtk-3-dev, 9 | valac, 10 | libsnapd-glib-dev 11 | 12 | Package: com.github.bartzaalberg.snaptastic 13 | Architecture: any 14 | Depends: ${misc:Depends}, ${shlibs:Depends}, snapd, ttf-ubuntu-font-family 15 | Pre-Depends: dpkg (>= 1.15.6) 16 | Description: Snaptastic 17 | Manage your snap files 18 | -------------------------------------------------------------------------------- /debian/copyright: -------------------------------------------------------------------------------- 1 | Upstream Author(s): 2 | 3 | Bart Zaalberg 4 | 5 | 6 | Copyright: 7 | 8 | Copyright (C) 2017 Bart Zaalberg 9 | 10 | License: 11 | 12 | This program is free software: you can redistribute it and/or modify 13 | it under the terms of the GNU General Public License as published by 14 | the Free Software Foundation, either version 3 of the License, or 15 | (at your option) any later version. 16 | 17 | This package is distributed in the hope that it will be useful, 18 | but WITHOUT ANY WARRANTY; without even the implied warranty of 19 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 | GNU General Public License for more details. 21 | 22 | You should have received a copy of the GNU General Public License 23 | along with this program. If not, see . 24 | 25 | On Debian systems, the complete text of the GNU General 26 | Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". 27 | 28 | The Debian packaging is: 29 | 30 | Copyright (C) 2014 Cody Garver 31 | 32 | and is licensed under the GPL version 3, see above. 33 | -------------------------------------------------------------------------------- /debian/rules: -------------------------------------------------------------------------------- 1 | #!/usr/bin/make -f 2 | # -*- makefile -*- 3 | # Sample debian/rules that uses debhelper. 4 | # This file was originally written by Joey Hess and Craig Small. 5 | # As a special exception, when this file is copied by dh-make into a 6 | # dh-make output file, you may use that output file without restriction. 7 | # This special exception was added by Craig Small in version 0.37 of dh-make. 8 | 9 | # Uncomment this to turn on verbose mode. 10 | #export DH_VERBOSE=1 11 | 12 | # Enable additional explot mitigation 13 | # (PIE and *full* RELRO at the time of this writing) 14 | #export DEB_BUILD_MAINT_OPTIONS=hardening=+all 15 | 16 | %: 17 | dh $@ 18 | 19 | override_dh_builddeb: 20 | dh_builddeb -- -Zxz 21 | 22 | 23 | override_dh_install: 24 | dh_install --fail-missing 25 | -------------------------------------------------------------------------------- /debian/source/format: -------------------------------------------------------------------------------- 1 | 3.0 (native) 2 | -------------------------------------------------------------------------------- /hooks/pre-commit.hook: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | io.elementary.vala-lint -d src 4 | -------------------------------------------------------------------------------- /meson.build: -------------------------------------------------------------------------------- 1 | project('com.github.bartzaalberg.snaptastic', 'vala', 'c') 2 | 3 | gnome = import('gnome') 4 | i18n = import('i18n') 5 | 6 | add_global_arguments('-DGETTEXT_PACKAGE="@0@"'.format (meson.project_name()), language:'c') 7 | 8 | asresources = gnome.compile_resources( 9 | 'as-resources', 'data/icons/icons.gresource.xml', 10 | source_dir: 'data/icons', 11 | c_name: 'as' 12 | ) 13 | 14 | executable( 15 | meson.project_name(), 16 | 'src/Application.vala', 17 | 'src/MainWindow.vala', 18 | 'src/ListBoxRow.vala', 19 | 'src/InstalledPackageRow.vala', 20 | 'src/IconHandler.vala', 21 | 'src/ListBox.vala', 22 | 'src/ResponseTranslator.vala', 23 | 'src/FileManager.vala', 24 | 'src/Constants.vala', 25 | 'src/Package.vala', 26 | 'src/CommandHandler.vala', 27 | 'src/SnapdHandler.vala', 28 | 'src/SnapdURIHandler.vala', 29 | 'src/StackManager.vala', 30 | 'src/Dialogs/DeleteConfirm.vala', 31 | 'src/Dialogs/Alert.vala', 32 | 'src/Views/ListView.vala', 33 | 'src/Views/NotFoundView.vala', 34 | 'src/Views/WelcomeView.vala', 35 | 'src/Views/ProgressView.vala', 36 | 'src/Views/DetailView.vala', 37 | 'src/Components/HeaderBar.vala', 38 | 'src/Components/HeaderLabel.vala', 39 | 'src/Components/DetailViewBanner.vala', 40 | asresources, 41 | dependencies: [ 42 | dependency('gtk+-3.0'), 43 | dependency('granite'), 44 | dependency('snapd-glib') 45 | ], 46 | install: true 47 | ) 48 | 49 | executable( 50 | 'com.github.bartzaalberg.snaptastic-wizard', 51 | 'src/InstallApplication/DesktopFileApplication.vala', 52 | 'src/SnapdURIHandler.vala', 53 | asresources, 54 | dependencies: [ 55 | dependency('gtk+-3.0'), 56 | dependency('snapd-glib') 57 | ], 58 | install: true 59 | ) 60 | 61 | subdir('data') 62 | subdir('po') 63 | 64 | python3 = import('python3').find_python() 65 | run_command(python3, '-c', 'import shutil; shutil.copy("hooks/pre-commit.hook", ".git/hooks/pre-commit")') 66 | -------------------------------------------------------------------------------- /po/LINGUAS: -------------------------------------------------------------------------------- 1 | # please keep this list sorted alphabetically 2 | # 3 | ca 4 | es 5 | fr 6 | ja 7 | it 8 | lt 9 | nl 10 | ru 11 | -------------------------------------------------------------------------------- /po/POTFILES: -------------------------------------------------------------------------------- 1 | src/Application.vala 2 | src/MainWindow.vala 3 | src/ListBoxRow.vala 4 | src/InstalledPackageRow.vala 5 | src/IconHandler.vala 6 | src/ListBox.vala 7 | src/ResponseTranslator.vala 8 | src/FileManager.vala 9 | src/Constants.vala 10 | src/Package.vala 11 | src/CommandHandler.vala 12 | src/SnapdHandler.vala 13 | src/SnapdURIHandler.vala 14 | src/StackManager.vala 15 | src/Dialogs/DeleteConfirm.vala 16 | src/Dialogs/Alert.vala 17 | src/Views/ListView.vala 18 | src/Views/NotFoundView.vala 19 | src/Views/WelcomeView.vala 20 | src/Views/ProgressView.vala 21 | src/Views/DetailView.vala 22 | src/Components/HeaderBar.vala 23 | src/Components/HeaderLabel.vala 24 | src/Components/DetailViewBanner.vala 25 | -------------------------------------------------------------------------------- /po/ca.po: -------------------------------------------------------------------------------- 1 | # Catalan translations for com.github.bartzaalberg.snaptastic package. 2 | # Copyright (C) 2019 THE com.github.bartzaalberg.snaptastic'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the com.github.bartzaalberg.snaptastic package. 4 | # Adolfo Jayme Barrientos , 2019. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: com.github.bartzaalberg.snaptastic\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2019-06-27 01:37+0400\n" 11 | "PO-Revision-Date: 2019-03-24 16:53+0100\n" 12 | "Last-Translator: Adolfo Jayme Barrientos \n" 13 | "Language-Team: none\n" 14 | "Language: ca\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | 19 | #: src/ListBoxRow.vala:48 20 | msgid "Refresh" 21 | msgstr "Actualitza" 22 | 23 | #: src/ListBoxRow.vala:50 24 | msgid "Update this to latest version" 25 | msgstr "Actualitza’l a la versió més recent" 26 | 27 | #: src/ListBoxRow.vala:64 28 | msgid "Uninstall" 29 | msgstr "Desinsta·la" 30 | 31 | #: src/ListBoxRow.vala:66 32 | msgid "Uninstall this application" 33 | msgstr "Desinstal·la aquesta aplicació" 34 | 35 | #: src/ListBoxRow.vala:80 src/ListBoxRow.vala:82 36 | msgid "Install" 37 | msgstr "Instal·la" 38 | 39 | #: src/ListBoxRow.vala:86 40 | msgid "Install this application" 41 | msgstr "Instal·la aquesta aplicació" 42 | 43 | #: src/ListBoxRow.vala:100 src/Views/WelcomeView.vala:12 44 | msgid "Open" 45 | msgstr "Obre" 46 | 47 | #: src/ListBoxRow.vala:102 48 | msgid "Run the application" 49 | msgstr "Executa l’aplicació" 50 | 51 | #: src/Dialogs/DeleteConfirm.vala:9 52 | msgid "Delete this application?" 53 | msgstr "Voleu desinstal·lar aquesta aplicació?" 54 | 55 | #: src/Dialogs/DeleteConfirm.vala:10 56 | msgid "Are you sure you want to delete this application?" 57 | msgstr "Esteu segur que voleu desinstal·lar aquesta aplicació?" 58 | 59 | #: src/Views/NotFoundView.vala:7 60 | msgid "No snaps were found" 61 | msgstr "No s’ha trobat cap snap" 62 | 63 | #: src/Views/NotFoundView.vala:7 64 | msgid "Please install some" 65 | msgstr "Instal·leu-ne uns quants" 66 | 67 | #: src/Views/WelcomeView.vala:11 68 | msgid "Install Some Snaps" 69 | msgstr "Instal·leu alguns snaps" 70 | 71 | #: src/Views/WelcomeView.vala:11 72 | msgid "Click open to select a downloaded snap file" 73 | msgstr "Feu clic a «Obre» per a seleccionar un fitxer snap que hàgiu baixat" 74 | 75 | #: src/Views/WelcomeView.vala:12 76 | msgid "Browse to open a single snap file" 77 | msgstr "Exploreu per a obrir un fitxer snap" 78 | 79 | #: src/Views/ProgressView.vala:7 80 | msgid "Please Wait…" 81 | msgstr "Espereu…" 82 | 83 | #: src/Views/ProgressView.vala:7 84 | msgid "Operation is in progress…" 85 | msgstr "L’operació està progressant…" 86 | 87 | #: src/Components/HeaderBar.vala:38 88 | msgid "Home" 89 | msgstr "" 90 | 91 | #: src/Components/HeaderBar.vala:39 92 | msgid "Go to home" 93 | msgstr "" 94 | 95 | #: src/Components/HeaderBar.vala:43 96 | msgid "Updates" 97 | msgstr "" 98 | 99 | #: src/Components/HeaderBar.vala:44 100 | msgid "Go to installed applications" 101 | msgstr "" 102 | 103 | #: src/Components/HeaderBar.vala:57 104 | msgid "Back" 105 | msgstr "Enrere" 106 | 107 | #: src/Components/HeaderBar.vala:69 108 | msgid "Light mode" 109 | msgstr "" 110 | 111 | #: src/Components/HeaderBar.vala:70 112 | msgid "Dark mode" 113 | msgstr "" 114 | -------------------------------------------------------------------------------- /po/com.github.bartzaalberg.snaptastic.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the com.github.bartzaalberg.snaptastic package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | #, fuzzy 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: com.github.bartzaalberg.snaptastic\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2019-06-27 01:37+0400\n" 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13 | "Last-Translator: FULL NAME \n" 14 | "Language-Team: LANGUAGE \n" 15 | "Language: \n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | 20 | #: src/ListBoxRow.vala:48 21 | msgid "Refresh" 22 | msgstr "" 23 | 24 | #: src/ListBoxRow.vala:50 25 | msgid "Update this to latest version" 26 | msgstr "" 27 | 28 | #: src/ListBoxRow.vala:64 29 | msgid "Uninstall" 30 | msgstr "" 31 | 32 | #: src/ListBoxRow.vala:66 33 | msgid "Uninstall this application" 34 | msgstr "" 35 | 36 | #: src/ListBoxRow.vala:80 src/ListBoxRow.vala:82 37 | msgid "Install" 38 | msgstr "" 39 | 40 | #: src/ListBoxRow.vala:86 41 | msgid "Install this application" 42 | msgstr "" 43 | 44 | #: src/ListBoxRow.vala:100 src/Views/WelcomeView.vala:12 45 | msgid "Open" 46 | msgstr "" 47 | 48 | #: src/ListBoxRow.vala:102 49 | msgid "Run the application" 50 | msgstr "" 51 | 52 | #: src/Dialogs/DeleteConfirm.vala:9 53 | msgid "Delete this application?" 54 | msgstr "" 55 | 56 | #: src/Dialogs/DeleteConfirm.vala:10 57 | msgid "Are you sure you want to delete this application?" 58 | msgstr "" 59 | 60 | #: src/Views/NotFoundView.vala:7 61 | msgid "No snaps were found" 62 | msgstr "" 63 | 64 | #: src/Views/NotFoundView.vala:7 65 | msgid "Please install some" 66 | msgstr "" 67 | 68 | #: src/Views/WelcomeView.vala:11 69 | msgid "Install Some Snaps" 70 | msgstr "" 71 | 72 | #: src/Views/WelcomeView.vala:11 73 | msgid "Click open to select a downloaded snap file" 74 | msgstr "" 75 | 76 | #: src/Views/WelcomeView.vala:12 77 | msgid "Browse to open a single snap file" 78 | msgstr "" 79 | 80 | #: src/Views/ProgressView.vala:7 81 | msgid "Please Wait…" 82 | msgstr "" 83 | 84 | #: src/Views/ProgressView.vala:7 85 | msgid "Operation is in progress…" 86 | msgstr "" 87 | 88 | #: src/Components/HeaderBar.vala:38 89 | msgid "Home" 90 | msgstr "" 91 | 92 | #: src/Components/HeaderBar.vala:39 93 | msgid "Go to home" 94 | msgstr "" 95 | 96 | #: src/Components/HeaderBar.vala:43 97 | msgid "Updates" 98 | msgstr "" 99 | 100 | #: src/Components/HeaderBar.vala:44 101 | msgid "Go to installed applications" 102 | msgstr "" 103 | 104 | #: src/Components/HeaderBar.vala:57 105 | msgid "Back" 106 | msgstr "" 107 | 108 | #: src/Components/HeaderBar.vala:69 109 | msgid "Light mode" 110 | msgstr "" 111 | 112 | #: src/Components/HeaderBar.vala:70 113 | msgid "Dark mode" 114 | msgstr "" 115 | -------------------------------------------------------------------------------- /po/es.po: -------------------------------------------------------------------------------- 1 | # Spanish translations for com.github.bartzaalberg.snaptastic package. 2 | # Copyright (C) 2019 THE com.github.bartzaalberg.snaptastic'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the com.github.bartzaalberg.snaptastic package. 4 | # Adolfo Jayme Barrientos , 2019. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: com.github.bartzaalberg.snaptastic\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2019-06-27 01:37+0400\n" 11 | "PO-Revision-Date: 2019-03-24 16:53+0100\n" 12 | "Last-Translator: Adolfo Jayme Barrientos \n" 13 | "Language-Team: none\n" 14 | "Language: es\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 19 | 20 | #: src/ListBoxRow.vala:48 21 | msgid "Refresh" 22 | msgstr "Actualizar" 23 | 24 | #: src/ListBoxRow.vala:50 25 | msgid "Update this to latest version" 26 | msgstr "Actualizarlo a la versión más reciente" 27 | 28 | #: src/ListBoxRow.vala:64 29 | msgid "Uninstall" 30 | msgstr "Desinstalar" 31 | 32 | #: src/ListBoxRow.vala:66 33 | msgid "Uninstall this application" 34 | msgstr "Desinstalar esta aplicación" 35 | 36 | #: src/ListBoxRow.vala:80 src/ListBoxRow.vala:82 37 | msgid "Install" 38 | msgstr "Instalar" 39 | 40 | #: src/ListBoxRow.vala:86 41 | msgid "Install this application" 42 | msgstr "Instalar esta aplicación" 43 | 44 | #: src/ListBoxRow.vala:100 src/Views/WelcomeView.vala:12 45 | msgid "Open" 46 | msgstr "Abrir" 47 | 48 | #: src/ListBoxRow.vala:102 49 | msgid "Run the application" 50 | msgstr "Ejecutar la aplicación" 51 | 52 | #: src/Dialogs/DeleteConfirm.vala:9 53 | msgid "Delete this application?" 54 | msgstr "¿Quiere desinstalar esta aplicación?" 55 | 56 | #: src/Dialogs/DeleteConfirm.vala:10 57 | msgid "Are you sure you want to delete this application?" 58 | msgstr "¿Confirma que quiere desinstalar esta aplicación?" 59 | 60 | #: src/Views/NotFoundView.vala:7 61 | msgid "No snaps were found" 62 | msgstr "No se encontró ningún snap" 63 | 64 | #: src/Views/NotFoundView.vala:7 65 | msgid "Please install some" 66 | msgstr "Instale algunos" 67 | 68 | #: src/Views/WelcomeView.vala:11 69 | msgid "Install Some Snaps" 70 | msgstr "Instálese algunos snaps" 71 | 72 | #: src/Views/WelcomeView.vala:11 73 | msgid "Click open to select a downloaded snap file" 74 | msgstr "Pulse en «Abrir» para seleccionar un archivo snap descargado" 75 | 76 | #: src/Views/WelcomeView.vala:12 77 | msgid "Browse to open a single snap file" 78 | msgstr "Explore para abrir un archivo snap" 79 | 80 | #: src/Views/ProgressView.vala:7 81 | msgid "Please Wait…" 82 | msgstr "Espere…" 83 | 84 | #: src/Views/ProgressView.vala:7 85 | msgid "Operation is in progress…" 86 | msgstr "La operación está en curso…" 87 | 88 | #: src/Components/HeaderBar.vala:38 89 | msgid "Home" 90 | msgstr "" 91 | 92 | #: src/Components/HeaderBar.vala:39 93 | msgid "Go to home" 94 | msgstr "" 95 | 96 | #: src/Components/HeaderBar.vala:43 97 | msgid "Updates" 98 | msgstr "" 99 | 100 | #: src/Components/HeaderBar.vala:44 101 | msgid "Go to installed applications" 102 | msgstr "" 103 | 104 | #: src/Components/HeaderBar.vala:57 105 | msgid "Back" 106 | msgstr "Atrás" 107 | 108 | #: src/Components/HeaderBar.vala:69 109 | msgid "Light mode" 110 | msgstr "" 111 | 112 | #: src/Components/HeaderBar.vala:70 113 | msgid "Dark mode" 114 | msgstr "" 115 | -------------------------------------------------------------------------------- /po/extra/LINGUAS: -------------------------------------------------------------------------------- 1 | fr 2 | ja 3 | it 4 | nl 5 | ru 6 | -------------------------------------------------------------------------------- /po/extra/POTFILES: -------------------------------------------------------------------------------- 1 | data/com.github.bartzaalberg.snaptastic.appdata.xml.in 2 | data/com.github.bartzaalberg.snaptastic.desktop.in 3 | -------------------------------------------------------------------------------- /po/extra/extra.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the extra package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | #, fuzzy 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: extra\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2019-06-27 01:37+0400\n" 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13 | "Last-Translator: FULL NAME \n" 14 | "Language-Team: LANGUAGE \n" 15 | "Language: \n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=CHARSET\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | 20 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:6 21 | #: data/com.github.bartzaalberg.snaptastic.desktop.in:3 22 | #: data/com.github.bartzaalberg.snaptastic.desktop.in:4 23 | msgid "Snaptastic" 24 | msgstr "" 25 | 26 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:7 27 | #: data/com.github.bartzaalberg.snaptastic.desktop.in:5 28 | msgid "A manager for snaps" 29 | msgstr "" 30 | 31 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:9 32 | msgid "" 33 | "Install your snaps, both downloaded and from online stores like snapcraft.io " 34 | "(right from the browser!). Update with one click in the app, and more! Do " 35 | "everything you need to do without the necessity of opening the terminal." 36 | msgstr "" 37 | 38 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:10 39 | msgid "Features:" 40 | msgstr "" 41 | 42 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:12 43 | msgid "Install snap files" 44 | msgstr "" 45 | 46 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:13 47 | msgid "Update, remove, and view information about your installed snaps" 48 | msgstr "" 49 | 50 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:14 51 | msgid "Search through your installed snaps" 52 | msgstr "" 53 | 54 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:15 55 | msgid "Install snaps from web a uri" 56 | msgstr "" 57 | 58 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:16 59 | msgid "Choose between light and dark with dark mode" 60 | msgstr "" 61 | 62 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:54 63 | msgid "Added dark mode and tooltip shortcuts" 64 | msgstr "" 65 | 66 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:56 67 | msgid "Added dark mode" 68 | msgstr "" 69 | 70 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:57 71 | msgid "Added shortcuts to the button labels" 72 | msgstr "" 73 | 74 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:63 75 | msgid "Improved performance" 76 | msgstr "" 77 | 78 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:65 79 | msgid "Improved the performance of the list view" 80 | msgstr "" 81 | 82 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:66 83 | msgid "Fixed Dutch grammar issues" 84 | msgstr "" 85 | 86 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:72 87 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:74 88 | msgid "Added French metadata translations" 89 | msgstr "" 90 | 91 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:75 92 | msgid "Sharpened application icons" 93 | msgstr "" 94 | 95 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:81 96 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:83 97 | msgid "Added metadata translations" 98 | msgstr "" 99 | 100 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:89 101 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:100 102 | msgid "Added screenshot" 103 | msgstr "" 104 | 105 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:91 106 | msgid "Single-instancing now working" 107 | msgstr "" 108 | 109 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:92 110 | msgid "Improved project code quality" 111 | msgstr "" 112 | 113 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:93 114 | msgid "Remember size,position, and maximized" 115 | msgstr "" 116 | 117 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:94 118 | msgid "Fixed bug opening welcome view from web store" 119 | msgstr "" 120 | 121 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:102 122 | msgid "Fixed the icon not found crash" 123 | msgstr "" 124 | 125 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:103 126 | msgid "Added screenshot for snaps" 127 | msgstr "" 128 | 129 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:104 130 | msgid "Refactored the detail view" 131 | msgstr "" 132 | 133 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:105 134 | msgid "Updated the screenshot for appcenter" 135 | msgstr "" 136 | 137 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:106 138 | msgid "Fixed a lot of warnings" 139 | msgstr "" 140 | 141 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:107 142 | msgid "Added OARS rating" 143 | msgstr "" 144 | 145 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:113 146 | msgid "Icons, single-instance, and translations fix" 147 | msgstr "" 148 | 149 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:115 150 | msgid "Icons finally work!" 151 | msgstr "" 152 | 153 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:116 154 | msgid "Application is now single-instance" 155 | msgstr "" 156 | 157 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:117 158 | msgid "Translations are working again" 159 | msgstr "" 160 | 161 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:123 162 | msgid "" 163 | "Fixed local snap installing, added channel support, added some shortcuts" 164 | msgstr "" 165 | 166 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:125 167 | msgid "Fixed opening local snap files" 168 | msgstr "" 169 | 170 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:126 171 | msgid "Added ability to install from other channels" 172 | msgstr "" 173 | 174 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:127 175 | msgid "Channels are now shown on list and detail pages" 176 | msgstr "" 177 | 178 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:128 179 | msgid "Added application shortcuts" 180 | msgstr "" 181 | 182 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:134 183 | msgid "Moved to meson, apps can be opened from snaptastic again" 184 | msgstr "" 185 | 186 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:136 187 | msgid "Moved to Meson" 188 | msgstr "" 189 | 190 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:137 191 | msgid "Fixed the About link" 192 | msgstr "" 193 | 194 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:138 195 | msgid "Added French translation" 196 | msgstr "" 197 | 198 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:139 199 | msgid "Corrected some spelling" 200 | msgstr "" 201 | 202 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:140 203 | msgid "Fixed opening apps" 204 | msgstr "" 205 | 206 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:146 207 | msgid "Juno Fixes and more translations" 208 | msgstr "" 209 | 210 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:148 211 | msgid "Added Catalan and spanish translations" 212 | msgstr "" 213 | 214 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:149 215 | msgid "Aligned DetailViewBanner for Juno" 216 | msgstr "" 217 | 218 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:155 219 | msgid "Houston CI" 220 | msgstr "" 221 | 222 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:157 223 | msgid "Added Houston Ci and necessary changes" 224 | msgstr "" 225 | 226 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:163 227 | msgid "Japanese translation and Lithuanian translation fix" 228 | msgstr "" 229 | 230 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:165 231 | msgid "Added Japanese translation" 232 | msgstr "" 233 | 234 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:166 235 | msgid "Added a fix for the Lithuanian translation" 236 | msgstr "" 237 | 238 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:172 239 | msgid "Dutch translation and navigation bugfix" 240 | msgstr "" 241 | 242 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:174 243 | msgid "Added dutch translation" 244 | msgstr "" 245 | 246 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:175 247 | msgid "Added a fix for the navigation bug" 248 | msgstr "" 249 | 250 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:181 251 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:191 252 | msgid "Moved to glib" 253 | msgstr "" 254 | 255 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:183 256 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:193 257 | msgid "Added 'about snaptastic' action" 258 | msgstr "" 259 | 260 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:184 261 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:194 262 | msgid "Moved from snap cli to snapd-glib" 263 | msgstr "" 264 | 265 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:185 266 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:195 267 | msgid "Added price for appcenter" 268 | msgstr "" 269 | 270 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:201 271 | msgid "Fixed some bugs, cleaned up some code" 272 | msgstr "" 273 | 274 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:203 275 | msgid "Removed option to select multiple snaps" 276 | msgstr "" 277 | 278 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:204 279 | msgid "Fixed bug where sometimes wrong buttons would show up in header" 280 | msgstr "" 281 | 282 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:205 283 | msgid "Cleaned up alot of code" 284 | msgstr "" 285 | 286 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:206 287 | msgid "Updated language files" 288 | msgstr "" 289 | 290 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:207 291 | msgid "Updated app description" 292 | msgstr "" 293 | 294 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:213 295 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:215 296 | msgid "Added view for not yet installed packages" 297 | msgstr "" 298 | 299 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:216 300 | msgid "Added extra screenshot for appcenter" 301 | msgstr "" 302 | 303 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:217 304 | msgid "Switched background-color and text color for appcenter" 305 | msgstr "" 306 | 307 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:223 308 | msgid "List view overhaul" 309 | msgstr "" 310 | 311 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:225 312 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:235 313 | msgid "Updated the detail view" 314 | msgstr "" 315 | 316 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:226 317 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:236 318 | msgid "Removed the buttons from the list view" 319 | msgstr "" 320 | 321 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:227 322 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:238 323 | msgid "Removed delete and install button for the snap core" 324 | msgstr "" 325 | 326 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:233 327 | msgid "List view overhaul, and a link to snapcraft" 328 | msgstr "" 329 | 330 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:237 331 | msgid "Added a link to snapcraft" 332 | msgstr "" 333 | 334 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:244 335 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:254 336 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:264 337 | msgid "Install straight from snapcraft.io!" 338 | msgstr "" 339 | 340 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:246 341 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:256 342 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:266 343 | msgid "Application will now open on snap:// links" 344 | msgstr "" 345 | 346 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:247 347 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:257 348 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:267 349 | msgid "You can now launch your apps from the installed view" 350 | msgstr "" 351 | 352 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:248 353 | msgid "Fixed appdata file and changed a line for appcenter" 354 | msgstr "" 355 | 356 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:258 357 | msgid "Fixed appdata file" 358 | msgstr "" 359 | 360 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:273 361 | msgid "The app is now Ubuntu styled" 362 | msgstr "" 363 | 364 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:275 365 | msgid "Made welcome text Title Case" 366 | msgstr "" 367 | 368 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:276 369 | msgid "Set rounded bottom corners on window" 370 | msgstr "" 371 | 372 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:277 373 | msgid "Added ubuntu styling through whole app" 374 | msgstr "" 375 | 376 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:278 377 | msgid "Fixed some error typos" 378 | msgstr "" 379 | 380 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:279 381 | msgid "Fixed appcenter text color" 382 | msgstr "" 383 | 384 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:280 385 | msgid "Added application to system category for appcenter" 386 | msgstr "" 387 | 388 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:286 389 | msgid "A nicer not-found view!" 390 | msgstr "" 391 | 392 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:288 393 | msgid "Vertical aligned delete dialog buttons" 394 | msgstr "" 395 | 396 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:289 397 | msgid "Added a nicer view for no results" 398 | msgstr "" 399 | 400 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:295 401 | msgid "Modified alert dialog and added snapd as dependency" 402 | msgstr "" 403 | 404 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:297 405 | msgid "Changed alert cancel button to close button" 406 | msgstr "" 407 | 408 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:298 409 | msgid "alert is now positioned to center of app" 410 | msgstr "" 411 | 412 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:299 413 | msgid "Application now depends on snapd" 414 | msgstr "" 415 | 416 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:300 417 | msgid "Updated icons" 418 | msgstr "" 419 | 420 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:306 421 | msgid "Fixed the appdata xml" 422 | msgstr "" 423 | 424 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:308 425 | msgid "Fixed xml" 426 | msgstr "" 427 | 428 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:314 429 | msgid "Removed alert and fixed polkit calls" 430 | msgstr "" 431 | 432 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:316 433 | msgid "Removed alert" 434 | msgstr "" 435 | 436 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:317 437 | msgid "Fixed polkit calls" 438 | msgstr "" 439 | 440 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:323 441 | msgid "Updated readme and debian/control file" 442 | msgstr "" 443 | 444 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:325 445 | msgid "Updated readme, removed lines which dont apply" 446 | msgstr "" 447 | 448 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:326 449 | msgid "Updated debian/control file" 450 | msgstr "" 451 | 452 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:332 453 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:334 454 | msgid "First release" 455 | msgstr "" 456 | 457 | #: data/com.github.bartzaalberg.snaptastic.appdata.xml.in:356 458 | msgid "Bart Zaalberg" 459 | msgstr "" 460 | 461 | #: data/com.github.bartzaalberg.snaptastic.desktop.in:8 462 | msgid "com.github.bartzaalberg.snaptastic" 463 | msgstr "" 464 | 465 | #: data/com.github.bartzaalberg.snaptastic.desktop.in:13 466 | msgid "GUI;Snaps;" 467 | msgstr "" 468 | 469 | #: data/com.github.bartzaalberg.snaptastic.desktop.in:18 470 | msgid "About Snaptastic" 471 | msgstr "" 472 | -------------------------------------------------------------------------------- /po/extra/meson.build: -------------------------------------------------------------------------------- 1 | i18n.gettext('extra', 2 | args: ['--directory='+meson.source_root(), '--from-code=UTF-8'], 3 | install: false, 4 | preset: 'glib' 5 | ) 6 | -------------------------------------------------------------------------------- /po/fr.po: -------------------------------------------------------------------------------- 1 | # French translations for com.github.bartzaalberg.snaptastic package. 2 | # Copyright (C) 2019 THE com.github.bartzaalberg.snaptastic'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the com.github.bartzaalberg.snaptastic package. 4 | # NathanBnm, 2019. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: com.github.bartzaalberg.snaptastic\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2019-06-27 01:37+0400\n" 11 | "PO-Revision-Date: 2019-03-24 16:53+0100\n" 12 | "Last-Translator: NathanBnm\n" 13 | "Language-Team: Français\n" 14 | "Language: fr\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" 19 | 20 | #: src/ListBoxRow.vala:48 21 | msgid "Refresh" 22 | msgstr "Mettre à jour" 23 | 24 | #: src/ListBoxRow.vala:50 25 | msgid "Update this to latest version" 26 | msgstr "Mettre à jour vers la dernière version" 27 | 28 | #: src/ListBoxRow.vala:64 29 | msgid "Uninstall" 30 | msgstr "Désinstaller" 31 | 32 | #: src/ListBoxRow.vala:66 33 | msgid "Uninstall this application" 34 | msgstr "Désinstaller cette application" 35 | 36 | #: src/ListBoxRow.vala:80 src/ListBoxRow.vala:82 37 | msgid "Install" 38 | msgstr "Installer" 39 | 40 | #: src/ListBoxRow.vala:86 41 | msgid "Install this application" 42 | msgstr "Installer cette application" 43 | 44 | #: src/ListBoxRow.vala:100 src/Views/WelcomeView.vala:12 45 | msgid "Open" 46 | msgstr "Ouvrir" 47 | 48 | #: src/ListBoxRow.vala:102 49 | msgid "Run the application" 50 | msgstr "Exécuter l'application" 51 | 52 | #: src/Dialogs/DeleteConfirm.vala:9 53 | msgid "Delete this application?" 54 | msgstr "Supprimer cette application ?" 55 | 56 | #: src/Dialogs/DeleteConfirm.vala:10 57 | msgid "Are you sure you want to delete this application?" 58 | msgstr "Êtes-vous sûr de vouloir supprimer cette application ?" 59 | 60 | #: src/Views/NotFoundView.vala:7 61 | msgid "No snaps were found" 62 | msgstr "Aucun snap n'a été trouvé" 63 | 64 | #: src/Views/NotFoundView.vala:7 65 | msgid "Please install some" 66 | msgstr "Veuillez en installer" 67 | 68 | #: src/Views/WelcomeView.vala:11 69 | msgid "Install Some Snaps" 70 | msgstr "Installer quelques Snaps" 71 | 72 | #: src/Views/WelcomeView.vala:11 73 | msgid "Click open to select a downloaded snap file" 74 | msgstr "Cliquez sur ouvrir pour sélectionner un fichier snap téléchargé" 75 | 76 | #: src/Views/WelcomeView.vala:12 77 | msgid "Browse to open a single snap file" 78 | msgstr "Parcourir pour ouvrir un fichier Snap unique" 79 | 80 | #: src/Views/ProgressView.vala:7 81 | msgid "Please Wait…" 82 | msgstr "Veuillez patienter…" 83 | 84 | #: src/Views/ProgressView.vala:7 85 | msgid "Operation is in progress…" 86 | msgstr "L'opération est en cours…" 87 | 88 | #: src/Components/HeaderBar.vala:38 89 | msgid "Home" 90 | msgstr "Accueil" 91 | 92 | #: src/Components/HeaderBar.vala:39 93 | msgid "Go to home" 94 | msgstr "Aller à l'accueil" 95 | 96 | #: src/Components/HeaderBar.vala:43 97 | msgid "Updates" 98 | msgstr "Mises à jour" 99 | 100 | #: src/Components/HeaderBar.vala:44 101 | msgid "Go to installed applications" 102 | msgstr "Aller aux applications installées" 103 | 104 | #: src/Components/HeaderBar.vala:57 105 | msgid "Back" 106 | msgstr "Retour" 107 | 108 | #: src/Components/HeaderBar.vala:69 109 | msgid "Light mode" 110 | msgstr "Thème clair" 111 | 112 | #: src/Components/HeaderBar.vala:70 113 | msgid "Dark mode" 114 | msgstr "Thème sombre" 115 | -------------------------------------------------------------------------------- /po/it.po: -------------------------------------------------------------------------------- 1 | # Itlian translations for com.github.bartzaalberg.snaptastic package. 2 | # Copyright (C) 2019 THE com.github.bartzaalberg.snaptastic'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the com.github.bartzaalberg.snaptastic package. 4 | # Mirko Brombin , 2020. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: com.github.bartzaalberg.snaptastic\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2020-04-24 14:37+0400\n" 11 | "PO-Revision-Date: 2020-04-24 14:42+0200\n" 12 | "Last-Translator: Mirko Brombin\n" 13 | "Language-Team: Italian\n" 14 | "Language: it\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" 19 | "X-Generator: Poedit 2.0.6\n" 20 | 21 | #: src/ListBoxRow.vala:48 22 | msgid "Refresh" 23 | msgstr "Ricarica" 24 | 25 | #: src/ListBoxRow.vala:50 26 | msgid "Update this to latest version" 27 | msgstr "Aggiorna all'ultima versione" 28 | 29 | #: src/ListBoxRow.vala:64 30 | msgid "Uninstall" 31 | msgstr "Disinstalla" 32 | 33 | #: src/ListBoxRow.vala:66 34 | msgid "Uninstall this application" 35 | msgstr "Disinstalla applicazione" 36 | 37 | #: src/ListBoxRow.vala:80 src/ListBoxRow.vala:82 38 | msgid "Install" 39 | msgstr "Installa" 40 | 41 | #: src/ListBoxRow.vala:86 42 | msgid "Install this application" 43 | msgstr "Installa applicazione" 44 | 45 | #: src/ListBoxRow.vala:100 src/Views/WelcomeView.vala:12 46 | msgid "Open" 47 | msgstr "Apri" 48 | 49 | #: src/ListBoxRow.vala:102 50 | msgid "Run the application" 51 | msgstr "Avvia applicazione" 52 | 53 | #: src/Dialogs/DeleteConfirm.vala:9 54 | msgid "Delete this application?" 55 | msgstr "Eliminare l'applicazione?" 56 | 57 | #: src/Dialogs/DeleteConfirm.vala:10 58 | msgid "Are you sure you want to delete this application?" 59 | msgstr "Sicuro di voler eliminare l'applicazione?" 60 | 61 | #: src/Views/NotFoundView.vala:7 62 | msgid "No snaps were found" 63 | msgstr "Nessun pacchetto snap trovato" 64 | 65 | #: src/Views/NotFoundView.vala:7 66 | msgid "Please install some" 67 | msgstr "Installane alcuni" 68 | 69 | #: src/Views/WelcomeView.vala:11 70 | msgid "Install Some Snaps" 71 | msgstr "Installa qualche pacchetto snap" 72 | 73 | #: src/Views/WelcomeView.vala:11 74 | msgid "Click open to select a downloaded snap file" 75 | msgstr "Clicca Apri per selezionare un pacchetto snap scaricato" 76 | 77 | #: src/Views/WelcomeView.vala:12 78 | msgid "Browse to open a single snap file" 79 | msgstr "Sfoglia per caricare un pacchetto snap" 80 | 81 | #: src/Views/ProgressView.vala:7 82 | msgid "Please Wait…" 83 | msgstr "Attendi…" 84 | 85 | #: src/Views/ProgressView.vala:7 86 | msgid "Operation is in progress…" 87 | msgstr "Operazione in corso…" 88 | 89 | #: src/Components/HeaderBar.vala:38 90 | msgid "Home" 91 | msgstr "Inizio" 92 | 93 | #: src/Components/HeaderBar.vala:39 94 | msgid "Go to home" 95 | msgstr "Torna all'inizio" 96 | 97 | #: src/Components/HeaderBar.vala:43 98 | msgid "Updates" 99 | msgstr "Aggiornamenti" 100 | 101 | #: src/Components/HeaderBar.vala:44 102 | msgid "Go to installed applications" 103 | msgstr "Vai alle applicazioni installate" 104 | 105 | #: src/Components/HeaderBar.vala:57 106 | msgid "Back" 107 | msgstr "Indietro" 108 | 109 | #: src/Components/HeaderBar.vala:69 110 | msgid "Light mode" 111 | msgstr "Modalità chiara" 112 | 113 | #: src/Components/HeaderBar.vala:70 114 | msgid "Dark mode" 115 | msgstr "Modalità scura" 116 | -------------------------------------------------------------------------------- /po/ja.po: -------------------------------------------------------------------------------- 1 | # Japanese translations for com.github.bartzaalberg.snaptastic package. 2 | # Copyright (C) 2019 THE com.github.bartzaalberg.snaptastic'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the com.github.bartzaalberg.snaptastic package. 4 | # Ryo Nakano , 2019. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: com.github.bartzaalberg.snaptastic\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2019-06-27 01:37+0400\n" 11 | "PO-Revision-Date: 2019-06-09 10:01+0900\n" 12 | "Last-Translator: Ryo Nakano \n" 13 | "Language-Team: Japanese\n" 14 | "Language: ja\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=1; plural=0;\n" 19 | "X-Generator: Poedit 2.2.3\n" 20 | 21 | #: src/ListBoxRow.vala:48 22 | msgid "Refresh" 23 | msgstr "更新" 24 | 25 | #: src/ListBoxRow.vala:50 26 | msgid "Update this to latest version" 27 | msgstr "最新のバージョンにアップデートします" 28 | 29 | #: src/ListBoxRow.vala:64 30 | msgid "Uninstall" 31 | msgstr "アンインストール" 32 | 33 | #: src/ListBoxRow.vala:66 34 | msgid "Uninstall this application" 35 | msgstr "このアプリケーションをアンインストールします" 36 | 37 | #: src/ListBoxRow.vala:80 src/ListBoxRow.vala:82 38 | msgid "Install" 39 | msgstr "インストール" 40 | 41 | #: src/ListBoxRow.vala:86 42 | msgid "Install this application" 43 | msgstr "このアプリケーションをインストールします" 44 | 45 | #: src/ListBoxRow.vala:100 src/Views/WelcomeView.vala:12 46 | msgid "Open" 47 | msgstr "開く" 48 | 49 | #: src/ListBoxRow.vala:102 50 | msgid "Run the application" 51 | msgstr "アプリケーションを実行します" 52 | 53 | #: src/Dialogs/DeleteConfirm.vala:9 54 | msgid "Delete this application?" 55 | msgstr "このアプリケーションを削除しますか?" 56 | 57 | #: src/Dialogs/DeleteConfirm.vala:10 58 | msgid "Are you sure you want to delete this application?" 59 | msgstr "このアプリケーションを削除してもよろしいですか?" 60 | 61 | #: src/Views/NotFoundView.vala:7 62 | msgid "No snaps were found" 63 | msgstr "Snap アプリが見つかりません" 64 | 65 | #: src/Views/NotFoundView.vala:7 66 | msgid "Please install some" 67 | msgstr "Snap アプリをインストールしてください" 68 | 69 | #: src/Views/WelcomeView.vala:11 70 | msgid "Install Some Snaps" 71 | msgstr "Snap ファイルをインストールしましょう" 72 | 73 | #: src/Views/WelcomeView.vala:11 74 | msgid "Click open to select a downloaded snap file" 75 | msgstr "" 76 | "\"開く\" をクリックしてダウンロードした Snap ファイルを選択してください" 77 | 78 | #: src/Views/WelcomeView.vala:12 79 | msgid "Browse to open a single snap file" 80 | msgstr "ブラウズして Snap ファイルを開きます" 81 | 82 | #: src/Views/ProgressView.vala:7 83 | msgid "Please Wait…" 84 | msgstr "お待ちください…" 85 | 86 | #: src/Views/ProgressView.vala:7 87 | msgid "Operation is in progress…" 88 | msgstr "処理が進行しています…" 89 | 90 | #: src/Components/HeaderBar.vala:38 91 | msgid "Home" 92 | msgstr "ホーム" 93 | 94 | #: src/Components/HeaderBar.vala:39 95 | msgid "Go to home" 96 | msgstr "メインページに移動します" 97 | 98 | #: src/Components/HeaderBar.vala:43 99 | msgid "Updates" 100 | msgstr "アップデート" 101 | 102 | #: src/Components/HeaderBar.vala:44 103 | msgid "Go to installed applications" 104 | msgstr "インストール済みアプリケーションのページに移動します" 105 | 106 | #: src/Components/HeaderBar.vala:57 107 | msgid "Back" 108 | msgstr "戻る" 109 | 110 | #: src/Components/HeaderBar.vala:69 111 | msgid "Light mode" 112 | msgstr "ライトモード" 113 | 114 | #: src/Components/HeaderBar.vala:70 115 | msgid "Dark mode" 116 | msgstr "ダークモード" 117 | -------------------------------------------------------------------------------- /po/lt.po: -------------------------------------------------------------------------------- 1 | # Lithuanian translations for com.github.bartzaalberg.snaptastic package. 2 | # Copyright (C) 2019 THE com.github.bartzaalberg.snaptastic'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the com.github.bartzaalberg.snaptastic package. 4 | # Automatically generated, 2019. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: com.github.bartzaalberg.snaptastic\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2019-06-27 01:37+0400\n" 11 | "PO-Revision-Date: 2019-03-24 16:53+0100\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: lt\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" 19 | "%100<10 || n%100>=20) ? 1 : 2);\n" 20 | 21 | #: src/ListBoxRow.vala:48 22 | msgid "Refresh" 23 | msgstr "Įkelti iš naujo" 24 | 25 | #: src/ListBoxRow.vala:50 26 | msgid "Update this to latest version" 27 | msgstr "Atnaujinti į naujausią versiją" 28 | 29 | #: src/ListBoxRow.vala:64 30 | msgid "Uninstall" 31 | msgstr "Šalinti" 32 | 33 | #: src/ListBoxRow.vala:66 34 | msgid "Uninstall this application" 35 | msgstr "Pašalinti šią programą" 36 | 37 | #: src/ListBoxRow.vala:80 src/ListBoxRow.vala:82 38 | msgid "Install" 39 | msgstr "Įdiegti" 40 | 41 | #: src/ListBoxRow.vala:86 42 | msgid "Install this application" 43 | msgstr "Įdiegti šią programą" 44 | 45 | #: src/ListBoxRow.vala:100 src/Views/WelcomeView.vala:12 46 | msgid "Open" 47 | msgstr "Atverti" 48 | 49 | #: src/ListBoxRow.vala:102 50 | msgid "Run the application" 51 | msgstr "Paleisti programą" 52 | 53 | #: src/Dialogs/DeleteConfirm.vala:9 54 | msgid "Delete this application?" 55 | msgstr "Ištrinti šią programą?" 56 | 57 | #: src/Dialogs/DeleteConfirm.vala:10 58 | msgid "Are you sure you want to delete this application?" 59 | msgstr "Ar tikrai norite ištrinti šią programą?" 60 | 61 | #: src/Views/NotFoundView.vala:7 62 | msgid "No snaps were found" 63 | msgstr "Nebuvo rasta jokių snap paketų" 64 | 65 | #: src/Views/NotFoundView.vala:7 66 | msgid "Please install some" 67 | msgstr "Prašome įdiegti bent vieną" 68 | 69 | #: src/Views/WelcomeView.vala:11 70 | msgid "Install Some Snaps" 71 | msgstr "Įdiegti snap paketus" 72 | 73 | #: src/Views/WelcomeView.vala:11 74 | msgid "Click open to select a downloaded snap file" 75 | msgstr "Norėdami pasirinkti atsisiųsta snap failą, spustelėkite \"Atverti\"" 76 | 77 | #: src/Views/WelcomeView.vala:12 78 | msgid "Browse to open a single snap file" 79 | msgstr "Naršykite, norėdami atverti atskirą snap failą" 80 | 81 | #: src/Views/ProgressView.vala:7 82 | msgid "Please Wait…" 83 | msgstr "Prašome palaukti…" 84 | 85 | #: src/Views/ProgressView.vala:7 86 | msgid "Operation is in progress…" 87 | msgstr "Operacija eigoje…" 88 | 89 | #: src/Components/HeaderBar.vala:38 90 | msgid "Home" 91 | msgstr "" 92 | 93 | #: src/Components/HeaderBar.vala:39 94 | msgid "Go to home" 95 | msgstr "" 96 | 97 | #: src/Components/HeaderBar.vala:43 98 | msgid "Updates" 99 | msgstr "" 100 | 101 | #: src/Components/HeaderBar.vala:44 102 | msgid "Go to installed applications" 103 | msgstr "" 104 | 105 | #: src/Components/HeaderBar.vala:57 106 | msgid "Back" 107 | msgstr "Atgal" 108 | 109 | #: src/Components/HeaderBar.vala:69 110 | msgid "Light mode" 111 | msgstr "" 112 | 113 | #: src/Components/HeaderBar.vala:70 114 | msgid "Dark mode" 115 | msgstr "" 116 | -------------------------------------------------------------------------------- /po/meson.build: -------------------------------------------------------------------------------- 1 | i18n.gettext(meson.project_name(), 2 | args: ['--directory='+meson.source_root(), '--from-code=UTF-8'], 3 | preset: 'glib' 4 | ) 5 | subdir('extra') 6 | -------------------------------------------------------------------------------- /po/nl.po: -------------------------------------------------------------------------------- 1 | # Dutch translations for com.github.bartzaalberg.snaptastic package. 2 | # Copyright (C) 2019 THE com.github.bartzaalberg.snaptastic'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the com.github.bartzaalberg.snaptastic package. 4 | # Moo, 2019. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: com.github.bartzaalberg.snaptastic\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2019-06-27 01:37+0400\n" 11 | "PO-Revision-Date: 2019-03-24 16:53+0100\n" 12 | "Last-Translator: Moo\n" 13 | "Language-Team: none\n" 14 | "Language: nl\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 19 | 20 | #: src/ListBoxRow.vala:48 21 | msgid "Refresh" 22 | msgstr "Verversen" 23 | 24 | #: src/ListBoxRow.vala:50 25 | msgid "Update this to latest version" 26 | msgstr "Update deze applicatie naar de laatste versie" 27 | 28 | #: src/ListBoxRow.vala:64 29 | msgid "Uninstall" 30 | msgstr "Deinstalleer" 31 | 32 | #: src/ListBoxRow.vala:66 33 | msgid "Uninstall this application" 34 | msgstr "Deinstalleer deze applicatie" 35 | 36 | #: src/ListBoxRow.vala:80 src/ListBoxRow.vala:82 37 | msgid "Install" 38 | msgstr "Installeren" 39 | 40 | #: src/ListBoxRow.vala:86 41 | msgid "Install this application" 42 | msgstr "Installeer deze applicatie" 43 | 44 | #: src/ListBoxRow.vala:100 src/Views/WelcomeView.vala:12 45 | msgid "Open" 46 | msgstr "Openen" 47 | 48 | #: src/ListBoxRow.vala:102 49 | msgid "Run the application" 50 | msgstr "Open de applicatie" 51 | 52 | #: src/Dialogs/DeleteConfirm.vala:9 53 | msgid "Delete this application?" 54 | msgstr "Verwijder deze applicatie?" 55 | 56 | #: src/Dialogs/DeleteConfirm.vala:10 57 | msgid "Are you sure you want to delete this application?" 58 | msgstr "Weet u zeker dat u deze applicatie wilt verwijderen?" 59 | 60 | #: src/Views/NotFoundView.vala:7 61 | msgid "No snaps were found" 62 | msgstr "Er zijn geen snaps gevonden" 63 | 64 | #: src/Views/NotFoundView.vala:7 65 | msgid "Please install some" 66 | msgstr "Installeer er eens wat" 67 | 68 | #: src/Views/WelcomeView.vala:11 69 | msgid "Install Some Snaps" 70 | msgstr "Installeer Snaps" 71 | 72 | #: src/Views/WelcomeView.vala:11 73 | msgid "Click open to select a downloaded snap file" 74 | msgstr "Klik open om een gedownloade snap te selecteren" 75 | 76 | #: src/Views/WelcomeView.vala:12 77 | msgid "Browse to open a single snap file" 78 | msgstr "Bladeren om een snap te selecteren" 79 | 80 | #: src/Views/ProgressView.vala:7 81 | msgid "Please Wait…" 82 | msgstr "Even geduld…" 83 | 84 | #: src/Views/ProgressView.vala:7 85 | msgid "Operation is in progress…" 86 | msgstr "Handeling wordt momenteel verricht…" 87 | 88 | #: src/Components/HeaderBar.vala:38 89 | msgid "Home" 90 | msgstr "Home" 91 | 92 | #: src/Components/HeaderBar.vala:39 93 | msgid "Go to home" 94 | msgstr "Ga terug naar home" 95 | 96 | #: src/Components/HeaderBar.vala:43 97 | msgid "Updates" 98 | msgstr "Updates" 99 | 100 | #: src/Components/HeaderBar.vala:44 101 | msgid "Go to installed applications" 102 | msgstr "Ga naar geinstalleerde applicaties" 103 | 104 | #: src/Components/HeaderBar.vala:57 105 | msgid "Back" 106 | msgstr "Terug" 107 | 108 | #: src/Components/HeaderBar.vala:69 109 | msgid "Light mode" 110 | msgstr "Lichte modus" 111 | 112 | #: src/Components/HeaderBar.vala:70 113 | msgid "Dark mode" 114 | msgstr "Donkere modus" 115 | -------------------------------------------------------------------------------- /po/ru.po: -------------------------------------------------------------------------------- 1 | # Russian translations for com.github.bartzaalberg.snaptastic package. 2 | # Copyright (C) 2019 THE com.github.bartzaalberg.snaptastic'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the com.github.bartzaalberg.snaptastic package. 4 | # Automatically generated, 2019. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: com.github.bartzaalberg.snaptastic\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2019-06-27 01:37+0400\n" 11 | "PO-Revision-Date: 2019-06-27 02:13+0400\n" 12 | "Last-Translator: Andrey Kultyapov \n" 13 | "Language-Team: none\n" 14 | "Language: ru\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" 19 | "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 20 | "X-Generator: Poedit 2.2.3\n" 21 | 22 | #: src/ListBoxRow.vala:48 23 | msgid "Refresh" 24 | msgstr "Обновить" 25 | 26 | #: src/ListBoxRow.vala:50 27 | msgid "Update this to latest version" 28 | msgstr "Обновление до последней версии" 29 | 30 | #: src/ListBoxRow.vala:64 31 | msgid "Uninstall" 32 | msgstr "Удалить" 33 | 34 | #: src/ListBoxRow.vala:66 35 | msgid "Uninstall this application" 36 | msgstr "Удаление приложения" 37 | 38 | #: src/ListBoxRow.vala:80 src/ListBoxRow.vala:82 39 | msgid "Install" 40 | msgstr "Установить" 41 | 42 | #: src/ListBoxRow.vala:86 43 | msgid "Install this application" 44 | msgstr "Установка этого приложения" 45 | 46 | #: src/ListBoxRow.vala:100 src/Views/WelcomeView.vala:12 47 | msgid "Open" 48 | msgstr "Открыть" 49 | 50 | #: src/ListBoxRow.vala:102 51 | msgid "Run the application" 52 | msgstr "Запуск приложения" 53 | 54 | #: src/Dialogs/DeleteConfirm.vala:9 55 | msgid "Delete this application?" 56 | msgstr "Удалить это приложение?" 57 | 58 | #: src/Dialogs/DeleteConfirm.vala:10 59 | msgid "Are you sure you want to delete this application?" 60 | msgstr "Вы уверены, что хотите удалить это приложение?" 61 | 62 | #: src/Views/NotFoundView.vala:7 63 | msgid "No snaps were found" 64 | msgstr "Snap-пакеты не найдены" 65 | 66 | #: src/Views/NotFoundView.vala:7 67 | msgid "Please install some" 68 | msgstr "Пожалуйста установите некоторые" 69 | 70 | #: src/Views/WelcomeView.vala:11 71 | msgid "Install Some Snaps" 72 | msgstr "Устанавка snap-пакетов" 73 | 74 | #: src/Views/WelcomeView.vala:11 75 | msgid "Click open to select a downloaded snap file" 76 | msgstr "Нажмите \"Открыть\", чтобы выбрать загруженный snap-файл" 77 | 78 | #: src/Views/WelcomeView.vala:12 79 | msgid "Browse to open a single snap file" 80 | msgstr "Открытие одиночного snap-файла" 81 | 82 | #: src/Views/ProgressView.vala:7 83 | msgid "Please Wait…" 84 | msgstr "Пожалуйста, подождите…" 85 | 86 | #: src/Views/ProgressView.vala:7 87 | msgid "Operation is in progress…" 88 | msgstr "Операция в процессе…" 89 | 90 | #: src/Components/HeaderBar.vala:38 91 | msgid "Home" 92 | msgstr "Главная" 93 | 94 | #: src/Components/HeaderBar.vala:39 95 | msgid "Go to home" 96 | msgstr "Переход на главную страницу" 97 | 98 | #: src/Components/HeaderBar.vala:43 99 | msgid "Updates" 100 | msgstr "Обновления" 101 | 102 | #: src/Components/HeaderBar.vala:44 103 | msgid "Go to installed applications" 104 | msgstr "Переход к установленным приложениям" 105 | 106 | #: src/Components/HeaderBar.vala:57 107 | msgid "Back" 108 | msgstr "Назад" 109 | 110 | #: src/Components/HeaderBar.vala:69 111 | msgid "Light mode" 112 | msgstr "Светлая тема" 113 | 114 | #: src/Components/HeaderBar.vala:70 115 | msgid "Dark mode" 116 | msgstr "Темная тема" 117 | -------------------------------------------------------------------------------- /po/tr.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the com.github.bartzaalberg.snaptastic package. 4 | # ibrakap , 2019. 5 | # 6 | #, fuzzy 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: com.github.bartzaalberg.snaptastic\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2019-03-24 17:04+0100\n" 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13 | "Last-Translator: FULL NAME \n" 14 | "Language-Team: LANGUAGE \n" 15 | "Language: \n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | 20 | #: src/ListBoxRow.vala:48 21 | msgid "Refresh" 22 | msgstr "Yenile" 23 | 24 | #: src/ListBoxRow.vala:50 25 | msgid "Update this to latest version" 26 | msgstr "Son sürüme yükselt" 27 | 28 | #: src/ListBoxRow.vala:64 29 | msgid "Uninstall" 30 | msgstr "Kaldır" 31 | 32 | #: src/ListBoxRow.vala:66 33 | msgid "Uninstall this application" 34 | msgstr "Bu uygulamayı kaldır" 35 | 36 | #: src/ListBoxRow.vala:80 src/ListBoxRow.vala:82 37 | msgid "Install" 38 | msgstr "Kur" 39 | 40 | #: src/ListBoxRow.vala:86 41 | msgid "Install this application" 42 | msgstr "Bu uygulamayı kur" 43 | 44 | #: src/ListBoxRow.vala:100 src/Views/WelcomeView.vala:12 45 | msgid "Open" 46 | msgstr "Aç" 47 | 48 | #: src/ListBoxRow.vala:102 49 | msgid "Run the application" 50 | msgstr "Uygulamayı çalıştır" 51 | 52 | #: src/Dialogs/DeleteConfirm.vala:9 53 | msgid "Delete this application?" 54 | msgstr "Bu uygulamayı sil?" 55 | 56 | #: src/Dialogs/DeleteConfirm.vala:10 57 | msgid "Are you sure you want to delete this application?" 58 | msgstr "Bu uygulamayı silmek istediğinize emin misiniz?" 59 | 60 | #: src/Views/NotFoundView.vala:7 61 | msgid "No snaps were found" 62 | msgstr "Snaplar bulunamadı" 63 | 64 | #: src/Views/NotFoundView.vala:7 65 | msgid "Please install some" 66 | msgstr "Lütfen biraz kur" 67 | 68 | #: src/Views/WelcomeView.vala:11 69 | msgid "Install Some Snaps" 70 | msgstr "Biraz snap kur" 71 | 72 | #: src/Views/WelcomeView.vala:11 73 | msgid "Click open to select a downloaded snap file" 74 | msgstr "İndirilmiş snap dosyasını açmak için tıklayın" 75 | 76 | #: src/Views/WelcomeView.vala:12 77 | msgid "Browse to open a single snap file" 78 | msgstr "Snap dosyası için göz atın" 79 | 80 | #: src/Views/ProgressView.vala:7 81 | msgid "Please Wait…" 82 | msgstr "Lütfen Bekleyin…" 83 | 84 | #: src/Views/ProgressView.vala:7 85 | msgid "Operation is in progress…" 86 | msgstr "İşlem sürüyor…" 87 | 88 | #: src/Components/HeaderBar.vala:38 89 | msgid "Home" 90 | msgstr "Anasayfa" 91 | 92 | #: src/Components/HeaderBar.vala:39 93 | msgid "Go to home" 94 | msgstr "Anasayfaya git" 95 | 96 | #: src/Components/HeaderBar.vala:43 97 | msgid "Updates" 98 | msgstr "Güncellemeler" 99 | 100 | #: src/Components/HeaderBar.vala:44 101 | msgid "Go to installed applications" 102 | msgstr "Kurulu uygulamalara git" 103 | 104 | #: src/Components/HeaderBar.vala:57 105 | msgid "Back" 106 | msgstr "Geri" 107 | 108 | #: src/Components/HeaderBar.vala:69 109 | msgid "Light mode" 110 | msgstr "Aydınlık mod" 111 | 112 | #: src/Components/HeaderBar.vala:70 113 | msgid "Dark mode" 114 | msgstr "Karanlık mod" 115 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unbelievableflavour/snaptastic/a329b4c058e0efe32a5bf7010d255b4f14cda9b2/screenshot.png -------------------------------------------------------------------------------- /screenshot2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unbelievableflavour/snaptastic/a329b4c058e0efe32a5bf7010d255b4f14cda9b2/screenshot2.png -------------------------------------------------------------------------------- /screenshot3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unbelievableflavour/snaptastic/a329b4c058e0efe32a5bf7010d255b4f14cda9b2/screenshot3.png -------------------------------------------------------------------------------- /screenshot4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unbelievableflavour/snaptastic/a329b4c058e0efe32a5bf7010d255b4f14cda9b2/screenshot4.png -------------------------------------------------------------------------------- /screenshot5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/unbelievableflavour/snaptastic/a329b4c058e0efe32a5bf7010d255b4f14cda9b2/screenshot5.png -------------------------------------------------------------------------------- /src/Application.vala: -------------------------------------------------------------------------------- 1 | using Granite.Widgets; 2 | 3 | namespace Application { 4 | public class App:Granite.Application { 5 | 6 | public static MainWindow window = null; 7 | public static string[] supported_mimetypes; 8 | public static GLib.Settings settings; 9 | 10 | private FileManager file_manager = FileManager.get_instance (); 11 | 12 | construct { 13 | flags |= ApplicationFlags.HANDLES_OPEN; 14 | application_id = Constants.APPLICATION_NAME; 15 | program_name = Constants.APPLICATION_NAME; 16 | settings = new GLib.Settings (Constants.APPLICATION_NAME); 17 | 18 | var app_info = new DesktopAppInfo (Constants.DESKTOP_NAME); 19 | try { 20 | app_info.set_as_default_for_type ("application/vnd.snap"); 21 | 22 | if (AppInfo.get_default_for_uri_scheme ("snap") == null) { 23 | app_info.set_as_default_for_type ("x-scheme-handler/snap"); 24 | } 25 | } catch (Error e) { 26 | critical ("Unable to set default for the settings scheme: %s", e.message); 27 | } 28 | } 29 | 30 | public override void open (File[] files, string hint) { 31 | var file = files[0]; 32 | if (file == null) { 33 | return; 34 | } 35 | 36 | file_manager.set_file (file); 37 | activate (); 38 | } 39 | 40 | protected override void activate () { 41 | new_window (); 42 | } 43 | 44 | public static int main (string[] args) { 45 | var app = new Application.App (); 46 | return app.run (args); 47 | } 48 | 49 | public void new_window () { 50 | var stack_manager = StackManager.get_instance (); 51 | 52 | if (window != null) { 53 | if (stack_manager.get_stack ().get_visible_child_name () == "progress-view") { 54 | window.present (); 55 | return; 56 | } 57 | 58 | window.recheck (); 59 | window.present (); 60 | return; 61 | } 62 | 63 | weak Gtk.IconTheme default_theme = Gtk.IconTheme.get_default (); 64 | default_theme.add_resource_path ("/com/github/bartzaalberg/snaptastic"); 65 | 66 | var provider = new Gtk.CssProvider (); 67 | provider.load_from_resource ("/com/github/bartzaalberg/snaptastic/application.css"); 68 | Gtk.StyleContext.add_provider_for_screen ( 69 | Gdk.Screen.get_default (), 70 | provider, 71 | Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION 72 | ); 73 | 74 | window = new MainWindow (this); 75 | go_to_last_saved_position (window); 76 | go_to_last_saved_size (window); 77 | 78 | window.show_all (); 79 | } 80 | 81 | private void go_to_last_saved_position (MainWindow main_window) { 82 | int window_x, window_y; 83 | settings.get ("window-position", "(ii)", out window_x, out window_y); 84 | if (window_x != -1 || window_y != -1) { 85 | window.move (window_x, window_y); 86 | } 87 | } 88 | 89 | private void go_to_last_saved_size (MainWindow main_window) { 90 | var rect = Gtk.Allocation (); 91 | 92 | settings.get ("window-size", "(ii)", out rect.width, out rect.height); 93 | window.set_allocation (rect); 94 | 95 | if (settings.get_boolean ("window-maximized")) { 96 | window.maximize (); 97 | } 98 | } 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /src/CommandHandler.vala: -------------------------------------------------------------------------------- 1 | using Snapd; 2 | 3 | namespace Application { 4 | public class CommandHandler : Object { 5 | 6 | private StackManager stack_manager = StackManager.get_instance (); 7 | string[] env = Environ.get (); 8 | string home_dir = Environment.get_home_dir (); 9 | 10 | public void delete_package (Package package) { 11 | spawn_async ("remove", package.get_name ()); 12 | } 13 | 14 | public void install_package (Package package) { 15 | if (package.get_channel () != "") { 16 | spawn_async ("install", package.get_name () + "/?channel=" + package.get_channel ()); 17 | } else { 18 | spawn_async ("install", package.get_name ()); 19 | } 20 | } 21 | 22 | public void update_package (Package package) { 23 | spawn_async ("update", package.get_name ()); 24 | } 25 | 26 | public void spawn_async (string option, string package_name) { 27 | 28 | MainLoop loop = new MainLoop (); 29 | 30 | string[] arguments = { 31 | "pkexec", 32 | "env", 33 | "HOME=" + home_dir, 34 | "com.github.bartzaalberg.snaptastic-wizard", 35 | option, 36 | package_name 37 | }; 38 | 39 | Pid child_pid; 40 | 41 | try { 42 | Process.spawn_async ("/", 43 | arguments, 44 | env, 45 | SpawnFlags.SEARCH_PATH | SpawnFlags.DO_NOT_REAP_CHILD, 46 | null, 47 | out child_pid); 48 | 49 | ChildWatch.add (child_pid, (pid, status) => { 50 | Process.close_pid (pid); 51 | loop.quit (); 52 | ListBox list_box = ListBox.get_instance (); 53 | list_box.get_installed_packages (); 54 | }); 55 | 56 | } catch (SpawnError e) { 57 | new Alert ("There was an error spawning the process. Details", e.message); 58 | } 59 | } 60 | 61 | public void run_package (string package_name) { 62 | string[] arguments = { 63 | "snap", 64 | "run", 65 | package_name 66 | }; 67 | 68 | try { 69 | Process.spawn_async ("/", 70 | arguments, 71 | env, 72 | SpawnFlags.SEARCH_PATH | SpawnFlags.DO_NOT_REAP_CHILD, 73 | null, 74 | null); 75 | 76 | } catch (SpawnError e) { 77 | new Alert ("There was an error spawning the process. Details", e.message); 78 | } 79 | } 80 | 81 | public string get_package_name_by_file_path (string search_word = "") { 82 | 83 | string result; 84 | string error; 85 | int status; 86 | 87 | try { 88 | Process.spawn_command_line_sync ("snap info " + search_word, 89 | out result, 90 | out error, 91 | out status); 92 | 93 | if (error != null && error != "") { 94 | if ("returned 0 snaps" in error) { 95 | stack_manager.get_stack ().visible_child_name = "not-found-view"; 96 | }else { 97 | new Alert ("An error occured",error); 98 | } 99 | } 100 | } catch (SpawnError e) { 101 | new Alert ("An error occured", e.message); 102 | } 103 | 104 | string[] lines = result.split ("\n"); 105 | 106 | string name = ""; 107 | foreach (string line in lines) { 108 | if ("name:" in line) { 109 | string []resultString = line.split (":"); 110 | name = resultString[1].strip (); 111 | break; 112 | } 113 | } 114 | 115 | return name; 116 | } 117 | } 118 | } 119 | -------------------------------------------------------------------------------- /src/Components/DetailViewBanner.vala: -------------------------------------------------------------------------------- 1 | using Granite.Widgets; 2 | 3 | namespace Application { 4 | public class DetailViewBanner : ListBoxRow { 5 | 6 | private ResponseTranslator response_translator = new ResponseTranslator (); 7 | public static GLib.Settings settings; 8 | Gtk.Box package_row; 9 | 10 | Gtk.Label summary_label; 11 | Gtk.Label version_label; 12 | 13 | public DetailViewBanner (Package package) { 14 | reload_view (package); 15 | } 16 | 17 | public void load_package (Package new_package) { 18 | remove (package_row); 19 | reload_view (new_package); 20 | show_all (); 21 | } 22 | 23 | public void reload_view (Package package) { 24 | settings = new GLib.Settings (Constants.APPLICATION_NAME); 25 | set_dark_mode (settings.get_boolean ("use-dark-theme")); 26 | IconHandler iconHandler = new IconHandler (); 27 | iconHandler.set_icon_size (64); 28 | var icon = iconHandler.get_icon_from_string (package); 29 | 30 | var installed_packages = response_translator.get_installed_packages (); 31 | var refreshablePackages = response_translator.get_refreshable_packages (); 32 | 33 | name_label = new Gtk.Label (package.get_name ().strip ()); 34 | name_label.get_style_context ().add_class ("detail-view-banner-title"); 35 | 36 | summary_label = new Gtk.Label (""); 37 | if (package.get_developer () != null) { 38 | summary_label = generate_summary_label (package.get_developer ()); 39 | } 40 | version_label = new Gtk.Label (""); 41 | if (package.get_version () != null) { 42 | var label = package.get_channel () != "" 43 | ? "(" + package.get_channel () + ")" + package.get_version () 44 | : package.get_version (); 45 | version_label = generate_summary_label (label); 46 | } 47 | 48 | var delete_button = generate_delete_button (package); 49 | var update_button = generate_update_button (package); 50 | var open_button = generate_open_button (package); 51 | var install_button = generate_install_button (package); 52 | 53 | var horizontal_box = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 10); 54 | horizontal_box.add (name_label); 55 | horizontal_box.add (version_label); 56 | 57 | var vertical_box = new Gtk.Box (Gtk.Orientation.VERTICAL, 10); 58 | vertical_box.add (horizontal_box); 59 | vertical_box.add (summary_label); 60 | 61 | package_row = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 12); 62 | package_row.margin = 12; 63 | package_row.add (icon); 64 | package_row.add (vertical_box); 65 | 66 | if (!is_installed (package, installed_packages)) { 67 | summary_label.set_label ("This snap is not installed yet"); 68 | package_row.pack_end (install_button, false, false); 69 | add (package_row); 70 | return; 71 | } 72 | 73 | if (package.get_name () != "core" && package.get_developer () != "conanical") { 74 | package_row.pack_end (open_button, false, false); 75 | } 76 | 77 | if (!is_latest_version (package, refreshablePackages)) { 78 | package_row.pack_end (update_button, false, false); 79 | } 80 | if (package.get_name () != "core" && package.get_developer () != "conanical") { 81 | package_row.pack_end (delete_button, false, false); 82 | } 83 | 84 | add (package_row); 85 | } 86 | 87 | public void set_dark_mode (bool answer = true) { 88 | if (answer) { 89 | this.get_style_context ().add_class ("detail-view-banner-dark"); 90 | } else { 91 | this.get_style_context ().remove_class ("detail-view-banner-dark"); 92 | } 93 | } 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /src/Components/HeaderBar.vala: -------------------------------------------------------------------------------- 1 | using Granite.Widgets; 2 | 3 | namespace Application { 4 | public class HeaderBar : Gtk.HeaderBar { 5 | 6 | static HeaderBar? instance; 7 | 8 | private StackManager stack_manager = StackManager.get_instance (); 9 | ListBox list_box = ListBox.get_instance (); 10 | public Gtk.Button return_button = new Gtk.Button (); 11 | private Granite.Widgets.ModeButton view_mode = new Granite.Widgets.ModeButton (); 12 | private Granite.ModeSwitch dark_mode_switch = new Granite.ModeSwitch.from_icon_name ( 13 | "display-brightness-symbolic", "weather-clear-night-symbolic" 14 | ); 15 | public static GLib.Settings settings; 16 | 17 | HeaderBar () { 18 | Granite.Widgets.Utils.set_color_primary (this, Constants.BRAND_COLOR); 19 | 20 | generate_view_mode (); 21 | generate_return_button (); 22 | generate_dark_mode_button (); 23 | 24 | this.pack_start (return_button); 25 | this.show_close_button = true; 26 | this.set_custom_title (view_mode); 27 | this.pack_end (dark_mode_switch); 28 | } 29 | 30 | public static HeaderBar get_instance () { 31 | if (instance == null) { 32 | instance = new HeaderBar (); 33 | } 34 | return instance; 35 | } 36 | 37 | private void generate_view_mode () { 38 | var label1 = new Gtk.Label (_("Home")); 39 | label1.tooltip_markup = Granite.markup_accel_tooltip ({"H"}, _("Go to home")); 40 | label1.get_style_context ().add_class ("view-mode-button"); 41 | label1.name = "home"; 42 | 43 | var label2 = new Gtk.Label (_("Updates")); 44 | label2.tooltip_markup = Granite.markup_accel_tooltip ({"U"}, _("Go to installed applications")); 45 | label2.get_style_context ().add_class ("view-mode-button"); 46 | label2.name = "updates"; 47 | 48 | view_mode.append (label1); 49 | view_mode.append (label2); 50 | view_mode.no_show_all = true; 51 | view_mode.visible = false; 52 | view_mode.margin = 1; 53 | view_mode.notify["selected"].connect (on_view_mode_changed); 54 | } 55 | 56 | private void generate_return_button () { 57 | return_button.label = _("Back"); 58 | return_button.no_show_all = true; 59 | return_button.visible = false; 60 | return_button.get_style_context ().add_class ("back-button"); 61 | return_button.clicked.connect (() => { 62 | stack_manager.get_stack ().visible_child_name = "list-view"; 63 | }); 64 | } 65 | 66 | private void generate_dark_mode_button () { 67 | settings = new GLib.Settings (Constants.APPLICATION_NAME); 68 | var gtk_settings = Gtk.Settings.get_default (); 69 | dark_mode_switch.primary_icon_tooltip_text = _("Light mode"); 70 | dark_mode_switch.secondary_icon_tooltip_text = _("Dark mode"); 71 | dark_mode_switch.valign = Gtk.Align.CENTER; 72 | dark_mode_switch.bind_property ("active", gtk_settings, "gtk_application_prefer_dark_theme"); 73 | settings.bind ("use-dark-theme", dark_mode_switch, "active", GLib.SettingsBindFlags.DEFAULT); 74 | 75 | } 76 | 77 | public void show_view_mode (bool answer) { 78 | view_mode.visible = answer; 79 | } 80 | 81 | public void show_return_button (bool answer) { 82 | return_button.visible = answer; 83 | } 84 | 85 | public void show_dark_mode_button (bool answer) { 86 | dark_mode_switch.visible = answer; 87 | } 88 | 89 | public void set_selected_view_mode (int answer) { 90 | view_mode.selected = answer; 91 | } 92 | 93 | private void on_view_mode_changed () { 94 | if (view_mode.selected == 0) { 95 | stack_manager.get_stack ().visible_child_name = "welcome-view"; 96 | }else { 97 | stack_manager.get_stack ().visible_child_name = "list-view"; 98 | list_box.get_installed_packages (); 99 | } 100 | } 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /src/Components/HeaderLabel.vala: -------------------------------------------------------------------------------- 1 | namespace Application { 2 | public class HeaderLabel : Gtk.Label { 3 | 4 | public HeaderLabel (string text) { 5 | label = text; 6 | get_style_context ().add_class ("h4"); 7 | halign = Gtk.Align.START; 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/Constants.vala: -------------------------------------------------------------------------------- 1 | namespace Application.Constants { 2 | public const string DESKTOP_NAME = "com.github.bartzaalberg.snaptastic.desktop"; 3 | public const string APPLICATION_NAME = "com.github.bartzaalberg.snaptastic"; 4 | public const int APPLICATION_HEIGHT = 700; 5 | public const int APPLICATION_WIDTH = 890; 6 | 7 | public const Gdk.RGBA BRAND_COLOR = { 2.50, 0.35, 0.22, 1 }; 8 | } 9 | -------------------------------------------------------------------------------- /src/Dialogs/Alert.vala: -------------------------------------------------------------------------------- 1 | namespace Application { 2 | public class Alert : Object { 3 | 4 | private StackManager stack_manager = StackManager.get_instance (); 5 | 6 | public Alert (string title, string description) { 7 | var message_dialog = new Granite.MessageDialog.with_image_from_icon_name (title, description, "dialog-warning"); 8 | message_dialog.transient_for = stack_manager.main_window; 9 | message_dialog.window_position = Gtk.WindowPosition.CENTER_ON_PARENT; 10 | message_dialog.show_all (); 11 | 12 | if (message_dialog.run () == Gtk.ResponseType.CLOSE) { 13 | message_dialog.destroy (); 14 | } 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/Dialogs/DeleteConfirm.vala: -------------------------------------------------------------------------------- 1 | namespace Application { 2 | public class DeleteConfirm : Object { 3 | 4 | private StackManager stack_manager = StackManager.get_instance (); 5 | private CommandHandler command_handler = new CommandHandler (); 6 | 7 | public DeleteConfirm (Package deleted_package) { 8 | var message_dialog = new Granite.MessageDialog.with_image_from_icon_name ( 9 | _("Delete this application?"), 10 | _("Are you sure you want to delete this application?"), 11 | "edit-delete", 12 | Gtk.ButtonsType.CANCEL 13 | ); 14 | 15 | var suggested_button = new Gtk.Button.with_label ("Delete"); 16 | suggested_button.get_style_context ().add_class (Gtk.STYLE_CLASS_DESTRUCTIVE_ACTION); 17 | message_dialog.add_action_widget (suggested_button, Gtk.ResponseType.ACCEPT); 18 | 19 | message_dialog.show_all (); 20 | if (message_dialog.run () == Gtk.ResponseType.ACCEPT) { 21 | stack_manager.get_stack ().visible_child_name = "progress-view"; 22 | command_handler.delete_package (deleted_package); 23 | } 24 | message_dialog.destroy (); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/FileManager.vala: -------------------------------------------------------------------------------- 1 | namespace Application { 2 | public class FileManager : Object { 3 | 4 | static FileManager? instance; 5 | 6 | File file = null; 7 | 8 | FileManager () { 9 | } 10 | 11 | public static FileManager get_instance () { 12 | if (instance == null) { 13 | instance = new FileManager (); 14 | } 15 | return instance; 16 | } 17 | 18 | public File get_file () { 19 | return this.file; 20 | } 21 | 22 | public void set_file (File new_file) { 23 | this.file = new_file; 24 | } 25 | 26 | public bool file_exists (string file_path) { 27 | var file = File.new_for_path (file_path); 28 | return file.query_exists (); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/IconHandler.vala: -------------------------------------------------------------------------------- 1 | using Granite.Widgets; 2 | 3 | namespace Application { 4 | public class IconHandler { 5 | 6 | private FileManager file_manager = FileManager.get_instance (); 7 | private int icon_size = 32; 8 | private Gtk.Image backup_icon = new Gtk.Image.from_icon_name ("package", Gtk.IconSize.DND); 9 | private File file_photo; 10 | private Granite.AsyncImage image; 11 | 12 | public Gtk.Image get_icon_from_string (Package package) { 13 | if ( package.get_icon () == "" || package.get_icon () == null) { 14 | return backup_icon; 15 | } 16 | try { 17 | if ( package.get_icon ().substring (0,4) == "http") { 18 | file_photo = File.new_for_uri (package.get_icon ()); 19 | image = new Granite.AsyncImage (true, true); 20 | image.get_style_context ().add_class ("backimg"); 21 | image.set_from_file_async.begin (file_photo, icon_size, icon_size, false); 22 | return image; 23 | } 24 | 25 | var filePath = get_local_icon_path (package); 26 | 27 | if (filePath == "") { 28 | return backup_icon; 29 | } 30 | 31 | var pixbuf = new Gdk.Pixbuf.from_file_at_size (filePath, icon_size, icon_size); 32 | 33 | var local_image = new Gtk.Image (); 34 | local_image.set_from_pixbuf (pixbuf); 35 | 36 | return local_image; 37 | 38 | } catch (Error e) { 39 | error ("%s", e.message); 40 | } 41 | } 42 | 43 | public void set_icon_size (int icon_size) { 44 | this.icon_size = icon_size; 45 | } 46 | 47 | private string get_local_icon_path (Package package) { 48 | Array possible_icon_paths = new Array (); 49 | possible_icon_paths.append_val ( 50 | "/snap/" + package.get_name () + "/current/" + package.get_name () +".png"); 51 | possible_icon_paths.append_val ( 52 | "/snap/" + package.get_name () + "/current/usr/share/icons/hicolor/64x64/apps/" 53 | + package.get_name () + ".png"); 54 | possible_icon_paths.append_val ( 55 | "/snap/" + package.get_name () + "/current/usr/share/icons/hicolor/48x48/apps/" 56 | + package.get_name () + ".png"); 57 | possible_icon_paths.append_val ( 58 | "/snap/" + package.get_name () + "/current/usr/share/icons/hicolor/32x32/apps/" 59 | + package.get_name () + ".png"); 60 | 61 | for (int i = 0; i < possible_icon_paths.length ; i++) { 62 | if (file_manager.file_exists (possible_icon_paths.index (i))) { 63 | return possible_icon_paths.index (i); 64 | } 65 | } 66 | 67 | return ""; 68 | } 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /src/InstallApplication/DesktopFileApplication.vala: -------------------------------------------------------------------------------- 1 | using Snapd; 2 | 3 | namespace Application { 4 | public class App { 5 | 6 | private static Client client; 7 | 8 | public static int main (string[] args) { 9 | 10 | client = new Snapd.Client (); 11 | 12 | if (!client.connect_sync (null)) { 13 | stdout.printf ("Could not connect to snapd"); 14 | return 0; 15 | } 16 | 17 | string option = args[1]; 18 | var snapd_uri_handler = new SnapdURIHandler (); 19 | snapd_uri_handler.set_parameters_from_uri (args[2]); 20 | 21 | if (option == "remove") { 22 | delete_package (snapd_uri_handler.get_uri_name ()); 23 | return 0; 24 | } 25 | 26 | if (option == "install") { 27 | install_package (snapd_uri_handler.get_uri_name (), snapd_uri_handler.get_uri_channel ()); 28 | return 0; 29 | } 30 | 31 | if (option == "update") { 32 | update_package (snapd_uri_handler.get_uri_name ()); 33 | return 0; 34 | } 35 | 36 | return 0; 37 | } 38 | 39 | public static void delete_package (string name) { 40 | try { 41 | client.remove_sync (name,null, null); 42 | } catch (SpawnError e) { 43 | stdout.printf (e.message); 44 | } 45 | } 46 | 47 | public static void install_package (string name, string channel) { 48 | try { 49 | client.install2_sync ( 50 | InstallFlags.CLASSIC, 51 | name, 52 | channel != "" ? channel : null, 53 | null, null, null); 54 | } catch (SpawnError e) { 55 | stdout.printf (e.message); 56 | } 57 | } 58 | 59 | public static void update_package (string name) { 60 | try { 61 | client.refresh_sync (name, null, null, null); 62 | } catch (SpawnError e) { 63 | stdout.printf (e.message); 64 | } 65 | } 66 | } 67 | } 68 | 69 | -------------------------------------------------------------------------------- /src/InstalledPackageRow.vala: -------------------------------------------------------------------------------- 1 | using Granite.Widgets; 2 | 3 | namespace Application { 4 | public class InstalledPackageRow : ListBoxRow { 5 | 6 | private SnapdHandler snapd_handler = new SnapdHandler (); 7 | private IconHandler icon_handler = new IconHandler (); 8 | private Gtk.Box vertical_box = new Gtk.Box (Gtk.Orientation.VERTICAL, 6); 9 | private Gtk.Box package_row; 10 | private Gtk.Label summary_label; 11 | private Gtk.Image icon; 12 | 13 | public InstalledPackageRow (Package package,Package[] installed_packages) { 14 | 15 | this.package = package; 16 | package_row = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 12); 17 | reload_view (package); 18 | this.add (package_row); 19 | snapd_handler.update_installed_package_row (this); 20 | 21 | } 22 | 23 | public void reload_view (Package package) { 24 | 25 | icon = icon_handler.get_icon_from_string (package); 26 | name_label = generate_name_label (package.get_name () + " (" + package.get_developer () + ")"); 27 | summary_label = generate_summary_label ("("+ package.get_channel () + ") " + package.get_version ()); 28 | 29 | vertical_box.add (name_label); 30 | vertical_box.add (summary_label); 31 | 32 | package_row.margin = 12; 33 | package_row.add (icon); 34 | package_row.add (vertical_box); 35 | 36 | } 37 | 38 | public void load_package (Package package) { 39 | 40 | package_row.remove (icon); 41 | vertical_box.remove (name_label); 42 | vertical_box.remove (summary_label); 43 | package_row.remove (vertical_box); 44 | reload_view (package); 45 | show_all (); 46 | 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/ListBox.vala: -------------------------------------------------------------------------------- 1 | using Granite.Widgets; 2 | 3 | namespace Application { 4 | public class ListBox : Gtk.ListBox { 5 | 6 | static ListBox? instance; 7 | 8 | private ResponseTranslator response_translator = new ResponseTranslator (); 9 | private StackManager stack_manager = StackManager.get_instance (); 10 | 11 | ListBox () { 12 | 13 | row_activated.connect (on_row_activated); 14 | 15 | } 16 | 17 | public static ListBox get_instance () { 18 | if (instance == null) { 19 | instance = new ListBox (); 20 | } 21 | return instance; 22 | } 23 | 24 | public void empty_list () { 25 | this.foreach ((ListBoxRow) => { 26 | this.remove (ListBoxRow); 27 | }); 28 | } 29 | 30 | public void get_installed_packages () { 31 | 32 | stack_manager.get_stack ().visible_child_name = "list-view"; 33 | 34 | var installed_packages = response_translator.get_installed_packages (); 35 | 36 | empty_list (); 37 | foreach (Package package in installed_packages) { 38 | add (new InstalledPackageRow (package, installed_packages)); 39 | } 40 | 41 | show_all (); 42 | } 43 | 44 | private void on_row_activated (Gtk.ListBoxRow row) { 45 | stack_manager.get_stack ().visible_child_name = "progress-view"; 46 | 47 | var activePackage = ((ListBoxRow)row).package; 48 | 49 | stack_manager.set_detail_package (activePackage); 50 | 51 | stack_manager.get_stack ().visible_child_name = "detail-view"; 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/ListBoxRow.vala: -------------------------------------------------------------------------------- 1 | using Granite.Widgets; 2 | 3 | namespace Application { 4 | public class ListBoxRow : Gtk.ListBoxRow { 5 | 6 | private StackManager stack_manager = StackManager.get_instance (); 7 | public Gtk.Label name_label; 8 | public Package package; 9 | 10 | private CommandHandler command_handler = new CommandHandler (); 11 | 12 | public bool is_installed (Package package, Package[] installed_packages) { 13 | foreach (Package installed_package in installed_packages) { 14 | if (package.get_name () == installed_package.get_name ()) { 15 | return true; 16 | } 17 | } 18 | return false; 19 | } 20 | 21 | public bool is_latest_version (Package package, Package[] refreshable_packagess) { 22 | foreach (Package refreshable_packages in refreshable_packagess) { 23 | if (package.get_name () == refreshable_packages.get_name ()) { 24 | return true; 25 | } 26 | } 27 | return false; 28 | } 29 | 30 | public Gtk.Label generate_name_label (string name) { 31 | var name_label = new Gtk.Label ("%s".printf (name)); 32 | name_label.use_markup = true; 33 | name_label.halign = Gtk.Align.START; 34 | 35 | return name_label; 36 | } 37 | 38 | public Gtk.Label generate_summary_label (string summary) { 39 | var summary_label = new Gtk.Label ("%s".printf (summary)); 40 | summary_label.use_markup = true; 41 | summary_label.halign = Gtk.Align.START; 42 | 43 | return summary_label; 44 | } 45 | 46 | public Gtk.Button generate_update_button (Package package) { 47 | var update_button = new Gtk.Button (); 48 | update_button.set_label (_("Refresh")); 49 | update_button.valign = Gtk.Align.CENTER; 50 | update_button.set_tooltip_text (_("Update this to latest version")); 51 | update_button.get_style_context ().add_class (Gtk.STYLE_CLASS_SUGGESTED_ACTION); 52 | update_button.button_press_event.connect (() => { 53 | stack_manager.get_stack ().visible_child_name = "progress-view"; 54 | command_handler.update_package (package); 55 | return true; 56 | }); 57 | 58 | return update_button; 59 | } 60 | 61 | public Gtk.Button generate_delete_button (Package package) { 62 | var delete_button = new Gtk.Button (); 63 | delete_button.valign = Gtk.Align.CENTER; 64 | delete_button.set_label (_("Uninstall")); 65 | delete_button.get_style_context ().add_class (Gtk.STYLE_CLASS_DESTRUCTIVE_ACTION); 66 | delete_button.set_tooltip_text (_("Uninstall this application")); 67 | delete_button.button_press_event.connect (() => { 68 | new DeleteConfirm (package); 69 | return true; 70 | }); 71 | 72 | return delete_button; 73 | } 74 | 75 | public Gtk.Button generate_install_button (Package package) { 76 | 77 | var install_button = new Gtk.Button (); 78 | 79 | if ( package.get_channel () != "") { 80 | install_button.set_label (_("Install") + " "+ package.get_channel ()); 81 | } else { 82 | install_button.set_label (_("Install")); 83 | } 84 | 85 | install_button.valign = Gtk.Align.CENTER; 86 | install_button.set_tooltip_text (_("Install this application")); 87 | install_button.get_style_context ().add_class (Gtk.STYLE_CLASS_SUGGESTED_ACTION); 88 | install_button.button_press_event.connect (() => { 89 | stack_manager.get_stack ().visible_child_name = "progress-view"; 90 | command_handler.install_package (package); 91 | return true; 92 | }); 93 | return install_button; 94 | } 95 | 96 | public Gtk.Button generate_open_button (Package package) { 97 | 98 | var open_button = new Gtk.Button (); 99 | open_button.valign = Gtk.Align.CENTER; 100 | open_button.set_label (_("Open")); 101 | open_button.get_style_context ().add_class (Gtk.STYLE_CLASS_SUGGESTED_ACTION); 102 | open_button.set_tooltip_text (_("Run the application")); 103 | open_button.button_press_event.connect (() => { 104 | command_handler.run_package (package.get_name ()); 105 | return true; 106 | }); 107 | return open_button; 108 | } 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /src/MainWindow.vala: -------------------------------------------------------------------------------- 1 | using Granite.Widgets; 2 | 3 | namespace Application { 4 | public class MainWindow : Gtk.Window { 5 | 6 | private StackManager stack_manager = StackManager.get_instance (); 7 | private FileManager file_manager = FileManager.get_instance (); 8 | private HeaderBar header_bar = HeaderBar.get_instance (); 9 | private CommandHandler command_handler = new CommandHandler (); 10 | private ResponseTranslator response_translator = new ResponseTranslator (); 11 | private SnapdURIHandler snapd_uri_handler = new SnapdURIHandler (); 12 | private uint configure_id; 13 | 14 | public MainWindow (Gtk.Application application) { 15 | Object (application: application, 16 | icon_name: Constants.APPLICATION_NAME, 17 | height_request: Constants.APPLICATION_HEIGHT, 18 | width_request: Constants.APPLICATION_WIDTH); 19 | } 20 | 21 | public void recheck () { 22 | if (file_manager.get_file () != null) { 23 | if (file_manager.get_file ().has_uri_scheme ("snap")) { 24 | install_from_url (); 25 | } 26 | 27 | if (file_manager.get_file ().has_uri_scheme ("file")) { 28 | install_from_file (); 29 | } 30 | } 31 | } 32 | 33 | construct { 34 | var style_context = get_style_context (); 35 | style_context.add_class (Gtk.STYLE_CLASS_VIEW); 36 | style_context.add_class ("rounded"); 37 | 38 | set_titlebar (header_bar); 39 | stack_manager.load_views (this); 40 | 41 | recheck (); 42 | add_shortcuts (); 43 | } 44 | 45 | public void install_from_url () { 46 | var name_and_channel = file_manager.get_file ().get_uri ().replace ("snap://", ""); 47 | 48 | if (name_and_channel.has_suffix ("/")) { 49 | name_and_channel = name_and_channel.substring (0, name_and_channel.last_index_of_char ('/')); 50 | } 51 | 52 | snapd_uri_handler.set_parameters_from_uri (name_and_channel); 53 | 54 | Package package = response_translator.get_package_by_name (snapd_uri_handler.get_uri_name ()); 55 | 56 | if (package == null) { 57 | return; 58 | } 59 | 60 | if (snapd_uri_handler.get_uri_channel () != "") { 61 | package.set_version (""); 62 | package.set_channel (snapd_uri_handler.get_uri_channel ()); 63 | } 64 | 65 | stack_manager.set_detail_package (package); 66 | stack_manager.get_stack ().visible_child_name = "detail-view"; 67 | } 68 | 69 | public void install_from_file () { 70 | string path = file_manager.get_file ().get_uri ().replace ("file://", ""); 71 | 72 | string name = command_handler.get_package_name_by_file_path (path); 73 | var package = response_translator.get_package_by_name (name); 74 | 75 | if (package == null) { 76 | return; 77 | } 78 | 79 | stack_manager.set_detail_package (package); 80 | stack_manager.get_stack ().visible_child_name = "detail-view"; 81 | } 82 | 83 | private void add_shortcuts () { 84 | key_press_event.connect ((e) => { 85 | switch (e.keyval) { 86 | case Gdk.Key.u: 87 | if ((e.state & Gdk.ModifierType.CONTROL_MASK) != 0) { 88 | stack_manager.get_stack ().visible_child_name = "list-view"; 89 | } 90 | break; 91 | case Gdk.Key.h: 92 | if ((e.state & Gdk.ModifierType.CONTROL_MASK) != 0) { 93 | stack_manager.get_stack ().visible_child_name = "welcome-view"; 94 | } 95 | break; 96 | case Gdk.Key.q: 97 | if ((e.state & Gdk.ModifierType.CONTROL_MASK) != 0) { 98 | this.destroy (); 99 | } 100 | break; 101 | } 102 | 103 | return false; 104 | }); 105 | } 106 | 107 | 108 | public override bool configure_event (Gdk.EventConfigure event) { 109 | var settings = new GLib.Settings (Constants.APPLICATION_NAME); 110 | 111 | if (configure_id != 0) { 112 | GLib.Source.remove (configure_id); 113 | } 114 | 115 | configure_id = Timeout.add (100, () => { 116 | configure_id = 0; 117 | 118 | if (is_maximized) { 119 | settings.set_boolean ("window-maximized", true); 120 | } else { 121 | settings.set_boolean ("window-maximized", false); 122 | 123 | Gdk.Rectangle rect; 124 | get_allocation (out rect); 125 | settings.set ("window-size", "(ii)", rect.width, rect.height); 126 | 127 | int root_x, root_y; 128 | get_position (out root_x, out root_y); 129 | settings.set ("window-position", "(ii)", root_x, root_y); 130 | } 131 | 132 | return false; 133 | }); 134 | 135 | return base.configure_event (event); 136 | } 137 | } 138 | } 139 | -------------------------------------------------------------------------------- /src/Package.vala: -------------------------------------------------------------------------------- 1 | using Snapd; 2 | 3 | namespace Application { 4 | public class Package : Object { 5 | 6 | private string nickname; 7 | 8 | private string name; 9 | private string channel = ""; 10 | private string version; 11 | private string developer; 12 | private string revision; 13 | private string summary; 14 | private string description; 15 | private string contact; 16 | private string icon; 17 | Array screenshots = new Array (); 18 | 19 | public string get_nickname () { 20 | return this.nickname; 21 | } 22 | 23 | public void set_nickname (string nickname) { 24 | this.nickname = nickname; 25 | } 26 | 27 | public string get_name () { 28 | return this.name; 29 | } 30 | 31 | public void set_name (string name) { 32 | this.name = name; 33 | } 34 | 35 | public string get_channel () { 36 | return this.channel; 37 | } 38 | 39 | public void set_channel (string channel) { 40 | this.channel = channel; 41 | } 42 | 43 | public string get_version () { 44 | return this.version; 45 | } 46 | 47 | public void set_version (string version) { 48 | this.version = version; 49 | } 50 | 51 | public string get_revision () { 52 | return this.revision; 53 | } 54 | 55 | public void set_revision (string revision) { 56 | this.revision = revision; 57 | } 58 | 59 | public string get_developer () { 60 | return this.developer; 61 | } 62 | 63 | public void set_developer (string developer) { 64 | this.developer = developer; 65 | } 66 | 67 | public string get_summary () { 68 | return this.summary; 69 | } 70 | 71 | public void set_summary (string summary) { 72 | this.summary = summary; 73 | } 74 | 75 | public string get_description () { 76 | return this.description; 77 | } 78 | 79 | public void set_description (string description) { 80 | this.description = description; 81 | } 82 | 83 | public string get_contact () { 84 | return this.contact; 85 | } 86 | 87 | public void set_contact (string contact) { 88 | this.contact = contact; 89 | } 90 | 91 | public string get_icon () { 92 | return this.icon; 93 | } 94 | 95 | public void set_icon (string icon) { 96 | this.icon = icon; 97 | } 98 | 99 | public Array get_screenshots () { 100 | return this.screenshots; 101 | } 102 | 103 | public void set_screenshots (GLib.GenericArray screenshots) { 104 | Array screenshots_array = new Array (); 105 | 106 | screenshots.foreach ((screenshot) => { 107 | screenshots_array.append_val (screenshot.get_url ()); 108 | }); 109 | 110 | this.screenshots = screenshots_array; 111 | } 112 | } 113 | } 114 | -------------------------------------------------------------------------------- /src/ResponseTranslator.vala: -------------------------------------------------------------------------------- 1 | namespace Application { 2 | public class ResponseTranslator : Object { 3 | 4 | private SnapdHandler snapd_handler = new SnapdHandler (); 5 | 6 | public Package[] get_installed_packages () { 7 | Package[] packages = {}; 8 | 9 | GLib.GenericArray snaps = snapd_handler.get_installed_packages (); 10 | 11 | snaps.foreach ((snap) => { 12 | packages += to_package (snap); 13 | }); 14 | 15 | return packages; 16 | } 17 | 18 | public Package[] get_refreshable_packages () { 19 | Package[] packages = {}; 20 | 21 | GLib.GenericArray snaps = snapd_handler.get_refreshable_packages (); 22 | 23 | snaps.foreach ((snap) => { 24 | packages += to_package (snap); 25 | }); 26 | 27 | return packages; 28 | } 29 | 30 | public Package get_package_by_name (string search_word = "") { 31 | Snapd.Snap snap = snapd_handler.get_package_by_name (search_word); 32 | return to_package (snap); 33 | } 34 | 35 | public Package to_package (Snapd.Snap snap) { 36 | Package package = new Package (); 37 | package.set_name (snap.name); 38 | package.set_channel (snap.get_channel ()); 39 | package.set_version (snap.get_version ()); 40 | package.set_revision (snap.revision); 41 | package.set_developer (snap.get_publisher_username ()); 42 | package.set_summary (snap.summary); 43 | package.set_description (snap.description); 44 | package.set_contact (snap.contact); 45 | if (snap.get_icon () != "" && snap.get_icon () != null) { 46 | package.set_icon (snap.get_icon ()); 47 | } 48 | if ( snap.get_screenshots ().length != 0) { 49 | package.set_screenshots (snap.get_screenshots ()); 50 | } 51 | return package; 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/SnapdHandler.vala: -------------------------------------------------------------------------------- 1 | using Snapd; 2 | 3 | namespace Application { 4 | public class SnapdHandler : Object { 5 | 6 | private Client client; 7 | 8 | public SnapdHandler () { 9 | client = new Snapd.Client (); 10 | 11 | try { 12 | if (!client.connect_sync (null)) { 13 | new Alert ("An error occured","could not connect to snapd"); 14 | } 15 | } catch (GLib.Error e) { 16 | new Alert ("An error occured",e.message); 17 | } 18 | } 19 | 20 | public GLib.GenericArray get_installed_packages () { 21 | GLib.GenericArray snaps = new GLib.GenericArray (); 22 | 23 | try { 24 | 25 | snaps = client.get_snaps_sync (Snapd.GetSnapsFlags.NONE, null, null); 26 | 27 | bool asc = true; 28 | snaps.sort_with_data (( a, b) => { 29 | return (asc)? strcmp (a.name, b.name) : strcmp (b.name, a.name); 30 | }); 31 | } catch (GLib.Error e) { 32 | new Alert ("An error occured",e.message); 33 | } 34 | 35 | return snaps; 36 | } 37 | 38 | public GLib.GenericArray get_refreshable_packages () { 39 | GLib.GenericArray snaps = new GLib.GenericArray (); 40 | 41 | try { 42 | snaps = client.find_refreshable_sync (null); 43 | 44 | bool asc = true; 45 | snaps.sort_with_data (( a, b) => { 46 | return (asc)? strcmp (a.name, b.name) : strcmp (b.name, a.name); 47 | }); 48 | } catch (GLib.Error e) { 49 | new Alert ("An error occured",e.message); 50 | } 51 | 52 | return snaps; 53 | } 54 | 55 | public Snapd.Snap get_package_by_name (string search_word = "") { 56 | GLib.GenericArray snaps = new GLib.GenericArray (); 57 | 58 | try { 59 | snaps = client.find_sync ( FindFlags.MATCH_NAME, search_word, null, null); 60 | } catch (GLib.Error e) { 61 | new Alert ("There was an error spawning the process. Details", e.message); 62 | } 63 | 64 | return snaps.length != 0 ? snaps[0] : null; 65 | } 66 | 67 | public void update_installed_package_row (InstalledPackageRow installed_package_row) { 68 | client.find_async.begin ( FindFlags.MATCH_NAME, installed_package_row.package.get_name (), null, (obj, res) => { 69 | string std_out; 70 | try { 71 | GLib.GenericArray snaps = client.find_async.end (res, out std_out); 72 | Snap snap = snaps[0]; 73 | if (snap.get_icon () != "" && snap.get_icon () != null) { 74 | installed_package_row.package.set_icon (snap.get_icon ()); 75 | } 76 | if ( snap.get_screenshots ().length != 0) { 77 | installed_package_row.package.set_screenshots (snap.get_screenshots ()); 78 | } 79 | installed_package_row.load_package (installed_package_row.package); 80 | } catch (Snapd.Error e) { 81 | stdout.printf ("An error occured in SnapdHandler: %s", e.message); 82 | return; 83 | } catch (GLib.Error e) { 84 | stdout.printf ("An error occured in SnapdHandler: %s", e.message); 85 | return; 86 | } 87 | }); 88 | } 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /src/SnapdURIHandler.vala: -------------------------------------------------------------------------------- 1 | namespace Application { 2 | public class SnapdURIHandler : Object { 3 | 4 | private string name = ""; 5 | private string channel = ""; 6 | 7 | public void set_parameters_from_uri (string name_and_channel) { 8 | string[] name_and_channel_array = name_and_channel.split ("/?"); 9 | set_uri_name (name_and_channel_array[0]); 10 | string channel = name_and_channel_array[1]; 11 | 12 | if (channel != null) { 13 | string[] url_parameter = channel.split ("="); 14 | if (url_parameter[0] == "channel") {; 15 | set_uri_channel (url_parameter[1]); 16 | } 17 | } 18 | } 19 | 20 | public string get_uri_name () { 21 | return this.name; 22 | } 23 | 24 | public void set_uri_name (string name) { 25 | this.name = name; 26 | } 27 | 28 | public string get_uri_channel () { 29 | return this.channel; 30 | } 31 | 32 | public void set_uri_channel (string channel) { 33 | this.channel = channel; 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/StackManager.vala: -------------------------------------------------------------------------------- 1 | namespace Application { 2 | public class StackManager : Object { 3 | 4 | static StackManager? instance; 5 | 6 | private Gtk.Stack stack; 7 | private const string LIST_VIEW_ID = "list-view"; 8 | private const string EMPTY_VIEW_ID = "empty-view"; 9 | private const string NOT_FOUND_VIEW_ID = "not-found-view"; 10 | private const string WELCOME_VIEW_ID = "welcome-view"; 11 | private const string PROGRESS_VIEW_ID = "progress-view"; 12 | private const string DETAIL_VIEW_ID = "detail-view"; 13 | 14 | DetailView detail_view; 15 | public Gtk.Window main_window; 16 | 17 | StackManager () { 18 | stack = new Gtk.Stack (); 19 | stack.margin_bottom = 4; 20 | stack.transition_type = Gtk.StackTransitionType.SLIDE_LEFT_RIGHT; 21 | } 22 | 23 | public static StackManager get_instance () { 24 | if (instance == null) { 25 | instance = new StackManager (); 26 | } 27 | return instance; 28 | } 29 | 30 | public Gtk.Stack get_stack () { 31 | return this.stack; 32 | } 33 | 34 | public void load_views (Gtk.Window window) { 35 | detail_view = new DetailView (); 36 | main_window = window; 37 | stack.add_named (new WelcomeView (), WELCOME_VIEW_ID); 38 | stack.add_named (new ListView (), LIST_VIEW_ID); 39 | stack.add_named (new NotFoundView (), NOT_FOUND_VIEW_ID); 40 | stack.add_named (new ProgressView (), PROGRESS_VIEW_ID); 41 | stack.add_named (detail_view, DETAIL_VIEW_ID); 42 | 43 | stack.notify["visible-child"].connect (() => { 44 | var header_bar = HeaderBar.get_instance (); 45 | 46 | if (stack.get_visible_child_name () == WELCOME_VIEW_ID) { 47 | header_bar.show_view_mode (true); 48 | header_bar.set_selected_view_mode (0); 49 | header_bar.show_return_button (false); 50 | header_bar.show_dark_mode_button (true); 51 | } 52 | 53 | if (stack.get_visible_child_name () == DETAIL_VIEW_ID) { 54 | header_bar.show_view_mode (false); 55 | header_bar.show_return_button (true); 56 | header_bar.show_dark_mode_button (false); 57 | } 58 | 59 | if (stack.get_visible_child_name () == PROGRESS_VIEW_ID) { 60 | header_bar.show_view_mode (false); 61 | header_bar.show_return_button (false); 62 | header_bar.show_dark_mode_button (true); 63 | } 64 | 65 | if (stack.get_visible_child_name () == LIST_VIEW_ID) { 66 | header_bar.show_view_mode (true); 67 | header_bar.set_selected_view_mode (1); 68 | header_bar.show_return_button (false); 69 | header_bar.show_dark_mode_button (true); 70 | } 71 | }); 72 | 73 | window.add (stack); 74 | } 75 | 76 | public void set_detail_package (Package package) { 77 | detail_view.load_package (package); 78 | } 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /src/Views/DetailView.vala: -------------------------------------------------------------------------------- 1 | namespace Application { 2 | public class DetailView : Gtk.Grid { 3 | 4 | Gtk.Label package_information; 5 | Gtk.Label package_contact; 6 | Gtk.Image screenshot; 7 | 8 | Gtk.Grid content_grid; 9 | DetailViewBanner package_row; 10 | Gtk.ScrolledWindow scrolled; 11 | 12 | public DetailView () { 13 | var package = new Package (); 14 | package.set_name ("name"); 15 | package.set_version ("1.0.0"); 16 | package.set_developer ("Developer"); 17 | 18 | reload_view (package); 19 | } 20 | 21 | public void reload_view (Package package) { 22 | 23 | package_information = new Gtk.Label (""); 24 | if (package.get_description () != null) { 25 | package_information = new Gtk.Label (package.get_description ()); 26 | } 27 | 28 | package_contact = new Gtk.Label (""); 29 | if (package.get_contact () != null) { 30 | package_contact = new Gtk.Label (package.get_contact ()); 31 | } 32 | 33 | screenshot = new Gtk.Image (); 34 | if (package.get_screenshots ().length != 0) { 35 | screenshot = get_screenshot_from_string (package.get_screenshots ().index (0)); 36 | } 37 | 38 | column_spacing = 12; 39 | hexpand = true; 40 | 41 | package_information.set_line_wrap (true); 42 | package_information.set_max_width_chars (60); 43 | 44 | package_row = new DetailViewBanner (package); 45 | 46 | content_grid = new Gtk.Grid (); 47 | content_grid.halign = Gtk.Align.CENTER; 48 | content_grid.margin = 30; 49 | content_grid.row_spacing = 20; 50 | content_grid.orientation = Gtk.Orientation.VERTICAL; 51 | content_grid.add (screenshot); 52 | content_grid.add (package_information); 53 | content_grid.add (package_contact); 54 | 55 | scrolled = new Gtk.ScrolledWindow (null, null); 56 | scrolled.hscrollbar_policy = Gtk.PolicyType.NEVER; 57 | scrolled.expand = true; 58 | scrolled.add (content_grid); 59 | 60 | package_row.get_style_context ().add_class ("detail-view-banner"); 61 | 62 | attach (package_row, 0, 0, 1, 1); 63 | attach (scrolled, 0, 1, 1, 1); 64 | } 65 | 66 | public void load_package (Package package) { 67 | remove (package_information); 68 | remove (package_contact); 69 | remove (screenshot); 70 | remove (content_grid); 71 | remove (package_row); 72 | remove (scrolled); 73 | 74 | reload_view (package); 75 | show_all (); 76 | } 77 | 78 | 79 | public Gtk.Image get_screenshot_from_string (string url) { 80 | var file_photo = File.new_for_uri (url); 81 | var image = new Granite.AsyncImage (true, true); 82 | image.get_style_context ().add_class ("backimg"); 83 | image.set_from_file_async.begin (file_photo, 300, 200, false); 84 | return image; 85 | 86 | } 87 | }} 88 | -------------------------------------------------------------------------------- /src/Views/ListView.vala: -------------------------------------------------------------------------------- 1 | namespace Application { 2 | public class ListView : Gtk.ScrolledWindow { 3 | 4 | private ListBox list_box = ListBox.get_instance (); 5 | 6 | public ListView () { 7 | 8 | var box = new Gtk.Box (Gtk.Orientation.VERTICAL, 6); 9 | box.add (list_box); 10 | 11 | this.hscrollbar_policy = Gtk.PolicyType.NEVER; 12 | this.add (box); 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/Views/NotFoundView.vala: -------------------------------------------------------------------------------- 1 | using Granite.Widgets; 2 | 3 | namespace Application { 4 | public class NotFoundView : Gtk.ScrolledWindow { 5 | 6 | public NotFoundView () { 7 | var not_found_view = new Welcome (_("No snaps were found"), _("Please install some")); 8 | this.add (not_found_view); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/Views/ProgressView.vala: -------------------------------------------------------------------------------- 1 | using Granite.Widgets; 2 | 3 | namespace Application { 4 | public class ProgressView : Gtk.ScrolledWindow { 5 | 6 | public ProgressView () { 7 | var progress_view = new Welcome (_("Please Wait…"), _("Operation is in progress…")); 8 | this.add (progress_view); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/Views/WelcomeView.vala: -------------------------------------------------------------------------------- 1 | using Granite.Widgets; 2 | 3 | namespace Application { 4 | public class WelcomeView : Gtk.ScrolledWindow { 5 | 6 | private StackManager stack_manager = StackManager.get_instance (); 7 | private CommandHandler command_handler = new CommandHandler (); 8 | private ResponseTranslator response_translator = new ResponseTranslator (); 9 | 10 | public WelcomeView () { 11 | var welcome_view = new Welcome (_("Install Some Snaps"), _("Click open to select a downloaded snap file")); 12 | welcome_view.append ("ubuntu-open", _("Open"), _("Browse to open a single snap file")); 13 | 14 | welcome_view.activated.connect ((option) => { 15 | switch (option) { 16 | case 0: 17 | var path = get_file_path (); 18 | if (path == "") { 19 | break; 20 | } 21 | 22 | string name = command_handler.get_package_name_by_file_path (path); 23 | var package = response_translator.get_package_by_name (name); 24 | 25 | if (package == null) { 26 | break; 27 | } 28 | 29 | stack_manager.set_detail_package (package); 30 | stack_manager.get_stack ().visible_child_name = "detail-view"; 31 | 32 | break; 33 | } 34 | }); 35 | this.add (welcome_view); 36 | } 37 | 38 | public string get_file_path () { 39 | 40 | // The FileChooserDialog: 41 | Gtk.FileChooserDialog chooser = new Gtk.FileChooserDialog ( 42 | "Select your favorite file", null, Gtk.FileChooserAction.OPEN, 43 | "_Cancel", 44 | Gtk.ResponseType.CANCEL, 45 | "_Open", 46 | Gtk.ResponseType.ACCEPT); 47 | 48 | // Multiple files can be selected: 49 | chooser.select_multiple = false; 50 | 51 | // We are only interested in .snap files: 52 | Gtk.FileFilter filter = new Gtk.FileFilter (); 53 | chooser.set_filter (filter); 54 | filter.add_mime_type ("application/vnd.snap"); 55 | 56 | // Add a preview widget: 57 | Gtk.Image preview_area = new Gtk.Image (); 58 | chooser.set_preview_widget (preview_area); 59 | chooser.update_preview.connect (() => { 60 | string uri = chooser.get_preview_uri (); 61 | // We only display local files: 62 | if (uri != null && uri.has_prefix ("file://") == true) { 63 | try { 64 | Gdk.Pixbuf pixbuf = new Gdk.Pixbuf.from_file_at_scale (uri.substring (7), 150, 150, true); 65 | preview_area.set_from_pixbuf (pixbuf); 66 | preview_area.show (); 67 | } catch (Error e) { 68 | preview_area.hide (); 69 | } 70 | } else { 71 | preview_area.hide (); 72 | } 73 | }); 74 | 75 | string filePath = ""; 76 | 77 | // Process response: 78 | if (chooser.run () == Gtk.ResponseType.ACCEPT) { 79 | SList uris = chooser.get_uris (); 80 | 81 | foreach (unowned string uri in uris) { 82 | filePath = uri.replace ("file://", ""); 83 | } 84 | } 85 | 86 | // Close the FileChooserDialog: 87 | chooser.close (); 88 | return filePath; 89 | } 90 | } 91 | } 92 | --------------------------------------------------------------------------------