diff --git a/BWClipboard.js b/BWClipboard.js index 9a78fbc5..b4e7d67a 100644 --- a/BWClipboard.js +++ b/BWClipboard.js @@ -1,5 +1,5 @@ // Bing Wallpaper GNOME extension -// Copyright (C) 2017-2021 Michael Carroll +// Copyright (C) 2017-2023 Michael Carroll // This extension is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or diff --git a/README.md b/README.md index d0bc146b..9ac517ad 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,8 @@ Also, check out my related [Google Earth View wallpaper extension](https://githu * Shuffle/randomise wallpapers at adjustable intervals (including from your stored Bing images) * Image gallery to view, select and curate stored images * Optionally delete old images after a week, or you can keep (and curate) them forever -* Override the lockscreen blur -* Language support: English (en), German (de), Dutch (nl), Italian (it), Polish (pl), Chinese (zh_CN, zh_TW), French (fr_FR), Portuguese (pt, pt_BR), Ukrainian (uk), Russian (ru_RU), Spanish (es), Korean (ko), Indonesian (id), Catalan (ca), Norwegian Bokmål (nb) & Nynorsk (ni), Swedish (sv), Arabic (ar), Hungarian (hu) and Japanese (ja) - a HUGE thanks to the translators +* Override the lockscreen blur (NEW: lockscreen blur is now dynamic!) +* Language support: English (en), German (de), Dutch (nl), Italian (it), Polish (pl), Chinese (zh_CN, zh_TW), French (fr_FR), Portuguese (pt, pt_BR), Ukrainian (uk), Russian (ru_RU), Spanish (es), Korean (ko), Indonesian (id), Catalan (ca), Norwegian Bokmål (nb) & Nynorsk (nn), Swedish (sv), Arabic (ar), Hungarian (hu), Japanese (ja), Czech (cs_CZ), Finnish (fi_FI) and Turkish (tr) - a HUGE thanks to the translators * Image preview in menus & ability to manually set wallpapers individually or copy image to clipboard * A selection of different theme-aware indicator (tray) icons to choose (or hide it completely) diff --git a/blur.js b/blur.js index 659b6a7c..60b7018a 100644 --- a/blur.js +++ b/blur.js @@ -1,5 +1,5 @@ // Bing Wallpaper GNOME extension -// Copyright (C) 2017-2021 Michael Carroll +// Copyright (C) 2017-2023 Michael Carroll // This extension is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or diff --git a/carousel.js b/carousel.js index 81804fc4..97c36b93 100644 --- a/carousel.js +++ b/carousel.js @@ -1,5 +1,5 @@ // Bing Wallpaper GNOME extension -// Copyright (C) 2017-2021 Michael Carroll +// Copyright (C) 2017-2023 Michael Carroll // This extension is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or @@ -111,6 +111,16 @@ var Carousel = class Carousel { let applyButton = buildable.get_object('applyButton'); let infoButton = buildable.get_object('infoButton'); let deleteButton = buildable.get_object('deleteButton'); + let favButton = buildable.get_object('favButton'); + let unfavButton = buildable.get_object('unfavButton'); + + if (Utils.isFavourite(image)) { + favButton.set_visible(false); + this.log('image is favourited'); + } + else { + unfavButton.set_visible(false); + } try { this._load_image(galleryImage, filename); @@ -151,6 +161,22 @@ var Carousel = class Carousel { if (this.callbackfunc) this.callbackfunc(); }); + + // button is unchecked, so we want to make the checked one visible + favButton.connect('clicked', (widget) => { + this.log('favourited '+Utils.getImageUrlBase(image)); + widget.set_visible(false); + unfavButton.set_visible(true); + Utils.setImageFavouriteStatus(this.settings, image.urlbase, true); + }); + + // button is checked, so we want to make the unchecked one visible + unfavButton.connect('clicked', (widget) => { + this.log('unfavourited '+Utils.getImageUrlBase(image)); + widget.set_visible(false); + favButton.set_visible(true); + Utils.setImageFavouriteStatus(this.settings, image.urlbase, false); + }); let item = buildable.get_object('flowBoxChild'); return item; diff --git a/extension.js b/extension.js index 70c81b51..ba0c2068 100644 --- a/extension.js +++ b/extension.js @@ -1,5 +1,5 @@ // Bing Wallpaper GNOME extension -// Copyright (C) 2017-2022 Michael Carroll +// Copyright (C) 2017-2023 Michael Carroll // This extension is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or @@ -40,6 +40,8 @@ const ICON_PAUSE_MODE_BUTTON = 'media-playback-pause-symbolic'; const ICON_PLAY_MODE_BUTTON = 'media-playback-start-symbolic'; const ICON_REFRESH = 'view-refresh-symbolic'; const ICON_RANDOM = Me.dir.get_child('icons').get_path() + '/'+'game-die-symbolic.svg'; +const ICON_FAVE_BUTTON = Me.dir.get_child('icons').get_path() + '/'+'fav-symbolic.svg'; +const ICON_UNFAVE_BUTTON = Me.dir.get_child('icons').get_path() + '/'+'unfav-symbolic.svg'; let bingWallpaperIndicator = null; let blur = null; @@ -111,6 +113,7 @@ class BingWallpaperIndicator extends PanelMenu.Button { this.clipboard = new BWClipboard.BWClipboard(); this.imageIndex = null; this.logger = null; + this.favourite_status = false; if (!blur) // as Blur isn't disabled on screen lock (like the rest of the extension is) blur = new Blur.Blur(); @@ -156,11 +159,12 @@ class BingWallpaperIndicator extends PanelMenu.Button { this.toggleSetBackground = newMenuSwitchItem(_("Set background image"), this._settings.get_boolean('set-background')); this.toggleSelectNew = newMenuSwitchItem(_("Always show new images"), this._settings.get_boolean('revert-to-current-image')); this.toggleShuffle = newMenuSwitchItem(_("Image shuffle mode"), true); + this.toggleShuffleOnlyFaves = newMenuSwitchItem(_("Image shuffle only favourites"), this._settings.get_boolean('random-mode-include-only-favourites')); this.toggleNotifications = newMenuSwitchItem(_("Enable desktop notifications"), this._settings.get_boolean('notify')); this.toggleImageCount = newMenuSwitchItem(_("Show image count"), this._settings.get_boolean('show-count-in-image-title')); [this.toggleNotifications, this.toggleImageCount, this.toggleSetBackground, this.toggleSelectNew, - this.toggleShuffle] + this.toggleShuffle, this.toggleShuffleOnlyFaves] .forEach(e => this.settingsSubMenu.menu.addMenuItem(e)); // these items are a bit unique, we'll populate them in _setControls() @@ -289,11 +293,14 @@ class BingWallpaperIndicator extends PanelMenu.Button { this._settings.set_boolean('show-count-in-image-title', state); this._selectImage(false); }); + this.toggleShuffleOnlyFaves.connect('toggled', (item, state) => { + this._settings.set_boolean('random-mode-include-only-favourites', state); + }); // shuffle is a special case this._setShuffleToggleState(); this.toggleShuffle.connect('toggled', this._toggleShuffle.bind(this)); - + this.folderItem.connect('activate', Utils.openImageFolder.bind(this, this._settings)); if (this.clipboard.clipboard) { // only if we have a clipboard this.clipboardImageItem.connect('activate', this._copyImageToClipboard.bind(this)); @@ -429,6 +436,7 @@ class BingWallpaperIndicator extends PanelMenu.Button { else { this.explainItem.label.set_text(this.explanation ? this.explanation : ''); } + this._setFavouriteIcon(this.favourite_status?ICON_FAVE_BUTTON:ICON_UNFAVE_BUTTON); } _wrapLabelItem(menuItem) { @@ -440,6 +448,10 @@ class BingWallpaperIndicator extends PanelMenu.Button { } _setControls() { + this.favouriteBtn = this._newMenuIcon( + this.favourite_status?ICON_FAVE_BUTTON:ICON_UNFAVE_BUTTON, + this.controlItem, + this._favouriteImage); this.prevBtn = this._newMenuIcon( ICON_PREVIOUS_BUTTON, this.controlItem, @@ -478,7 +490,7 @@ class BingWallpaperIndicator extends PanelMenu.Button { y_expand: true }); - if (position) { + if (position !== null) { getActorCompat(parent).insert_child_at_index(iconBtn, position); } else { @@ -546,6 +558,10 @@ class BingWallpaperIndicator extends PanelMenu.Button { this.toggleShuffle.setToggleState(this._settings.get_string('selected-image') == 'random'); } + _toggleShuffleOnlyFaves() { + + } + _toggleShuffle() { if (this._settings.get_string('selected-image') == 'random') { this._settings.set_string('selected-image', 'current'); @@ -557,6 +573,20 @@ class BingWallpaperIndicator extends PanelMenu.Button { log('switched mode to ' + this._settings.get_string('selected-image')); } + _favouriteImage() { + log('favourite image '+this.imageURL+' status was '+this.favourite_status); + this.favourite_status = !this.favourite_status; + Utils.setImageFavouriteStatus(this._settings, this.imageURL, this.favourite_status); + this._setFavouriteIcon(this.favourite_status?ICON_FAVE_BUTTON:ICON_UNFAVE_BUTTON); + } + + _setFavouriteIcon(icon_name) { + let gicon = Gio.icon_new_for_string(icon_name); + this.favouriteBtn.get_children().forEach( (x, i) => { + x.set_gicon(gicon); + }); + } + _gotoImage(relativePos) { let imageList = Utils.getImageList(this._settings); let curIndex = 0; @@ -697,10 +727,21 @@ class BingWallpaperIndicator extends PanelMenu.Button { } if (this._settings.get_boolean('notify')) { - newImages.forEach((image, index) => { - log('New image to notify: ' + Utils.getImageTitle(image)); - this._createNotification(image); - }); + if (!this._settings.get_boolean('notify-only-latest')) { + // notify all new images + newImages.forEach((image, index) => { + log('New image to notify: ' + Utils.getImageTitle(image)); + this._createNotification(image); + }); + } + else { + // notify only the most recent image + let last = newImages.pop(); + if (last) { + log('New image to notify: ' + Utils.getImageTitle(last)); + this._createNotification(last); + } + } } this._restartTimeoutFromLongDate(parsed.images[0].fullstartdate); // timing is set by Bing, and possibly varies by market @@ -721,7 +762,7 @@ class BingWallpaperIndicator extends PanelMenu.Button { // set notifications icon let source = new MessageTray.Source('Bing Wallpaper', 'preferences-desktop-wallpaper-symbolic'); Main.messageTray.add(source); - let msg = _('Bing Wallpaper of the Day for') + ' ' + this._localeDate(image.longstartdate); + let msg = _('Bing Wallpaper of the Day for') + ' ' + this._localeDate(image.fullstartdate); let details = Utils.getImageTitle(image); let notification = new MessageTray.Notification(source, msg, details); notification.setTransient(this._settings.get_boolean('transient')); @@ -729,11 +770,18 @@ class BingWallpaperIndicator extends PanelMenu.Button { } _selectImage(force_shuffle = false) { - let imageList = JSON.parse(this._settings.get_string('bing-json')); + let imageList = Utils.getImageList(this._settings); let image = null; // special values, 'current' is most recent (default mode), 'random' picks one at random, anything else should be filename if (this.selected_image == 'random' || force_shuffle) { + if (this._settings.get_boolean('random-mode-include-only-favourites')) { + let favImageList = imageList.filter(Utils.isFavourite); + if (favImageList.length > 0) + imageList = favImageList; + else + log('not enough favourites available to shuffle'); + } this.imageIndex = Utils.getRandomInt(imageList.length); image = imageList[this.imageIndex]; this._restartShuffleTimeout(); @@ -763,6 +811,13 @@ class BingWallpaperIndicator extends PanelMenu.Button { this.imageinfolink = image.copyrightlink.replace(/^http:\/\//i, 'https://'); this.imageURL = BingURL + image.urlbase + '_' + resolution + '.jpg'; // generate image url for user's resolution this.filename = toFilename(BingWallpaperDir, image.startdate, image.urlbase, resolution); + + if (("favourite" in image) && image.favourite === true ) { + this.favourite_status = true; + } + else { + this.favourite_status = false; + } let file = Gio.file_new_for_path(this.filename); let file_exists = file.query_exists(null); @@ -796,7 +851,7 @@ class BingWallpaperIndicator extends PanelMenu.Button { let maxLongDate = Utils.getMaxLongDate(this._settings); // refresh date from most recent Bing image let state = {maxlongdate: maxLongDate, title: this.title, explanation: this.explanation, copyright: this.copyright, longstartdate: this.longstartdate, imageinfolink: this.imageinfolink, imageURL: this.imageURL, - filename: this.filename}; + filename: this.filename, favourite: this.favourite_status}; let stateJSON = JSON.stringify(state); log('Storing state as JSON: ' + stateJSON); @@ -822,6 +877,12 @@ class BingWallpaperIndicator extends PanelMenu.Button { this.imageURL = state.imageURL; this.filename = state.filename; this._selected_image = this._settings.get_string('selected-image'); + if ("favourite" in state && state.favourite === true) { + this.favourite_status = true; + } + else { + this.favourite_status = false; + } // update menus and thumbnail this._setMenuText(); this._setBackground(); @@ -832,7 +893,7 @@ class BingWallpaperIndicator extends PanelMenu.Button { } if (this.selected_image == 'random') { - this._setRandom(); + this._shuffleImage(); this._restartTimeoutFromLongDate(maxLongDate); } else { diff --git a/icons/checked-symbolic.svg b/icons/checked-symbolic.svg new file mode 100644 index 00000000..c7a08034 --- /dev/null +++ b/icons/checked-symbolic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/fav-symbolic.svg b/icons/fav-symbolic.svg new file mode 100644 index 00000000..899bf9ee --- /dev/null +++ b/icons/fav-symbolic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/unchecked-symbolic.svg b/icons/unchecked-symbolic.svg new file mode 100644 index 00000000..1ebd652e --- /dev/null +++ b/icons/unchecked-symbolic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/unfav-symbolic.svg b/icons/unfav-symbolic.svg new file mode 100644 index 00000000..6febe382 --- /dev/null +++ b/icons/unfav-symbolic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/locale/BingWallpaper.pot b/locale/BingWallpaper.pot index 5d693a09..3c273c4e 100644 --- a/locale/BingWallpaper.pot +++ b/locale/BingWallpaper.pot @@ -6,11 +6,11 @@ msgstr "" msgid "Indicator icon" msgstr "" -#: ui/Settings.ui.h:3 ui/Settings4.ui.h:4 extension.js:159 +#: ui/Settings.ui.h:3 ui/Settings4.ui.h:4 extension.js:163 msgid "Enable desktop notifications" msgstr "" -#: ui/Settings.ui.h:4 ui/Settings4.ui.h:5 extension.js:142 extension.js:156 +#: ui/Settings.ui.h:4 ui/Settings4.ui.h:5 extension.js:145 extension.js:159 msgid "Set background image" msgstr "" @@ -46,7 +46,7 @@ msgstr "" msgid "Bing locale" msgstr "" -#: ui/Settings.ui.h:13 ui/Settings4.ui.h:12 extension.js:145 +#: ui/Settings.ui.h:13 ui/Settings4.ui.h:12 extension.js:148 msgid "Settings" msgstr "" @@ -106,7 +106,7 @@ msgstr "" msgid "Enable logging to system journal" msgstr "" -#: ui/Settings.ui.h:28 ui/Settings4.ui.h:27 extension.js:157 +#: ui/Settings.ui.h:28 ui/Settings4.ui.h:27 extension.js:160 msgid "Always show new images" msgstr "" @@ -220,99 +220,107 @@ msgstr "" msgid "GNOME shell extension version " msgstr "" -#: ui/carousel.ui.h:1 ui/carousel4.ui.h:1 +#: ui/carousel.ui.h:1 ui/carousel4.ui.h:2 msgid "Apply" msgstr "" -#: ui/carousel.ui.h:2 ui/carousel4.ui.h:2 +#: ui/carousel.ui.h:2 ui/carousel4.ui.h:3 msgid "View" msgstr "" -#: ui/carousel.ui.h:3 ui/carousel4.ui.h:3 +#: ui/carousel.ui.h:3 ui/carousel4.ui.h:4 msgid "Info" msgstr "" -#: ui/carousel.ui.h:4 ui/carousel4.ui.h:4 +#: ui/carousel.ui.h:4 ui/carousel4.ui.h:5 msgid "Delete" msgstr "" -#: ui/carousel.ui.h:5 ui/carousel4.ui.h:6 +#: ui/carousel.ui.h:5 ui/carousel4.ui.h:7 msgid "Set random mode" msgstr "" -#: ui/carousel4.ui.h:5 +#: ui/carousel4.ui.h:1 +msgid "Favorite" +msgstr "" + +#: ui/carousel4.ui.h:6 msgid "" msgstr "" -#: ui/carousel4.ui.h:7 +#: ui/carousel4.ui.h:8 msgid "Load image gallery" msgstr "" -#: extension.js:135 +#: extension.js:138 msgid "" msgstr "" -#: extension.js:136 extension.js:137 extension.js:138 +#: extension.js:139 extension.js:140 extension.js:141 msgid "Awaiting refresh..." msgstr "" -#: extension.js:139 +#: extension.js:142 msgid "Copy image to clipboard" msgstr "" -#: extension.js:140 +#: extension.js:143 msgid "Copy image URL to clipboard" msgstr "" -#: extension.js:141 +#: extension.js:144 msgid "Open image folder" msgstr "" -#: extension.js:143 +#: extension.js:146 msgid "Set lock screen image" msgstr "" -#: extension.js:144 +#: extension.js:147 msgid "Refresh Now" msgstr "" -#: extension.js:146 +#: extension.js:149 msgid "Open in image viewer" msgstr "" -#: extension.js:147 +#: extension.js:150 msgid "Open Bing image information page" msgstr "" -#: extension.js:154 +#: extension.js:157 msgid "Quick settings" msgstr "" -#: extension.js:158 +#: extension.js:161 msgid "Image shuffle mode" msgstr "" -#: extension.js:160 +#: extension.js:162 +msgid "Image shuffle only favourites" +msgstr "" + +#: extension.js:164 msgid "Show image count" msgstr "" -#: extension.js:326 +#: extension.js:333 msgid "Next refresh" msgstr "" -#: extension.js:327 +#: extension.js:334 msgid "Last refresh" msgstr "" -#: extension.js:724 extension.js:760 +#: extension.js:765 extension.js:808 msgid "Bing Wallpaper of the Day for" msgstr "" -#: extension.js:784 +#: extension.js:839 msgid "No wallpaper available" msgstr "" -#: extension.js:785 +#: extension.js:840 msgid "No picture for today." msgstr "" @@ -332,14 +340,14 @@ msgstr "" msgid "Error fetching change log: " msgstr "" -#: utils.js:350 utils.js:353 +#: utils.js:370 utils.js:373 msgid "minutes" msgstr "" -#: utils.js:356 +#: utils.js:376 msgid "days" msgstr "" -#: utils.js:359 +#: utils.js:379 msgid "hours" msgstr "" diff --git a/locale/tr/LC_MESSAGES/BingWallpaper.mo b/locale/tr/LC_MESSAGES/BingWallpaper.mo new file mode 100644 index 00000000..45c643e8 Binary files /dev/null and b/locale/tr/LC_MESSAGES/BingWallpaper.mo differ diff --git a/locale/tr/LC_MESSAGES/BingWallpaper.po b/locale/tr/LC_MESSAGES/BingWallpaper.po new file mode 100644 index 00000000..5b46754f --- /dev/null +++ b/locale/tr/LC_MESSAGES/BingWallpaper.po @@ -0,0 +1,454 @@ +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-23 18:58+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: \n" +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Loco-Source-Locale: tr_TR\n" +"X-Loco-Parser: loco_parse_po\n" +"X-Generator: Loco https://localise.biz/" + +#: ui/Settings.ui.h:1 ui/Settings4.ui.h:2 +msgctxt "Göstergeyi gizle" +msgid "Hide the indicator" +msgstr "" + +#: ui/Settings.ui.h:2 ui/Settings4.ui.h:3 +msgctxt "Gösterge simgesi" +msgid "Indicator icon" +msgstr "" + +#: ui/Settings.ui.h:3 ui/Settings4.ui.h:4 extension.js:159 +msgctxt "Masaüstü bildirimlerini etkinleştir" +msgid "Enable desktop notifications" +msgstr "" + +#: ui/Settings.ui.h:4 ui/Settings4.ui.h:5 extension.js:142 extension.js:156 +msgctxt "Arka plan resmi olarak ayarla" +msgid "Set background image" +msgstr "" + +#: ui/Settings.ui.h:5 ui/Settings4.ui.h:6 +msgctxt "Arka plan stili seçeneği" +msgid "Background style option" +msgstr "" + +#: ui/Settings.ui.h:6 ui/Settings4.ui.h:7 +msgctxt "Klasörü indir" +msgid "Download folder" +msgstr "" + +#: ui/Settings.ui.h:7 ui/Settings4.ui.h:1 +msgctxt "Bing Wallpaper Fotoğraf klasörü" +msgid "Bing Wallpaper pictures folder" +msgstr "" + +#: ui/Settings.ui.h:8 ui/Settings4.ui.h:8 +msgctxt "Klasörü aç" +msgid "Open folder" +msgstr "" + +#: ui/Settings.ui.h:9 ui/Settings4.ui.h:9 +msgctxt "Daha önce indirilen duvar kağıtlarını sil" +msgid "Delete previously downloaded wallpapers" +msgstr "" + +#: ui/Settings.ui.h:10 ui/Settings4.ui.h:10 +msgctxt "Seçili resim" +msgid "Selected image" +msgstr "" + +#: ui/Settings.ui.h:11 +msgctxt "Galeriden resim seç" +msgid "Select from image gallery" +msgstr "" + +#: ui/Settings.ui.h:12 ui/Settings4.ui.h:11 +msgctxt "Bing konumu" +msgid "Bing locale" +msgstr "" + +#: ui/Settings.ui.h:13 ui/Settings4.ui.h:12 extension.js:145 +msgctxt "Ayarlar" +msgid "Settings" +msgstr "" + +#: ui/Settings.ui.h:14 ui/Settings4.ui.h:13 +msgctxt "Özel bulanıklık ve parlaklık kullan" +msgid "Use custom blur and brightness" +msgstr "" + +#: ui/Settings.ui.h:15 ui/Settings4.ui.h:14 +msgctxt "GDM3 kilit ekranı efektlerini geçersiz kıl" +msgid "Override GDM3 lockscreen effects" +msgstr "" + +#: ui/Settings.ui.h:16 ui/Settings4.ui.h:15 +msgctxt "Bulanıklaştırma, oturum açma isteminin okunabilirliğini artırabilir" +msgid "Blur can improve readability of login prompt" +msgstr "" + +#: ui/Settings.ui.h:17 ui/Settings4.ui.h:16 +msgctxt "Arka plan bulanıklık yoğunluğu" +msgid "Background blur intensity" +msgstr "" + +#: ui/Settings.ui.h:18 ui/Settings4.ui.h:17 +msgctxt "Oturum açma isteminin kontrastı iyileştirebilir" +msgid "Can improve contrast of login prompt" +msgstr "" + +#: ui/Settings.ui.h:19 ui/Settings4.ui.h:18 +msgctxt "Arka plan parlaklığı" +msgid "Background brightness" +msgstr "" + +#: ui/Settings.ui.h:20 ui/Settings4.ui.h:19 +msgctxt "Ön Ayarlar" +msgid "Presets" +msgstr "" + +#: ui/Settings.ui.h:21 +msgctxt "Yaygın olarak kullanılan ön ayarlar" +msgid "Commonly used presets" +msgstr "" + +#: ui/Settings.ui.h:22 ui/Settings4.ui.h:20 +msgctxt "Bulanıklık yok, hafif loş" +msgid "No blur, slight dim" +msgstr "" + +#: ui/Settings.ui.h:23 ui/Settings4.ui.h:21 +msgctxt "GNOME varsayılanı" +msgid "GNOME default" +msgstr "" + +#: ui/Settings.ui.h:24 ui/Settings4.ui.h:22 +msgctxt "Hafif bulanıklık, hafif loşluk" +msgid "Slight blur, slight dim" +msgstr "" + +#: ui/Settings.ui.h:25 ui/Settings4.ui.h:23 +msgctxt "Kilit Ekranı" +msgid "Lock Screen" +msgstr "" + +#: ui/Settings.ui.h:26 ui/Settings4.ui.h:25 +msgctxt "Hata ayıklama günlüğü" +msgid "Debug logging" +msgstr "" + +#: ui/Settings.ui.h:27 ui/Settings4.ui.h:24 +msgctxt "Sistem günlüğüne günlüğe kaydetmeyi etkinleştirme" +msgid "Enable logging to system journal" +msgstr "" + +#: ui/Settings.ui.h:28 ui/Settings4.ui.h:27 extension.js:157 +msgctxt "Her zaman yeni görüntüler gösterin" +msgid "Always show new images" +msgstr "" + +#: ui/Settings.ui.h:29 ui/Settings4.ui.h:26 +msgctxt "Mevcut olduğunda yeni görüntülere geçin (rastgele modda değilse)" +msgid "Switch to new images when available (unless on random mode)" +msgstr "" + +#: ui/Settings.ui.h:30 ui/Settings4.ui.h:29 +msgctxt "Wayland üzerindeki tüm özellikleri etkinleştirin" +msgid "Enable all features on Wayland" +msgstr "" + +#: ui/Settings.ui.h:31 ui/Settings4.ui.h:28 +msgctxt "Bazı yeni özellikler Wayland üzerinde kararsız olabilir" +msgid "Some newer features may be unstable on Wayland" +msgstr "" + +#: ui/Settings.ui.h:32 ui/Settings4.ui.h:30 +msgctxt "Ekran çözünürlüğü" +msgid "Screen resolution" +msgstr "" + +#: ui/Settings.ui.h:33 ui/Settings4.ui.h:31 +msgctxt "Otomatik çözünürlük seçimini geçersiz kılma" +msgid "Override automatic resolution selection" +msgstr "" + +#: ui/Settings.ui.h:34 ui/Settings4.ui.h:32 +msgctxt "Rastgele aralığı manuel olarak ayarlama (saniye)" +msgid "Manually adjust random interval (seconds)" +msgstr "" + +#: ui/Settings.ui.h:35 ui/Settings4.ui.h:33 +msgctxt "Rastgele aralık" +msgid "Random interval" +msgstr "" + +#: ui/Settings.ui.h:36 ui/Settings4.ui.h:34 +msgctxt "Bing Wallpaper verilerini içe aktarma" +msgid "Import Bing Wallpaper data" +msgstr "" + +#: ui/Settings.ui.h:37 ui/Settings4.ui.h:35 +msgctxt "" +"Duvar kağıdı dizininden önceden dışa aktarılmış JSON verilerini içe aktarma" +msgid "Import previously exported JSON data from wallpaper directory" +msgstr "" + +#: ui/Settings.ui.h:38 ui/Settings4.ui.h:36 +msgctxt "İçe Aktar" +msgid "Import" +msgstr "" + +#: ui/Settings.ui.h:39 ui/Settings4.ui.h:37 +msgctxt "Bing Wallpaper verilerini dışa aktarma" +msgid "Export Bing Wallpaper data" +msgstr "" + +#: ui/Settings.ui.h:40 ui/Settings4.ui.h:38 +msgid "Export JSON data to wallpaper dir for backup or data migration" +msgstr "" + +#: ui/Settings.ui.h:41 ui/Settings4.ui.h:39 +msgctxt "Dışa Aktar" +msgid "Export" +msgstr "" + +#: ui/Settings.ui.h:42 ui/Settings4.ui.h:40 +msgctxt "Bing verilerini her zaman dışa aktarın" +msgid "Always export Bing data" +msgstr "" + +#: ui/Settings.ui.h:43 ui/Settings4.ui.h:41 +msgctxt "Veriler değiştiğinde Bing JSON'u dışa aktarın" +msgid "Export Bing JSON whenever data changes" +msgstr "" + +#: ui/Settings.ui.h:44 ui/Settings4.ui.h:42 +msgctxt "Hata ayıklama seçenekleri" +msgid "Debug options" +msgstr "" + +#: ui/Settings.ui.h:45 ui/Settings4.ui.h:44 +msgctxt "Bing'den her gün yeni duvar kağıdı görselleri" +msgid "New wallpaper images everyday from Bing" +msgstr "" + +#: ui/Settings.ui.h:46 +msgctxt "GNOME kabuk uzantısı sürümü " +msgid "Gnome shell extension version " +msgstr "" + +#: ui/Settings.ui.h:47 ui/Settings4.ui.h:46 +msgctxt "Michael Carroll tarafından geliştiriliyor" +msgid "Maintained by Michael Carroll" +msgstr "" + +#: ui/Settings.ui.h:48 ui/Settings4.ui.h:47 +msgctxt "" +"Yazara desteğinizi Flattr veya GitHub Sponsors üzerinden " +"gösterin." +msgid "" +"Show your support to the author on " +"Flattr or Github " +"Sponsors." +msgstr "" + +#: ui/Settings.ui.h:49 ui/Settings4.ui.h:48 +msgctxt "Son sürümden bu yana yapılan değişiklikler" +msgid "Changes since last version" +msgstr "" + +#: ui/Settings.ui.h:50 ui/Settings4.ui.h:49 +msgctxt "Elia Argentieri'nin NASA APOD GNOME kabuk uzantısına dayanmaktadır" +msgid "Based on NASA APOD Gnome shell extension by Elia Argentieri" +msgstr "" + +#: ui/Settings.ui.h:51 ui/Settings4.ui.h:50 +msgctxt "" +"Bu program KESİNLİKLE HİÇBİR GARANTİ vermez.\n" +"Ayrıntılar için GNU " +"Genel Kamu Lisansı, sürüm 3 veya sonrası'na bakın." +msgid "" +"This program comes with ABSOLUTELY NO WARRANTY.\n" +"See the GNU General " +"Public License, version 3 or later for details." +msgstr "" + +#: ui/Settings.ui.h:53 ui/Settings4.ui.h:52 +msgctxt "Hakkında" +msgid "About" +msgstr "" + +#: ui/Settings4.ui.h:43 +msgctxt "Galeri" +msgid "Gallery" +msgstr "" + +#: ui/Settings4.ui.h:45 +msgctxt "GNOME kabuk uzantısı sürümü " +msgid "GNOME shell extension version " +msgstr "" + +#: ui/carousel.ui.h:1 ui/carousel4.ui.h:1 +msgctxt "Uygula" +msgid "Apply" +msgstr "" + +#: ui/carousel.ui.h:2 ui/carousel4.ui.h:2 +msgctxt "Görünüm" +msgid "View" +msgstr "" + +#: ui/carousel.ui.h:3 ui/carousel4.ui.h:3 +msgctxt "Bilgi" +msgid "Info" +msgstr "" + +#: ui/carousel.ui.h:4 ui/carousel4.ui.h:4 +msgctxt "Sil" +msgid "Delete" +msgstr "" + +#: ui/carousel.ui.h:5 ui/carousel4.ui.h:6 +msgctxt "Rastgele modu ayarla" +msgid "Set random mode" +msgstr "" + +#: ui/carousel4.ui.h:5 +msgctxt "" +msgid "" +msgstr "" + +#: ui/carousel4.ui.h:7 +msgctxt "Resim galerisini yükle" +msgid "Load image gallery" +msgstr "" + +#: extension.js:135 +msgctxt "" +msgid "" +msgstr "" + +#: extension.js:136 extension.js:137 extension.js:138 +msgctxt "Yenilenmeyi bekliyor..." +msgid "Awaiting refresh..." +msgstr "" + +#: extension.js:139 +msgctxt "Görüntüyü panoya kopyala" +msgid "Copy image to clipboard" +msgstr "" + +#: extension.js:140 +msgctxt "Görüntü URL'sini panoya kopyala" +msgid "Copy image URL to clipboard" +msgstr "" + +#: extension.js:141 +msgctxt "Görüntü klasörünü açın" +msgid "Open image folder" +msgstr "" + +#: extension.js:143 +msgctxt "Kilit ekranı görüntüsünü ayarla" +msgid "Set lock screen image" +msgstr "" + +#: extension.js:144 +msgctxt "Şimdi Yenile" +msgid "Refresh Now" +msgstr "" + +#: extension.js:146 +msgctxt "Resim görüntüleyicide aç" +msgid "Open in image viewer" +msgstr "" + +#: extension.js:147 +msgctxt "Bing resim bilgi sayfasını açın" +msgid "Open Bing image information page" +msgstr "" + +#: extension.js:154 +msgctxt "Hızlı ayarlar" +msgid "Quick settings" +msgstr "" + +#: extension.js:158 +msgctxt "Görüntü karıştırma modu" +msgid "Image shuffle mode" +msgstr "" + +#: extension.js:160 +msgctxt "Görüntü sayısını göster" +msgid "Show image count" +msgstr "" + +#: extension.js:326 +msgctxt "Sonraki yenileme" +msgid "Next refresh" +msgstr "" + +#: extension.js:327 +msgctxt "Son yenileme" +msgid "Last refresh" +msgstr "" + +#: extension.js:724 extension.js:760 +msgctxt "Bing için Günün Duvar Kağıdı" +msgid "Bing Wallpaper of the Day for" +msgstr "" + +#: extension.js:784 +msgctxt "Duvar kağıdı mevcut değil" +msgid "No wallpaper available" +msgstr "" + +#: extension.js:785 +msgctxt "Bugün için fotoğraf yok." +msgid "No picture for today." +msgstr "" + +#: prefs.js:181 +msgctxt "Klasör seçin" +msgid "Select folder" +msgstr "" + +#: prefs.js:249 +msgctxt "En son görüntü" +msgid "Most recent image" +msgstr "" + +#: prefs.js:250 +msgctxt "Rastgele görüntü" +msgid "Random image" +msgstr "" + +#: utils.js:135 +msgctxt "Değişiklik günlüğü alınırken hata oluştu: " +msgid "Error fetching change log: " +msgstr "" + +#: utils.js:350 utils.js:353 +msgctxt "dakika" +msgid "minutes" +msgstr "" + +#: utils.js:356 +msgctxt "gün" +msgid "days" +msgstr "" + +#: utils.js:359 +msgctxt "saat" +msgid "hours" +msgstr "" diff --git a/metadata.json b/metadata.json index 01c998af..14fd7391 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "uuid": "BingWallpaper@ineffable-gmail.com", - "shell-version": ["3.36", "3.38", "40", "41", "42", "43"], + "shell-version": ["3.36", "3.38", "40", "41", "42", "43", "44"], "name": "Bing Wallpaper", "settings-schema": "org.gnome.shell.extensions.bingwallpaper", "description": "Sync your wallpaper to today's Microsoft Bing image of the day (the image you see when you visit Bing.com).\n\n *Disclaimer*: this extension is unofficial and not affiliated with Bing or Microsoft in any way. Images are protected by copyright and are licensed only for use as wallpapers.\n\nFeatures:\n* UHD resolution wallpapers\n* Automatically fetches current Bing wallpaper of the day and sets as both lock screen and desktop wallpaper (user selectable on GNOME versions that support it)\n* Doesn't poll continuously - only once per day and on startup (schedules a refresh when Bing is due to update)\n * random mode (from previously downloaded wallpapers)\n *NEW: select/cycle wallpaper through previously downloaded images\n* Language support: English (en), German (de), Dutch (nl), Italian (it), Polish (pl), Chinese (zh_CN, zh_TW), French (fr_FR), Portuguese (pt, pt_BR), Ukrainian (uk), Russian (ru_RU), Spanish (es), Korean (ko), Indonesian (id), Catalan (ca), Norwegian Bokmål (nb) & Nynorsk (ni), Swedish (sv), Arabic (ar), Hungarian (hu) and Japanese (ja) - a HUGE thanks to the translators\n\nThis extension was forked from the NASA APOD extension by Elinvention (https://github.com/Elinvention) and inspired by Bing Desktop Wallpaper Changer by Utkarsh Gupta (https://github.com/UtkarshGpta).\n\nAlways restart GNOME after manually updating extensions. Please report bugs to the GitHub page below:", diff --git a/prefs.js b/prefs.js index 3045def5..b39b9138 100644 --- a/prefs.js +++ b/prefs.js @@ -1,5 +1,5 @@ // Bing Wallpaper GNOME extension -// Copyright (C) 2017-2022 Michael Carroll +// Copyright (C) 2017-2023 Michael Carroll // This extension is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or diff --git a/schemas/gschemas.compiled b/schemas/gschemas.compiled index eb2969a5..8d343d6a 100644 Binary files a/schemas/gschemas.compiled and b/schemas/gschemas.compiled differ diff --git a/schemas/org.gnome.shell.extensions.bingwallpaper.gschema.xml b/schemas/org.gnome.shell.extensions.bingwallpaper.gschema.xml index 5aa1322c..3e1c0513 100644 --- a/schemas/org.gnome.shell.extensions.bingwallpaper.gschema.xml +++ b/schemas/org.gnome.shell.extensions.bingwallpaper.gschema.xml @@ -15,6 +15,12 @@ Send a notification with explanation when a new image is available + + true + Send a notifications only on most recent image + Notify only the most recent image, in combination with 'notify' setting + + true Use transient notifications (auto dismiss) @@ -138,6 +144,12 @@ + + false + Only pick from favourites in random mode + + + true Override safe defaults for Wayland desktop diff --git a/screenshot/notification.png b/screenshot/notification.png index 894a6855..3fc112df 100644 Binary files a/screenshot/notification.png and b/screenshot/notification.png differ diff --git a/thumbnail.js b/thumbnail.js index c054e637..e5474821 100644 --- a/thumbnail.js +++ b/thumbnail.js @@ -1,5 +1,5 @@ // Bing Wallpaper GNOME extension -// Copyright (C) 2017-2021 Michael Carroll +// Copyright (C) 2017-2023 Michael Carroll // This extension is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or diff --git a/ui/carousel4.ui b/ui/carousel4.ui index 3794d780..4be8a98d 100644 --- a/ui/carousel4.ui +++ b/ui/carousel4.ui @@ -68,6 +68,26 @@ Author: Michael Carroll vertical 1 center + + + Favorite + checkbox + + 1 + 0 + center + + + + + Favorite + checkbox-checked + + 1 + 0 + center + + Apply diff --git a/utils.js b/utils.js index dbabd0a1..7f926bf4 100644 --- a/utils.js +++ b/utils.js @@ -1,5 +1,5 @@ // Bing Wallpaper GNOME extension -// Copyright (C) 2017-2022 Michael Carroll +// Copyright (C) 2017-2023 Michael Carroll // This extension is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or @@ -193,6 +193,9 @@ function getImageList(settings) { function setImageList(settings, imageList) { settings.set_string('bing-json', JSON.stringify(imageList)); + if (settings.get_boolean('always-export-bing-json')) { // save copy of current JSON + exportBingJSON(settings); + } } function getImageTitle(image_data) { @@ -217,6 +220,19 @@ function getCurrentImageIndex (imageList) { return index; } +function setImageFavouriteStatus(settings, imageURL, newState) { + log('set favourite status of '+imageURL+' to '+newState); + let imageList = getImageList(settings); + imageList.forEach(function(x, i) { + //log('testing: '+imageURL+' includes '+x.urlbase); + if (imageURL.includes(x.urlbase)) { + log('setting index '+i+' to '+newState?'true':'false'); + imageList[i].favourite = newState; + } + }); + setImageList(settings, imageList); // save back to settings +} + function getCurrentImage(imageList) { if (!imageList || imageList.length == 0) return null; @@ -262,6 +278,10 @@ function imageIndex(imageList, urlbase) { return imageList.map(p => p.urlbase.replace('/th?id=OHR.', '')).indexOf(urlbase.replace('/th?id=OHR.', '')); } +function isFavourite(image) { + return (image.favourite && image.favourite === true); +} + function getImageByIndex(imageList, index) { if (imageList.length == 0 || index < 0 || index > imageList.length - 1) return null;