kahuna/public/js/search/results.js (16 lines): - line 128: // FIXME: This is being refreshed by the router. - line 151: // TODO: avoid this initial search (two API calls to init!) - line 154: // FIXME: https://github.com/argo-rest/theseus has forced us to co-opt the actions field for this - line 169: // TODO: ultimately we want to manage the state in the - line 248: // FIXME: this will only add up to 50 images (search capped) - line 256: // FIXME: minor assumption that only the latest - line 259: // FIXME: https://github.com/argo-rest/theseus has forced us to co-opt the actions field for this - line 277: // FIXME: should ideally be able to just call $state.reload(), - line 327: // TODO: Move this into localstore service - line 337: // FIXME: Think of a way to not have to add a param in a million places to add it - line 519: // TODO: move to helper? - line 530: // TODO: avoid expensive watch expressions and let stream push - line 549: // TODO: prevent text selection? - line 595: // TODO: should not be needed here, the results list - line 634: // TODO: should not be needed here, the selection and - line 652: // FIXME: nicer (reactive?) way to do this? common-lib/src/main/scala/com/gu/mediaservice/lib/cleanup/MetadataCleaner.scala (10 lines): - line 37: // TODO: strip location+date prefix from description - line 38: // TODO: strip credit suffix from description - line 39: // TODO: strip (extract?) country + tags suffix from description - line 41: // TODO: strip (?) numbers or crappy acronyms as byline - line 42: // TODO: multiple country names (SWITZERLAND SCHWEIZ SUISSE, HKG, CHN) to clean name - line 44: // TODO: ignore crappy "keywords" (:rel:d:bm:LM1EAAO112401) - line 46: // TODO: unique keywords - line 50: // TODO: record Date Created or Date/Time Original - line 51: // TODO: ignore Unknown tags from fileMetadata - line 53: // TODO: artist (vs byline)? thrall/app/lib/elasticsearch/ElasticSearch.scala (9 lines): - line 238: /* TODO: It should never be possible for Edits to have an empty lastModified although there will be - line 383: (implicit ex: ExecutionContext, logMarker: LogMarker): Future[List[Image]] = { // TODO could be a Seq - line 399: val request = search(imagesCurrentAlias) bool filteredMatches limit 200 // TODO no order? - line 452: // TODO: is there a more efficient way to do this? - line 639: val exportsParameter = JsDefined(Json.toJson(exports)).toOption.map { cs: JsValue => // TODO deduplicate with set collections - line 775: @nowarn("cat=deprecation") // TODO ScalaObjectMapper is deprecated because unusable in Scala 3 - line 776: private def asNestedMap(sr: SyndicationRights) = { // TODO not great; there must be a better way to flatten a case class into a Map - line 785: @nowarn("cat=deprecation") // TODO ScalaObjectMapper is deprecated because unusable in Scala 3 - line 786: private def asNestedMap(i: JsValue) = { // TODO not great; there must be a better way to flatten a case class into a Map kahuna/public/js/main.js (8 lines): - line 1: // TODO: Grunt: hash dependencies? or ETag? - line 35: // TODO: move to an async config to remove deps on play - line 47: // TODO: use link in 4xx response to avoid having to hardcode in HTML page - line 123: // TODO: don't mix these two concerns. This is done here to avoid - line 274: // FIXME: `crop.data` is set as the cropper API doesn't return - line 503: * TODO: Support deep objects i.e - line 508: * TODO: Think about what to do if a value - line 511: * TODO: Make a service for data retrieval? kahuna/public/js/edits/image-editor.js (6 lines): - line 161: //TODO put collections in their own directive - line 172: // TODO: Find a way to broadcast more selectively - line 305: // TODO: we could retry here again, but re-saving does that, and given - line 394: // TODO: More informative error handling - line 395: // TODO: Stop error propagating to global error handler - line 457: // FIXME: we only need these to pass them through to `required-metadata-editor` common-lib/src/main/scala/com/gu/mediaservice/lib/elasticsearch/Mappings.scala (6 lines): - line 73: keywordField("usagesStatus"), // TODO ES1 include_in_parent emulated with explicit copy_to rollup field for nested field which is also used for image filtering - line 74: dateField("usagesLastModified"), // TODO ES1 include_in_parent emulated with explicit copy_to rollup field for nested field which is also used for image filtering - line 208: def collectionMapping(name: String) = { // TODO withIndexName appeared to have no effect on the 1.7 index - line 322: keywordField("active"), //TODO should probably not be stored in ES, as its a snapshot in time rather than a calculated field - line 356: keywordField(name) // TODO index_name - line 361: // TODO could have kept this bit of indirection kahuna/public/stylesheets/main.css (5 lines): - line 714: /* FIXME: we use the element to be more specific, which is baloney */ - line 1677: FIXME: this is a little targeted - line 1678: FIXME: what to do with touch devices - line 2468: TODO: remove unused classes - line 2601: /* FIXME: This is to get the text to lay next to the save button of the common-lib/src/main/scala/com/gu/mediaservice/lib/metadata/ImageMetadataConverter.scala (5 lines): - line 87: // FIXME: Parse newest location schema: http://www.iptc.org/std/photometadata/specification/IPTC-PhotoMetadata#location-structure - line 102: imageType = None // FIXME add extractor for imageType https://www.iptc.org/std/photometadata/specification/IPTC-PhotoMetadata#digital-source-type - line 180: // TODO: add Supplemental Category(s) - line 183: // TODO: add Subject Reference? - line 185: // TODO: add Coded Character Set ? common-lib/src/main/scala/com/gu/mediaservice/lib/aws/DynamoDB.scala (5 lines): - line 77: // TODO: add Option to item as it can be null - line 218: // TODO: Deal with the case that we don't have JSON serialisers, for now we just fail. - line 296: // FIXME: surely there must be a better way to convert? - line 304: // FIXME: Dynamo accepts `null`, but not `""`. This is a well documented issue - line 340: // TODO: Lists of different Types? JsArray is not type safe (because json lists aren't) common-lib/src/main/scala/com/gu/mediaservice/lib/argo/ArgoHelpers.scala (4 lines): - line 15: // FIXME: DSL to append links and actions? - line 38: //FIXME using actions below is a hack to get the org owned count into the response (until such time as we move theseus into the grid, so client can safely parse the response) - line 45: // TODO: bring back once useful (causes Scala compiler tears) - line 58: // TODO: find a nicer way to serialise ErrorResponse[Nothing] without this hack kahuna/public/js/components/gr-collections-panel/gr-collections-panel.js (4 lines): - line 27: // TODO: Add garbage collection to state. - line 84: // TODO: More informative error handling - line 85: // TODO: Stop error propagating to global error handler - line 144: // TODO: move this somewhere sensible, we probably don't want an observable for each node. common-lib/src/main/scala/com/gu/mediaservice/model/UsageRights.scala (4 lines): - line 18: // TODO: Remove these as they have nothing to do with the model really - line 78: // TODO: I haven't figured out why Json.toJson[T](o) doesn't work here, it'd - line 115: // TODO: Fix with reindex - line 282: // TODO: `source` should not be an Option, but because we added it later, we would need to backfill kahuna/public/js/search/structured-query/query-suggestions.js (4 lines): - line 17: // FIXME: get fields and subjects from API - line 54: // TODO: add date fields - line 118: // TODO: would be nice to use user friendly labels and map - line 204: // TODO: list all known bylines, not just our photographers kahuna/public/js/search/index.js (3 lines): - line 55: // TODO: add a resolver here so that if we error (e.g. 401) we don't keep trying - line 74: // FIXME [1]: This state should be abstract, but then we can't navigate to - line 318: // FIXME: This is here if you go to another state directly e.g. `'/images/id'` metadata-editor/app/controllers/EditsController.scala (3 lines): - line 30: // FIXME: the argoHelpers are all returning `Ok`s (200) - line 32: // TODO: Look at adding actions e.g. to collections / sets where we could `PUT` - line 73: // TODO: Think about calling this `overrides` or something that isn't metadata kahuna/public/js/services/api/media-api.js (3 lines): - line 2: // TODO: make theseus-angular it export its module - line 67: // FIXME: or use lazy resource? - line 72: // TODO: workout how we might be able to memoize this function but still media-api/app/controllers/SuggestionController.scala (3 lines): - line 20: // TODO: work with analysed fields - line 21: // TODO: recover with HTTP error if invalid field - line 22: // TODO: Add validation, especially if you use length image-loader/app/model/Uploader.scala (3 lines): - line 187: // FIXME: dirty hack to sync the originalUsageRights and originalMetadata as well - line 355: // TODO: should error if the JSON parsing failed - line 391: // TODO: centralise where all these URLs are constructed kahuna/public/js/search/query.js (3 lines): - line 2: // FIXME: used to fade 'x' query clear button, but disabled as it ends - line 322: // FIXME: broken for 'your uploads' - line 323: // FIXME: + they triggers filter $watch and $state.go (breaks history) kahuna/public/js/image/controller.js (3 lines): - line 185: // TODO: we should be able to rely on ctrl.crop.id instead once - line 240: // TODO: move this to a more sensible place. - line 247: // TODO: move this to a more sensible place. kahuna/public/js/services/api/collections-api.js (3 lines): - line 18: // TODO: Rx? - line 22: // TODO: do we want to memoize? what if we want to reload? - line 72: // TODO: This isn't the most efficient way of doing this, but because we get the image data common-lib/src/main/scala/com/gu/mediaservice/lib/aws/S3.scala (3 lines): - line 175: // TODO make this localstack friendly - line 176: // TODO: Make this region aware - i.e. RegionUtils.getRegion(region).getServiceEndpoint(AmazonS3.ENDPOINT_PREFIX) - line 189: // TODO revise closer to the time of deprecation https://aws.amazon.com/blogs/aws/amazon-s3-path-deprecation-plan-the-rest-of-the-story/ image-loader/app/controllers/ImageLoaderController.scala (3 lines): - line 447: uploadStatusTable.updateStatus(digestedFile.digest, status).flatMap{ outcomeOfUpdateStatus => //FIXME use set status to avoid potential ConditionNotMet (when status table rows have expired/TTL) - line 483: uploadStatusTable.updateStatus( //FIXME use set status to avoid potential ConditionNotMet (when status table rows have expired/TTL) - line 489: uploadStatusTable.updateStatus( //FIXME use set status to avoid potential ConditionNotMet (when status table rows have expired/TTL) scripts/src/main/scala/com/gu/mediaservice/scripts/EsScript.scala (3 lines): - line 196: // TODO: add the ability to update a section of the mapping - line 407: // FIXME: Get from config (no can do as Config is coupled to Play) - line 416: // FIXME: Use Stage to get host (for some reason this isn't working) media-api/app/lib/querysyntax/QuerySyntax.scala (3 lines): - line 107: // TODO: fix this! - line 262: // TODO: unless escaped? - line 285: // TODO: kahuna/public/js/components/gr-collection-overlay/gr-collection-overlay.js (2 lines): - line 35: // TODO: More informative error handling - line 36: // TODO: Stop error propagating to global error handler media-api/app/lib/ImageResponse.scala (2 lines): - line 202: // TODO: Solve with reindex - line 363: // TODO: Currently the GET for this URI does nothing rest-lib/src/main/scala/com/gu/mediaservice/lib/guardian/auth/Permissions.scala (2 lines): - line 11: //FIXME I think this needs to be renamed ot `delete_crops_or_usages` - see https://github.com/guardian/grid/pull/3416 and https://github.com/guardian/permissions/pull/138 - line 15: // FIXME ideally factor this out in favour of a permission definition that can be defined at runtime (e.g. loaded from config) common-lib/src/main/scala/com/gu/mediaservice/lib/aws/ThrallMessageSender.scala (2 lines): - line 11: // TODO MRB: replace this with the simple Kinesis class once we migrate off SNS - line 67: // TODO add RequestID kahuna/public/js/edits/service.js (2 lines): - line 15: // TODO: For now we're sending over the image so we can compare against it to - line 188: // TODO: Use proper names from http://en.wikipedia.org/wiki/Watcher_%28comics%29 kahuna/public/js/usage-rights/usage-rights-editor.js (2 lines): - line 73: // FIXME: This is not longer the canonical category as we aren't taking the user interaction - line 141: // TODO: Some of these could be streams kahuna/public/js/image/view.html (2 lines): - line 185: - line 193: kahuna/public/js/components/gr-image-usage/gr-image-usage.js (2 lines): - line 41: // TODO match on `platform` rather than `type` as `platform` includes more detail - line 53: return 'Front'; // currently only fronts have an `unknown` type, see TODO above common-lib/src/main/scala/com/gu/mediaservice/syntax/MessageSubjects.scala (2 lines): - line 6: val ReingestImage = "reingest-image" // FIXME: the new migration process will replace the legacy reingest lambda etc - line 10: val UpdateImage = "update-image" // TODO: this appears unused https://logs.gutools.co.uk/s/editorial-tools/goto/f0a03ca3c37261985b2e6292adb8de0f metadata-editor/app/model/UsageRightsProperty.scala (2 lines): - line 8: // TODO: We'll be able to deprecate this and build it up directly from case - line 10: // TODO: turn this into a case class? thrall/app/lib/SyncChecker.scala (2 lines): - line 73: // TODO String? or more complex? - line 91: // TODO fetch all objects at unexpected locations ie. not at /^([0-9a-f]/){6}[0-9a-f]{34}$/ media-api/app/controllers/MediaApi.scala (2 lines): - line 99: // FIXME: credit is the only field available for now as it's the only on - line 478: // TODO: respondErrorCollection? kahuna/public/js/upload/manager.js (2 lines): - line 76: // TODO: potentially move these to a `completeJobs` `Set` - line 94: // TODO: potentially move these to a `completeJobs` `Set` kahuna/public/js/directives/ui-crop-box/ui-crop-box.js (2 lines): - line 39: // TODO: check if already loaded, in which case call install immediately - line 40: // FIXME: the delay here is because the image is first draw with it's full width common-lib/src/main/scala/com/gu/mediaservice/lib/imaging/ImageOperations.scala (2 lines): - line 141: // TODO We should create a `CroppingMimeType` to enforce this at the type level. - line 257: // TODO: use mimeType to lookup other properties once we support other formats common-lib/src/main/scala/com/gu/mediaservice/lib/elasticsearch/ElasticSearchClient.scala (2 lines): - line 47: //TODO: this function should fail and cause healthcheck fails - line 63: throw new RuntimeException("cluster health could not be confirmed as green") // TODO Exception isn't great but our callers aren't looking at our return value kahuna/public/js/util/rx.js (1 line): - line 12: // TODO: contribute these back to rx-angular? common-lib/src/main/scala/com/gu/mediaservice/lib/cleanup/UseCanonicalGuardianCredit.scala (1 line): - line 7: * TODO: Merge into styleguide rule? common-lib/src/main/scala/com/gu/mediaservice/lib/guardian/GuardianUsageRightsConfig.scala (1 line): - line 56: // TODO: Think about removin these once Picdar is dead. thrall/app/lib/elasticsearch/ThrallMigrationClient.scala (1 line): - line 28: // TODO create constant for field name "esInfo.migration.migratedTo" kahuna/public/js/directives/gr-image-fade-on-load.js (1 line): - line 9: // TODO: customise duration, transition kahuna/public/js/edits/image-editor.html (1 line): - line 1: kahuna/public/js/search/structured-query/syntax.js (1 line): - line 15: // TODO: expose the server-side query parser via an API instead of common-lib/src/main/scala/com/gu/mediaservice/lib/cleanup/PhotographerRenamer.scala (1 line): - line 7: TODO: Largely generic and we can make it completely so. common-lib/src/main/scala/com/gu/mediaservice/model/Image.scala (1 line): - line 79: // FIXME: many fields made nullable to accommodate for legacy data that pre-dates them. common-lib/src/main/scala/com/gu/mediaservice/model/MimeType.scala (1 line): - line 27: // TODO correct these values in a reindex rest-lib/src/main/scala/com/gu/mediaservice/lib/auth/Permissions.scala (1 line): - line 21: case object Pinboard extends SimplePermission // FIXME ideally factor this out in favour of something more generic kahuna/public/js/services/image-list.js (1 line): - line 25: // TODO: a lot of these are boilerplate around imageAccessor, can kahuna/public/js/upload/dnd-uploader.js (1 line): - line 24: //TODO make generic - have API tell kahuna S3 buckets' domain common-lib/src/main/scala/com/gu/mediaservice/lib/DateTimeUtils.scala (1 line): - line 20: // TODO move this to a LocalDateTime thrall/app/controllers/ThrallController.scala (1 line): - line 248: Ok(views.html.restoreFromReplica(s"${services.loaderBaseUri}/images/restore")) //FIXME figure out imageId bit common-lib/src/main/scala/com/gu/mediaservice/lib/cleanup/SupplierProcessors.scala (1 line): - line 422: // TODO: cleanup byline/credit collections/app/model/Node.scala (1 line): - line 6: // TODO: Convert fullPath to NonEmptylist kahuna/public/js/search/view.html (1 line): - line 1: kahuna/public/js/crop/controller.js (1 line): - line 138: // TODO: show crop kahuna/public/js/services/api/witness.js (1 line): - line 33: // FIXME: all of them? kahuna/public/js/usage-rights/usage-rights-editor.html (1 line): - line 113: kahuna/app/lib/KahunaConfig.scala (1 line): - line 64: // FIXME ideally the below would not hardcode reference to pinboard - hopefully future iterations of the pluggable authorisation will support evaluating permissions without a corresponding case object kahuna/public/js/upload/recent/recent-uploads.js (1 line): - line 36: // TODO: we shouldn't have to do this ;_; common-lib/src/main/scala/com/gu/mediaservice/lib/ImageFields.scala (1 line): - line 4: // TODO: share with mappings common-lib/src/main/scala/com/gu/mediaservice/model/Asset.scala (1 line): - line 9: // FIXME: size, mimeType and dimensions not optional (must backfill first) common-lib/src/main/scala/com/gu/mediaservice/lib/config/CommonConfig.scala (1 line): - line 20: // TODO:SAH - remove these and favour explicit config for anything that is derived from here common-lib/src/main/scala/com/gu/mediaservice/lib/aws/SqsViaSnsMessageConsumer.scala (1 line): - line 68: // TODO: improve and use this (for logging especially) else where. common-lib/src/main/scala/com/gu/mediaservice/lib/aws/RoundedExpiration.scala (1 line): - line 8: // TODO: do we really need these expiration tokens? they kill our ability to cache... kahuna/public/js/services/panel.js (1 line): - line 11: // TODO: Error on a client asking for that state, given that we don't expose a method kahuna/public/js/components/gu-lazy-table/gu-lazy-table.js (1 line): - line 212: // TODO: allow this to be configured common-lib/src/main/scala/com/gu/mediaservice/lib/cleanup/CleanRubbishLocation.scala (1 line): - line 7: TODO: This could be applied to all fields in metadata (according to Akash/Mateusz) common-lib/src/main/scala/com/gu/mediaservice/lib/elasticsearch/IndexSettings.scala (1 line): - line 12: // TODO rename `english_s_stemmer` as its an analyzer not a stemmer - would require a reindex. common-lib/src/main/scala/com/gu/mediaservice/lib/logging/GridLogging.scala (1 line): - line 27: // TODO these should be extracted and entered into markers in a reusable way, maybe via RequestLoggingFilter? build.sbt (1 line): - line 160: // TODO upgrading kcl to v3? check if you can remove avro override below kahuna/public/js/components/gu-lazy-preview/gu-lazy-preview.css (1 line): - line 53: /* TODO: abstract repeated results styles */ kahuna/public/js/components/gr-collections-panel/gr-collections-panel.html (1 line): - line 7: kahuna/public/js/usage-rights/usage-rights-editor.css (1 line): - line 4: /* TODO: Remove this once we take it out of the dropdown */ common-lib/src/main/scala/com/gu/mediaservice/model/Collection.scala (1 line): - line 38: // TODO: Use the generic formats for DateTime kahuna/public/js/sentry/sentry.js (1 line): - line 59: // TODO: Alternatively could investigate angular-raven common-lib/src/main/scala/com/gu/mediaservice/lib/S3ImageStorage.scala (1 line): - line 13: // TODO: If deleteObject fails - we should be catching the errors here to avoid them bubbling to the application common-lib/src/main/scala/com/gu/mediaservice/lib/config/Services.scala (1 line): - line 20: // TODO make more generic but w/out relying on Play config common-lib/src/main/scala/com/gu/mediaservice/lib/cleanup/CapitaliseProperty.scala (1 line): - line 20: // FIXME: is there no more efficient way of partial matching a regexp on a string? kahuna/public/js/upload/file-uploader.js (1 line): - line 25: // TODO: Don't do this as it reloads "Your uploads" too kahuna/public/js/upload/jobs/required-metadata-editor.html (1 line): - line 60: kahuna/public/js/crop/index.js (1 line): - line 26: // TODO: abstract these resolvers out as we use them on the image media-api/app/lib/elasticsearch/ElasticSearch.scala (1 line): - line 325: val field = "labels" // TODO was - params.field media-api/app/lib/elasticsearch/ElasticSearchModel.scala (1 line): - line 117: // TODO: return descriptive 400 error if invalid common-lib/src/main/scala/com/gu/mediaservice/lib/argo/model/Link.scala (1 line): - line 7: // TODO: or uri template? rest-lib/src/main/scala/com/gu/mediaservice/lib/auth/Authentication.scala (1 line): - line 55: case NotAuthorised(message) => Left(forbidden(s"Principal not authorised: $message")) // TODO: see if we can avoid repetition kahuna/public/js/search/results.html (1 line): - line 1: usage/app/model/UsageGroup.scala (1 line): - line 129: // TODO capture images from interactive embeds scripts/src/main/java/com/gu/typesafe/config/impl/Tokens.java (1 line): - line 12: /* FIXME the way the subclasses of Token are private with static isFoo and accessors is kind of ridiculous. */ cropper/app/lib/CropStore.scala (1 line): - line 77: // FIXME: this doesn't really belong here common-lib/src/main/scala/com/gu/mediaservice/lib/cleanup/AttributeCreditFromByline.scala (1 line): - line 8: * TODO: Make this more usefully configurable from config or similar? kahuna/public/js/upload/jobs/upload-jobs.js (1 line): - line 70: // ctrl.remaining -= 1; //TODO need to think about this since its also done in the completed/failed blocks below kahuna/public/js/components/gr-panels/gr-panels.css (1 line): - line 19: box-sizing: border-box; /* @TODO: Apply border-box to everything, then resize everything that breaks */ common-lib/src/main/scala/com/gu/mediaservice/lib/argo/WriteHelpers.scala (1 line): - line 5: // TODO: apply trick to ImageMetadata? image-loader/app/model/upload/OptimiseOps.scala (1 line): - line 58: case Some(Tiff) => true // TODO This should be done better, it could be better optimised into a jpeg if there is no transparency. common-lib/src/main/scala/com/gu/mediaservice/lib/argo/model/CollectionResponse.scala (1 line): - line 18: // FIXME: the 'theseus' library used on the client mandates a strict set of top level keys, so crow-barring something else into 'actions' here (https://github.com/argo-rest/theseus [last updated 2015] needs to move into grid repo, so we can update it for this use-case and others) image-loader/app/lib/Downloader.scala (1 line): - line 19: //TODO Revisit this logic kahuna/public/js/upload/controller.js (1 line): - line 43: // TODO: Show multiple jobs? cropper/app/controllers/CropperController.scala (1 line): - line 184: // TODO: lame, parse into URI object and compare host instead common-lib/src/main/scala/com/gu/mediaservice/model/Crop.scala (1 line): - line 9: //FIXME: Both id and file size here should not be an Option and are awaiting backfilling the correct data in ES common-lib/src/main/scala/com/gu/mediaservice/lib/cleanup/StripCopyrightPrefix.scala (1 line): - line 7: * TODO: Remove processing from copyright field (see PR#2778) kahuna/public/js/services/api/media-cropper.js (1 line): - line 40: // TODO: this should be an Action common-lib/src/main/scala/com/gu/mediaservice/lib/cleanup/GuardianStyleByline.scala (1 line): - line 6: * TODO: Split this into two cleaners? metadata-editor/app/controllers/EditsApi.scala (1 line): - line 26: // TODO: add links to the different responses esp. to the reference image usage/app/lib/CrierEventProcessor.scala (1 line): - line 142: //TODO: how do we deal with a piece of content that has been deleted? common-lib/src/main/scala/com/gu/mediaservice/model/usage/Usage.scala (1 line): - line 17: // TODO collapse this field into an `Option[UsageMetadata]` common-lib/src/main/scala/com/gu/mediaservice/lib/argo/model/Action.scala (1 line): - line 9: // TODO: add specification of parameters and body structure, mimeType common-lib/src/main/scala/com/gu/mediaservice/model/usage/UsageStatus.scala (1 line): - line 44: // TODO remove this once we do!