diff --git a/.eslintrc.yml b/.eslintrc.yml new file mode 100644 index 00000000..97e728f9 --- /dev/null +++ b/.eslintrc.yml @@ -0,0 +1,270 @@ +--- +# SPDX-License-Identifier: MIT OR LGPL-2.0-or-later +# SPDX-FileCopyrightText: 2018 Claudio André +env: + es2021: true +extends: 'eslint:recommended' +plugins: + - jsdoc +rules: + array-bracket-newline: + - error + - consistent + array-bracket-spacing: + - error + - never + array-callback-return: error + arrow-parens: + - error + - as-needed + arrow-spacing: error + block-scoped-var: error + block-spacing: error + brace-style: error + # Waiting for this to have matured a bit in eslint + # camelcase: + # - error + # - properties: never + # allow: [^vfunc_, ^on_, _instance_init] + comma-dangle: + - error + - arrays: always-multiline + objects: always-multiline + functions: never + comma-spacing: + - error + - before: false + after: true + comma-style: + - error + - last + computed-property-spacing: error + curly: + - error + - multi-or-nest + - consistent + dot-location: + - error + - property + eol-last: error + eqeqeq: error + func-call-spacing: error + func-name-matching: error + func-style: + - error + - declaration + - allowArrowFunctions: true + indent: + - error + - 4 + - ignoredNodes: + # Allow not indenting the body of GObject.registerClass, since in the + # future it's intended to be a decorator + - 'CallExpression[callee.object.name=GObject][callee.property.name=registerClass] > ClassExpression:first-child' + # Allow dedenting chained member expressions + MemberExpression: 'off' + jsdoc/check-alignment: error + jsdoc/check-param-names: error + jsdoc/check-tag-names: error + jsdoc/check-types: error + jsdoc/implements-on-classes: error + jsdoc/newline-after-description: error + jsdoc/require-jsdoc: error + jsdoc/require-param: error + jsdoc/require-param-description: error + jsdoc/require-param-name: error + jsdoc/require-param-type: error + key-spacing: + - error + - beforeColon: false + afterColon: true + keyword-spacing: + - error + - before: true + after: true + linebreak-style: + - error + - unix + lines-between-class-members: + - error + - always + - exceptAfterSingleLine: true + max-nested-callbacks: error + max-statements-per-line: error + new-parens: error + no-array-constructor: error + no-await-in-loop: error + no-caller: error + no-constant-condition: + - error + - checkLoops: false + no-div-regex: error + no-empty: + - error + - allowEmptyCatch: true + no-extra-bind: error + no-extra-parens: + - error + - all + - conditionalAssign: false + nestedBinaryExpressions: false + returnAssign: false + no-implicit-coercion: + - error + - allow: + - '!!' + no-invalid-this: error + no-iterator: error + no-label-var: error + no-lonely-if: error + no-loop-func: error + no-nested-ternary: error + no-new-object: error + no-new-wrappers: error + no-octal-escape: error + no-proto: error + no-prototype-builtins: 'off' + no-restricted-globals: [error, window] + no-restricted-properties: + - error + - object: imports + property: format + message: Use template strings + - object: pkg + property: initFormat + message: Use template strings + - object: Lang + property: copyProperties + message: Use Object.assign() + - object: Lang + property: bind + message: Use arrow notation or Function.prototype.bind() + - object: Lang + property: Class + message: Use ES6 classes + no-restricted-syntax: + - error + - selector: >- + MethodDefinition[key.name="_init"] > + FunctionExpression[params.length=1] > + BlockStatement[body.length=1] + CallExpression[arguments.length=1][callee.object.type="Super"][callee.property.name="_init"] > + Identifier:first-child + message: _init() that only calls super._init() is unnecessary + - selector: >- + MethodDefinition[key.name="_init"] > + FunctionExpression[params.length=0] > + BlockStatement[body.length=1] + CallExpression[arguments.length=0][callee.object.type="Super"][callee.property.name="_init"] + message: _init() that only calls super._init() is unnecessary + - selector: BinaryExpression[operator="instanceof"][right.name="Array"] + message: Use Array.isArray() + no-return-assign: error + no-return-await: error + no-self-compare: error + no-shadow: error + no-shadow-restricted-names: error + no-spaced-func: error + no-tabs: error + no-template-curly-in-string: error + no-throw-literal: error + no-trailing-spaces: error + no-undef-init: error + no-unneeded-ternary: error + no-unused-expressions: error + no-unused-vars: + - error + # Vars use a suffix _ instead of a prefix because of file-scope private vars + - varsIgnorePattern: (^unused|_$) + argsIgnorePattern: ^(unused|_) + no-useless-call: error + no-useless-computed-key: error + no-useless-concat: error + no-useless-constructor: error + no-useless-rename: error + no-useless-return: error + no-whitespace-before-property: error + no-with: error + nonblock-statement-body-position: + - error + - below + object-curly-newline: + - error + - consistent: true + multiline: true + object-curly-spacing: error + object-shorthand: error + operator-assignment: error + operator-linebreak: error + padded-blocks: + - error + - never + # These may be a bit controversial, we can try them out and enable them later + # prefer-const: error + # prefer-destructuring: error + prefer-numeric-literals: error + prefer-promise-reject-errors: error + prefer-rest-params: error + prefer-spread: error + prefer-template: error + quotes: + - error + - single + - avoidEscape: true + require-await: error + rest-spread-spacing: error + semi: + - error + - always + semi-spacing: + - error + - before: false + after: true + semi-style: error + space-before-blocks: error + space-before-function-paren: + - error + - named: never + # for `function ()` and `async () =>`, preserve space around keywords + anonymous: always + asyncArrow: always + space-in-parens: error + space-infix-ops: + - error + - int32Hint: false + space-unary-ops: error + spaced-comment: error + switch-colon-spacing: error + symbol-description: error + template-curly-spacing: error + template-tag-spacing: error + unicode-bom: error + wrap-iife: + - error + - inside + yield-star-spacing: error + yoda: error +settings: + jsdoc: + mode: typescript +globals: + ARGV: readonly + Debugger: readonly + GIRepositoryGType: readonly + globalThis: readonly + imports: readonly + Intl: readonly + log: readonly + logError: readonly + print: readonly + printerr: readonly + window: readonly + TextEncoder: readonly + TextDecoder: readonly + console: readonly + setTimeout: readonly + setInterval: readonly + clearTimeout: readonly + clearInterval: readonly +parserOptions: + ecmaVersion: 2022 diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 902bc400..965d5cbe 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,2 +1,2 @@ github: [neffo] -custom: ['https://flattr.com/@neffo'] +ko_fi: [michaelcarroll] diff --git a/carousel.js b/carousel.js index 97c36b93..13e9b634 100644 --- a/carousel.js +++ b/carousel.js @@ -78,8 +78,8 @@ var Carousel = class Carousel { } _create_gallery() { - Utils.randomIntervals.forEach((seconds, i) => { - let item = this._create_random_item(seconds, Utils.randomIntervalsTitle[i]); + Utils.randomIntervals.forEach((x) => { + let item = this._create_random_item(x.value, x.title); if (Gtk.get_major_version() < 4) this.flowBox.add(item); else @@ -156,7 +156,8 @@ var Carousel = class Carousel { deleteButton.connect('clicked', (widget) => { this.log('Delete requested for '+filename); Utils.deleteImage(filename); - Utils.cleanupImageList(this.settings); + //Utils.cleanupImageList(this.settings); + Utils.hideImage(this.settings, [image]); widget.get_parent().get_parent().set_visible(false); // bit of a hack if (this.callbackfunc) this.callbackfunc(); @@ -182,7 +183,7 @@ var Carousel = class Carousel { return item; } - _create_random_item(seconds, title) { + _create_random_item(interval, title) { let buildable = new Gtk.Builder(); // grab appropriate object from UI file @@ -195,13 +196,13 @@ var Carousel = class Carousel { let randomLabel = buildable.get_object('randomLabel'); randomLabel.set_text(title); - let filename = 'random'; let applyButton = buildable.get_object('randomButton'); applyButton.connect('clicked', (widget) => { - this.settings.set_string('selected-image', filename); - this.settings.set_int('random-interval', seconds); - this.log('gallery selected random with interval '+seconds); + this.settings.set_string('random-interval-mode', interval); + //this.settings.set_int('random-interval', seconds); + this.settings.set_boolean('random-mode-enabled', true); + this.log('gallery selected random with interval '+interval+' ('+title+')'); }); let item = buildable.get_object('flowBoxRandom'); @@ -223,9 +224,10 @@ var Carousel = class Carousel { let loadButton = buildable.get_object('loadButton'); loadButton.connect('clicked', (widget) => { - this.flowBox.remove(widget.get_parent()); + widget.set_label(_("Loading...")); this.flowBox.set_max_children_per_line(2); this._create_gallery(); + this.flowBox.remove(widget.get_parent()); }); let item = buildable.get_object('flowBoxPlaceholder'); diff --git a/extension.js b/extension.js index ba0c2068..d5e98a08 100644 --- a/extension.js +++ b/extension.js @@ -30,6 +30,8 @@ const BingURL = 'https://www.bing.com'; const IndicatorName = 'BingWallpaperIndicator'; const TIMEOUT_SECONDS = 24 * 3600; // FIXME: this should use the end data from the json data const TIMEOUT_SECONDS_ON_HTTP_ERROR = 1 * 3600; // retry in one hour if there is a http error +const MINIMUM_SHUFFLE_IMAGES = 3; // bare minimum to use filtered image set in shuffle mode + const ICON_PREVIOUS_BUTTON = 'media-seek-backward-symbolic'; const ICON_SHUFFLE_BUTTON = 'media-playlist-shuffle-symbolic'; const ICON_CONSEC_BUTTON = 'media-playlist-consecutive-symbolic'; @@ -42,6 +44,8 @@ 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'; +const ICON_TRASH_BUTTON = Me.dir.get_child('icons').get_path() + '/'+'trash-empty-symbolic.svg'; +const ICON_UNTRASH_BUTTON = Me.dir.get_child('icons').get_path() + '/'+'trash-full-symbolic.svg'; let bingWallpaperIndicator = null; let blur = null; @@ -106,6 +110,7 @@ class BingWallpaperIndicator extends PanelMenu.Button { this.imageURL = ""; // link to image itself this.imageinfolink = ""; // link to Bing photo info page this.refreshdue = 0; + this.shuffledue = 0; this.refreshduetext = ""; this.thumbnail = null; this.thumbnailItem = null; @@ -114,29 +119,22 @@ class BingWallpaperIndicator extends PanelMenu.Button { this.imageIndex = null; this.logger = null; this.favourite_status = false; + this.hidden_status = false; + this.dimensions = { 'width': null, 'height': null}; if (!blur) // as Blur isn't disabled on screen lock (like the rest of the extension is) blur = new Blur.Blur(); - - /* - blur.BWP_BLUR_BRIGHTNESS = 2; - blur.BWP_BLUR_SIGMA = 55; - */ // take a variety of actions when the gsettings values are modified by prefs this._settings = ExtensionUtils.getSettings(Utils.BING_SCHEMA); - this._initSoup(); + // create Soup session + this.httpSession = Utils.initSoup(); getActorCompat(this).visible = !this._settings.get_boolean('hide'); - // enable testing potentially unsafe features on Wayland if the user overrides it - if (!Utils.is_x11() && this._settings.get_boolean('override-unsafe-wayland')) { - Utils.is_x11 = Utils.enabled_unsafe; - } - this.refreshDueItem = newMenuItem(_("")); - this.titleItem = new PopupMenu.PopupSubMenuMenuItem(_("Awaiting refresh..."), false); + this.explainItem = newMenuItem(_("Awaiting refresh...")); this.copyrightItem = newMenuItem(_("Awaiting refresh...")); this.clipboardImageItem = newMenuItem(_("Copy image to clipboard")); @@ -149,6 +147,8 @@ class BingWallpaperIndicator extends PanelMenu.Button { this.openImageItem = newMenuItem(_("Open in image viewer")); this.openImageInfoLinkItem = newMenuItem(_("Open Bing image information page")); + // create collapsable menu item (the image title), clicking this opens a sub-menu with various image options + this.titleItem = new PopupMenu.PopupSubMenuMenuItem(_("Awaiting refresh..."), false); [this.openImageInfoLinkItem, this.openImageItem, this.folderItem, this.clipboardImageItem, this.clipboardURLItem, this.dwallpaperItem] .forEach(e => this.titleItem.menu.addMenuItem(e)); @@ -156,15 +156,17 @@ class BingWallpaperIndicator extends PanelMenu.Button { // quick settings submenu this.settingsSubMenu = new PopupMenu.PopupSubMenuMenuItem(_("Quick settings"), false); // toggles under the quick settings submenu - 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.toggleSetBackground = newMenuSwitchItem(_("Set background image"), this._settings.get_boolean('set-background'));*/ + this.toggleSelectNew = newMenuSwitchItem(_("Always switch to new images"), this._settings.get_boolean('revert-to-current-image')); + this.toggleShuffle = newMenuSwitchItem(_("Enable image shuffle mode"), this._settings.get_boolean('random-mode-enabled')); this.toggleShuffleOnlyFaves = newMenuSwitchItem(_("Image shuffle only favourites"), this._settings.get_boolean('random-mode-include-only-favourites')); + //this.toggleShuffleOnlyUnhidden = newMenuSwitchItem(_("Image shuffle only unhidden"), this._settings.get_boolean('random-mode-include-only-unhidden')); + this.toggleShuffleOnlyUHD = newMenuSwitchItem(_("Image shuffle only UHD resolutions"), this._settings.get_boolean('random-mode-include-only-uhd')); 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.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.toggleShuffleOnlyFaves] + [this.toggleNotifications, /*this.toggleImageCount,*/ /*this.toggleSetBackground,*/ this.toggleSelectNew, + this.toggleShuffle, this.toggleShuffleOnlyFaves, /*this.toggleShuffleOnlyUnhidden,*/ this.toggleShuffleOnlyUHD] .forEach(e => this.settingsSubMenu.menu.addMenuItem(e)); // these items are a bit unique, we'll populate them in _setControls() @@ -196,8 +198,10 @@ class BingWallpaperIndicator extends PanelMenu.Button { allMenuItems.forEach(e => this.menu.addMenuItem(e)); // non clickable information items - [this.explainItem, this.copyrightItem, this.refreshDueItem, this.thumbnailItem] - .forEach((e) => { + let nonclickable = [this.explainItem, this.copyrightItem, this.refreshDueItem, this.thumbnailItem]; + if (this._settings.get_boolean('random-mode-enabled')) + nonclickable.concat(this.toggleShuffleOnlyFaves, this.toggleShuffleOnlyUHD /*, this.toggleShuffleOnlyUnhidden*/); + nonclickable.forEach((e) => { e.setSensitive(false); }); @@ -211,12 +215,6 @@ class BingWallpaperIndicator extends PanelMenu.Button { } } - // create soup Session - _initSoup() { - this.httpSession = new Soup.Session(); - this.httpSession.user_agent = 'User-Agent: Mozilla/5.0 (X11; GNOME Shell/' + imports.misc.config.PACKAGE_VERSION + '; Linux x86_64; +https://github.com/neffo/bing-wallpaper-gnome-extension ) BingWallpaper Gnome Extension/' + Me.metadata.version; - } - // listen for configuration changes _setConnections() { this._settings.connect('changed::hide', () => { @@ -227,18 +225,22 @@ class BingWallpaperIndicator extends PanelMenu.Button { {signal: 'changed::icon-name', call: this._setIcon}, {signal: 'changed::market', call: this._refresh}, {signal: 'changed::set-background', call: this._setBackground}, - /*{signal: 'changed::set-lockscreen', call: this._setBackground},*/ {signal: 'changed::override-lockscreen-blur', call: this._setBlur}, {signal: 'changed::selected-image', call: this._setImage}, {signal: 'changed::delete-previous', call: this._cleanUpImages}, {signal: 'changed::notify', call: this._notifyCurrentImage}, {signal: 'changed::always-export-bing-json', call: this._exportData}, {signal: 'changed::bing-json', call: this._exportData}, - {signal: 'changed::controls-icon-size', call: this._setControls} + {signal: 'changed::controls-icon-size', call: this._setControls}, + {signal: 'changed::random-mode-enabled', call: this._randomModeChanged}, + {signal: 'changed::random-mode-include-only-favourites', call: this._randomModeChanged}, + {signal: 'changed::random-mode-include-only-unhidden', call: this._randomModeChanged}, + {signal: 'changed::random-mode-include-only-uhd', call: this._randomModeChanged}, + {signal: 'changed::random-interval-mode', call: this._randomModeChanged} ]; // _setShuffleToggleState - settingConnections.forEach((e) => { + settingConnections.forEach( (e) => { this._settings.connect(e.signal, e.call.bind(this)); }); @@ -257,49 +259,34 @@ class BingWallpaperIndicator extends PanelMenu.Button { // link menu items to functions this.thumbnailItem.connect('activate', this._setBackgroundDesktop.bind(this)); this.openImageItem.connect('activate', this._openInSystemViewer.bind(this)); + this.thumbnailItem.connect('activate', this._openInSystemViewer.bind(this)); //this.titleItem.connect('activate', this._setBackgroundDesktop.bind(this)); this.openImageInfoLinkItem.connect('activate', this._openImageInfoLink.bind(this)); this.dwallpaperItem.connect('activate', this._setBackgroundDesktop.bind(this)); this.refreshItem.connect('activate', this._refresh.bind(this)); this.settingsItem.connect('activate', this._openPrefs.bind(this)); - // unfortunately we can't bind like we can with prefs here, so we handle toggles in two steps - // first, we listen for changes to these toggle settings and update toggles - this._settings.connect('changed::set-background', () => { - this.toggleSetBackground.setToggleState(this._settings.get_boolean('set-background')); - }); - this._settings.connect('changed::revert-to-current-image', () => { - this.toggleSelectNew.setToggleState(this._settings.get_boolean('revert-to-current-image')); - }); - this._settings.connect('changed::notify', () => { - this.toggleNotifications.setToggleState(this._settings.get_boolean('notify')); - }); - this._settings.connect('changed::show-count-in-image-title', () => { - this.toggleImageCount.setToggleState(this._settings.get_boolean('show-count-in-image-title')); - this._setMenuText(); - }); - - // & then, link settings to toggle state (the other way) - this.toggleSetBackground.connect('toggled', (item, state) => { - this._settings.set_boolean('set-background', state); - }); - this.toggleSelectNew.connect('toggled', (item, state) => { - this._settings.set_boolean('revert-to-current-image', state); - }); - this.toggleNotifications.connect('toggled', (item, state) => { - this._settings.set_boolean('notify', state); - }); - this.toggleImageCount.connect('toggled', (item, state) => { - 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); - }); + // unfortunately we can't bind toggles trivially like we can with prefs.js here, so we handle toggles in two steps + // first, we listen for changes to these toggle settings and update the status + // & then, link settings to toggle state (the other way) + + let toggles = [ /*{key: 'set-background', toggle: this.toggleSetBackground},*/ + {key: 'revert-to-current-image', toggle: this.toggleSelectNew}, + {key: 'notify', toggle: this.toggleNotifications}, + /*{key: 'show-count-in-image-title', toggle: this.toggleImageCount},*/ + {key: 'random-mode-enabled', toggle: this.toggleShuffle}, + {key: 'random-mode-include-only-favourites', toggle: this.toggleShuffleOnlyFaves}, + /*{key: 'random-mode-include-only-unhidden', toggle: this.toggleShuffleOnlyUnhidden},*/ + {key: 'random-mode-include-only-uhd', toggle: this.toggleShuffleOnlyUHD}]; - // shuffle is a special case - this._setShuffleToggleState(); - this.toggleShuffle.connect('toggled', this._toggleShuffle.bind(this)); + toggles.forEach( (e) => { + this._settings.connect('changed::'+e.key, () => { + e.toggle.setToggleState(this._settings.get_boolean(e.key)); + }); + e.toggle.connect('toggled', (item, state) => { + this._settings.set_boolean(e.key, state); + }); + }); this.folderItem.connect('activate', Utils.openImageFolder.bind(this, this._settings)); if (this.clipboard.clipboard) { // only if we have a clipboard @@ -319,10 +306,8 @@ class BingWallpaperIndicator extends PanelMenu.Button { _openMenu() { // Grey out menu items if an update is pending this.refreshItem.setSensitive(!this._updatePending); - if (Utils.is_x11()) { - this.clipboardImageItem.setSensitive(!this._updatePending && this.imageURL != ""); - this.clipboardURLItem.setSensitive(!this._updatePending && this.imageURL != ""); - } + this.clipboardImageItem.setSensitive(!this._updatePending && this.imageURL != ""); + this.clipboardURLItem.setSensitive(!this._updatePending && this.imageURL != ""); this.thumbnailItem.setSensitive(!this._updatePending && this.imageURL != ""); //this.showItem.setSensitive(!this._updatePending && this.title != "" && this.explanation != ""); this.dwallpaperItem.setSensitive(!this._updatePending && this.filename != ""); @@ -332,6 +317,9 @@ class BingWallpaperIndicator extends PanelMenu.Button { this.refreshduetext = _("Next refresh") + ": " + (this.refreshdue ? this.refreshdue.format("%Y-%m-%d %X") : '-') + " (" + Utils.friendly_time_diff(this.refreshdue) + ")\n" + _("Last refresh") + ": " + (maxlongdate? this._localeDate(maxlongdate, true) : '-'); + // also show when shuffle is next due + if (this._settings.get_boolean('random-mode-enabled')) + this.refreshduetext += "\n" + _("Next shuffle")+": "+(this.shuffledue ? this.shuffledue.format("%Y-%m-%d %X") : '-') + " (" + Utils.friendly_time_diff(this.shuffledue) + ")"; this.refreshDueItem.label.set_text(this.refreshduetext); } @@ -346,7 +334,6 @@ class BingWallpaperIndicator extends PanelMenu.Button { this.selected_image = this._settings.get_string('selected-image'); log('selected image changed to: ' + this.selected_image); this._selectImage(); - this._setShuffleToggleState(); } _notifyCurrentImage() { @@ -373,7 +360,10 @@ class BingWallpaperIndicator extends PanelMenu.Button { _setBackground() { if (this.filename == '') return; - this.thumbnail = new Thumbnail.Thumbnail(this.filename); // historically thumbnails were a bit unsafe on Wayland, but now fixed + this.thumbnail = new Thumbnail.Thumbnail(this.filename, St.ThemeContext.get_for_stage(global.stage).scale_factor); // use scale factor to make them look nicer + if (!this.dimensions.width || !this.dimensions.height) // if dimensions aren't in image database yet + [this.dimensions.width, this.dimensions.height] = Utils.getFileDimensions(this.filename); + log('image set to : '+this.filename); this._setThumbnailImage(); if (this._settings.get_boolean('set-background')) this._setBackgroundDesktop(); @@ -413,6 +403,16 @@ class BingWallpaperIndicator extends PanelMenu.Button { this._restartTimeout(difference); } + _restartShuffleTimeoutFromDueDate(duedate) { + let now = GLib.DateTime.new_now_local(); + let difference = duedate.difference(now) / 1000000; + if (difference < 60 || difference > 86400) // clamp to a reasonable range + difference = 60; + + log('Next shuffle due ' + difference + ' seconds from now'); + this._restartShuffleTimeout(difference); + } + // convert longdate format into human friendly format _localeDate(longdate, include_time = false) { try { @@ -428,15 +428,16 @@ class BingWallpaperIndicator extends PanelMenu.Button { _setMenuText() { this.titleItem.label.set_text(this.title ? this.title : ''); this.copyrightItem.label.set_text(this.copyright ? this.copyright : ''); + let explainaItemText = this.explanation + ' ['+this.dimensions.height+'p] '; if (this._settings.get_boolean('show-count-in-image-title') && this.explanation) { let imageList = JSON.parse(this._settings.get_string('bing-json')); if (imageList.length > 0) - this.explainItem.label.set_text( this.explanation + ' [' + (this.imageIndex + 1) + '/' + imageList.length + ']'); - } - else { - this.explainItem.label.set_text(this.explanation ? this.explanation : ''); + explainaItemText = explainaItemText + ' [' + (this.imageIndex + 1) + '/' + imageList.length + ']'; } + this.explainItem.label.set_text(explainaItemText); this._setFavouriteIcon(this.favourite_status?ICON_FAVE_BUTTON:ICON_UNFAVE_BUTTON); + this._setTrashIcon(this.hidden_status?ICON_UNTRASH_BUTTON:ICON_TRASH_BUTTON); + //this.imageFileInfo.label.set_text(this.dimensions.height && this.dimensions.width ? this.dimensions.width+' x '+this.dimensions.height: '-'); } _wrapLabelItem(menuItem) { @@ -452,6 +453,10 @@ class BingWallpaperIndicator extends PanelMenu.Button { this.favourite_status?ICON_FAVE_BUTTON:ICON_UNFAVE_BUTTON, this.controlItem, this._favouriteImage); + this.trashBtn = this._newMenuIcon( + this.hidden_status?ICON_UNTRASH_BUTTON:ICON_TRASH_BUTTON, + this.controlItem, + this._trashImage); this.prevBtn = this._newMenuIcon( ICON_PREVIOUS_BUTTON, this.controlItem, @@ -467,10 +472,11 @@ class BingWallpaperIndicator extends PanelMenu.Button { this.randomizeBtn = this._newMenuIcon( ICON_RANDOM, this.controlItem, - this._shuffleImage); + this._selectImage, + null, true); } - _newMenuIcon(icon_name, parent, fn, position = null) { + _newMenuIcon(icon_name, parent, fn, position = null, arg = null) { let gicon = Gio.icon_new_for_string(icon_name); let icon = new St.Icon({ /*icon_name: icon_name,*/ @@ -497,7 +503,7 @@ class BingWallpaperIndicator extends PanelMenu.Button { getActorCompat(parent).add_child(iconBtn); } - iconBtn.connect('button-press-event', fn.bind(this)); + iconBtn.connect('button-press-event', fn.bind(this, arg)); return iconBtn; } @@ -550,27 +556,23 @@ class BingWallpaperIndicator extends PanelMenu.Button { this._gotoImage(0); } - _shuffleImage() { - this._selectImage(true); - } - - _setShuffleToggleState() { - 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'); + _randomModeChanged() { + let randomEnabled = this._settings.get_boolean('random-mode-enabled'); + [this.toggleShuffleOnlyFaves, this.toggleShuffleOnlyUHD /*, this.toggleShuffleOnlyUnhidden*/] + .forEach( x => { + x.setSensitive(randomEnabled); + }); + if (randomEnabled) { + log('enabled shuffle mode, by setting a shuffe timer (5 seconds)'); + this._restartShuffleTimeout(5); + this._settings.set_boolean('revert-to-current-image', false); } else { - this._settings.set_string('selected-image', 'random'); + // clear shuffle timer + if (this._shuffleTimeout) + GLib.source_remove(this._shuffleTimeout); + this._settings.set_boolean('revert-to-current-image', true); } - this._setShuffleToggleState(); - log('switched mode to ' + this._settings.get_string('selected-image')); } _favouriteImage() { @@ -580,6 +582,13 @@ class BingWallpaperIndicator extends PanelMenu.Button { this._setFavouriteIcon(this.favourite_status?ICON_FAVE_BUTTON:ICON_UNFAVE_BUTTON); } + _trashImage() { + log('trash image '+this.imageURL+' status was '+this.hidden_status); + this.hidden_status = !this.hidden_status; + Utils.setImageHiddenStatus(this._settings, [this.imageURL], this.hidden_status); + this._setTrashIcon(this.hidden_status?ICON_UNTRASH_BUTTON:ICON_TRASH_BUTTON); + } + _setFavouriteIcon(icon_name) { let gicon = Gio.icon_new_for_string(icon_name); this.favouriteBtn.get_children().forEach( (x, i) => { @@ -587,13 +596,17 @@ class BingWallpaperIndicator extends PanelMenu.Button { }); } + _setTrashIcon(icon_name) { + let gicon = Gio.icon_new_for_string(icon_name); + this.trashBtn.get_children().forEach( (x, i) => { + x.set_gicon(gicon); + }); + } + _gotoImage(relativePos) { let imageList = Utils.getImageList(this._settings); let curIndex = 0; - if (this.selected_image == 'random') - return; - if (this.selected_image == 'current') { curIndex = Utils.getCurrentImageIndex(imageList); } @@ -665,7 +678,7 @@ class BingWallpaperIndicator extends PanelMenu.Button { log('Recieved ' + data.length + ' bytes'); this._parseData(data); - if (this.selected_image != 'random') + if (!this._settings.get_boolean('random-mode-enabled')) this._selectImage(); } catch (error) { @@ -684,19 +697,37 @@ class BingWallpaperIndicator extends PanelMenu.Button { seconds = TIMEOUT_SECONDS; this._timeout = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, seconds, this._refresh.bind(this)); - let localTime = GLib.DateTime.new_now_local().add_seconds(seconds); - this.refreshdue = localTime; - log('next check in ' + seconds + ' seconds @ local time ' + localTime.format('%F %R %z')); + this.refreshdue = GLib.DateTime.new_now_local().add_seconds(seconds); + log('next check in ' + seconds + ' seconds'); } _restartShuffleTimeout(seconds = null) { + log('_restartShuffleTimeout('+seconds+')'); + console.trace(); if (this._shuffleTimeout) GLib.source_remove(this._shuffleTimeout); - if (seconds == null) - seconds = this._settings.get_int('random-interval'); + if (seconds == null) { + let diff = -Math.floor(GLib.DateTime.new_now_local().difference(this.shuffledue)/1000000); + + + log('shuffle ('+this.shuffledue.format_iso8601()+') diff = '+diff); - this._shuffleTimeout = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, seconds, this._selectImage.bind(this)); + if (diff > 0) { + seconds = diff; // if not specified, we should maintain the existing shuffle timeout (i.e. we just restored from saved state) + } + else if (this._settings.get_string('random-interval-mode') != 'custom') { + let random_mode = this._settings.get_string('random-interval-mode'); + seconds = Utils.seconds_until(random_mode); // else we shuffle at specified interval (midnight default) + log('shuffle mode = '+random_mode+' = '+seconds+' from now'); + } + else { + seconds = this._settings.get_int('random-interval'); // or whatever the user has specified (as a timer) + } + } + + this._shuffleTimeout = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, seconds, this._selectImage.bind(this, true)); + this.shuffledue = GLib.DateTime.new_now_local().add_seconds(seconds); log('next shuffle in ' + seconds + ' seconds'); } @@ -719,7 +750,9 @@ class BingWallpaperIndicator extends PanelMenu.Button { log('WARNING: Bing returning market data for ' + datamarket + ' rather than selected ' + prefmarket); Utils.purgeImages(this._settings); // delete older images if enabled - Utils.cleanupImageList(this._settings); + //Utils.cleanupImageList(this._settings); // disabled, as old images should still be downloadble in theory + this._downloadAllImages(); // fetch missing images that are still available + Utils.populateImageListResolutions(this._settings); if (newImages.length > 0 && this._settings.get_boolean('revert-to-current-image')) { // user wants to switch to the new image when it arrives @@ -729,7 +762,7 @@ class BingWallpaperIndicator extends PanelMenu.Button { if (this._settings.get_boolean('notify')) { if (!this._settings.get_boolean('notify-only-latest')) { // notify all new images - newImages.forEach((image, index) => { + newImages.forEach(image => { log('New image to notify: ' + Utils.getImageTitle(image)); this._createNotification(image); }); @@ -748,7 +781,8 @@ class BingWallpaperIndicator extends PanelMenu.Button { this._updatePending = false; } catch (error) { - log('_parseData() failed with error ' + error); + log('_parseData() failed with error ' + error + ' @ '+error.lineNumber); + log(error.stack); } } @@ -769,31 +803,62 @@ class BingWallpaperIndicator extends PanelMenu.Button { source.showNotification(notification); } + _shuffleImage() { + let image = null; + let imageList = Utils.getImageList(this._settings); + let filter = { 'faves': this._settings.get_boolean('random-mode-include-only-favourites'), + 'hidden': this._settings.get_boolean('random-mode-include-only-unhidden'), + 'min_height': this._settings.get_boolean('random-mode-include-only-uhd')?this._settings.get_int('min-uhd-height'):false + }; + let favImageList = Utils.getImageList(this._settings, filter); + + if (favImageList.length >= MINIMUM_SHUFFLE_IMAGES) { // we have the minimum images to shuffle, if not fall back to shuffle all iamges + imageList = favImageList; + } + else { + log('not enough filtered images available to shuffle'); + } + + // shuffle could fail for a number of reasons + try { + this.imageIndex = Utils.getRandomInt(imageList.length); + image = imageList[this.imageIndex]; + + log('shuffled to image '+image.urlbase); + + return image; + } + catch (e) { + log('shuffle failed '+e); + return null; + } + } + _selectImage(force_shuffle = false) { 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(); - } else if (this.selected_image == 'current') { - image = Utils.getCurrentImage(imageList); - this.imageIndex = Utils.getCurrentImageIndex(imageList); - } else { - image = Utils.inImageList(imageList, this.selected_image); - log('_selectImage: ' + this.selected_image + ' = ' + image ? image.urlbase : 'not found'); - if (!image) // if we didn't find it, try for current + if (force_shuffle) { + image = this._shuffleImage(); + if (this._settings.get_boolean('random-mode-enabled')) + this._restartShuffleTimeout(); + } + + if (!image) { + if (this.selected_image == 'current') { image = Utils.getCurrentImage(imageList); - this.imageIndex = Utils.imageIndex(imageList, image.urlbase); + this.imageIndex = Utils.getCurrentImageIndex(imageList); + } else { + image = Utils.inImageList(imageList, this.selected_image); + + if (!image) // if we didn't find it, try for current + image = Utils.getCurrentImage(imageList); + + if (image) + this.imageIndex = Utils.imageIndex(imageList, image.urlbase); + log('_selectImage: ' + this.selected_image + ' = ' + (image && image.urlbase) ? image.urlbase : 'not found'); + } } if (!image) @@ -809,8 +874,12 @@ class BingWallpaperIndicator extends PanelMenu.Button { this.copyright = image.copyright.match(/[\(\(]([^)]+)[\)\)]/)[1].replace('\*\*', ''); // Japan locale uses () rather than () this.longstartdate = image.fullstartdate; 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); + this.imageURL = BingURL + image.urlbase + '_' + resolution + '.jpg'+'&qlt=100'; // generate image url for user's resolution + this.filename = Utils.toFilename(BingWallpaperDir, image.startdate, image.urlbase, resolution); + this.dimensions.width = image.width?image.width:null; + this.dimensions.height = image.height?image.height:null; + this.selected_image = Utils.getImageUrlBase(image); + this._settings.set_string('selected-image', this.selected_image); if (("favourite" in image) && image.favourite === true ) { this.favourite_status = true; @@ -818,17 +887,20 @@ class BingWallpaperIndicator extends PanelMenu.Button { else { this.favourite_status = false; } + + if (("hidden" in image) && image.hidden === true ) { + this.hidden_status = true; + } + else { + this.hidden_status = false; + } let file = Gio.file_new_for_path(this.filename); let file_exists = file.query_exists(null); let file_info = file_exists ? file.query_info ('*', Gio.FileQueryInfoFlags.NONE, null) : 0; if (!file_exists || file_info.get_size () == 0) { // file doesn't exist or is empty (probably due to a network error) - let dir = Gio.file_new_for_path(BingWallpaperDir); - if (!dir.query_exists(null)) { - dir.make_directory_with_parents(null); - } - this._downloadImage(this.imageURL, file); + this._downloadImage(this.imageURL, file, true); } else { this._setBackground(); @@ -846,12 +918,19 @@ class BingWallpaperIndicator extends PanelMenu.Button { this._storeState(); } + _imageURL(urlbase, resolution) { + return BingURL + urlbase + '_' + resolution + '.jpg'; + } + _storeState() { if (this.filename) { 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, favourite: this.favourite_status}; + filename: this.filename, favourite: this.favourite_status, width: this.dimensions.width, + height: this.dimensions.height, + shuffledue: (this.shuffledue.to_unix? this.shuffledue.to_unix():0) + }; let stateJSON = JSON.stringify(state); log('Storing state as JSON: ' + stateJSON); @@ -860,6 +939,7 @@ class BingWallpaperIndicator extends PanelMenu.Button { } _reStoreState() { + log('attempting to restore state'); try { // patch for relative paths, ensures that users running git version don't end up with broken state - see EGO review for version 38 https://extensions.gnome.org/review/30299 this._settings.set_string('download-folder', this._settings.get_string('download-folder').replace('$HOME', '~')); @@ -868,6 +948,7 @@ class BingWallpaperIndicator extends PanelMenu.Button { let maxLongDate = null; log('restoring state...'); + log('state JSON is :'+stateJSON); maxLongDate = state.maxlongdate ? state.maxlongdate : null; this.title = state.title; this.explanation = state.explanation; @@ -876,13 +957,11 @@ class BingWallpaperIndicator extends PanelMenu.Button { this.imageinfolink = state.imageinfolink; this.imageURL = state.imageURL; this.filename = state.filename; + this.dimensions.width = state.width; + this.dimensions.height = state.height; 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; - } + this.shuffledue = ("shuffledue" in state)? GLib.DateTime.new_from_unix_local(state.shuffledue) : 0; + this.favourite_status = ("favourite" in state && state.favourite === true); // update menus and thumbnail this._setMenuText(); this._setBackground(); @@ -892,8 +971,9 @@ class BingWallpaperIndicator extends PanelMenu.Button { return; } - if (this.selected_image == 'random') { - this._shuffleImage(); + if (this._settings.get_boolean('random-mode-enabled')) { + log('random mode enabled, restarting random state'); + this._restartShuffleTimeoutFromDueDate(this.shuffledue); // FIXME: use state value this._restartTimeoutFromLongDate(maxLongDate); } else { @@ -908,9 +988,27 @@ class BingWallpaperIndicator extends PanelMenu.Button { this._restartTimeout(60); } + _downloadAllImages() { + // fetch recent undownloaded images + let imageList = Utils.getFetchableImageList(this._settings); + let BingWallpaperDir = Utils.getWallpaperDir(this._settings); + imageList.forEach( (image) => { + let resolution = Utils.getResolution(this._settings, image); + let filename = Utils.toFilename(BingWallpaperDir, image.startdate, image.urlbase, resolution); + let url = this._imageURL(image.urlbase, resolution); + let file = Gio.file_new_for_path(filename); + this._downloadImage(url, file, false); + }); + } + // download and process new image // FIXME: improve error handling - _downloadImage(url, file) { + _downloadImage(url, file, set_background) { + let BingWallpaperDir = Utils.getWallpaperDir(this._settings); + let dir = Gio.file_new_for_path(BingWallpaperDir); + if (!dir.query_exists(null)) { + dir.make_directory_with_parents(null); + } log("Downloading " + url + " to " + file.get_uri()); let request = Soup.Message.new('GET', url); @@ -918,26 +1016,21 @@ class BingWallpaperIndicator extends PanelMenu.Button { try { if (Soup.MAJOR_VERSION >= 3) { this.httpSession.send_and_read_async(request, GLib.PRIORITY_DEFAULT, null, (httpSession, message) => { - // request completed - this._updatePending = false; - this._processFileDownload(message, file); + this._processFileDownload(message, file, set_background); }); } else { this.httpSession.queue_message(request, (httpSession, message) => { - // request completed - this._updatePending = false; - this._processFileDownload(message, file); + this._processFileDownload(message, file, set_background); }); } - } catch (error) { log('error sending libsoup message '+error); } } - _processFileDownload(message, file) { + _processFileDownload(message, file, set_background) { try { let data = (Soup.MAJOR_VERSION >= 3) ? this.httpSession.send_and_read_finish(message).get_data(): @@ -952,7 +1045,8 @@ class BingWallpaperIndicator extends PanelMenu.Button { (file, res) => { try { file.replace_contents_finish(res); - this._setBackground(); + if (set_background) + this._setBackground(); log('Download successful'); } catch(e) { @@ -997,6 +1091,7 @@ function init(extensionMeta) { function enable() { bingWallpaperIndicator = new BingWallpaperIndicator(); Main.panel.addToStatusArea(IndicatorName, bingWallpaperIndicator); + log('extension enabled'); } function disable() { @@ -1011,9 +1106,8 @@ function disable() { blur._disable(); // disable blur (blur.js) override and cleanup blur = null; } + log('extension disabled'); } -function toFilename(wallpaperDir, startdate, imageURL, resolution) { - return wallpaperDir + startdate + '-' + imageURL.replace(/^.*[\\\/]/, '').replace('th?id=OHR.', '') + '_' + resolution + '.jpg'; -} + diff --git a/icons/trash-empty-symbolic.svg b/icons/trash-empty-symbolic.svg new file mode 100644 index 00000000..cea9587c --- /dev/null +++ b/icons/trash-empty-symbolic.svg @@ -0,0 +1,28 @@ + + + + + + + + + + diff --git a/icons/trash-full-symbolic.svg b/icons/trash-full-symbolic.svg new file mode 100644 index 00000000..df732d85 --- /dev/null +++ b/icons/trash-full-symbolic.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + diff --git a/locale/BingWallpaper.pot b/locale/BingWallpaper.pot index 3c273c4e..f527080b 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:163 +#: ui/Settings.ui.h:3 ui/Settings4.ui.h:4 extension.js:165 msgid "Enable desktop notifications" msgstr "" -#: ui/Settings.ui.h:4 ui/Settings4.ui.h:5 extension.js:145 extension.js:159 +#: ui/Settings.ui.h:4 ui/Settings4.ui.h:5 extension.js:143 msgid "Set background image" msgstr "" @@ -43,180 +43,200 @@ msgid "Select from image gallery" msgstr "" #: ui/Settings.ui.h:12 ui/Settings4.ui.h:11 +msgid "Shuffle enabled" +msgstr "" + +#: ui/Settings.ui.h:13 ui/Settings4.ui.h:12 +msgid "Shuffle mode" +msgstr "" + +#: ui/Settings.ui.h:14 ui/Settings4.ui.h:13 msgid "Bing locale" msgstr "" -#: ui/Settings.ui.h:13 ui/Settings4.ui.h:12 extension.js:148 +#: ui/Settings.ui.h:15 ui/Settings4.ui.h:14 extension.js:146 msgid "Settings" msgstr "" -#: ui/Settings.ui.h:14 ui/Settings4.ui.h:13 +#: ui/Settings.ui.h:16 msgid "Use custom blur and brightness" msgstr "" -#: ui/Settings.ui.h:15 ui/Settings4.ui.h:14 +#: ui/Settings.ui.h:17 msgid "Override GDM3 lockscreen effects" msgstr "" -#: ui/Settings.ui.h:16 ui/Settings4.ui.h:15 +#: ui/Settings.ui.h:18 msgid "Blur can improve readability of login prompt" msgstr "" -#: ui/Settings.ui.h:17 ui/Settings4.ui.h:16 +#: ui/Settings.ui.h:19 ui/Settings4.ui.h:18 msgid "Background blur intensity" msgstr "" -#: ui/Settings.ui.h:18 ui/Settings4.ui.h:17 +#: ui/Settings.ui.h:20 ui/Settings4.ui.h:19 msgid "Can improve contrast of login prompt" msgstr "" -#: ui/Settings.ui.h:19 ui/Settings4.ui.h:18 +#: ui/Settings.ui.h:21 ui/Settings4.ui.h:20 msgid "Background brightness" msgstr "" -#: ui/Settings.ui.h:20 ui/Settings4.ui.h:19 +#: ui/Settings.ui.h:22 ui/Settings4.ui.h:21 msgid "Presets" msgstr "" -#: ui/Settings.ui.h:21 +#: ui/Settings.ui.h:23 msgid "Commonly used presets" msgstr "" -#: ui/Settings.ui.h:22 ui/Settings4.ui.h:20 +#: ui/Settings.ui.h:24 ui/Settings4.ui.h:22 msgid "No blur, slight dim" msgstr "" -#: ui/Settings.ui.h:23 ui/Settings4.ui.h:21 +#: ui/Settings.ui.h:25 ui/Settings4.ui.h:23 msgid "GNOME default" msgstr "" -#: ui/Settings.ui.h:24 ui/Settings4.ui.h:22 +#: ui/Settings.ui.h:26 ui/Settings4.ui.h:24 msgid "Slight blur, slight dim" msgstr "" -#: ui/Settings.ui.h:25 ui/Settings4.ui.h:23 +#: ui/Settings.ui.h:27 ui/Settings4.ui.h:25 msgid "Lock Screen" msgstr "" -#: ui/Settings.ui.h:26 ui/Settings4.ui.h:25 +#: ui/Settings.ui.h:28 ui/Settings4.ui.h:27 msgid "Debug logging" msgstr "" -#: ui/Settings.ui.h:27 ui/Settings4.ui.h:24 +#: ui/Settings.ui.h:29 ui/Settings4.ui.h:26 msgid "Enable logging to system journal" msgstr "" -#: ui/Settings.ui.h:28 ui/Settings4.ui.h:27 extension.js:160 +#: ui/Settings.ui.h:30 ui/Settings4.ui.h:29 msgid "Always show new images" msgstr "" -#: ui/Settings.ui.h:29 ui/Settings4.ui.h:26 +#: ui/Settings.ui.h:31 ui/Settings4.ui.h:28 msgid "Switch to new images when available (unless on random mode)" msgstr "" -#: ui/Settings.ui.h:30 ui/Settings4.ui.h:29 +#: ui/Settings.ui.h:32 ui/Settings4.ui.h:31 msgid "Enable all features on Wayland" msgstr "" -#: ui/Settings.ui.h:31 ui/Settings4.ui.h:28 +#: ui/Settings.ui.h:33 ui/Settings4.ui.h:30 msgid "Some newer features may be unstable on Wayland" msgstr "" -#: ui/Settings.ui.h:32 ui/Settings4.ui.h:30 +#: ui/Settings.ui.h:34 ui/Settings4.ui.h:32 msgid "Screen resolution" msgstr "" -#: ui/Settings.ui.h:33 ui/Settings4.ui.h:31 +#: ui/Settings.ui.h:35 ui/Settings4.ui.h:33 msgid "Override automatic resolution selection" msgstr "" -#: ui/Settings.ui.h:34 ui/Settings4.ui.h:32 +#: ui/Settings.ui.h:36 ui/Settings4.ui.h:34 msgid "Manually adjust random interval (seconds)" msgstr "" -#: ui/Settings.ui.h:35 ui/Settings4.ui.h:33 +#: ui/Settings.ui.h:37 ui/Settings4.ui.h:35 msgid "Random interval" msgstr "" -#: ui/Settings.ui.h:36 ui/Settings4.ui.h:34 +#: ui/Settings.ui.h:38 ui/Settings4.ui.h:36 msgid "Import Bing Wallpaper data" msgstr "" -#: ui/Settings.ui.h:37 ui/Settings4.ui.h:35 +#: ui/Settings.ui.h:39 ui/Settings4.ui.h:37 msgid "Import previously exported JSON data from wallpaper directory" msgstr "" -#: ui/Settings.ui.h:38 ui/Settings4.ui.h:36 +#: ui/Settings.ui.h:40 ui/Settings4.ui.h:38 msgid "Import" msgstr "" -#: ui/Settings.ui.h:39 ui/Settings4.ui.h:37 +#: ui/Settings.ui.h:41 ui/Settings4.ui.h:39 msgid "Export Bing Wallpaper data" msgstr "" -#: ui/Settings.ui.h:40 ui/Settings4.ui.h:38 +#: ui/Settings.ui.h:42 ui/Settings4.ui.h:40 msgid "Export JSON data to wallpaper dir for backup or data migration" msgstr "" -#: ui/Settings.ui.h:41 ui/Settings4.ui.h:39 +#: ui/Settings.ui.h:43 ui/Settings4.ui.h:41 msgid "Export" msgstr "" -#: ui/Settings.ui.h:42 ui/Settings4.ui.h:40 +#: ui/Settings.ui.h:44 ui/Settings4.ui.h:42 msgid "Always export Bing data" msgstr "" -#: ui/Settings.ui.h:43 ui/Settings4.ui.h:41 +#: ui/Settings.ui.h:45 ui/Settings4.ui.h:43 msgid "Export Bing JSON whenever data changes" msgstr "" -#: ui/Settings.ui.h:44 ui/Settings4.ui.h:42 +#: ui/Settings.ui.h:46 ui/Settings4.ui.h:44 msgid "Debug options" msgstr "" -#: ui/Settings.ui.h:45 ui/Settings4.ui.h:44 +#: ui/Settings.ui.h:47 ui/Settings4.ui.h:46 msgid "New wallpaper images everyday from Bing" msgstr "" -#: ui/Settings.ui.h:46 +#: ui/Settings.ui.h:48 msgid "Gnome shell extension version " msgstr "" -#: ui/Settings.ui.h:47 ui/Settings4.ui.h:46 +#: ui/Settings.ui.h:49 ui/Settings4.ui.h:48 msgid "Maintained by Michael Carroll" msgstr "" -#: ui/Settings.ui.h:48 ui/Settings4.ui.h:47 +#: ui/Settings.ui.h:50 ui/Settings4.ui.h:49 msgid "" "Show your support to the author on Flattr or Github " "Sponsors." msgstr "" -#: ui/Settings.ui.h:49 ui/Settings4.ui.h:48 +#: ui/Settings.ui.h:51 ui/Settings4.ui.h:50 msgid "Changes since last version" msgstr "" -#: ui/Settings.ui.h:50 ui/Settings4.ui.h:49 +#: ui/Settings.ui.h:52 ui/Settings4.ui.h:51 msgid "Based on NASA APOD Gnome shell extension by Elia Argentieri" msgstr "" -#: ui/Settings.ui.h:51 ui/Settings4.ui.h:50 +#: ui/Settings.ui.h:53 ui/Settings4.ui.h:52 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 +#: ui/Settings.ui.h:55 ui/Settings4.ui.h:54 msgid "About" msgstr "" -#: ui/Settings4.ui.h:43 -msgid "Gallery" +#: ui/Settings4.ui.h:15 +msgid "Dynamically switches blur on GDM3 lock screen" +msgstr "" + +#: ui/Settings4.ui.h:16 +msgid "Enable dynamic lockscreen blur" +msgstr "" + +#: ui/Settings4.ui.h:17 +msgid "Blur can improve readability" msgstr "" #: ui/Settings4.ui.h:45 +msgid "Gallery" +msgstr "" + +#: ui/Settings4.ui.h:47 msgid "GNOME shell extension version " msgstr "" @@ -237,7 +257,7 @@ msgid "Delete" msgstr "" #: ui/carousel.ui.h:5 ui/carousel4.ui.h:7 -msgid "Set random mode" +msgid "Set shuffle mode" msgstr "" #: ui/carousel4.ui.h:1 @@ -252,39 +272,39 @@ msgstr "" msgid "Load image gallery" msgstr "" -#: extension.js:138 +#: extension.js:136 msgid "" msgstr "" -#: extension.js:139 extension.js:140 extension.js:141 +#: extension.js:138 extension.js:139 extension.js:151 msgid "Awaiting refresh..." msgstr "" -#: extension.js:142 +#: extension.js:140 msgid "Copy image to clipboard" msgstr "" -#: extension.js:143 +#: extension.js:141 msgid "Copy image URL to clipboard" msgstr "" -#: extension.js:144 +#: extension.js:142 msgid "Open image folder" msgstr "" -#: extension.js:146 +#: extension.js:144 msgid "Set lock screen image" msgstr "" -#: extension.js:147 +#: extension.js:145 msgid "Refresh Now" msgstr "" -#: extension.js:149 +#: extension.js:147 msgid "Open in image viewer" msgstr "" -#: extension.js:150 +#: extension.js:148 msgid "Open Bing image information page" msgstr "" @@ -292,8 +312,12 @@ msgstr "" msgid "Quick settings" msgstr "" +#: extension.js:160 +msgid "Always switch to new images" +msgstr "" + #: extension.js:161 -msgid "Image shuffle mode" +msgid "Enable image shuffle mode" msgstr "" #: extension.js:162 @@ -301,53 +325,61 @@ msgid "Image shuffle only favourites" msgstr "" #: extension.js:164 -msgid "Show image count" +msgid "Image shuffle only UHD resolutions" msgstr "" -#: extension.js:333 +#: extension.js:318 msgid "Next refresh" msgstr "" -#: extension.js:334 +#: extension.js:319 msgid "Last refresh" msgstr "" -#: extension.js:765 extension.js:808 +#: extension.js:322 +msgid "Next shuffle" +msgstr "" + +#: extension.js:798 extension.js:869 msgid "Bing Wallpaper of the Day for" msgstr "" -#: extension.js:839 +#: extension.js:905 msgid "No wallpaper available" msgstr "" -#: extension.js:840 +#: extension.js:906 msgid "No picture for today." msgstr "" -#: prefs.js:181 +#: prefs.js:173 msgid "Select folder" msgstr "" -#: prefs.js:249 -msgid "Most recent image" +#: utils.js:65 +msgid "on the hour" +msgstr "" + +#: utils.js:66 +msgid "every day at midnight" msgstr "" -#: prefs.js:250 -msgid "Random image" +#: utils.js:67 +msgid "every Sunday at midnight" msgstr "" -#: utils.js:135 +#: utils.js:133 msgid "Error fetching change log: " msgstr "" -#: utils.js:370 utils.js:373 +#: utils.js:428 utils.js:431 msgid "minutes" msgstr "" -#: utils.js:376 +#: utils.js:434 msgid "days" msgstr "" -#: utils.js:379 +#: utils.js:437 msgid "hours" msgstr "" diff --git a/locale/fr_FR/LC_MESSAGES/BingWallpaper.po b/locale/fr_FR/LC_MESSAGES/BingWallpaper.po index dfc3c10c..ee9e6ef0 100644 --- a/locale/fr_FR/LC_MESSAGES/BingWallpaper.po +++ b/locale/fr_FR/LC_MESSAGES/BingWallpaper.po @@ -20,11 +20,11 @@ msgstr "" #: Settings.ui.h:1 Settings4.ui.h:2 msgid "Hide the indicator" -msgstr "Cacher l'indicateur" +msgstr "Cacher l’indicateur" #: Settings.ui.h:2 Settings4.ui.h:3 msgid "Indicator icon" -msgstr "Icône d'indicateur" +msgstr "Icône d’indicateur" #: Settings.ui.h:3 Settings4.ui.h:4 msgid "Enable desktop notifications" @@ -32,11 +32,11 @@ msgstr "Activer les notifications sur le bureau" #: Settings.ui.h:4 Settings4.ui.h:5 extension.js:129 msgid "Set background image" -msgstr "Définir l'arrière-plan" +msgstr "Définir l’arrière-plan" #: Settings.ui.h:5 Settings4.ui.h:6 extension.js:130 msgid "Set lock screen image" -msgstr "Définir l'écran de verrouillage" +msgstr "Définir l’écran de verrouillage" #: Settings.ui.h:6 Settings4.ui.h:7 msgid "Download folder" @@ -44,7 +44,7 @@ msgstr "Dossier de téléchargement" #: Settings.ui.h:7 Settings4.ui.h:1 msgid "Bing Wallpaper pictures folder" -msgstr "Dossier d'image de Bing Wallpaper" +msgstr "Dossier d’image de Bing Wallpaper" #: Settings.ui.h:8 Settings4.ui.h:9 msgid "Delete previously downloaded wallpapers" @@ -53,7 +53,7 @@ msgstr "Supprimer les images précédemment téléchargées" #: Settings.ui.h:9 Settings4.ui.h:10 msgid "Days to store wallpapers before deleting" msgstr "" -"Nombres de jours pendant lesquels les arrière-plans sont conservés avant " +"Nombre de jours pendant lesquels les arrière-plans sont conservés avant " "suppression" #: Settings.ui.h:10 Settings4.ui.h:11 @@ -75,7 +75,7 @@ msgstr "Ignorer la sélection de résolution automatique" #: Settings.ui.h:14 Settings4.ui.h:13 #, fuzzy msgid "Selected image" -msgstr "Définir l'arrière-plan" +msgstr "Définir l’arrière-plan" #: Settings.ui.h:15 Settings4.ui.h:16 extension.js:132 msgid "Settings" @@ -87,23 +87,23 @@ msgstr "Personaliser le flou et la luminosité" #: Settings.ui.h:17 Settings4.ui.h:18 msgid "Override GDM3 lockscreen effects" -msgstr "Passer outre les effets de l'écran de verouillage GDM3" +msgstr "Passer outre les effets de l’écran de verrouillage GDM3" #: Settings.ui.h:18 Settings4.ui.h:19 msgid "Blur can improve readability of login prompt" -msgstr "Le flou peut améliorer la lisibilté sur l'invite de connexion" +msgstr "Le flou peut améliorer la lisibilté sur l’invite de connexion" #: Settings.ui.h:19 Settings4.ui.h:20 msgid "Background blur intensity" -msgstr "Intensité du flou de l'arrière plan" +msgstr "Intensité du flou de l’arrière plan" #: Settings.ui.h:20 Settings4.ui.h:21 msgid "Can improve contrast of login prompt" -msgstr "Peut améliorer le contraste de l'invite de connexion" +msgstr "Peut améliorer le contraste de l’invite de connexion" #: Settings.ui.h:21 Settings4.ui.h:22 msgid "Background brightness" -msgstr "Luminosité de l'arrière plan" +msgstr "Luminosité de l’arrière plan" #: Settings.ui.h:22 Settings4.ui.h:23 msgid "Presets" @@ -111,7 +111,7 @@ msgstr "Pré-définis" #: Settings.ui.h:23 Settings4.ui.h:24 msgid "Commonly used presets" -msgstr "Pré-définis courrament utilisés" +msgstr "Pré-définis couramment utilisés" #: Settings.ui.h:24 Settings4.ui.h:25 msgid "No blur, slight dim" @@ -127,15 +127,15 @@ msgstr "Léger flou, léger dim" #: Settings.ui.h:27 Settings4.ui.h:28 msgid "Lock Screen" -msgstr "Ecran de verouillage" +msgstr "Écran de verrouillage" #: Settings.ui.h:28 Settings4.ui.h:29 msgid "New wallpaper images everyday from Bing" -msgstr "Nouvelle image d'arrière plan chaque jour depuis Bing" +msgstr "Nouvelle image d’arrière plan chaque jour depuis Bing" #: Settings.ui.h:29 Settings4.ui.h:30 msgid "Gnome shell extension version " -msgstr "Version de l'extension Gnome shell " +msgstr "Version de l’extension Gnome shell " #: Settings.ui.h:30 Settings4.ui.h:31 msgid "https://github.com/neffo/bing-wallpaper-gnome-extension" @@ -161,7 +161,7 @@ msgstr "Changements depuis la dernière version" #: Settings.ui.h:34 Settings4.ui.h:35 msgid "Based on NASA APOD Gnome shell extension by Elia Argentieri" -msgstr "Basé sur l'extension Gnome shell NASA APNN de Elia Argentieri" +msgstr "Basé sur l’extension Gnome shell NASA APNN de Elia Argentieri" #: Settings.ui.h:35 Settings4.ui.h:36 #, fuzzy @@ -201,16 +201,16 @@ msgstr "En attente d'actualisation..." #: extension.js:126 #, fuzzy msgid "Copy image to clipboard" -msgstr "Copier l'image dans le presse-papiers" +msgstr "Copier l’image dans le presse-papiers" #: extension.js:127 msgid "Copy image URL to clipboard" -msgstr "Copier l'URL de l'image dans le presse-papiers" +msgstr "Copier l’URL de l’image dans le presse-papiers" #: extension.js:128 #, fuzzy msgid "Open image folder" -msgstr "Ouvrir le dossier d'images" +msgstr "Ouvrir le dossier d’images" #: extension.js:131 msgid "Refresh Now" @@ -226,13 +226,13 @@ msgstr "Prochaine actualisation" #: extension.js:490 extension.js:527 msgid "Bing Wallpaper of the Day for" -msgstr "Le fond d'écran Bing du jour pour" +msgstr "Le fond d’écran Bing du jour pour" #: extension.js:495 #, fuzzy #| msgid "Set wallpaper" msgid "Set as wallpaper" -msgstr "Définir le fond d'écran" +msgstr "Définir le fond d’écran" #: extension.js:498 msgid "More info on Bing.com" @@ -240,17 +240,17 @@ msgstr "Plus d'info sur Bing.com" #: extension.js:553 msgid "No wallpaper available" -msgstr "Aucun fond d'écran disponible" +msgstr "Aucun fond d’écran disponible" #: extension.js:554 msgid "No picture for today." -msgstr "Pas d'image pour aujourd'hui." +msgstr "Pas d’image pour aujourd'hui." #: prefs.js:173 #, fuzzy #| msgid "Set lock screen image" msgid "Most recent image" -msgstr "Définir l'écran de verrouillage" +msgstr "Définir l’écran de verrouillage" #: prefs.js:174 msgid "Random image" diff --git a/locale/ko/LC_MESSAGES/BingWallpaper.mo b/locale/ko/LC_MESSAGES/BingWallpaper.mo index 17d385e7..19e433dd 100644 Binary files a/locale/ko/LC_MESSAGES/BingWallpaper.mo and b/locale/ko/LC_MESSAGES/BingWallpaper.mo differ diff --git a/locale/ko/LC_MESSAGES/BingWallpaper.po b/locale/ko/LC_MESSAGES/BingWallpaper.po index 9e283c26..ce42ea4d 100644 --- a/locale/ko/LC_MESSAGES/BingWallpaper.po +++ b/locale/ko/LC_MESSAGES/BingWallpaper.po @@ -8,35 +8,35 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-09 13:10+1000\n" -"PO-Revision-Date: 2021-05-09 14:04+1000\n" -"Last-Translator: Suhyuk Park (nks15) \n" +"PO-Revision-Date: 2023-07-23 01:13+0900\n" +"Last-Translator: izotopo <140181701+izotopo@users.noreply.github.com>\n" "Language-Team: \n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.4.1\n" "Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 3.3.2\n" #: Settings.ui.h:1 Settings4.ui.h:2 msgid "Hide the indicator" -msgstr "인디케이터 숨기기" +msgstr "표시기 숨기기" #: Settings.ui.h:2 Settings4.ui.h:3 msgid "Indicator icon" -msgstr "인디케이터" +msgstr "표시기 아이콘" #: Settings.ui.h:3 Settings4.ui.h:4 msgid "Enable desktop notifications" -msgstr "" +msgstr "데스크톱 알림 사용" #: Settings.ui.h:4 Settings4.ui.h:5 extension.js:129 msgid "Set background image" -msgstr "바탕화면 배경 설정" +msgstr "배경화면 설정" #: Settings.ui.h:5 Settings4.ui.h:6 extension.js:130 msgid "Set lock screen image" -msgstr "잠금화면 배경 설정" +msgstr "잠금화면 설정" #: Settings.ui.h:6 Settings4.ui.h:7 msgid "Download folder" @@ -60,7 +60,7 @@ msgstr "Bing 로케일" #: Settings.ui.h:11 Settings4.ui.h:12 msgid "Default is English - United States" -msgstr "미국 영어가 기본값입니다" +msgstr "미국 영어가 기본값임" #: Settings.ui.h:12 Settings4.ui.h:14 msgid "Screen resolution" @@ -68,11 +68,11 @@ msgstr "화면 해상도" #: Settings.ui.h:13 Settings4.ui.h:15 msgid "Override automatic resolution selection" -msgstr "자동 해상도 선택 무시" +msgstr "자동 해상도 선택 재정의" #: Settings.ui.h:14 Settings4.ui.h:13 msgid "Selected image" -msgstr "" +msgstr "선택한 이미지" #: Settings.ui.h:15 Settings4.ui.h:16 extension.js:132 msgid "Settings" @@ -80,61 +80,59 @@ msgstr "설정" #: Settings.ui.h:16 Settings4.ui.h:17 msgid "Use custom blur and brightness" -msgstr "" +msgstr "사용자 지정 흐림 및 밝기 사용" #: Settings.ui.h:17 Settings4.ui.h:18 msgid "Override GDM3 lockscreen effects" -msgstr "" +msgstr "GDM3 잠금화면 효과 재정의" #: Settings.ui.h:18 Settings4.ui.h:19 msgid "Blur can improve readability of login prompt" -msgstr "" +msgstr "흐림을 통한 로그인 프롬프트 가독성 향상" #: Settings.ui.h:19 Settings4.ui.h:20 msgid "Background blur intensity" -msgstr "" +msgstr "배경화면 흐림 강도" #: Settings.ui.h:20 Settings4.ui.h:21 msgid "Can improve contrast of login prompt" -msgstr "" +msgstr "로그인 프롬프트의 대비 개선" #: Settings.ui.h:21 Settings4.ui.h:22 -#, fuzzy -#| msgid "Set background image" msgid "Background brightness" -msgstr "바탕화면 배경 설정" +msgstr "배경화면 밝기" #: Settings.ui.h:22 Settings4.ui.h:23 msgid "Presets" -msgstr "" +msgstr "프리셋" #: Settings.ui.h:23 Settings4.ui.h:24 msgid "Commonly used presets" -msgstr "" +msgstr "일반적으로 사용되는 프리셋" #: Settings.ui.h:24 Settings4.ui.h:25 msgid "No blur, slight dim" -msgstr "" +msgstr "흐림 없음, 약간 흐릿함" #: Settings.ui.h:25 Settings4.ui.h:26 msgid "GNOME default" -msgstr "" +msgstr "GNOME 기본값" #: Settings.ui.h:26 Settings4.ui.h:27 msgid "Slight blur, slight dim" -msgstr "" +msgstr "약간 흐림, 약간 흐릿함" #: Settings.ui.h:27 Settings4.ui.h:28 msgid "Lock Screen" -msgstr "" +msgstr "잠금화면" #: Settings.ui.h:28 Settings4.ui.h:29 msgid "New wallpaper images everyday from Bing" -msgstr "" +msgstr "매일 새로운 Bing 배경화면 이미지" #: Settings.ui.h:29 Settings4.ui.h:30 msgid "Gnome shell extension version " -msgstr "그놈 쉘 확장 버전" +msgstr "GNOME 셸 확장 버전 " #: Settings.ui.h:30 Settings4.ui.h:31 msgid "https://github.com/neffo/bing-wallpaper-gnome-extension" @@ -142,7 +140,7 @@ msgstr "https://github.com/neffo/bing-wallpaper-gnome-extension" #: Settings.ui.h:31 Settings4.ui.h:32 msgid "Maintained by Michael Carroll" -msgstr "Michael Carroll에 의해 유지됨" +msgstr "Michael Carroll 님이 유지보수 중임" #: Settings.ui.h:32 Settings4.ui.h:33 msgid "" @@ -150,14 +148,16 @@ msgid "" "\">Flattr or Github " "Sponsors." msgstr "" +"Flattr 또는 Github Sponsors에서 개발자를 지지해주세요." #: Settings.ui.h:33 Settings4.ui.h:34 msgid "Changes since last version" -msgstr "" +msgstr "마지막 버전 이후 변경 사항" #: Settings.ui.h:34 Settings4.ui.h:35 msgid "Based on NASA APOD Gnome shell extension by Elia Argentieri" -msgstr "Elia Argentieri의 NASA APOD 그놈 쉘 확장을 기반으로 합니다" +msgstr "Elia Argentieri 님의 NASA APOD Gnome 셸 확장을 기반으로 함" #: Settings.ui.h:35 Settings4.ui.h:36 msgid "" @@ -165,10 +165,11 @@ msgid "" "See the GNU General " "Public License, version 3 or later for details." msgstr "" -"이 프로그램은 어떠한 형태의 보증도 제공되지 않습니다.\n" +"이 프로그램은 어떠한 형태의 보증도 제공되지 않습니" +"다.\n" "더 자세한 내용은 GNU 일반 공중 사용 허가서, 버전 3 또는 그 이상 을 참고하" -"세요." +"gpl-2.0.html\">GNU 일반 공중 사용 허가서, 버전 3 또는 그 이상 을 참고" +"하세요." #: Settings.ui.h:37 Settings4.ui.h:38 msgid "About" @@ -176,7 +177,7 @@ msgstr "정보" #: Settings4.ui.h:8 msgid "Open folder" -msgstr "" +msgstr "폴더 열기" #: extension.js:117 msgid "" @@ -184,19 +185,19 @@ msgstr "<예정된 새로고침 없음>" #: extension.js:119 extension.js:121 extension.js:123 msgid "Awaiting refresh..." -msgstr "새로고침 기다리는 중..." +msgstr "새로고침을 기다리는 중..." #: extension.js:126 msgid "Copy image to clipboard" -msgstr "이미지 클립보드로 복사" +msgstr "클립보드에 이미지 복사" #: extension.js:127 msgid "Copy image URL to clipboard" -msgstr "이미지 URL을 클립보드로 복사" +msgstr "클립보드에 이미지 URL 복사" #: extension.js:128 msgid "Open image folder" -msgstr "" +msgstr "이미지 폴더 열기" #: extension.js:131 msgid "Refresh Now" @@ -204,7 +205,7 @@ msgstr "지금 새로고침" #: extension.js:137 msgid "Thumbnail disabled on Wayland" -msgstr "" +msgstr "Wayland에서 썸네일이 비활성화됨" #: extension.js:203 msgid "Next refresh" @@ -216,31 +217,31 @@ msgstr "오늘의 Bing 배경화면은" #: extension.js:495 msgid "Set as wallpaper" -msgstr "배경화면 설정" +msgstr "배경화면으로 설정" #: extension.js:498 msgid "More info on Bing.com" -msgstr "" +msgstr "Bing.com에서 더 많은 정보를 알아볼 수 있습니다" #: extension.js:553 msgid "No wallpaper available" -msgstr "사용 가능한 배경화면 없음" +msgstr "사용할 수 있는 배경화면이 없습니다" #: extension.js:554 msgid "No picture for today." -msgstr "오늘은 사진이 없네요." +msgstr "오늘은 사진이 없습니다." #: prefs.js:173 msgid "Most recent image" -msgstr "" +msgstr "가장 최근 이미지" #: prefs.js:174 msgid "Random image" -msgstr "" +msgstr "임의의 이미지" #: prefs.js:190 prefs.js:206 msgid "Disabled on current GNOME version" -msgstr "" +msgstr "현재 GNOME 버전에서는 비활성화됨" #: utils.js:139 msgid "Fetching data..." @@ -248,19 +249,19 @@ msgstr "데이터를 가져오는 중..." #: utils.js:150 msgid "Market not available in your region" -msgstr "귀하의 지역에서 사용할 수 없는 마켓입니다" +msgstr "해당 지역에서 사용할 수 없는 마켓입니다" #: utils.js:154 msgid "A network error occured" -msgstr "네트워크 오류 발생" +msgstr "네트워크 오류가 발생했습니다" #: utils.js:159 msgid "Too many requests in 5 seconds" -msgstr "" +msgstr "5초 동안 너무 많은 요청이 발생했습니다" #: utils.js:186 msgid "No change log found for this release" -msgstr "" +msgstr "이 릴리스에 대한 변경 로그를 찾을 수 없습니다" #: utils.js:366 utils.js:369 msgid "minutes" @@ -278,5 +279,5 @@ msgstr "시간" #~ "Changes your wallpaper daily to the Bing picture of the day for your " #~ "region. Displays the picture description and copyright information." #~ msgstr "" -#~ "귀하의 지역에 맞는 그날의 Bing 그림으로 매일 배경화면을 변경해 줍니다. 또" -#~ "한 해당 그림에 대한 설명과 저작권 정보에 대한 알림을 보여줍니다." +#~ "해당 지역에 맞는 그날의 Bing 이미지로 매일 배경화면을 변경합니다. 또한 " +#~ "해당 이미지에 대한 설명과 저작권에 대한 정보를 보여줍니다." diff --git a/locale/ko_KP/LC_MESSAGES/BingWallpaper.mo b/locale/ko_KP/LC_MESSAGES/BingWallpaper.mo deleted file mode 100644 index 31880861..00000000 Binary files a/locale/ko_KP/LC_MESSAGES/BingWallpaper.mo and /dev/null differ diff --git a/locale/ko_KP/LC_MESSAGES/BingWallpaper.po b/locale/ko_KP/LC_MESSAGES/BingWallpaper.po deleted file mode 100644 index 3b73b1e0..00000000 --- a/locale/ko_KP/LC_MESSAGES/BingWallpaper.po +++ /dev/null @@ -1,294 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -# Note: -# The translation of Korean in the Democratic People's Republic of Korea is uncomplete and may look strange to some North Koreans. -# This is mostly because the current translator is an user of the Korean standard language of the Republic of Korea. -# If you are skilled in Culture language of DPR Korea, please contribute in this translation. -# -# 조선민주주의인민공화국 문화어에 대한 번역은 완전하지 않고 일부 사람들에게는 이상하게 보일 수 있습니다. -# 이 문제는 현재 번역가가 대한민국 표준어를 사용하기 때문에 발생합니다. -# 만약 귀하가 조선민주주의인민공화국 문화어에 능숙하다면 이 번역에 기여해주세요. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-09 13:10+1000\n" -"PO-Revision-Date: 2021-05-09 14:05+1000\n" -"Last-Translator: Suhyuk Park (nks15) \n" -"Language-Team: \n" -"Language: ko_KP\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.4.1\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#: Settings.ui.h:1 Settings4.ui.h:2 -msgid "Hide the indicator" -msgstr "인디케이터 숨기기" - -#: Settings.ui.h:2 Settings4.ui.h:3 -msgid "Indicator icon" -msgstr "인디케이터" - -#: Settings.ui.h:3 Settings4.ui.h:4 -msgid "Enable desktop notifications" -msgstr "" - -#: Settings.ui.h:4 Settings4.ui.h:5 extension.js:129 -msgid "Set background image" -msgstr "탁상화면 배경 설정" - -#: Settings.ui.h:5 Settings4.ui.h:6 extension.js:130 -msgid "Set lock screen image" -msgstr "잠금화면 배경 설정" - -#: Settings.ui.h:6 Settings4.ui.h:7 -msgid "Download folder" -msgstr "다운로드 폴더" - -#: Settings.ui.h:7 Settings4.ui.h:1 -msgid "Bing Wallpaper pictures folder" -msgstr "Bing 배경화면 화상 폴더" - -#: Settings.ui.h:8 Settings4.ui.h:9 -msgid "Delete previously downloaded wallpapers" -msgstr "이전에 다운로드한 배경화면 삭제" - -#: Settings.ui.h:9 Settings4.ui.h:10 -msgid "Days to store wallpapers before deleting" -msgstr "배경화면을 삭제하기 전에 저장해 두는 기간" - -#: Settings.ui.h:10 Settings4.ui.h:11 -msgid "Bing locale" -msgstr "Bing 로케일" - -#: Settings.ui.h:11 Settings4.ui.h:12 -msgid "Default is English - United States" -msgstr "미국 영어가 기본값입니다." - -#: Settings.ui.h:12 Settings4.ui.h:14 -msgid "Screen resolution" -msgstr "화면 해상도" - -#: Settings.ui.h:13 Settings4.ui.h:15 -msgid "Override automatic resolution selection" -msgstr "자동 도형표시 선택을 무시" - -#: Settings.ui.h:14 Settings4.ui.h:13 -msgid "Selected image" -msgstr "" - -#: Settings.ui.h:15 Settings4.ui.h:16 extension.js:132 -msgid "Settings" -msgstr "설정" - -#: Settings.ui.h:16 Settings4.ui.h:17 -msgid "Use custom blur and brightness" -msgstr "" - -#: Settings.ui.h:17 Settings4.ui.h:18 -msgid "Override GDM3 lockscreen effects" -msgstr "" - -#: Settings.ui.h:18 Settings4.ui.h:19 -msgid "Blur can improve readability of login prompt" -msgstr "" - -#: Settings.ui.h:19 Settings4.ui.h:20 -msgid "Background blur intensity" -msgstr "" - -#: Settings.ui.h:20 Settings4.ui.h:21 -msgid "Can improve contrast of login prompt" -msgstr "" - -#: Settings.ui.h:21 Settings4.ui.h:22 -msgid "Background brightness" -msgstr "" - -#: Settings.ui.h:22 Settings4.ui.h:23 -msgid "Presets" -msgstr "" - -#: Settings.ui.h:23 Settings4.ui.h:24 -msgid "Commonly used presets" -msgstr "" - -#: Settings.ui.h:24 Settings4.ui.h:25 -msgid "No blur, slight dim" -msgstr "" - -#: Settings.ui.h:25 Settings4.ui.h:26 -msgid "GNOME default" -msgstr "" - -#: Settings.ui.h:26 Settings4.ui.h:27 -msgid "Slight blur, slight dim" -msgstr "" - -#: Settings.ui.h:27 Settings4.ui.h:28 -msgid "Lock Screen" -msgstr "" - -#: Settings.ui.h:28 Settings4.ui.h:29 -msgid "New wallpaper images everyday from Bing" -msgstr "" - -#: Settings.ui.h:29 Settings4.ui.h:30 -msgid "Gnome shell extension version " -msgstr "그놈 쉘 확장 버전" - -#: Settings.ui.h:30 Settings4.ui.h:31 -msgid "https://github.com/neffo/bing-wallpaper-gnome-extension" -msgstr "https://github.com/neffo/bing-wallpaper-gnome-extension" - -#: Settings.ui.h:31 Settings4.ui.h:32 -msgid "Maintained by Michael Carroll" -msgstr "Michael Carroll에 의해 유지됨" - -#: Settings.ui.h:32 Settings4.ui.h:33 -msgid "" -"Show your support to the author on Flattr or Github " -"Sponsors." -msgstr "" - -#: Settings.ui.h:33 Settings4.ui.h:34 -msgid "Changes since last version" -msgstr "" - -#: Settings.ui.h:34 Settings4.ui.h:35 -msgid "Based on NASA APOD Gnome shell extension by Elia Argentieri" -msgstr "Elia Argentieri의 NASA APOD 그놈 쉘 확장을 기반으로 합니다." - -#: Settings.ui.h:35 Settings4.ui.h:36 -#, fuzzy -#| msgid "" -#| "This program comes with ABSOLUTELY NO WARRANTY.\n" -#| "See the GNU General Public License, version 3 or later for details." -msgid "" -"This program comes with ABSOLUTELY NO WARRANTY.\n" -"See the GNU General " -"Public License, version 3 or later for details." -msgstr "" -"이 프로그람은 어떠한 형태의 보증도 제공되지 않습니다.\n" -"더 자세한 내용은 GNU 일반 공중 사용 허가서, 판본 3 또는 그 이상 을 참고하" -"세요." - -#: Settings.ui.h:37 Settings4.ui.h:38 -msgid "About" -msgstr "정보" - -#: Settings4.ui.h:8 -msgid "Open folder" -msgstr "" - -#: extension.js:117 -msgid "" -msgstr "<예정된 새로고침 없음>" - -#: extension.js:119 extension.js:121 extension.js:123 -msgid "Awaiting refresh..." -msgstr "새로고침 기다리는 중..." - -#: extension.js:126 -msgid "Copy image to clipboard" -msgstr "" - -#: extension.js:127 -msgid "Copy image URL to clipboard" -msgstr "화상 유일자원지시기를 클립보드로 복사" - -#: extension.js:128 -msgid "Open image folder" -msgstr "" - -#: extension.js:131 -msgid "Refresh Now" -msgstr "지금 새로고침" - -#: extension.js:137 -msgid "Thumbnail disabled on Wayland" -msgstr "" - -#: extension.js:203 -msgid "Next refresh" -msgstr "다음 새로고침" - -#: extension.js:490 extension.js:527 -msgid "Bing Wallpaper of the Day for" -msgstr "오늘의 Bing 배경화면은" - -#: extension.js:495 -msgid "Set as wallpaper" -msgstr "배경화면 설정" - -#: extension.js:498 -msgid "More info on Bing.com" -msgstr "" - -#: extension.js:553 -msgid "No wallpaper available" -msgstr "리용 가능한 배경화면 없음" - -#: extension.js:554 -msgid "No picture for today." -msgstr "오늘은 화상이 없네요." - -#: prefs.js:173 -msgid "Most recent image" -msgstr "" - -#: prefs.js:174 -msgid "Random image" -msgstr "" - -#: prefs.js:190 prefs.js:206 -msgid "Disabled on current GNOME version" -msgstr "" - -#: utils.js:139 -msgid "Fetching data..." -msgstr "자료를 가져오는 중..." - -#: utils.js:150 -msgid "Market not available in your region" -msgstr "귀하의 구역에서 리용할 수 없는 시장입니다." - -#: utils.js:154 -msgid "A network error occured" -msgstr "망 오류 발생" - -#: utils.js:159 -msgid "Too many requests in 5 seconds" -msgstr "" - -#: utils.js:186 -msgid "No change log found for this release" -msgstr "" - -#: utils.js:366 utils.js:369 -msgid "minutes" -msgstr "분" - -#: utils.js:372 -msgid "days" -msgstr "일" - -#: utils.js:375 -msgid "hours" -msgstr "시간" - -#~ msgid "" -#~ "Changes your wallpaper daily to the Bing picture of the day for your " -#~ "region. Displays the picture description and copyright information." -#~ msgstr "" -#~ "귀하의 구역에 맞는 그날의 Bing 화상으로 매일 배경화면을 변경해 줍니다. 또" -#~ "한 해당 화상에 대한 설명과 저작권 정보에 대한 알림을 보여줍니다." diff --git a/locale/ko_KR/LC_MESSAGES/BingWallpaper.mo b/locale/ko_KR/LC_MESSAGES/BingWallpaper.mo deleted file mode 100644 index d93e5542..00000000 Binary files a/locale/ko_KR/LC_MESSAGES/BingWallpaper.mo and /dev/null differ diff --git a/locale/ko_KR/LC_MESSAGES/BingWallpaper.po b/locale/ko_KR/LC_MESSAGES/BingWallpaper.po deleted file mode 100644 index 04c3346b..00000000 --- a/locale/ko_KR/LC_MESSAGES/BingWallpaper.po +++ /dev/null @@ -1,286 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-05-09 13:10+1000\n" -"PO-Revision-Date: 2021-05-09 14:07+1000\n" -"Last-Translator: Suhyuk Park (nks15) \n" -"Language-Team: \n" -"Language: ko_KR\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.4.1\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#: Settings.ui.h:1 Settings4.ui.h:2 -msgid "Hide the indicator" -msgstr "Indicator 숨기기" - -#: Settings.ui.h:2 Settings4.ui.h:3 -msgid "Indicator icon" -msgstr "" - -#: Settings.ui.h:3 Settings4.ui.h:4 -msgid "Enable desktop notifications" -msgstr "" - -#: Settings.ui.h:4 Settings4.ui.h:5 extension.js:129 -msgid "Set background image" -msgstr "바탕화면 배경 설정" - -#: Settings.ui.h:5 Settings4.ui.h:6 extension.js:130 -msgid "Set lock screen image" -msgstr "잠금화면 배경 설정" - -#: Settings.ui.h:6 Settings4.ui.h:7 -msgid "Download folder" -msgstr "다운로드 폴더" - -#: Settings.ui.h:7 Settings4.ui.h:1 -msgid "Bing Wallpaper pictures folder" -msgstr "Bing 배경화면 사진 폴더" - -#: Settings.ui.h:8 Settings4.ui.h:9 -msgid "Delete previously downloaded wallpapers" -msgstr "이전에 다운로드한 배경화면 삭제" - -#: Settings.ui.h:9 Settings4.ui.h:10 -msgid "Days to store wallpapers before deleting" -msgstr "배경화면을 삭제하기 전에 저장해 두는 기간" - -#: Settings.ui.h:10 Settings4.ui.h:11 -msgid "Bing locale" -msgstr "Bing 로케일" - -#: Settings.ui.h:11 Settings4.ui.h:12 -msgid "Default is English - United States" -msgstr "미국 영어가 기본값입니다." - -#: Settings.ui.h:12 Settings4.ui.h:14 -msgid "Screen resolution" -msgstr "화면 해상도" - -#: Settings.ui.h:13 Settings4.ui.h:15 -msgid "Override automatic resolution selection" -msgstr "자동 해상도 선택을 무시" - -#: Settings.ui.h:14 Settings4.ui.h:13 -msgid "Selected image" -msgstr "" - -#: Settings.ui.h:15 Settings4.ui.h:16 extension.js:132 -msgid "Settings" -msgstr "설정" - -#: Settings.ui.h:16 Settings4.ui.h:17 -msgid "Use custom blur and brightness" -msgstr "" - -#: Settings.ui.h:17 Settings4.ui.h:18 -msgid "Override GDM3 lockscreen effects" -msgstr "" - -#: Settings.ui.h:18 Settings4.ui.h:19 -msgid "Blur can improve readability of login prompt" -msgstr "" - -#: Settings.ui.h:19 Settings4.ui.h:20 -msgid "Background blur intensity" -msgstr "" - -#: Settings.ui.h:20 Settings4.ui.h:21 -msgid "Can improve contrast of login prompt" -msgstr "" - -#: Settings.ui.h:21 Settings4.ui.h:22 -msgid "Background brightness" -msgstr "" - -#: Settings.ui.h:22 Settings4.ui.h:23 -msgid "Presets" -msgstr "" - -#: Settings.ui.h:23 Settings4.ui.h:24 -msgid "Commonly used presets" -msgstr "" - -#: Settings.ui.h:24 Settings4.ui.h:25 -msgid "No blur, slight dim" -msgstr "" - -#: Settings.ui.h:25 Settings4.ui.h:26 -msgid "GNOME default" -msgstr "" - -#: Settings.ui.h:26 Settings4.ui.h:27 -msgid "Slight blur, slight dim" -msgstr "" - -#: Settings.ui.h:27 Settings4.ui.h:28 -msgid "Lock Screen" -msgstr "" - -#: Settings.ui.h:28 Settings4.ui.h:29 -msgid "New wallpaper images everyday from Bing" -msgstr "" - -#: Settings.ui.h:29 Settings4.ui.h:30 -msgid "Gnome shell extension version " -msgstr "그놈 쉘 확장 버전" - -#: Settings.ui.h:30 Settings4.ui.h:31 -msgid "https://github.com/neffo/bing-wallpaper-gnome-extension" -msgstr "https://github.com/neffo/bing-wallpaper-gnome-extension" - -#: Settings.ui.h:31 Settings4.ui.h:32 -msgid "Maintained by Michael Carroll" -msgstr "Michael Carroll에 의해 유지됨" - -#: Settings.ui.h:32 Settings4.ui.h:33 -msgid "" -"Show your support to the author on Flattr or Github " -"Sponsors." -msgstr "" - -#: Settings.ui.h:33 Settings4.ui.h:34 -msgid "Changes since last version" -msgstr "" - -#: Settings.ui.h:34 Settings4.ui.h:35 -msgid "Based on NASA APOD Gnome shell extension by Elia Argentieri" -msgstr "Elia Argentieri의 NASA APOD 그놈 쉘 확장을 기반으로 합니다." - -#: Settings.ui.h:35 Settings4.ui.h:36 -#, fuzzy -#| msgid "" -#| "This program comes with ABSOLUTELY NO WARRANTY.\n" -#| "See the GNU General Public License, version 3 or later for details." -msgid "" -"This program comes with ABSOLUTELY NO WARRANTY.\n" -"See the GNU General " -"Public License, version 3 or later for details." -msgstr "" -"이 프로그램은 어떠한 형태의 보증도 제공되지 않습니다.\n" -"더 자세한 내용은 GNU 일반 공중 사용 허가서, 버전 3 또는 그 이상 을 참고하" -"세요." - -#: Settings.ui.h:37 Settings4.ui.h:38 -msgid "About" -msgstr "정보" - -#: Settings4.ui.h:8 -msgid "Open folder" -msgstr "" - -#: extension.js:117 -msgid "" -msgstr "<예정된 새로고침 없음>" - -#: extension.js:119 extension.js:121 extension.js:123 -msgid "Awaiting refresh..." -msgstr "새로고침 기다리는 중..." - -#: extension.js:126 -#, fuzzy -msgid "Copy image to clipboard" -msgstr "이미지 클립보드로 복사" - -#: extension.js:127 -msgid "Copy image URL to clipboard" -msgstr "이미지 URL을 클립보드로 복사" - -#: extension.js:128 -msgid "Open image folder" -msgstr "" - -#: extension.js:131 -msgid "Refresh Now" -msgstr "지금 새로고침" - -#: extension.js:137 -msgid "Thumbnail disabled on Wayland" -msgstr "" - -#: extension.js:203 -msgid "Next refresh" -msgstr "다음 새로고침" - -#: extension.js:490 extension.js:527 -msgid "Bing Wallpaper of the Day for" -msgstr "오늘의 Bing 배경화면은" - -#: extension.js:495 -msgid "Set as wallpaper" -msgstr "배경화면 설정" - -#: extension.js:498 -msgid "More info on Bing.com" -msgstr "" - -#: extension.js:553 -msgid "No wallpaper available" -msgstr "사용 가능한 배경화면 없음" - -#: extension.js:554 -msgid "No picture for today." -msgstr "오늘은 사진이 없네요." - -#: prefs.js:173 -msgid "Most recent image" -msgstr "" - -#: prefs.js:174 -msgid "Random image" -msgstr "" - -#: prefs.js:190 prefs.js:206 -msgid "Disabled on current GNOME version" -msgstr "" - -#: utils.js:139 -msgid "Fetching data..." -msgstr "데이터를 가져오는 중..." - -#: utils.js:150 -msgid "Market not available in your region" -msgstr "귀하의 지역에서 사용할 수 없는 마켓입니다." - -#: utils.js:154 -msgid "A network error occured" -msgstr "네트워크 오류 발생" - -#: utils.js:159 -msgid "Too many requests in 5 seconds" -msgstr "" - -#: utils.js:186 -msgid "No change log found for this release" -msgstr "" - -#: utils.js:366 utils.js:369 -msgid "minutes" -msgstr "분" - -#: utils.js:372 -msgid "days" -msgstr "일" - -#: utils.js:375 -msgid "hours" -msgstr "시간" - -#~ msgid "" -#~ "Changes your wallpaper daily to the Bing picture of the day for your " -#~ "region. Displays the picture description and copyright information." -#~ msgstr "" -#~ "귀하의 지역에 맞는 그날의 Bing 그림으로 매일 배경화면을 변경해 줍니다. 또" -#~ "한 해당 그림에 대한 설명과 저작권 정보에 대한 알림을 보여줍니다." diff --git a/locale/tr/LC_MESSAGES/BingWallpaper.mo b/locale/tr/LC_MESSAGES/BingWallpaper.mo index 45c643e8..18fa19bb 100644 Binary files a/locale/tr/LC_MESSAGES/BingWallpaper.mo 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 index 5b46754f..90747e92 100644 --- a/locale/tr/LC_MESSAGES/BingWallpaper.po +++ b/locale/tr/LC_MESSAGES/BingWallpaper.po @@ -1,454 +1,370 @@ -#, 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" +"POT-Creation-Date: 2023-05-17 22:53+0200\n" +"PO-Revision-Date: 2023-05-18 21:53+0000\n" +"Last-Translator: Sabri Ünal \n" +"Language-Team: Turkish \n" +"Language: tr\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/" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.18-dev\n" #: ui/Settings.ui.h:1 ui/Settings4.ui.h:2 -msgctxt "Göstergeyi gizle" msgid "Hide the indicator" -msgstr "" +msgstr "Göstergeyi gizle" #: ui/Settings.ui.h:2 ui/Settings4.ui.h:3 -msgctxt "Gösterge simgesi" msgid "Indicator icon" -msgstr "" +msgstr "Gösterge simgesi" #: ui/Settings.ui.h:3 ui/Settings4.ui.h:4 extension.js:159 -msgctxt "Masaüstü bildirimlerini etkinleştir" msgid "Enable desktop notifications" -msgstr "" +msgstr "Masaüstü bildirimlerini etkinleştir" #: 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 "" +msgstr "Arka plan görüntüsünü ayarla" #: ui/Settings.ui.h:5 ui/Settings4.ui.h:6 -msgctxt "Arka plan stili seçeneği" msgid "Background style option" -msgstr "" +msgstr "Arka plan stili seçeneği" #: ui/Settings.ui.h:6 ui/Settings4.ui.h:7 -msgctxt "Klasörü indir" msgid "Download folder" -msgstr "" +msgstr "İndirme klasörü" #: ui/Settings.ui.h:7 ui/Settings4.ui.h:1 -msgctxt "Bing Wallpaper Fotoğraf klasörü" msgid "Bing Wallpaper pictures folder" -msgstr "" +msgstr "Bing Duvar Kağıdı resimleri klasörü" #: ui/Settings.ui.h:8 ui/Settings4.ui.h:8 -msgctxt "Klasörü aç" msgid "Open folder" -msgstr "" +msgstr "Klasörü aç" #: 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 "" +msgstr "Önceden indirilmiş duvar kağıtlarını sil" #: ui/Settings.ui.h:10 ui/Settings4.ui.h:10 -msgctxt "Seçili resim" msgid "Selected image" -msgstr "" +msgstr "Seçilen görüntü" #: ui/Settings.ui.h:11 -msgctxt "Galeriden resim seç" msgid "Select from image gallery" -msgstr "" +msgstr "Görüntü galerisinden seç" #: ui/Settings.ui.h:12 ui/Settings4.ui.h:11 -msgctxt "Bing konumu" msgid "Bing locale" -msgstr "" +msgstr "Bing yerel ayarı" #: ui/Settings.ui.h:13 ui/Settings4.ui.h:12 extension.js:145 -msgctxt "Ayarlar" msgid "Settings" -msgstr "" +msgstr "Ayarlar" #: 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 "" +msgstr "Özel bulanıklık ve parlaklık kullan" #: 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 "" +msgstr "GDM3 kilit ekranı etkilerini geçersiz kıl" #: 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 "" +msgstr "Bulanıklaştırma, giriş isteminin okunabilirliğini artırabilir" #: ui/Settings.ui.h:17 ui/Settings4.ui.h:16 -msgctxt "Arka plan bulanıklık yoğunluğu" msgid "Background blur intensity" -msgstr "" +msgstr "Arka plan bulanıklık yoğunluğu" #: 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 "" +msgstr "Giriş isteminin karşıtlığını iyileştirebilir" #: ui/Settings.ui.h:19 ui/Settings4.ui.h:18 -msgctxt "Arka plan parlaklığı" msgid "Background brightness" -msgstr "" +msgstr "Arka plan parlaklığı" #: ui/Settings.ui.h:20 ui/Settings4.ui.h:19 -msgctxt "Ön Ayarlar" msgid "Presets" -msgstr "" +msgstr "Ön Ayarlar" #: ui/Settings.ui.h:21 -msgctxt "Yaygın olarak kullanılan ön ayarlar" msgid "Commonly used presets" -msgstr "" +msgstr "Yaygın kullanılan ön ayarlar" #: ui/Settings.ui.h:22 ui/Settings4.ui.h:20 -msgctxt "Bulanıklık yok, hafif loş" msgid "No blur, slight dim" -msgstr "" +msgstr "Bulanıklık yok, hafif loş" #: ui/Settings.ui.h:23 ui/Settings4.ui.h:21 -msgctxt "GNOME varsayılanı" msgid "GNOME default" -msgstr "" +msgstr "GNOME varsayılanı" #: ui/Settings.ui.h:24 ui/Settings4.ui.h:22 -msgctxt "Hafif bulanıklık, hafif loşluk" msgid "Slight blur, slight dim" -msgstr "" +msgstr "Hafif bulanıklık, hafif loş" #: ui/Settings.ui.h:25 ui/Settings4.ui.h:23 -msgctxt "Kilit Ekranı" msgid "Lock Screen" -msgstr "" +msgstr "Kilit Ekranı" #: ui/Settings.ui.h:26 ui/Settings4.ui.h:25 -msgctxt "Hata ayıklama günlüğü" msgid "Debug logging" -msgstr "" +msgstr "Hata ayıklama günlüğü" #: 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 "" +msgstr "Sistem günlüğüne günlüklemeyi etkinleştir" #: 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 "" +msgstr "Her zaman yeni görüntüleri göster" #: 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 "" +msgstr "Mevcut olduğunda yeni görüntülere geç (rastgele kipte değilse)" #: 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 "" +msgstr "Wayland üzerinde tüm özellikleri etkinleştir" #: 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 "" +msgstr "Bazı yeni özellikler Wayland üzerinde kararsız olabilir" #: ui/Settings.ui.h:32 ui/Settings4.ui.h:30 -msgctxt "Ekran çözünürlüğü" msgid "Screen resolution" -msgstr "" +msgstr "Ekran çözünürlüğü" #: 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 "" +msgstr "Kendiliğinden çözünürlük seçimini geçersiz kıl" #: ui/Settings.ui.h:34 ui/Settings4.ui.h:32 -msgctxt "Rastgele aralığı manuel olarak ayarlama (saniye)" msgid "Manually adjust random interval (seconds)" -msgstr "" +msgstr "Rastgele aralığı elle ayarla (saniye)" #: ui/Settings.ui.h:35 ui/Settings4.ui.h:33 -msgctxt "Rastgele aralık" msgid "Random interval" -msgstr "" +msgstr "Rastgele aralık" #: ui/Settings.ui.h:36 ui/Settings4.ui.h:34 -msgctxt "Bing Wallpaper verilerini içe aktarma" msgid "Import Bing Wallpaper data" -msgstr "" +msgstr "Bing Duvar Kağıdı verilerini içe aktar" #: 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 "" +"Duvar kağıdı dizininden önceden dışa aktarılmış JSON verilerini içe aktar" #: ui/Settings.ui.h:38 ui/Settings4.ui.h:36 -msgctxt "İçe Aktar" msgid "Import" -msgstr "" +msgstr "İçe Aktar" #: ui/Settings.ui.h:39 ui/Settings4.ui.h:37 -msgctxt "Bing Wallpaper verilerini dışa aktarma" msgid "Export Bing Wallpaper data" -msgstr "" +msgstr "Bing Duvar Kağıdı verilerini dışa aktar" #: ui/Settings.ui.h:40 ui/Settings4.ui.h:38 msgid "Export JSON data to wallpaper dir for backup or data migration" msgstr "" +"JSON verilerini yedekleme veya veri taşıma için duvar kağıdı dizinine aktar" #: ui/Settings.ui.h:41 ui/Settings4.ui.h:39 -msgctxt "Dışa Aktar" msgid "Export" -msgstr "" +msgstr "Dışa Aktar" #: 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 "" +msgstr "Bing verilerini her zaman dışa aktar" #: 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 "" +msgstr "Veriler her değiştiğinde Bing JSON'u dışa aktar" #: ui/Settings.ui.h:44 ui/Settings4.ui.h:42 -msgctxt "Hata ayıklama seçenekleri" msgid "Debug options" -msgstr "" +msgstr "Hata ayıklama seçenekleri" #: 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 "" +msgstr "Bing'den her gün yeni duvar kağıdı görüntüleri" #: ui/Settings.ui.h:46 -msgctxt "GNOME kabuk uzantısı sürümü " msgid "Gnome shell extension version " -msgstr "" +msgstr "GNOME shell uzantısı sürümü " #: ui/Settings.ui.h:47 ui/Settings4.ui.h:46 -msgctxt "Michael Carroll tarafından geliştiriliyor" msgid "Maintained by Michael Carroll" -msgstr "" +msgstr "Michael Carroll tarafından sürdürülmektedir" #: 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 " +"Show your support to the author on Flattr or Github " "Sponsors." msgstr "" +"Yazara desteğinizi Flattr veya Github Sponsorları üzerinden " +"gösterin." #: 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 "" +msgstr "Son sürümden bu yana değişiklikler" #: 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 "" +msgstr "Elia Argentieri'nin NASA APOD GNOME shell uzantısına dayanmaktadır" #: 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 "" +"Bu program KESİNLİKLE HİÇBİR GARANTİ ile birlikte " +"gelmez.\n" +"Ayrıntılar için GNU " +"Genel Kamu Lisansı, sürüm 3 veya sonrası'na bakın." #: ui/Settings.ui.h:53 ui/Settings4.ui.h:52 -msgctxt "Hakkında" msgid "About" -msgstr "" +msgstr "Hakkında" #: ui/Settings4.ui.h:43 -msgctxt "Galeri" msgid "Gallery" -msgstr "" +msgstr "Galeri" #: ui/Settings4.ui.h:45 -msgctxt "GNOME kabuk uzantısı sürümü " msgid "GNOME shell extension version " -msgstr "" +msgstr "GNOME shell uzantısı sürümü " #: ui/carousel.ui.h:1 ui/carousel4.ui.h:1 -msgctxt "Uygula" msgid "Apply" -msgstr "" +msgstr "Uygula" #: ui/carousel.ui.h:2 ui/carousel4.ui.h:2 -msgctxt "Görünüm" msgid "View" -msgstr "" +msgstr "Görüntüle" #: ui/carousel.ui.h:3 ui/carousel4.ui.h:3 -msgctxt "Bilgi" msgid "Info" -msgstr "" +msgstr "Bilgi" #: ui/carousel.ui.h:4 ui/carousel4.ui.h:4 -msgctxt "Sil" msgid "Delete" -msgstr "" +msgstr "Sil" #: ui/carousel.ui.h:5 ui/carousel4.ui.h:6 -msgctxt "Rastgele modu ayarla" msgid "Set random mode" -msgstr "" +msgstr "Rastgele kipi ayarla" #: ui/carousel4.ui.h:5 -msgctxt "" msgid "" -msgstr "" +msgstr "" #: ui/carousel4.ui.h:7 -msgctxt "Resim galerisini yükle" msgid "Load image gallery" -msgstr "" +msgstr "Görüntü galerisini yükle" #: extension.js:135 -msgctxt "" msgid "" -msgstr "" +msgstr "" #: extension.js:136 extension.js:137 extension.js:138 -msgctxt "Yenilenmeyi bekliyor..." msgid "Awaiting refresh..." -msgstr "" +msgstr "Yenileme bekleniyor..." #: extension.js:139 -msgctxt "Görüntüyü panoya kopyala" msgid "Copy image to clipboard" -msgstr "" +msgstr "Görüntüyü panoya kopyala" #: extension.js:140 -msgctxt "Görüntü URL'sini panoya kopyala" msgid "Copy image URL to clipboard" -msgstr "" +msgstr "Görüntü URL'sini panoya kopyala" #: extension.js:141 -msgctxt "Görüntü klasörünü açın" msgid "Open image folder" -msgstr "" +msgstr "Görüntü klasörünü aç" #: extension.js:143 -msgctxt "Kilit ekranı görüntüsünü ayarla" msgid "Set lock screen image" -msgstr "" +msgstr "Kilit ekranı görüntüsünü ayarla" #: extension.js:144 -msgctxt "Şimdi Yenile" msgid "Refresh Now" -msgstr "" +msgstr "Şimdi Yenile" #: extension.js:146 -msgctxt "Resim görüntüleyicide aç" msgid "Open in image viewer" -msgstr "" +msgstr "Görüntü göstericide aç" #: extension.js:147 -msgctxt "Bing resim bilgi sayfasını açın" msgid "Open Bing image information page" -msgstr "" +msgstr "Bing görüntü bilgileri sayfasını aç" #: extension.js:154 -msgctxt "Hızlı ayarlar" msgid "Quick settings" -msgstr "" +msgstr "Hızlı ayarlar" #: extension.js:158 -msgctxt "Görüntü karıştırma modu" msgid "Image shuffle mode" -msgstr "" +msgstr "Görüntü karıştırma kipi" #: extension.js:160 -msgctxt "Görüntü sayısını göster" msgid "Show image count" -msgstr "" +msgstr "Görüntü sayısını göster" #: extension.js:326 -msgctxt "Sonraki yenileme" msgid "Next refresh" -msgstr "" +msgstr "Sonraki yenileme" #: extension.js:327 -msgctxt "Son yenileme" msgid "Last refresh" -msgstr "" +msgstr "Son yenileme" #: extension.js:724 extension.js:760 -msgctxt "Bing için Günün Duvar Kağıdı" msgid "Bing Wallpaper of the Day for" -msgstr "" +msgstr "Bing Günün Duvar Kağıdı" #: extension.js:784 -msgctxt "Duvar kağıdı mevcut değil" msgid "No wallpaper available" -msgstr "" +msgstr "Kullanılabilir duvar kağıdı yok" #: extension.js:785 -msgctxt "Bugün için fotoğraf yok." msgid "No picture for today." -msgstr "" +msgstr "Bugün için resim yok." #: prefs.js:181 -msgctxt "Klasör seçin" msgid "Select folder" -msgstr "" +msgstr "Klasör seç" #: prefs.js:249 -msgctxt "En son görüntü" msgid "Most recent image" -msgstr "" +msgstr "En son görüntü" #: prefs.js:250 -msgctxt "Rastgele görüntü" msgid "Random image" -msgstr "" +msgstr "Rastgele görüntü" #: utils.js:135 -msgctxt "Değişiklik günlüğü alınırken hata oluştu: " msgid "Error fetching change log: " -msgstr "" +msgstr "Değişiklik günlüğü alınırken hata oluştu: " #: utils.js:350 utils.js:353 -msgctxt "dakika" msgid "minutes" -msgstr "" +msgstr "dakika" #: utils.js:356 -msgctxt "gün" msgid "days" -msgstr "" +msgstr "gün" #: utils.js:359 -msgctxt "saat" msgid "hours" -msgstr "" +msgstr "saat" diff --git a/prefs.js b/prefs.js index b39b9138..867a49b2 100644 --- a/prefs.js +++ b/prefs.js @@ -7,8 +7,6 @@ // See the GNU General Public License, version 3 or later for details. // Based on GNOME shell extension NASA APOD by Elia Argentieri https://github.com/Elinvention/gnome-shell-extension-nasa-apod -imports.gi.versions.Soup = "2.4"; // force single version of Soup, not sure if there is a way to force latest version - const {Gtk, Gdk, GdkPixbuf, Gio, GLib, Soup} = imports.gi; const ExtensionUtils = imports.misc.extensionUtils; const Me = ExtensionUtils.getCurrentExtension(); @@ -102,17 +100,11 @@ function buildPrefsWidget() { let buttonImportData = buildable.get_object('button_json_import'); let buttonExportData = buildable.get_object('button_json_export'); let switchAlwaysExport = buildable.get_object('always_export_switch'); - /*let searchEntry = buildable.get_object('searchEntry'); - let searchBuffer = buildable.get_object('searchBuffer');*/ + let switchEnableShuffle = buildable.get_object('shuffle_enabled_switch'); + let entryShuffleMode = buildable.get_object('shuffle_mode_combo'); let carouselFlowBox = (Gtk.get_major_version() == 4) ? buildable.get_object('carouselFlowBox'): null; - try { - httpSession = new Soup.Session(); - httpSession.user_agent = 'User-Agent: Mozilla/5.0 (X11; GNOME Shell/' + imports.misc.config.PACKAGE_VERSION + '; Linux x86_64; +https://github.com/neffo/bing-wallpaper-gnome-extension ) BingWallpaper Gnome Extension/' + Me.metadata.version; - } - catch (e) { - log("Error creating httpSession: " + e); - } + httpSession = httpSession = Utils.initSoup(); // check that these are valid (can be edited through dconf-editor) Utils.validate_resolution(settings); @@ -244,17 +236,15 @@ function buildPrefsWidget() { Utils.validate_resolution(settings); }); - // History - let imageList = Utils.getImageList(settings); - historyEntry.append('current', _('Most recent image')); - historyEntry.append('random', _('Random image')); - - imageList.forEach((image) => { - historyEntry.append(image.urlbase.replace('/th?id=OHR.', ''), Utils.shortenName(Utils.getImageTitle(image), 50)); + // shuffle modes + settings.bind('random-mode-enabled', switchEnableShuffle, 'active', Gio.SettingsBindFlags.DEFAULT); + Utils.randomIntervals.forEach((x) => { + entryShuffleMode.append(x.value, _(x.title)); }); - - // selected image can also be changed through the menu or even dconf - settings.bind('selected-image', historyEntry, 'active_id', Gio.SettingsBindFlags.DEFAULT); + settings.bind('random-interval-mode', entryShuffleMode, 'active_id', Gio.SettingsBindFlags.DEFAULT); + + // selected image can no longer be changed through a dropdown (didn't scale) + settings.bind('selected-image', historyEntry, 'label', Gio.SettingsBindFlags.DEFAULT); settings.connect('changed::selected-image', () => { Utils.validate_imagename(settings); }); diff --git a/schemas/gschemas.compiled b/schemas/gschemas.compiled index 8d343d6a..77f335cd 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 3e1c0513..c457c1d0 100644 --- a/schemas/org.gnome.shell.extensions.bingwallpaper.gschema.xml +++ b/schemas/org.gnome.shell.extensions.bingwallpaper.gschema.xml @@ -137,6 +137,12 @@ + + "daily" + Set to either 'daily', 'hourly', 'weekly', 'custom' + Daily is midnight, hourly is on the hour, weekly is midnight on Sunday, or custom as defined by the 'random-interval' + + 3600 @@ -150,6 +156,24 @@ + + false + Pick a random image at random-interval + + + + + false + Only pick from UHD in random mode + + + + + true + Only pick from unhidden in random mode + + + true Override safe defaults for Wayland desktop @@ -162,6 +186,13 @@ Speeds up subsequent loads, but requires some additional disk space + + + 2160 + Minimum image height to be considered UHD + + + false Save backup copy of Bing JSON to wallpaper directory @@ -178,6 +209,11 @@ 32 Size of icons for controls in popup menu + + + false + Trash deletes images or just marks as bad +